efa-abi.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
  2. /*
  3. * Copyright 2018-2025 Amazon.com, Inc. or its affiliates. All rights reserved.
  4. */
  5. #ifndef EFA_ABI_USER_H
  6. #define EFA_ABI_USER_H
  7. #include <linux/types.h>
  8. #include <rdma/ib_user_ioctl_cmds.h>
  9. /*
  10. * Increment this value if any changes that break userspace ABI
  11. * compatibility are made.
  12. */
  13. #define EFA_UVERBS_ABI_VERSION 1
  14. /*
  15. * Keep structs aligned to 8 bytes.
  16. * Keep reserved fields as arrays of __u8 named reserved_XXX where XXX is the
  17. * hex bit offset of the field.
  18. */
  19. enum {
  20. EFA_ALLOC_UCONTEXT_CMD_COMP_TX_BATCH = 1 << 0,
  21. EFA_ALLOC_UCONTEXT_CMD_COMP_MIN_SQ_WR = 1 << 1,
  22. };
  23. struct efa_ibv_alloc_ucontext_cmd {
  24. __u32 comp_mask;
  25. __u8 reserved_20[4];
  26. };
  27. enum efa_ibv_user_cmds_supp_udata {
  28. EFA_USER_CMDS_SUPP_UDATA_QUERY_DEVICE = 1 << 0,
  29. EFA_USER_CMDS_SUPP_UDATA_CREATE_AH = 1 << 1,
  30. };
  31. struct efa_ibv_alloc_ucontext_resp {
  32. __u32 comp_mask;
  33. __u32 cmds_supp_udata_mask;
  34. __u16 sub_cqs_per_cq;
  35. __u16 inline_buf_size;
  36. __u32 max_llq_size; /* bytes */
  37. __u16 max_tx_batch; /* units of 64 bytes */
  38. __u16 min_sq_wr;
  39. __u8 reserved_a0[4];
  40. };
  41. struct efa_ibv_alloc_pd_resp {
  42. __u32 comp_mask;
  43. __u16 pdn;
  44. __u8 reserved_30[2];
  45. };
  46. enum {
  47. EFA_CREATE_CQ_WITH_COMPLETION_CHANNEL = 1 << 0,
  48. EFA_CREATE_CQ_WITH_SGID = 1 << 1,
  49. };
  50. struct efa_ibv_create_cq {
  51. __u32 comp_mask;
  52. __u32 cq_entry_size;
  53. __u16 num_sub_cqs;
  54. __u8 flags;
  55. __u8 reserved_58[5];
  56. };
  57. enum {
  58. EFA_CREATE_CQ_RESP_DB_OFF = 1 << 0,
  59. };
  60. struct efa_ibv_create_cq_resp {
  61. __u32 comp_mask;
  62. __u8 reserved_20[4];
  63. __aligned_u64 q_mmap_key;
  64. __aligned_u64 q_mmap_size;
  65. __u16 cq_idx;
  66. __u8 reserved_d0[2];
  67. __u32 db_off;
  68. __aligned_u64 db_mmap_key;
  69. };
  70. enum {
  71. EFA_QP_DRIVER_TYPE_SRD = 0,
  72. };
  73. enum {
  74. EFA_CREATE_QP_WITH_UNSOLICITED_WRITE_RECV = 1 << 0,
  75. };
  76. struct efa_ibv_create_qp {
  77. __u32 comp_mask;
  78. __u32 rq_ring_size; /* bytes */
  79. __u32 sq_ring_size; /* bytes */
  80. __u32 driver_qp_type;
  81. __u16 flags;
  82. __u8 sl;
  83. __u8 reserved_98[5];
  84. };
  85. struct efa_ibv_create_qp_resp {
  86. __u32 comp_mask;
  87. /* the offset inside the page of the rq db */
  88. __u32 rq_db_offset;
  89. /* the offset inside the page of the sq db */
  90. __u32 sq_db_offset;
  91. /* the offset inside the page of descriptors buffer */
  92. __u32 llq_desc_offset;
  93. __aligned_u64 rq_mmap_key;
  94. __aligned_u64 rq_mmap_size;
  95. __aligned_u64 rq_db_mmap_key;
  96. __aligned_u64 sq_db_mmap_key;
  97. __aligned_u64 llq_desc_mmap_key;
  98. __u16 send_sub_cq_idx;
  99. __u16 recv_sub_cq_idx;
  100. __u8 reserved_1e0[4];
  101. };
  102. struct efa_ibv_create_ah_resp {
  103. __u32 comp_mask;
  104. __u16 efa_address_handle;
  105. __u8 reserved_30[2];
  106. };
  107. enum {
  108. EFA_QUERY_DEVICE_CAPS_RDMA_READ = 1 << 0,
  109. EFA_QUERY_DEVICE_CAPS_RNR_RETRY = 1 << 1,
  110. EFA_QUERY_DEVICE_CAPS_CQ_NOTIFICATIONS = 1 << 2,
  111. EFA_QUERY_DEVICE_CAPS_CQ_WITH_SGID = 1 << 3,
  112. EFA_QUERY_DEVICE_CAPS_DATA_POLLING_128 = 1 << 4,
  113. EFA_QUERY_DEVICE_CAPS_RDMA_WRITE = 1 << 5,
  114. EFA_QUERY_DEVICE_CAPS_UNSOLICITED_WRITE_RECV = 1 << 6,
  115. EFA_QUERY_DEVICE_CAPS_CQ_WITH_EXT_MEM = 1 << 7,
  116. };
  117. struct efa_ibv_ex_query_device_resp {
  118. __u32 comp_mask;
  119. __u32 max_sq_wr;
  120. __u32 max_rq_wr;
  121. __u16 max_sq_sge;
  122. __u16 max_rq_sge;
  123. __u32 max_rdma_size;
  124. __u32 device_caps;
  125. };
  126. enum {
  127. EFA_QUERY_MR_VALIDITY_RECV_IC_ID = 1 << 0,
  128. EFA_QUERY_MR_VALIDITY_RDMA_READ_IC_ID = 1 << 1,
  129. EFA_QUERY_MR_VALIDITY_RDMA_RECV_IC_ID = 1 << 2,
  130. };
  131. enum efa_query_mr_attrs {
  132. EFA_IB_ATTR_QUERY_MR_HANDLE = (1U << UVERBS_ID_NS_SHIFT),
  133. EFA_IB_ATTR_QUERY_MR_RESP_IC_ID_VALIDITY,
  134. EFA_IB_ATTR_QUERY_MR_RESP_RECV_IC_ID,
  135. EFA_IB_ATTR_QUERY_MR_RESP_RDMA_READ_IC_ID,
  136. EFA_IB_ATTR_QUERY_MR_RESP_RDMA_RECV_IC_ID,
  137. };
  138. enum efa_mr_methods {
  139. EFA_IB_METHOD_MR_QUERY = (1U << UVERBS_ID_NS_SHIFT),
  140. };
  141. #endif /* EFA_ABI_USER_H */