dibs_loopback.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * dibs loopback (aka loopback-ism) device structure definitions.
  4. *
  5. * Copyright (c) 2024, Alibaba Inc.
  6. *
  7. * Author: Wen Gu <guwen@linux.alibaba.com>
  8. * Tony Lu <tonylu@linux.alibaba.com>
  9. *
  10. */
  11. #ifndef _DIBS_LOOPBACK_H
  12. #define _DIBS_LOOPBACK_H
  13. #include <linux/dibs.h>
  14. #include <linux/hashtable.h>
  15. #include <linux/spinlock.h>
  16. #include <linux/types.h>
  17. #include <linux/wait.h>
  18. #if IS_ENABLED(CONFIG_DIBS_LO)
  19. #define DIBS_LO_DMBS_HASH_BITS 12
  20. #define DIBS_LO_MAX_DMBS 5000
  21. struct dibs_lo_dmb_node {
  22. struct hlist_node list;
  23. u64 token;
  24. u32 len;
  25. u32 sba_idx;
  26. void *cpu_addr;
  27. dma_addr_t dma_addr;
  28. refcount_t refcnt;
  29. };
  30. struct dibs_lo_dev {
  31. struct dibs_dev *dibs;
  32. atomic_t dmb_cnt;
  33. rwlock_t dmb_ht_lock;
  34. DECLARE_BITMAP(sba_idx_mask, DIBS_LO_MAX_DMBS);
  35. DECLARE_HASHTABLE(dmb_ht, DIBS_LO_DMBS_HASH_BITS);
  36. wait_queue_head_t ldev_release;
  37. };
  38. int dibs_loopback_init(void);
  39. void dibs_loopback_exit(void);
  40. #else
  41. static inline int dibs_loopback_init(void)
  42. {
  43. return 0;
  44. }
  45. static inline void dibs_loopback_exit(void)
  46. {
  47. }
  48. #endif
  49. #endif /* _DIBS_LOOPBACK_H */