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