1*c39526b7SPramod Gunjikar /* 2*c39526b7SPramod Gunjikar * This file contains definitions used in OFED defined user/kernel 3*c39526b7SPramod Gunjikar * interfaces. These are imported from the OFED header ib_user_verbs.h. Oracle 4*c39526b7SPramod Gunjikar * elects to have and use the contents of ib_user_verbs.h under and governed 5*c39526b7SPramod Gunjikar * by the OpenIB.org BSD license (see below for full license text). However, 6*c39526b7SPramod Gunjikar * the following notice accompanied the original version of this file: 7*c39526b7SPramod Gunjikar */ 8*c39526b7SPramod Gunjikar 9*c39526b7SPramod Gunjikar /* 10*c39526b7SPramod Gunjikar * Copyright (c) 2005 Topspin Communications. All rights reserved. 11*c39526b7SPramod Gunjikar * Copyright (c) 2005, 2006 Cisco Systems. All rights reserved. 12*c39526b7SPramod Gunjikar * Copyright (c) 2005 PathScale, Inc. All rights reserved. 13*c39526b7SPramod Gunjikar * Copyright (c) 2006 Mellanox Technologies. All rights reserved. 14*c39526b7SPramod Gunjikar * 15*c39526b7SPramod Gunjikar * This software is available to you under a choice of one of two 16*c39526b7SPramod Gunjikar * licenses. You may choose to be licensed under the terms of the GNU 17*c39526b7SPramod Gunjikar * General Public License (GPL) Version 2, available from the file 18*c39526b7SPramod Gunjikar * COPYING in the main directory of this source tree, or the 19*c39526b7SPramod Gunjikar * OpenIB.org BSD license below: 20*c39526b7SPramod Gunjikar * 21*c39526b7SPramod Gunjikar * Redistribution and use in source and binary forms, with or 22*c39526b7SPramod Gunjikar * without modification, are permitted provided that the following 23*c39526b7SPramod Gunjikar * conditions are met: 24*c39526b7SPramod Gunjikar * 25*c39526b7SPramod Gunjikar * - Redistributions of source code must retain the above 26*c39526b7SPramod Gunjikar * copyright notice, this list of conditions and the following 27*c39526b7SPramod Gunjikar * disclaimer. 28*c39526b7SPramod Gunjikar * 29*c39526b7SPramod Gunjikar * - Redistributions in binary form must reproduce the above 30*c39526b7SPramod Gunjikar * copyright notice, this list of conditions and the following 31*c39526b7SPramod Gunjikar * disclaimer in the documentation and/or other materials 32*c39526b7SPramod Gunjikar * provided with the distribution. 33*c39526b7SPramod Gunjikar * 34*c39526b7SPramod Gunjikar * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 35*c39526b7SPramod Gunjikar * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 36*c39526b7SPramod Gunjikar * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 37*c39526b7SPramod Gunjikar * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 38*c39526b7SPramod Gunjikar * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 39*c39526b7SPramod Gunjikar * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 40*c39526b7SPramod Gunjikar * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 41*c39526b7SPramod Gunjikar * SOFTWARE. 42*c39526b7SPramod Gunjikar * 43*c39526b7SPramod Gunjikar */ 44*c39526b7SPramod Gunjikar 45*c39526b7SPramod Gunjikar #ifndef _SYS_IB_CLIENTS_OF_RDMA_IB_USER_VERBS_H 46*c39526b7SPramod Gunjikar #define _SYS_IB_CLIENTS_OF_RDMA_IB_USER_VERBS_H 47*c39526b7SPramod Gunjikar 48*c39526b7SPramod Gunjikar #ifdef __cplusplus 49*c39526b7SPramod Gunjikar extern "C" { 50*c39526b7SPramod Gunjikar #endif 51*c39526b7SPramod Gunjikar 52*c39526b7SPramod Gunjikar /* 53*c39526b7SPramod Gunjikar * Increment this value if any changes that break userspace ABI 54*c39526b7SPramod Gunjikar * compatibility are made. 55*c39526b7SPramod Gunjikar */ 56*c39526b7SPramod Gunjikar #define IB_USER_VERBS_ABI_VERSION 6 57*c39526b7SPramod Gunjikar 58*c39526b7SPramod Gunjikar enum { 59*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_GET_CONTEXT, 60*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_DEVICE, 61*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_PORT, 62*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_ALLOC_PD, 63*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DEALLOC_PD, 64*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CREATE_AH, 65*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_MODIFY_AH, 66*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_AH, 67*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DESTROY_AH, 68*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_REG_MR, 69*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_REG_SMR, 70*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_REREG_MR, 71*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_MR, 72*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DEREG_MR, 73*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_ALLOC_MW, 74*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_BIND_MW, 75*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DEALLOC_MW, 76*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL, 77*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CREATE_CQ, 78*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_RESIZE_CQ, 79*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DESTROY_CQ, 80*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_POLL_CQ, 81*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_PEEK_CQ, 82*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_REQ_NOTIFY_CQ, 83*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CREATE_QP, 84*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_QP, 85*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_MODIFY_QP, 86*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DESTROY_QP, 87*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_POST_SEND, 88*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_POST_RECV, 89*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_ATTACH_MCAST, 90*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DETACH_MCAST, 91*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CREATE_SRQ, 92*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_MODIFY_SRQ, 93*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_SRQ, 94*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_DESTROY_SRQ, 95*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_POST_SRQ_RECV, 96*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CREATE_XRC_SRQ, 97*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_OPEN_XRC_DOMAIN, 98*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CLOSE_XRC_DOMAIN, 99*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_CREATE_XRC_RCV_QP, 100*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_MODIFY_XRC_RCV_QP, 101*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_XRC_RCV_QP, 102*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_REG_XRC_RCV_QP, 103*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_UNREG_XRC_RCV_QP, 104*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_GID, 105*c39526b7SPramod Gunjikar IB_USER_VERBS_CMD_QUERY_PKEY 106*c39526b7SPramod Gunjikar }; 107*c39526b7SPramod Gunjikar 108*c39526b7SPramod Gunjikar /* 109*c39526b7SPramod Gunjikar * Make sure that all structs defined in this file remain laid out so 110*c39526b7SPramod Gunjikar * that they pack the same way on 32-bit and 64-bit architectures (to 111*c39526b7SPramod Gunjikar * avoid incompatibility between 32-bit userspace and 64-bit kernels). 112*c39526b7SPramod Gunjikar * Specifically: 113*c39526b7SPramod Gunjikar * - Do not use pointer types -- pass pointers in uint64_t instead. 114*c39526b7SPramod Gunjikar * - Make sure that any structure larger than 4 bytes is padded to a 115*c39526b7SPramod Gunjikar * multiple of 8 bytes. Otherwise the structure size will be 116*c39526b7SPramod Gunjikar * different between 32-bit and 64-bit architectures. 117*c39526b7SPramod Gunjikar */ 118*c39526b7SPramod Gunjikar 119*c39526b7SPramod Gunjikar struct ib_uverbs_async_event_desc { 120*c39526b7SPramod Gunjikar uint64_t element; 121*c39526b7SPramod Gunjikar uint32_t event_type; /* enum ib_event_type */ 122*c39526b7SPramod Gunjikar uint32_t reserved; 123*c39526b7SPramod Gunjikar }; 124*c39526b7SPramod Gunjikar 125*c39526b7SPramod Gunjikar struct ib_uverbs_comp_event_desc { 126*c39526b7SPramod Gunjikar uint64_t cq_handle; 127*c39526b7SPramod Gunjikar }; 128*c39526b7SPramod Gunjikar 129*c39526b7SPramod Gunjikar /* 130*c39526b7SPramod Gunjikar * All commands from userspace should start with a uint32_t command field 131*c39526b7SPramod Gunjikar * followed by uint16_t in_words and out_words fields (which give the 132*c39526b7SPramod Gunjikar * length of the command block and response buffer if any in 32-bit 133*c39526b7SPramod Gunjikar * words). The kernel driver will read these fields first and read 134*c39526b7SPramod Gunjikar * the rest of the command struct based on these value. 135*c39526b7SPramod Gunjikar */ 136*c39526b7SPramod Gunjikar 137*c39526b7SPramod Gunjikar struct ib_uverbs_cmd_hdr { 138*c39526b7SPramod Gunjikar uint32_t command; 139*c39526b7SPramod Gunjikar uint16_t in_words; 140*c39526b7SPramod Gunjikar uint16_t out_words; 141*c39526b7SPramod Gunjikar }; 142*c39526b7SPramod Gunjikar 143*c39526b7SPramod Gunjikar struct ib_uverbs_get_context { 144*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 145*c39526b7SPramod Gunjikar uint64_t driver_data[]; 146*c39526b7SPramod Gunjikar }; 147*c39526b7SPramod Gunjikar 148*c39526b7SPramod Gunjikar struct ib_uverbs_get_context_resp { 149*c39526b7SPramod Gunjikar uint32_t async_fd; 150*c39526b7SPramod Gunjikar uint32_t num_comp_vectors; 151*c39526b7SPramod Gunjikar }; 152*c39526b7SPramod Gunjikar 153*c39526b7SPramod Gunjikar struct ib_uverbs_query_device { 154*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 155*c39526b7SPramod Gunjikar uint64_t driver_data[]; 156*c39526b7SPramod Gunjikar }; 157*c39526b7SPramod Gunjikar 158*c39526b7SPramod Gunjikar struct ib_uverbs_query_device_resp { 159*c39526b7SPramod Gunjikar uint64_t fw_ver; 160*c39526b7SPramod Gunjikar uint64_t node_guid; 161*c39526b7SPramod Gunjikar uint64_t sys_image_guid; 162*c39526b7SPramod Gunjikar uint64_t max_mr_size; 163*c39526b7SPramod Gunjikar uint64_t page_size_cap; 164*c39526b7SPramod Gunjikar uint32_t vendor_id; 165*c39526b7SPramod Gunjikar uint32_t vendor_part_id; 166*c39526b7SPramod Gunjikar uint32_t hw_ver; 167*c39526b7SPramod Gunjikar uint32_t max_qp; 168*c39526b7SPramod Gunjikar uint32_t max_qp_wr; 169*c39526b7SPramod Gunjikar uint32_t device_cap_flags; 170*c39526b7SPramod Gunjikar uint32_t max_sge; 171*c39526b7SPramod Gunjikar uint32_t max_sge_rd; 172*c39526b7SPramod Gunjikar uint32_t max_cq; 173*c39526b7SPramod Gunjikar uint32_t max_cqe; 174*c39526b7SPramod Gunjikar uint32_t max_mr; 175*c39526b7SPramod Gunjikar uint32_t max_pd; 176*c39526b7SPramod Gunjikar uint32_t max_qp_rd_atom; 177*c39526b7SPramod Gunjikar uint32_t max_ee_rd_atom; 178*c39526b7SPramod Gunjikar uint32_t max_res_rd_atom; 179*c39526b7SPramod Gunjikar uint32_t max_qp_init_rd_atom; 180*c39526b7SPramod Gunjikar uint32_t max_ee_init_rd_atom; 181*c39526b7SPramod Gunjikar uint32_t atomic_cap; 182*c39526b7SPramod Gunjikar uint32_t max_ee; 183*c39526b7SPramod Gunjikar uint32_t max_rdd; 184*c39526b7SPramod Gunjikar uint32_t max_mw; 185*c39526b7SPramod Gunjikar uint32_t max_raw_ipv6_qp; 186*c39526b7SPramod Gunjikar uint32_t max_raw_ethy_qp; 187*c39526b7SPramod Gunjikar uint32_t max_mcast_grp; 188*c39526b7SPramod Gunjikar uint32_t max_mcast_qp_attach; 189*c39526b7SPramod Gunjikar uint32_t max_total_mcast_qp_attach; 190*c39526b7SPramod Gunjikar uint32_t max_ah; 191*c39526b7SPramod Gunjikar uint32_t max_fmr; 192*c39526b7SPramod Gunjikar uint32_t max_map_per_fmr; 193*c39526b7SPramod Gunjikar uint32_t max_srq; 194*c39526b7SPramod Gunjikar uint32_t max_srq_wr; 195*c39526b7SPramod Gunjikar uint32_t max_srq_sge; 196*c39526b7SPramod Gunjikar uint16_t max_pkeys; 197*c39526b7SPramod Gunjikar uint8_t local_ca_ack_delay; 198*c39526b7SPramod Gunjikar uint8_t phys_port_cnt; 199*c39526b7SPramod Gunjikar uint8_t reserved[4]; 200*c39526b7SPramod Gunjikar }; 201*c39526b7SPramod Gunjikar 202*c39526b7SPramod Gunjikar struct ib_uverbs_query_port { 203*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 204*c39526b7SPramod Gunjikar uint8_t port_num; 205*c39526b7SPramod Gunjikar uint8_t reserved[7]; 206*c39526b7SPramod Gunjikar uint64_t driver_data[]; 207*c39526b7SPramod Gunjikar }; 208*c39526b7SPramod Gunjikar 209*c39526b7SPramod Gunjikar struct ib_uverbs_query_port_resp { 210*c39526b7SPramod Gunjikar uint32_t port_cap_flags; 211*c39526b7SPramod Gunjikar uint32_t max_msg_sz; 212*c39526b7SPramod Gunjikar uint32_t bad_pkey_cntr; 213*c39526b7SPramod Gunjikar uint32_t qkey_viol_cntr; 214*c39526b7SPramod Gunjikar uint32_t gid_tbl_len; 215*c39526b7SPramod Gunjikar uint16_t pkey_tbl_len; 216*c39526b7SPramod Gunjikar uint16_t lid; 217*c39526b7SPramod Gunjikar uint16_t sm_lid; 218*c39526b7SPramod Gunjikar uint8_t state; 219*c39526b7SPramod Gunjikar uint8_t max_mtu; 220*c39526b7SPramod Gunjikar uint8_t active_mtu; 221*c39526b7SPramod Gunjikar uint8_t lmc; 222*c39526b7SPramod Gunjikar uint8_t max_vl_num; 223*c39526b7SPramod Gunjikar uint8_t sm_sl; 224*c39526b7SPramod Gunjikar uint8_t subnet_timeout; 225*c39526b7SPramod Gunjikar uint8_t init_type_reply; 226*c39526b7SPramod Gunjikar uint8_t active_width; 227*c39526b7SPramod Gunjikar uint8_t active_speed; 228*c39526b7SPramod Gunjikar uint8_t phys_state; 229*c39526b7SPramod Gunjikar uint8_t reserved[3]; 230*c39526b7SPramod Gunjikar }; 231*c39526b7SPramod Gunjikar 232*c39526b7SPramod Gunjikar struct ib_uverbs_query_gid { 233*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 234*c39526b7SPramod Gunjikar uint32_t gid_index; 235*c39526b7SPramod Gunjikar uint8_t port_num; 236*c39526b7SPramod Gunjikar uint8_t reserved[3]; 237*c39526b7SPramod Gunjikar uint64_t driver_data; 238*c39526b7SPramod Gunjikar }; 239*c39526b7SPramod Gunjikar 240*c39526b7SPramod Gunjikar struct ib_uverbs_query_gid_resp { 241*c39526b7SPramod Gunjikar uint8_t gid[16]; 242*c39526b7SPramod Gunjikar }; 243*c39526b7SPramod Gunjikar 244*c39526b7SPramod Gunjikar struct ib_uverbs_query_pkey { 245*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 246*c39526b7SPramod Gunjikar uint32_t pkey_index; 247*c39526b7SPramod Gunjikar uint8_t port_num; 248*c39526b7SPramod Gunjikar uint8_t reserved[3]; 249*c39526b7SPramod Gunjikar uint64_t driver_data; 250*c39526b7SPramod Gunjikar }; 251*c39526b7SPramod Gunjikar 252*c39526b7SPramod Gunjikar struct ib_uverbs_query_pkey_resp { 253*c39526b7SPramod Gunjikar uint16_t pkey; 254*c39526b7SPramod Gunjikar uint16_t reserved; 255*c39526b7SPramod Gunjikar }; 256*c39526b7SPramod Gunjikar 257*c39526b7SPramod Gunjikar struct ib_uverbs_alloc_pd { 258*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 259*c39526b7SPramod Gunjikar uint64_t driver_data[]; 260*c39526b7SPramod Gunjikar }; 261*c39526b7SPramod Gunjikar 262*c39526b7SPramod Gunjikar /* 263*c39526b7SPramod Gunjikar * PD responses may pass opaque data to userspace drivers, we choose a value 264*c39526b7SPramod Gunjikar * larger than what any HCA requires. 265*c39526b7SPramod Gunjikar */ 266*c39526b7SPramod Gunjikar #define SOL_UVERBS_PD_DATA_OUT_SIZE 24 267*c39526b7SPramod Gunjikar typedef uint64_t uverbs_pd_drv_out_data_t[SOL_UVERBS_PD_DATA_OUT_SIZE]; 268*c39526b7SPramod Gunjikar 269*c39526b7SPramod Gunjikar struct ib_uverbs_alloc_pd_resp { 270*c39526b7SPramod Gunjikar uint32_t pd_handle; 271*c39526b7SPramod Gunjikar uint32_t reserved; 272*c39526b7SPramod Gunjikar uverbs_pd_drv_out_data_t drv_out; 273*c39526b7SPramod Gunjikar }; 274*c39526b7SPramod Gunjikar 275*c39526b7SPramod Gunjikar struct ib_uverbs_dealloc_pd { 276*c39526b7SPramod Gunjikar uint32_t pd_handle; 277*c39526b7SPramod Gunjikar }; 278*c39526b7SPramod Gunjikar 279*c39526b7SPramod Gunjikar struct ib_uverbs_reg_mr { 280*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 281*c39526b7SPramod Gunjikar uint64_t start; 282*c39526b7SPramod Gunjikar uint64_t length; 283*c39526b7SPramod Gunjikar uint64_t hca_va; 284*c39526b7SPramod Gunjikar uint32_t pd_handle; 285*c39526b7SPramod Gunjikar uint32_t access_flags; 286*c39526b7SPramod Gunjikar uint64_t driver_data[]; 287*c39526b7SPramod Gunjikar }; 288*c39526b7SPramod Gunjikar 289*c39526b7SPramod Gunjikar struct ib_uverbs_reg_mr_resp { 290*c39526b7SPramod Gunjikar uint32_t mr_handle; 291*c39526b7SPramod Gunjikar uint32_t lkey; 292*c39526b7SPramod Gunjikar uint32_t rkey; 293*c39526b7SPramod Gunjikar }; 294*c39526b7SPramod Gunjikar 295*c39526b7SPramod Gunjikar struct ib_uverbs_dereg_mr { 296*c39526b7SPramod Gunjikar uint32_t mr_handle; 297*c39526b7SPramod Gunjikar }; 298*c39526b7SPramod Gunjikar 299*c39526b7SPramod Gunjikar struct ib_uverbs_create_comp_channel { 300*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 301*c39526b7SPramod Gunjikar }; 302*c39526b7SPramod Gunjikar 303*c39526b7SPramod Gunjikar struct ib_uverbs_create_comp_channel_resp { 304*c39526b7SPramod Gunjikar uint32_t fd; 305*c39526b7SPramod Gunjikar }; 306*c39526b7SPramod Gunjikar 307*c39526b7SPramod Gunjikar struct ib_uverbs_create_cq { 308*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 309*c39526b7SPramod Gunjikar uint64_t user_handle; 310*c39526b7SPramod Gunjikar uint32_t cqe; 311*c39526b7SPramod Gunjikar uint32_t comp_vector; 312*c39526b7SPramod Gunjikar int32_t comp_channel; 313*c39526b7SPramod Gunjikar uint32_t reserved; 314*c39526b7SPramod Gunjikar uint64_t driver_data[]; 315*c39526b7SPramod Gunjikar }; 316*c39526b7SPramod Gunjikar 317*c39526b7SPramod Gunjikar /* 318*c39526b7SPramod Gunjikar * CQ responses pass opaque data to userspace drivers, we choose a value 319*c39526b7SPramod Gunjikar * larger than what any HCA requires. 320*c39526b7SPramod Gunjikar */ 321*c39526b7SPramod Gunjikar #define SOL_UVERBS_CQ_DATA_OUT_SIZE 24 322*c39526b7SPramod Gunjikar typedef uint64_t uverbs_cq_drv_out_data_t[SOL_UVERBS_CQ_DATA_OUT_SIZE]; 323*c39526b7SPramod Gunjikar 324*c39526b7SPramod Gunjikar struct ib_uverbs_create_cq_resp { 325*c39526b7SPramod Gunjikar uint32_t cq_handle; 326*c39526b7SPramod Gunjikar uint32_t cqe; 327*c39526b7SPramod Gunjikar uverbs_cq_drv_out_data_t drv_out; 328*c39526b7SPramod Gunjikar }; 329*c39526b7SPramod Gunjikar 330*c39526b7SPramod Gunjikar struct ib_uverbs_resize_cq { 331*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 332*c39526b7SPramod Gunjikar uint32_t cq_handle; 333*c39526b7SPramod Gunjikar uint32_t cqe; 334*c39526b7SPramod Gunjikar uint64_t driver_data[]; 335*c39526b7SPramod Gunjikar }; 336*c39526b7SPramod Gunjikar 337*c39526b7SPramod Gunjikar struct ib_uverbs_resize_cq_resp { 338*c39526b7SPramod Gunjikar uint32_t cqe; 339*c39526b7SPramod Gunjikar uint32_t reserved; 340*c39526b7SPramod Gunjikar uverbs_cq_drv_out_data_t drv_out; 341*c39526b7SPramod Gunjikar }; 342*c39526b7SPramod Gunjikar 343*c39526b7SPramod Gunjikar struct ib_uverbs_poll_cq { 344*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 345*c39526b7SPramod Gunjikar uint32_t cq_handle; 346*c39526b7SPramod Gunjikar uint32_t ne; 347*c39526b7SPramod Gunjikar }; 348*c39526b7SPramod Gunjikar 349*c39526b7SPramod Gunjikar struct ib_uverbs_wc { 350*c39526b7SPramod Gunjikar uint64_t wr_id; 351*c39526b7SPramod Gunjikar uint32_t status; 352*c39526b7SPramod Gunjikar uint32_t opcode; 353*c39526b7SPramod Gunjikar uint32_t vendor_err; 354*c39526b7SPramod Gunjikar uint32_t byte_len; 355*c39526b7SPramod Gunjikar uint32_t imm_data; 356*c39526b7SPramod Gunjikar uint32_t qp_num; 357*c39526b7SPramod Gunjikar uint32_t src_qp; 358*c39526b7SPramod Gunjikar uint32_t wc_flags; 359*c39526b7SPramod Gunjikar uint16_t pkey_index; 360*c39526b7SPramod Gunjikar uint16_t slid; 361*c39526b7SPramod Gunjikar uint8_t sl; 362*c39526b7SPramod Gunjikar uint8_t dlid_path_bits; 363*c39526b7SPramod Gunjikar uint8_t port_num; 364*c39526b7SPramod Gunjikar uint8_t reserved; 365*c39526b7SPramod Gunjikar }; 366*c39526b7SPramod Gunjikar 367*c39526b7SPramod Gunjikar struct ib_uverbs_poll_cq_resp { 368*c39526b7SPramod Gunjikar uint32_t count; 369*c39526b7SPramod Gunjikar uint32_t reserved; 370*c39526b7SPramod Gunjikar struct ib_uverbs_wc wc[]; 371*c39526b7SPramod Gunjikar }; 372*c39526b7SPramod Gunjikar 373*c39526b7SPramod Gunjikar struct ib_uverbs_req_notify_cq { 374*c39526b7SPramod Gunjikar uint32_t cq_handle; 375*c39526b7SPramod Gunjikar uint32_t solicited_only; 376*c39526b7SPramod Gunjikar }; 377*c39526b7SPramod Gunjikar 378*c39526b7SPramod Gunjikar struct ib_uverbs_destroy_cq { 379*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 380*c39526b7SPramod Gunjikar uint32_t cq_handle; 381*c39526b7SPramod Gunjikar uint32_t reserved; 382*c39526b7SPramod Gunjikar }; 383*c39526b7SPramod Gunjikar 384*c39526b7SPramod Gunjikar struct ib_uverbs_destroy_cq_resp { 385*c39526b7SPramod Gunjikar uint32_t comp_events_reported; 386*c39526b7SPramod Gunjikar uint32_t async_events_reported; 387*c39526b7SPramod Gunjikar }; 388*c39526b7SPramod Gunjikar 389*c39526b7SPramod Gunjikar struct ib_uverbs_global_route { 390*c39526b7SPramod Gunjikar uint8_t dgid[16]; 391*c39526b7SPramod Gunjikar uint32_t flow_label; 392*c39526b7SPramod Gunjikar uint8_t sgid_index; 393*c39526b7SPramod Gunjikar uint8_t hop_limit; 394*c39526b7SPramod Gunjikar uint8_t traffic_class; 395*c39526b7SPramod Gunjikar uint8_t reserved; 396*c39526b7SPramod Gunjikar }; 397*c39526b7SPramod Gunjikar 398*c39526b7SPramod Gunjikar struct ib_uverbs_ah_attr { 399*c39526b7SPramod Gunjikar struct ib_uverbs_global_route grh; 400*c39526b7SPramod Gunjikar uint16_t dlid; 401*c39526b7SPramod Gunjikar uint8_t sl; 402*c39526b7SPramod Gunjikar uint8_t src_path_bits; 403*c39526b7SPramod Gunjikar uint8_t static_rate; 404*c39526b7SPramod Gunjikar uint8_t is_global; 405*c39526b7SPramod Gunjikar uint8_t port_num; 406*c39526b7SPramod Gunjikar uint8_t reserved; 407*c39526b7SPramod Gunjikar }; 408*c39526b7SPramod Gunjikar 409*c39526b7SPramod Gunjikar struct ib_uverbs_qp_attr { 410*c39526b7SPramod Gunjikar uint32_t qp_attr_mask; 411*c39526b7SPramod Gunjikar uint32_t qp_state; 412*c39526b7SPramod Gunjikar uint32_t cur_qp_state; 413*c39526b7SPramod Gunjikar uint32_t path_mtu; 414*c39526b7SPramod Gunjikar uint32_t path_mig_state; 415*c39526b7SPramod Gunjikar uint32_t qkey; 416*c39526b7SPramod Gunjikar uint32_t rq_psn; 417*c39526b7SPramod Gunjikar uint32_t sq_psn; 418*c39526b7SPramod Gunjikar uint32_t dest_qp_num; 419*c39526b7SPramod Gunjikar uint32_t qp_access_flags; 420*c39526b7SPramod Gunjikar 421*c39526b7SPramod Gunjikar struct ib_uverbs_ah_attr ah_attr; 422*c39526b7SPramod Gunjikar struct ib_uverbs_ah_attr alt_ah_attr; 423*c39526b7SPramod Gunjikar 424*c39526b7SPramod Gunjikar /* ib_qp_cap */ 425*c39526b7SPramod Gunjikar uint32_t max_send_wr; 426*c39526b7SPramod Gunjikar uint32_t max_recv_wr; 427*c39526b7SPramod Gunjikar uint32_t max_send_sge; 428*c39526b7SPramod Gunjikar uint32_t max_recv_sge; 429*c39526b7SPramod Gunjikar uint32_t max_inline_data; 430*c39526b7SPramod Gunjikar 431*c39526b7SPramod Gunjikar uint16_t pkey_index; 432*c39526b7SPramod Gunjikar uint16_t alt_pkey_index; 433*c39526b7SPramod Gunjikar uint8_t en_sqd_async_notify; 434*c39526b7SPramod Gunjikar uint8_t sq_draining; 435*c39526b7SPramod Gunjikar uint8_t max_rd_atomic; 436*c39526b7SPramod Gunjikar uint8_t max_dest_rd_atomic; 437*c39526b7SPramod Gunjikar uint8_t min_rnr_timer; 438*c39526b7SPramod Gunjikar uint8_t port_num; 439*c39526b7SPramod Gunjikar uint8_t timeout; 440*c39526b7SPramod Gunjikar uint8_t retry_cnt; 441*c39526b7SPramod Gunjikar uint8_t rnr_retry; 442*c39526b7SPramod Gunjikar uint8_t alt_port_num; 443*c39526b7SPramod Gunjikar uint8_t alt_timeout; 444*c39526b7SPramod Gunjikar uint8_t reserved[5]; 445*c39526b7SPramod Gunjikar }; 446*c39526b7SPramod Gunjikar 447*c39526b7SPramod Gunjikar struct ib_uverbs_create_qp { 448*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 449*c39526b7SPramod Gunjikar uint64_t user_handle; 450*c39526b7SPramod Gunjikar uint32_t pd_handle; 451*c39526b7SPramod Gunjikar uint32_t send_cq_handle; 452*c39526b7SPramod Gunjikar uint32_t recv_cq_handle; 453*c39526b7SPramod Gunjikar uint32_t srq_handle; 454*c39526b7SPramod Gunjikar uint32_t max_send_wr; 455*c39526b7SPramod Gunjikar uint32_t max_recv_wr; 456*c39526b7SPramod Gunjikar uint32_t max_send_sge; 457*c39526b7SPramod Gunjikar uint32_t max_recv_sge; 458*c39526b7SPramod Gunjikar uint32_t max_inline_data; 459*c39526b7SPramod Gunjikar uint8_t sq_sig_all; 460*c39526b7SPramod Gunjikar uint8_t qp_type; 461*c39526b7SPramod Gunjikar uint8_t is_srq; 462*c39526b7SPramod Gunjikar uint8_t reserved; 463*c39526b7SPramod Gunjikar uint64_t driver_data[]; 464*c39526b7SPramod Gunjikar }; 465*c39526b7SPramod Gunjikar 466*c39526b7SPramod Gunjikar /* 467*c39526b7SPramod Gunjikar * QP responses pass opaque data to userspace drivers, we choose a value 468*c39526b7SPramod Gunjikar * larger than what any HCA requires. 469*c39526b7SPramod Gunjikar */ 470*c39526b7SPramod Gunjikar #define SOL_UVERBS_QP_DATA_OUT_SIZE 24 471*c39526b7SPramod Gunjikar typedef uint64_t uverbs_qp_drv_out_data_t[SOL_UVERBS_QP_DATA_OUT_SIZE]; 472*c39526b7SPramod Gunjikar 473*c39526b7SPramod Gunjikar struct ib_uverbs_create_qp_resp { 474*c39526b7SPramod Gunjikar uint32_t qp_handle; 475*c39526b7SPramod Gunjikar uint32_t qpn; 476*c39526b7SPramod Gunjikar uint32_t max_send_wr; 477*c39526b7SPramod Gunjikar uint32_t max_recv_wr; 478*c39526b7SPramod Gunjikar uint32_t max_send_sge; 479*c39526b7SPramod Gunjikar uint32_t max_recv_sge; 480*c39526b7SPramod Gunjikar uint32_t max_inline_data; 481*c39526b7SPramod Gunjikar uint32_t reserved; 482*c39526b7SPramod Gunjikar uverbs_qp_drv_out_data_t drv_out; 483*c39526b7SPramod Gunjikar }; 484*c39526b7SPramod Gunjikar 485*c39526b7SPramod Gunjikar /* 486*c39526b7SPramod Gunjikar * This struct needs to remain a multiple of 8 bytes to keep the 487*c39526b7SPramod Gunjikar * alignment of the modify QP parameters. 488*c39526b7SPramod Gunjikar */ 489*c39526b7SPramod Gunjikar struct ib_uverbs_qp_dest { 490*c39526b7SPramod Gunjikar uint8_t dgid[16]; 491*c39526b7SPramod Gunjikar uint32_t flow_label; 492*c39526b7SPramod Gunjikar uint16_t dlid; 493*c39526b7SPramod Gunjikar uint16_t reserved; 494*c39526b7SPramod Gunjikar uint8_t sgid_index; 495*c39526b7SPramod Gunjikar uint8_t hop_limit; 496*c39526b7SPramod Gunjikar uint8_t traffic_class; 497*c39526b7SPramod Gunjikar uint8_t sl; 498*c39526b7SPramod Gunjikar uint8_t src_path_bits; 499*c39526b7SPramod Gunjikar uint8_t static_rate; 500*c39526b7SPramod Gunjikar uint8_t is_global; 501*c39526b7SPramod Gunjikar uint8_t port_num; 502*c39526b7SPramod Gunjikar }; 503*c39526b7SPramod Gunjikar 504*c39526b7SPramod Gunjikar struct ib_uverbs_query_qp { 505*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 506*c39526b7SPramod Gunjikar uint32_t qp_handle; 507*c39526b7SPramod Gunjikar uint32_t attr_mask; 508*c39526b7SPramod Gunjikar uint64_t driver_data[]; 509*c39526b7SPramod Gunjikar }; 510*c39526b7SPramod Gunjikar 511*c39526b7SPramod Gunjikar struct ib_uverbs_query_qp_resp { 512*c39526b7SPramod Gunjikar struct ib_uverbs_qp_dest dest; 513*c39526b7SPramod Gunjikar struct ib_uverbs_qp_dest alt_dest; 514*c39526b7SPramod Gunjikar uint32_t max_send_wr; 515*c39526b7SPramod Gunjikar uint32_t max_recv_wr; 516*c39526b7SPramod Gunjikar uint32_t max_send_sge; 517*c39526b7SPramod Gunjikar uint32_t max_recv_sge; 518*c39526b7SPramod Gunjikar uint32_t max_inline_data; 519*c39526b7SPramod Gunjikar uint32_t qkey; 520*c39526b7SPramod Gunjikar uint32_t rq_psn; 521*c39526b7SPramod Gunjikar uint32_t sq_psn; 522*c39526b7SPramod Gunjikar uint32_t dest_qp_num; 523*c39526b7SPramod Gunjikar uint32_t qp_access_flags; 524*c39526b7SPramod Gunjikar uint16_t pkey_index; 525*c39526b7SPramod Gunjikar uint16_t alt_pkey_index; 526*c39526b7SPramod Gunjikar uint8_t qp_state; 527*c39526b7SPramod Gunjikar uint8_t cur_qp_state; 528*c39526b7SPramod Gunjikar uint8_t path_mtu; 529*c39526b7SPramod Gunjikar uint8_t path_mig_state; 530*c39526b7SPramod Gunjikar uint8_t sq_draining; 531*c39526b7SPramod Gunjikar uint8_t max_rd_atomic; 532*c39526b7SPramod Gunjikar uint8_t max_dest_rd_atomic; 533*c39526b7SPramod Gunjikar uint8_t min_rnr_timer; 534*c39526b7SPramod Gunjikar uint8_t port_num; 535*c39526b7SPramod Gunjikar uint8_t timeout; 536*c39526b7SPramod Gunjikar uint8_t retry_cnt; 537*c39526b7SPramod Gunjikar uint8_t rnr_retry; 538*c39526b7SPramod Gunjikar uint8_t alt_port_num; 539*c39526b7SPramod Gunjikar uint8_t alt_timeout; 540*c39526b7SPramod Gunjikar uint8_t sq_sig_all; 541*c39526b7SPramod Gunjikar uint8_t reserved[5]; 542*c39526b7SPramod Gunjikar uint64_t driver_data[]; 543*c39526b7SPramod Gunjikar }; 544*c39526b7SPramod Gunjikar 545*c39526b7SPramod Gunjikar struct ib_uverbs_modify_qp { 546*c39526b7SPramod Gunjikar struct ib_uverbs_qp_dest dest; 547*c39526b7SPramod Gunjikar struct ib_uverbs_qp_dest alt_dest; 548*c39526b7SPramod Gunjikar uint32_t qp_handle; 549*c39526b7SPramod Gunjikar uint32_t attr_mask; 550*c39526b7SPramod Gunjikar uint32_t qkey; 551*c39526b7SPramod Gunjikar uint32_t rq_psn; 552*c39526b7SPramod Gunjikar uint32_t sq_psn; 553*c39526b7SPramod Gunjikar uint32_t dest_qp_num; 554*c39526b7SPramod Gunjikar uint32_t qp_access_flags; 555*c39526b7SPramod Gunjikar uint16_t pkey_index; 556*c39526b7SPramod Gunjikar uint16_t alt_pkey_index; 557*c39526b7SPramod Gunjikar uint8_t qp_state; 558*c39526b7SPramod Gunjikar uint8_t cur_qp_state; 559*c39526b7SPramod Gunjikar uint8_t path_mtu; 560*c39526b7SPramod Gunjikar uint8_t path_mig_state; 561*c39526b7SPramod Gunjikar uint8_t en_sqd_async_notify; 562*c39526b7SPramod Gunjikar uint8_t max_rd_atomic; 563*c39526b7SPramod Gunjikar uint8_t max_dest_rd_atomic; 564*c39526b7SPramod Gunjikar uint8_t min_rnr_timer; 565*c39526b7SPramod Gunjikar uint8_t port_num; 566*c39526b7SPramod Gunjikar uint8_t timeout; 567*c39526b7SPramod Gunjikar uint8_t retry_cnt; 568*c39526b7SPramod Gunjikar uint8_t rnr_retry; 569*c39526b7SPramod Gunjikar uint8_t alt_port_num; 570*c39526b7SPramod Gunjikar uint8_t alt_timeout; 571*c39526b7SPramod Gunjikar uint8_t reserved[2]; 572*c39526b7SPramod Gunjikar uint64_t driver_data[]; 573*c39526b7SPramod Gunjikar }; 574*c39526b7SPramod Gunjikar 575*c39526b7SPramod Gunjikar 576*c39526b7SPramod Gunjikar struct ib_uverbs_destroy_qp { 577*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 578*c39526b7SPramod Gunjikar uint32_t qp_handle; 579*c39526b7SPramod Gunjikar uint32_t reserved; 580*c39526b7SPramod Gunjikar }; 581*c39526b7SPramod Gunjikar 582*c39526b7SPramod Gunjikar struct ib_uverbs_destroy_qp_resp { 583*c39526b7SPramod Gunjikar uint32_t events_reported; 584*c39526b7SPramod Gunjikar }; 585*c39526b7SPramod Gunjikar 586*c39526b7SPramod Gunjikar /* 587*c39526b7SPramod Gunjikar * The ib_uverbs_sge structure isn't used anywhere, since we assume 588*c39526b7SPramod Gunjikar * the ib_sge structure is packed the same way on 32-bit and 64-bit 589*c39526b7SPramod Gunjikar * architectures in both kernel and user space. It's just here to 590*c39526b7SPramod Gunjikar * document the ABI. 591*c39526b7SPramod Gunjikar */ 592*c39526b7SPramod Gunjikar struct ib_uverbs_sge { 593*c39526b7SPramod Gunjikar uint64_t addr; 594*c39526b7SPramod Gunjikar uint32_t length; 595*c39526b7SPramod Gunjikar uint32_t lkey; 596*c39526b7SPramod Gunjikar }; 597*c39526b7SPramod Gunjikar 598*c39526b7SPramod Gunjikar struct ib_uverbs_send_wr { 599*c39526b7SPramod Gunjikar uint64_t wr_id; 600*c39526b7SPramod Gunjikar uint32_t num_sge; 601*c39526b7SPramod Gunjikar uint32_t opcode; 602*c39526b7SPramod Gunjikar uint32_t send_flags; 603*c39526b7SPramod Gunjikar uint32_t imm_data; 604*c39526b7SPramod Gunjikar union { 605*c39526b7SPramod Gunjikar struct { 606*c39526b7SPramod Gunjikar uint64_t remote_addr; 607*c39526b7SPramod Gunjikar uint32_t rkey; 608*c39526b7SPramod Gunjikar uint32_t reserved; 609*c39526b7SPramod Gunjikar } rdma; 610*c39526b7SPramod Gunjikar struct { 611*c39526b7SPramod Gunjikar uint64_t remote_addr; 612*c39526b7SPramod Gunjikar uint64_t compare_add; 613*c39526b7SPramod Gunjikar uint64_t swap; 614*c39526b7SPramod Gunjikar uint32_t rkey; 615*c39526b7SPramod Gunjikar uint32_t reserved; 616*c39526b7SPramod Gunjikar } atomic; 617*c39526b7SPramod Gunjikar struct { 618*c39526b7SPramod Gunjikar uint32_t ah; 619*c39526b7SPramod Gunjikar uint32_t remote_qpn; 620*c39526b7SPramod Gunjikar uint32_t remote_qkey; 621*c39526b7SPramod Gunjikar uint32_t reserved; 622*c39526b7SPramod Gunjikar } ud; 623*c39526b7SPramod Gunjikar } wr; 624*c39526b7SPramod Gunjikar }; 625*c39526b7SPramod Gunjikar 626*c39526b7SPramod Gunjikar struct ib_uverbs_post_send { 627*c39526b7SPramod Gunjikar uint64_t response; 628*c39526b7SPramod Gunjikar uint32_t qp_handle; 629*c39526b7SPramod Gunjikar uint32_t wr_count; 630*c39526b7SPramod Gunjikar uint32_t sge_count; 631*c39526b7SPramod Gunjikar uint32_t wqe_size; 632*c39526b7SPramod Gunjikar struct ib_uverbs_send_wr send_wr[]; 633*c39526b7SPramod Gunjikar }; 634*c39526b7SPramod Gunjikar 635*c39526b7SPramod Gunjikar struct ib_uverbs_post_send_resp { 636*c39526b7SPramod Gunjikar uint32_t bad_wr; 637*c39526b7SPramod Gunjikar }; 638*c39526b7SPramod Gunjikar 639*c39526b7SPramod Gunjikar struct ib_uverbs_recv_wr { 640*c39526b7SPramod Gunjikar uint64_t wr_id; 641*c39526b7SPramod Gunjikar uint32_t num_sge; 642*c39526b7SPramod Gunjikar uint32_t reserved; 643*c39526b7SPramod Gunjikar }; 644*c39526b7SPramod Gunjikar 645*c39526b7SPramod Gunjikar struct ib_uverbs_post_recv { 646*c39526b7SPramod Gunjikar uint64_t response; 647*c39526b7SPramod Gunjikar uint32_t qp_handle; 648*c39526b7SPramod Gunjikar uint32_t wr_count; 649*c39526b7SPramod Gunjikar uint32_t sge_count; 650*c39526b7SPramod Gunjikar uint32_t wqe_size; 651*c39526b7SPramod Gunjikar struct ib_uverbs_recv_wr recv_wr[]; 652*c39526b7SPramod Gunjikar }; 653*c39526b7SPramod Gunjikar 654*c39526b7SPramod Gunjikar struct ib_uverbs_post_recv_resp { 655*c39526b7SPramod Gunjikar uint32_t bad_wr; 656*c39526b7SPramod Gunjikar }; 657*c39526b7SPramod Gunjikar 658*c39526b7SPramod Gunjikar struct ib_uverbs_post_srq_recv { 659*c39526b7SPramod Gunjikar uint64_t response; 660*c39526b7SPramod Gunjikar uint32_t srq_handle; 661*c39526b7SPramod Gunjikar uint32_t wr_count; 662*c39526b7SPramod Gunjikar uint32_t sge_count; 663*c39526b7SPramod Gunjikar uint32_t wqe_size; 664*c39526b7SPramod Gunjikar struct ib_uverbs_recv_wr recv[]; 665*c39526b7SPramod Gunjikar }; 666*c39526b7SPramod Gunjikar 667*c39526b7SPramod Gunjikar struct ib_uverbs_post_srq_recv_resp { 668*c39526b7SPramod Gunjikar uint32_t bad_wr; 669*c39526b7SPramod Gunjikar }; 670*c39526b7SPramod Gunjikar 671*c39526b7SPramod Gunjikar struct ib_uverbs_create_ah { 672*c39526b7SPramod Gunjikar uint64_t response; 673*c39526b7SPramod Gunjikar uint64_t user_handle; 674*c39526b7SPramod Gunjikar uint32_t pd_handle; 675*c39526b7SPramod Gunjikar uint32_t reserved; 676*c39526b7SPramod Gunjikar struct ib_uverbs_ah_attr attr; 677*c39526b7SPramod Gunjikar }; 678*c39526b7SPramod Gunjikar 679*c39526b7SPramod Gunjikar struct ib_uverbs_create_ah_resp { 680*c39526b7SPramod Gunjikar uint32_t ah_handle; 681*c39526b7SPramod Gunjikar }; 682*c39526b7SPramod Gunjikar 683*c39526b7SPramod Gunjikar struct ib_uverbs_destroy_ah { 684*c39526b7SPramod Gunjikar uint32_t ah_handle; 685*c39526b7SPramod Gunjikar }; 686*c39526b7SPramod Gunjikar 687*c39526b7SPramod Gunjikar struct ib_uverbs_attach_mcast { 688*c39526b7SPramod Gunjikar uint8_t gid[16]; 689*c39526b7SPramod Gunjikar uint32_t qp_handle; 690*c39526b7SPramod Gunjikar uint16_t mlid; 691*c39526b7SPramod Gunjikar uint16_t reserved; 692*c39526b7SPramod Gunjikar uint64_t driver_data[]; 693*c39526b7SPramod Gunjikar }; 694*c39526b7SPramod Gunjikar 695*c39526b7SPramod Gunjikar struct ib_uverbs_detach_mcast { 696*c39526b7SPramod Gunjikar uint8_t gid[16]; 697*c39526b7SPramod Gunjikar uint32_t qp_handle; 698*c39526b7SPramod Gunjikar uint16_t mlid; 699*c39526b7SPramod Gunjikar uint16_t reserved; 700*c39526b7SPramod Gunjikar uint64_t driver_data[]; 701*c39526b7SPramod Gunjikar }; 702*c39526b7SPramod Gunjikar 703*c39526b7SPramod Gunjikar struct ib_uverbs_create_srq { 704*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 705*c39526b7SPramod Gunjikar uint64_t user_handle; 706*c39526b7SPramod Gunjikar uint32_t pd_handle; 707*c39526b7SPramod Gunjikar uint32_t max_wr; 708*c39526b7SPramod Gunjikar uint32_t max_sge; 709*c39526b7SPramod Gunjikar uint32_t srq_limit; 710*c39526b7SPramod Gunjikar uint64_t driver_data[]; 711*c39526b7SPramod Gunjikar }; 712*c39526b7SPramod Gunjikar 713*c39526b7SPramod Gunjikar /* 714*c39526b7SPramod Gunjikar * SRQ responses pass opaque data to userspace drivers, we choose a value 715*c39526b7SPramod Gunjikar * larger than what any HCA requires. 716*c39526b7SPramod Gunjikar */ 717*c39526b7SPramod Gunjikar #define SOL_UVERBS_SRQ_DATA_OUT_SIZE 24 718*c39526b7SPramod Gunjikar typedef uint64_t uverbs_srq_drv_out_data_t[SOL_UVERBS_SRQ_DATA_OUT_SIZE]; 719*c39526b7SPramod Gunjikar 720*c39526b7SPramod Gunjikar struct ib_uverbs_create_srq_resp { 721*c39526b7SPramod Gunjikar uint32_t srq_handle; 722*c39526b7SPramod Gunjikar uint32_t max_wr; 723*c39526b7SPramod Gunjikar uint32_t max_sge; 724*c39526b7SPramod Gunjikar uint32_t reserved; 725*c39526b7SPramod Gunjikar uverbs_srq_drv_out_data_t drv_out; 726*c39526b7SPramod Gunjikar }; 727*c39526b7SPramod Gunjikar 728*c39526b7SPramod Gunjikar struct ib_uverbs_modify_srq { 729*c39526b7SPramod Gunjikar uint32_t srq_handle; 730*c39526b7SPramod Gunjikar uint32_t attr_mask; 731*c39526b7SPramod Gunjikar uint32_t max_wr; 732*c39526b7SPramod Gunjikar uint32_t srq_limit; 733*c39526b7SPramod Gunjikar uint64_t driver_data[]; 734*c39526b7SPramod Gunjikar }; 735*c39526b7SPramod Gunjikar 736*c39526b7SPramod Gunjikar struct ib_uverbs_query_srq { 737*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 738*c39526b7SPramod Gunjikar uint32_t srq_handle; 739*c39526b7SPramod Gunjikar uint32_t reserved; 740*c39526b7SPramod Gunjikar uint64_t driver_data[]; 741*c39526b7SPramod Gunjikar }; 742*c39526b7SPramod Gunjikar 743*c39526b7SPramod Gunjikar struct ib_uverbs_query_srq_resp { 744*c39526b7SPramod Gunjikar uint32_t max_wr; 745*c39526b7SPramod Gunjikar uint32_t max_sge; 746*c39526b7SPramod Gunjikar uint32_t srq_limit; 747*c39526b7SPramod Gunjikar uint32_t reserved; 748*c39526b7SPramod Gunjikar }; 749*c39526b7SPramod Gunjikar 750*c39526b7SPramod Gunjikar struct ib_uverbs_destroy_srq { 751*c39526b7SPramod Gunjikar ofv_resp_addr_t response; 752*c39526b7SPramod Gunjikar uint32_t srq_handle; 753*c39526b7SPramod Gunjikar uint32_t reserved; 754*c39526b7SPramod Gunjikar }; 755*c39526b7SPramod Gunjikar 756*c39526b7SPramod Gunjikar struct ib_uverbs_destroy_srq_resp { 757*c39526b7SPramod Gunjikar uint32_t events_reported; 758*c39526b7SPramod Gunjikar }; 759*c39526b7SPramod Gunjikar 760*c39526b7SPramod Gunjikar #ifdef __cplusplus 761*c39526b7SPramod Gunjikar } 762*c39526b7SPramod Gunjikar #endif 763*c39526b7SPramod Gunjikar #endif /* _SYS_IB_CLIENTS_OF_RDMA_IB_USER_VERBS_H */ 764