1219820Sjeff/* 2219820Sjeff * Copyright (c) 2005 Topspin Communications. All rights reserved. 3219820Sjeff * Copyright (c) 2005, 2006 Cisco Systems. All rights reserved. 4219820Sjeff * Copyright (c) 2005 PathScale, Inc. All rights reserved. 5219820Sjeff * 6219820Sjeff * This software is available to you under a choice of one of two 7219820Sjeff * licenses. You may choose to be licensed under the terms of the GNU 8219820Sjeff * General Public License (GPL) Version 2, available from the file 9219820Sjeff * COPYING in the main directory of this source tree, or the 10219820Sjeff * OpenIB.org BSD license below: 11219820Sjeff * 12219820Sjeff * Redistribution and use in source and binary forms, with or 13219820Sjeff * without modification, are permitted provided that the following 14219820Sjeff * conditions are met: 15219820Sjeff * 16219820Sjeff * - Redistributions of source code must retain the above 17219820Sjeff * copyright notice, this list of conditions and the following 18219820Sjeff * disclaimer. 19219820Sjeff * 20219820Sjeff * - Redistributions in binary form must reproduce the above 21219820Sjeff * copyright notice, this list of conditions and the following 22219820Sjeff * disclaimer in the documentation and/or other materials 23219820Sjeff * provided with the distribution. 24219820Sjeff * 25219820Sjeff * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26219820Sjeff * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27219820Sjeff * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28219820Sjeff * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29219820Sjeff * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30219820Sjeff * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31219820Sjeff * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32219820Sjeff * SOFTWARE. 33219820Sjeff */ 34219820Sjeff 35219820Sjeff#ifndef KERN_ABI_H 36219820Sjeff#define KERN_ABI_H 37219820Sjeff 38219820Sjeff#include <infiniband/types.h> 39219820Sjeff 40219820Sjeff/* 41219820Sjeff * This file must be kept in sync with the kernel's version of 42219820Sjeff * drivers/infiniband/include/ib_user_verbs.h 43219820Sjeff */ 44219820Sjeff 45219820Sjeff/* 46219820Sjeff * The minimum and maximum kernel ABI that we can handle. 47219820Sjeff */ 48219820Sjeff#define IB_USER_VERBS_MIN_ABI_VERSION 1 49219820Sjeff#define IB_USER_VERBS_MAX_ABI_VERSION 6 50219820Sjeff 51219820Sjeffenum { 52219820Sjeff IB_USER_VERBS_CMD_GET_CONTEXT, 53219820Sjeff IB_USER_VERBS_CMD_QUERY_DEVICE, 54219820Sjeff IB_USER_VERBS_CMD_QUERY_PORT, 55219820Sjeff IB_USER_VERBS_CMD_ALLOC_PD, 56219820Sjeff IB_USER_VERBS_CMD_DEALLOC_PD, 57219820Sjeff IB_USER_VERBS_CMD_CREATE_AH, 58219820Sjeff IB_USER_VERBS_CMD_MODIFY_AH, 59219820Sjeff IB_USER_VERBS_CMD_QUERY_AH, 60219820Sjeff IB_USER_VERBS_CMD_DESTROY_AH, 61219820Sjeff IB_USER_VERBS_CMD_REG_MR, 62219820Sjeff IB_USER_VERBS_CMD_REG_SMR, 63219820Sjeff IB_USER_VERBS_CMD_REREG_MR, 64219820Sjeff IB_USER_VERBS_CMD_QUERY_MR, 65219820Sjeff IB_USER_VERBS_CMD_DEREG_MR, 66219820Sjeff IB_USER_VERBS_CMD_ALLOC_MW, 67219820Sjeff IB_USER_VERBS_CMD_BIND_MW, 68219820Sjeff IB_USER_VERBS_CMD_DEALLOC_MW, 69219820Sjeff IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL, 70219820Sjeff IB_USER_VERBS_CMD_CREATE_CQ, 71219820Sjeff IB_USER_VERBS_CMD_RESIZE_CQ, 72219820Sjeff IB_USER_VERBS_CMD_DESTROY_CQ, 73219820Sjeff IB_USER_VERBS_CMD_POLL_CQ, 74219820Sjeff IB_USER_VERBS_CMD_PEEK_CQ, 75219820Sjeff IB_USER_VERBS_CMD_REQ_NOTIFY_CQ, 76219820Sjeff IB_USER_VERBS_CMD_CREATE_QP, 77219820Sjeff IB_USER_VERBS_CMD_QUERY_QP, 78219820Sjeff IB_USER_VERBS_CMD_MODIFY_QP, 79219820Sjeff IB_USER_VERBS_CMD_DESTROY_QP, 80219820Sjeff IB_USER_VERBS_CMD_POST_SEND, 81219820Sjeff IB_USER_VERBS_CMD_POST_RECV, 82219820Sjeff IB_USER_VERBS_CMD_ATTACH_MCAST, 83219820Sjeff IB_USER_VERBS_CMD_DETACH_MCAST, 84219820Sjeff IB_USER_VERBS_CMD_CREATE_SRQ, 85219820Sjeff IB_USER_VERBS_CMD_MODIFY_SRQ, 86219820Sjeff IB_USER_VERBS_CMD_QUERY_SRQ, 87219820Sjeff IB_USER_VERBS_CMD_DESTROY_SRQ, 88219820Sjeff IB_USER_VERBS_CMD_POST_SRQ_RECV, 89219820Sjeff IB_USER_VERBS_CMD_CREATE_XRC_SRQ, 90219820Sjeff IB_USER_VERBS_CMD_OPEN_XRC_DOMAIN, 91219820Sjeff IB_USER_VERBS_CMD_CLOSE_XRC_DOMAIN, 92219820Sjeff IB_USER_VERBS_CMD_CREATE_XRC_RCV_QP, 93219820Sjeff IB_USER_VERBS_CMD_MODIFY_XRC_RCV_QP, 94219820Sjeff IB_USER_VERBS_CMD_QUERY_XRC_RCV_QP, 95219820Sjeff IB_USER_VERBS_CMD_REG_XRC_RCV_QP, 96219820Sjeff IB_USER_VERBS_CMD_UNREG_XRC_RCV_QP, 97219820Sjeff}; 98219820Sjeff 99219820Sjeff/* 100219820Sjeff * Make sure that all structs defined in this file remain laid out so 101219820Sjeff * that they pack the same way on 32-bit and 64-bit architectures (to 102219820Sjeff * avoid incompatibility between 32-bit userspace and 64-bit kernels). 103219820Sjeff * Specifically: 104219820Sjeff * - Do not use pointer types -- pass pointers in __u64 instead. 105219820Sjeff * - Make sure that any structure larger than 4 bytes is padded to a 106219820Sjeff * multiple of 8 bytes. Otherwise the structure size will be 107219820Sjeff * different between 32-bit and 64-bit architectures. 108219820Sjeff */ 109219820Sjeff 110219820Sjeffstruct ibv_kern_async_event { 111219820Sjeff __u64 element; 112219820Sjeff __u32 event_type; 113219820Sjeff __u32 reserved; 114219820Sjeff}; 115219820Sjeff 116219820Sjeffstruct ibv_comp_event { 117219820Sjeff __u64 cq_handle; 118219820Sjeff}; 119219820Sjeff 120219820Sjeff/* 121219820Sjeff * All commands from userspace should start with a __u32 command field 122219820Sjeff * followed by __u16 in_words and out_words fields (which give the 123219820Sjeff * length of the command block and response buffer if any in 32-bit 124219820Sjeff * words). The kernel driver will read these fields first and read 125219820Sjeff * the rest of the command struct based on these value. 126219820Sjeff */ 127219820Sjeff 128219820Sjeffstruct ibv_query_params { 129219820Sjeff __u32 command; 130219820Sjeff __u16 in_words; 131219820Sjeff __u16 out_words; 132219820Sjeff __u64 response; 133219820Sjeff}; 134219820Sjeff 135219820Sjeffstruct ibv_query_params_resp { 136219820Sjeff __u32 num_cq_events; 137219820Sjeff}; 138219820Sjeff 139219820Sjeffstruct ibv_get_context { 140219820Sjeff __u32 command; 141219820Sjeff __u16 in_words; 142219820Sjeff __u16 out_words; 143219820Sjeff __u64 response; 144219820Sjeff __u64 driver_data[0]; 145219820Sjeff}; 146219820Sjeff 147219820Sjeffstruct ibv_get_context_resp { 148219820Sjeff __u32 async_fd; 149219820Sjeff __u32 num_comp_vectors; 150219820Sjeff}; 151219820Sjeff 152219820Sjeffstruct ibv_query_device { 153219820Sjeff __u32 command; 154219820Sjeff __u16 in_words; 155219820Sjeff __u16 out_words; 156219820Sjeff __u64 response; 157219820Sjeff __u64 driver_data[0]; 158219820Sjeff}; 159219820Sjeff 160219820Sjeffstruct ibv_query_device_resp { 161219820Sjeff __u64 fw_ver; 162219820Sjeff __u64 node_guid; 163219820Sjeff __u64 sys_image_guid; 164219820Sjeff __u64 max_mr_size; 165219820Sjeff __u64 page_size_cap; 166219820Sjeff __u32 vendor_id; 167219820Sjeff __u32 vendor_part_id; 168219820Sjeff __u32 hw_ver; 169219820Sjeff __u32 max_qp; 170219820Sjeff __u32 max_qp_wr; 171219820Sjeff __u32 device_cap_flags; 172219820Sjeff __u32 max_sge; 173219820Sjeff __u32 max_sge_rd; 174219820Sjeff __u32 max_cq; 175219820Sjeff __u32 max_cqe; 176219820Sjeff __u32 max_mr; 177219820Sjeff __u32 max_pd; 178219820Sjeff __u32 max_qp_rd_atom; 179219820Sjeff __u32 max_ee_rd_atom; 180219820Sjeff __u32 max_res_rd_atom; 181219820Sjeff __u32 max_qp_init_rd_atom; 182219820Sjeff __u32 max_ee_init_rd_atom; 183219820Sjeff __u32 atomic_cap; 184219820Sjeff __u32 max_ee; 185219820Sjeff __u32 max_rdd; 186219820Sjeff __u32 max_mw; 187219820Sjeff __u32 max_raw_ipv6_qp; 188219820Sjeff __u32 max_raw_ethy_qp; 189219820Sjeff __u32 max_mcast_grp; 190219820Sjeff __u32 max_mcast_qp_attach; 191219820Sjeff __u32 max_total_mcast_qp_attach; 192219820Sjeff __u32 max_ah; 193219820Sjeff __u32 max_fmr; 194219820Sjeff __u32 max_map_per_fmr; 195219820Sjeff __u32 max_srq; 196219820Sjeff __u32 max_srq_wr; 197219820Sjeff __u32 max_srq_sge; 198219820Sjeff __u16 max_pkeys; 199219820Sjeff __u8 local_ca_ack_delay; 200219820Sjeff __u8 phys_port_cnt; 201219820Sjeff __u8 reserved[4]; 202219820Sjeff}; 203219820Sjeff 204219820Sjeffstruct ibv_query_port { 205219820Sjeff __u32 command; 206219820Sjeff __u16 in_words; 207219820Sjeff __u16 out_words; 208219820Sjeff __u64 response; 209219820Sjeff __u8 port_num; 210219820Sjeff __u8 reserved[7]; 211219820Sjeff __u64 driver_data[0]; 212219820Sjeff}; 213219820Sjeff 214219820Sjeffstruct ibv_query_port_resp { 215219820Sjeff __u32 port_cap_flags; 216219820Sjeff __u32 max_msg_sz; 217219820Sjeff __u32 bad_pkey_cntr; 218219820Sjeff __u32 qkey_viol_cntr; 219219820Sjeff __u32 gid_tbl_len; 220219820Sjeff __u16 pkey_tbl_len; 221219820Sjeff __u16 lid; 222219820Sjeff __u16 sm_lid; 223219820Sjeff __u8 state; 224219820Sjeff __u8 max_mtu; 225219820Sjeff __u8 active_mtu; 226219820Sjeff __u8 lmc; 227219820Sjeff __u8 max_vl_num; 228219820Sjeff __u8 sm_sl; 229219820Sjeff __u8 subnet_timeout; 230219820Sjeff __u8 init_type_reply; 231219820Sjeff __u8 active_width; 232219820Sjeff __u8 active_speed; 233219820Sjeff __u8 phys_state; 234219820Sjeff __u8 link_layer; 235219820Sjeff __u8 reserved[2]; 236219820Sjeff}; 237219820Sjeff 238219820Sjeffstruct ibv_alloc_pd { 239219820Sjeff __u32 command; 240219820Sjeff __u16 in_words; 241219820Sjeff __u16 out_words; 242219820Sjeff __u64 response; 243219820Sjeff __u64 driver_data[0]; 244219820Sjeff}; 245219820Sjeff 246219820Sjeffstruct ibv_alloc_pd_resp { 247219820Sjeff __u32 pd_handle; 248219820Sjeff}; 249219820Sjeff 250219820Sjeffstruct ibv_dealloc_pd { 251219820Sjeff __u32 command; 252219820Sjeff __u16 in_words; 253219820Sjeff __u16 out_words; 254219820Sjeff __u32 pd_handle; 255219820Sjeff}; 256219820Sjeff 257219820Sjeffstruct ibv_reg_mr { 258219820Sjeff __u32 command; 259219820Sjeff __u16 in_words; 260219820Sjeff __u16 out_words; 261219820Sjeff __u64 response; 262219820Sjeff __u64 start; 263219820Sjeff __u64 length; 264219820Sjeff __u64 hca_va; 265219820Sjeff __u32 pd_handle; 266219820Sjeff __u32 access_flags; 267219820Sjeff __u64 driver_data[0]; 268219820Sjeff}; 269219820Sjeff 270219820Sjeffstruct ibv_reg_mr_resp { 271219820Sjeff __u32 mr_handle; 272219820Sjeff __u32 lkey; 273219820Sjeff __u32 rkey; 274219820Sjeff}; 275219820Sjeff 276219820Sjeffstruct ibv_dereg_mr { 277219820Sjeff __u32 command; 278219820Sjeff __u16 in_words; 279219820Sjeff __u16 out_words; 280219820Sjeff __u32 mr_handle; 281219820Sjeff}; 282219820Sjeff 283219820Sjeffstruct ibv_create_comp_channel { 284219820Sjeff __u32 command; 285219820Sjeff __u16 in_words; 286219820Sjeff __u16 out_words; 287219820Sjeff __u64 response; 288219820Sjeff}; 289219820Sjeff 290219820Sjeffstruct ibv_create_comp_channel_resp { 291219820Sjeff __u32 fd; 292219820Sjeff}; 293219820Sjeff 294219820Sjeffstruct ibv_create_cq { 295219820Sjeff __u32 command; 296219820Sjeff __u16 in_words; 297219820Sjeff __u16 out_words; 298219820Sjeff __u64 response; 299219820Sjeff __u64 user_handle; 300219820Sjeff __u32 cqe; 301219820Sjeff __u32 comp_vector; 302219820Sjeff __s32 comp_channel; 303219820Sjeff __u32 reserved; 304219820Sjeff __u64 driver_data[0]; 305219820Sjeff}; 306219820Sjeff 307219820Sjeffstruct ibv_create_cq_resp { 308219820Sjeff __u32 cq_handle; 309219820Sjeff __u32 cqe; 310219820Sjeff}; 311219820Sjeff 312219820Sjeffstruct ibv_kern_wc { 313219820Sjeff __u64 wr_id; 314219820Sjeff __u32 status; 315219820Sjeff __u32 opcode; 316219820Sjeff __u32 vendor_err; 317219820Sjeff __u32 byte_len; 318219820Sjeff __u32 imm_data; 319219820Sjeff __u32 qp_num; 320219820Sjeff __u32 src_qp; 321219820Sjeff __u32 wc_flags; 322219820Sjeff __u16 pkey_index; 323219820Sjeff __u16 slid; 324219820Sjeff __u8 sl; 325219820Sjeff __u8 dlid_path_bits; 326219820Sjeff __u8 port_num; 327219820Sjeff __u8 reserved; 328219820Sjeff}; 329219820Sjeff 330219820Sjeffstruct ibv_poll_cq { 331219820Sjeff __u32 command; 332219820Sjeff __u16 in_words; 333219820Sjeff __u16 out_words; 334219820Sjeff __u64 response; 335219820Sjeff __u32 cq_handle; 336219820Sjeff __u32 ne; 337219820Sjeff}; 338219820Sjeff 339219820Sjeffstruct ibv_poll_cq_resp { 340219820Sjeff __u32 count; 341219820Sjeff __u32 reserved; 342219820Sjeff struct ibv_kern_wc wc[0]; 343219820Sjeff}; 344219820Sjeff 345219820Sjeffstruct ibv_req_notify_cq { 346219820Sjeff __u32 command; 347219820Sjeff __u16 in_words; 348219820Sjeff __u16 out_words; 349219820Sjeff __u32 cq_handle; 350219820Sjeff __u32 solicited; 351219820Sjeff}; 352219820Sjeff 353219820Sjeffstruct ibv_resize_cq { 354219820Sjeff __u32 command; 355219820Sjeff __u16 in_words; 356219820Sjeff __u16 out_words; 357219820Sjeff __u64 response; 358219820Sjeff __u32 cq_handle; 359219820Sjeff __u32 cqe; 360219820Sjeff __u64 driver_data[0]; 361219820Sjeff}; 362219820Sjeff 363219820Sjeffstruct ibv_resize_cq_resp { 364219820Sjeff __u32 cqe; 365219820Sjeff __u32 reserved; 366219820Sjeff __u64 driver_data[0]; 367219820Sjeff}; 368219820Sjeff 369219820Sjeffstruct ibv_destroy_cq { 370219820Sjeff __u32 command; 371219820Sjeff __u16 in_words; 372219820Sjeff __u16 out_words; 373219820Sjeff __u64 response; 374219820Sjeff __u32 cq_handle; 375219820Sjeff __u32 reserved; 376219820Sjeff}; 377219820Sjeff 378219820Sjeffstruct ibv_destroy_cq_resp { 379219820Sjeff __u32 comp_events_reported; 380219820Sjeff __u32 async_events_reported; 381219820Sjeff}; 382219820Sjeff 383219820Sjeffstruct ibv_kern_global_route { 384219820Sjeff __u8 dgid[16]; 385219820Sjeff __u32 flow_label; 386219820Sjeff __u8 sgid_index; 387219820Sjeff __u8 hop_limit; 388219820Sjeff __u8 traffic_class; 389219820Sjeff __u8 reserved; 390219820Sjeff}; 391219820Sjeff 392219820Sjeffstruct ibv_kern_ah_attr { 393219820Sjeff struct ibv_kern_global_route grh; 394219820Sjeff __u16 dlid; 395219820Sjeff __u8 sl; 396219820Sjeff __u8 src_path_bits; 397219820Sjeff __u8 static_rate; 398219820Sjeff __u8 is_global; 399219820Sjeff __u8 port_num; 400219820Sjeff __u8 reserved; 401219820Sjeff}; 402219820Sjeff 403219820Sjeffstruct ibv_kern_qp_attr { 404219820Sjeff __u32 qp_attr_mask; 405219820Sjeff __u32 qp_state; 406219820Sjeff __u32 cur_qp_state; 407219820Sjeff __u32 path_mtu; 408219820Sjeff __u32 path_mig_state; 409219820Sjeff __u32 qkey; 410219820Sjeff __u32 rq_psn; 411219820Sjeff __u32 sq_psn; 412219820Sjeff __u32 dest_qp_num; 413219820Sjeff __u32 qp_access_flags; 414219820Sjeff 415219820Sjeff struct ibv_kern_ah_attr ah_attr; 416219820Sjeff struct ibv_kern_ah_attr alt_ah_attr; 417219820Sjeff 418219820Sjeff /* ib_qp_cap */ 419219820Sjeff __u32 max_send_wr; 420219820Sjeff __u32 max_recv_wr; 421219820Sjeff __u32 max_send_sge; 422219820Sjeff __u32 max_recv_sge; 423219820Sjeff __u32 max_inline_data; 424219820Sjeff 425219820Sjeff __u16 pkey_index; 426219820Sjeff __u16 alt_pkey_index; 427219820Sjeff __u8 en_sqd_async_notify; 428219820Sjeff __u8 sq_draining; 429219820Sjeff __u8 max_rd_atomic; 430219820Sjeff __u8 max_dest_rd_atomic; 431219820Sjeff __u8 min_rnr_timer; 432219820Sjeff __u8 port_num; 433219820Sjeff __u8 timeout; 434219820Sjeff __u8 retry_cnt; 435219820Sjeff __u8 rnr_retry; 436219820Sjeff __u8 alt_port_num; 437219820Sjeff __u8 alt_timeout; 438219820Sjeff __u8 reserved[5]; 439219820Sjeff}; 440219820Sjeff 441219820Sjeffstruct ibv_create_qp { 442219820Sjeff __u32 command; 443219820Sjeff __u16 in_words; 444219820Sjeff __u16 out_words; 445219820Sjeff __u64 response; 446219820Sjeff __u64 user_handle; 447219820Sjeff __u32 pd_handle; 448219820Sjeff __u32 send_cq_handle; 449219820Sjeff __u32 recv_cq_handle; 450219820Sjeff __u32 srq_handle; 451219820Sjeff __u32 max_send_wr; 452219820Sjeff __u32 max_recv_wr; 453219820Sjeff __u32 max_send_sge; 454219820Sjeff __u32 max_recv_sge; 455219820Sjeff __u32 max_inline_data; 456219820Sjeff __u8 sq_sig_all; 457219820Sjeff __u8 qp_type; 458219820Sjeff __u8 is_srq; 459219820Sjeff __u8 reserved; 460219820Sjeff __u64 driver_data[0]; 461219820Sjeff}; 462219820Sjeff 463219820Sjeffstruct ibv_create_qp_resp { 464219820Sjeff __u32 qp_handle; 465219820Sjeff __u32 qpn; 466219820Sjeff __u32 max_send_wr; 467219820Sjeff __u32 max_recv_wr; 468219820Sjeff __u32 max_send_sge; 469219820Sjeff __u32 max_recv_sge; 470219820Sjeff __u32 max_inline_data; 471219820Sjeff __u32 reserved; 472219820Sjeff}; 473219820Sjeff 474219820Sjeffstruct ibv_qp_dest { 475219820Sjeff __u8 dgid[16]; 476219820Sjeff __u32 flow_label; 477219820Sjeff __u16 dlid; 478219820Sjeff __u16 reserved; 479219820Sjeff __u8 sgid_index; 480219820Sjeff __u8 hop_limit; 481219820Sjeff __u8 traffic_class; 482219820Sjeff __u8 sl; 483219820Sjeff __u8 src_path_bits; 484219820Sjeff __u8 static_rate; 485219820Sjeff __u8 is_global; 486219820Sjeff __u8 port_num; 487219820Sjeff}; 488219820Sjeff 489219820Sjeffstruct ibv_query_qp { 490219820Sjeff __u32 command; 491219820Sjeff __u16 in_words; 492219820Sjeff __u16 out_words; 493219820Sjeff __u64 response; 494219820Sjeff __u32 qp_handle; 495219820Sjeff __u32 attr_mask; 496219820Sjeff __u64 driver_data[0]; 497219820Sjeff}; 498219820Sjeff 499219820Sjeffstruct ibv_query_qp_resp { 500219820Sjeff struct ibv_qp_dest dest; 501219820Sjeff struct ibv_qp_dest alt_dest; 502219820Sjeff __u32 max_send_wr; 503219820Sjeff __u32 max_recv_wr; 504219820Sjeff __u32 max_send_sge; 505219820Sjeff __u32 max_recv_sge; 506219820Sjeff __u32 max_inline_data; 507219820Sjeff __u32 qkey; 508219820Sjeff __u32 rq_psn; 509219820Sjeff __u32 sq_psn; 510219820Sjeff __u32 dest_qp_num; 511219820Sjeff __u32 qp_access_flags; 512219820Sjeff __u16 pkey_index; 513219820Sjeff __u16 alt_pkey_index; 514219820Sjeff __u8 qp_state; 515219820Sjeff __u8 cur_qp_state; 516219820Sjeff __u8 path_mtu; 517219820Sjeff __u8 path_mig_state; 518219820Sjeff __u8 sq_draining; 519219820Sjeff __u8 max_rd_atomic; 520219820Sjeff __u8 max_dest_rd_atomic; 521219820Sjeff __u8 min_rnr_timer; 522219820Sjeff __u8 port_num; 523219820Sjeff __u8 timeout; 524219820Sjeff __u8 retry_cnt; 525219820Sjeff __u8 rnr_retry; 526219820Sjeff __u8 alt_port_num; 527219820Sjeff __u8 alt_timeout; 528219820Sjeff __u8 sq_sig_all; 529219820Sjeff __u8 reserved[5]; 530219820Sjeff __u64 driver_data[0]; 531219820Sjeff}; 532219820Sjeff 533219820Sjeffstruct ibv_modify_qp { 534219820Sjeff __u32 command; 535219820Sjeff __u16 in_words; 536219820Sjeff __u16 out_words; 537219820Sjeff struct ibv_qp_dest dest; 538219820Sjeff struct ibv_qp_dest alt_dest; 539219820Sjeff __u32 qp_handle; 540219820Sjeff __u32 attr_mask; 541219820Sjeff __u32 qkey; 542219820Sjeff __u32 rq_psn; 543219820Sjeff __u32 sq_psn; 544219820Sjeff __u32 dest_qp_num; 545219820Sjeff __u32 qp_access_flags; 546219820Sjeff __u16 pkey_index; 547219820Sjeff __u16 alt_pkey_index; 548219820Sjeff __u8 qp_state; 549219820Sjeff __u8 cur_qp_state; 550219820Sjeff __u8 path_mtu; 551219820Sjeff __u8 path_mig_state; 552219820Sjeff __u8 en_sqd_async_notify; 553219820Sjeff __u8 max_rd_atomic; 554219820Sjeff __u8 max_dest_rd_atomic; 555219820Sjeff __u8 min_rnr_timer; 556219820Sjeff __u8 port_num; 557219820Sjeff __u8 timeout; 558219820Sjeff __u8 retry_cnt; 559219820Sjeff __u8 rnr_retry; 560219820Sjeff __u8 alt_port_num; 561219820Sjeff __u8 alt_timeout; 562219820Sjeff __u8 reserved[2]; 563219820Sjeff __u64 driver_data[0]; 564219820Sjeff}; 565219820Sjeff 566219820Sjeffstruct ibv_destroy_qp { 567219820Sjeff __u32 command; 568219820Sjeff __u16 in_words; 569219820Sjeff __u16 out_words; 570219820Sjeff __u64 response; 571219820Sjeff __u32 qp_handle; 572219820Sjeff __u32 reserved; 573219820Sjeff}; 574219820Sjeff 575219820Sjeffstruct ibv_destroy_qp_resp { 576219820Sjeff __u32 events_reported; 577219820Sjeff}; 578219820Sjeff 579219820Sjeffstruct ibv_create_xrc_rcv_qp { 580219820Sjeff __u32 command; 581219820Sjeff __u16 in_words; 582219820Sjeff __u16 out_words; 583219820Sjeff __u64 response; 584219820Sjeff __u64 user_handle; 585219820Sjeff __u32 xrc_domain_handle; 586219820Sjeff __u32 max_send_wr; 587219820Sjeff __u32 max_recv_wr; 588219820Sjeff __u32 max_send_sge; 589219820Sjeff __u32 max_recv_sge; 590219820Sjeff __u32 max_inline_data; 591219820Sjeff __u8 sq_sig_all; 592219820Sjeff __u8 qp_type; 593219820Sjeff __u8 reserved[6]; 594219820Sjeff __u64 driver_data[0]; 595219820Sjeff}; 596219820Sjeff 597219820Sjeffstruct ibv_create_xrc_rcv_qp_resp { 598219820Sjeff __u32 qpn; 599219820Sjeff __u32 reserved; 600219820Sjeff}; 601219820Sjeff 602219820Sjeffstruct ibv_modify_xrc_rcv_qp { 603219820Sjeff __u32 command; 604219820Sjeff __u16 in_words; 605219820Sjeff __u16 out_words; 606219820Sjeff __u32 xrc_domain_handle; 607219820Sjeff __u32 qp_num; 608219820Sjeff struct ibv_qp_dest dest; 609219820Sjeff struct ibv_qp_dest alt_dest; 610219820Sjeff __u32 attr_mask; 611219820Sjeff __u32 qkey; 612219820Sjeff __u32 rq_psn; 613219820Sjeff __u32 sq_psn; 614219820Sjeff __u32 dest_qp_num; 615219820Sjeff __u32 qp_access_flags; 616219820Sjeff __u16 pkey_index; 617219820Sjeff __u16 alt_pkey_index; 618219820Sjeff __u8 qp_state; 619219820Sjeff __u8 cur_qp_state; 620219820Sjeff __u8 path_mtu; 621219820Sjeff __u8 path_mig_state; 622219820Sjeff __u8 en_sqd_async_notify; 623219820Sjeff __u8 max_rd_atomic; 624219820Sjeff __u8 max_dest_rd_atomic; 625219820Sjeff __u8 min_rnr_timer; 626219820Sjeff __u8 port_num; 627219820Sjeff __u8 timeout; 628219820Sjeff __u8 retry_cnt; 629219820Sjeff __u8 rnr_retry; 630219820Sjeff __u8 alt_port_num; 631219820Sjeff __u8 alt_timeout; 632219820Sjeff __u8 reserved[6]; 633219820Sjeff __u64 driver_data[0]; 634219820Sjeff}; 635219820Sjeff 636219820Sjeffstruct ibv_query_xrc_rcv_qp { 637219820Sjeff __u32 command; 638219820Sjeff __u16 in_words; 639219820Sjeff __u16 out_words; 640219820Sjeff __u64 response; 641219820Sjeff __u32 xrc_domain_handle; 642219820Sjeff __u32 qp_num; 643219820Sjeff __u32 attr_mask; 644219820Sjeff __u32 reserved; 645219820Sjeff __u64 driver_data[0]; 646219820Sjeff}; 647219820Sjeff 648219820Sjeffstruct ibv_reg_xrc_rcv_qp { 649219820Sjeff __u32 command; 650219820Sjeff __u16 in_words; 651219820Sjeff __u16 out_words; 652219820Sjeff __u32 xrc_domain_handle; 653219820Sjeff __u32 qp_num; 654219820Sjeff __u64 driver_data[0]; 655219820Sjeff}; 656219820Sjeff 657219820Sjeffstruct ibv_unreg_xrc_rcv_qp { 658219820Sjeff __u32 command; 659219820Sjeff __u16 in_words; 660219820Sjeff __u16 out_words; 661219820Sjeff __u32 xrc_domain_handle; 662219820Sjeff __u32 qp_num; 663219820Sjeff __u64 driver_data[0]; 664219820Sjeff}; 665219820Sjeff 666219820Sjeffstruct ibv_kern_send_wr { 667219820Sjeff __u64 wr_id; 668219820Sjeff __u32 num_sge; 669219820Sjeff __u32 opcode; 670219820Sjeff __u32 send_flags; 671219820Sjeff __u32 imm_data; 672219820Sjeff union { 673219820Sjeff struct { 674219820Sjeff __u64 remote_addr; 675219820Sjeff __u32 rkey; 676219820Sjeff __u32 reserved; 677219820Sjeff } rdma; 678219820Sjeff struct { 679219820Sjeff __u64 remote_addr; 680219820Sjeff __u64 compare_add; 681219820Sjeff __u64 swap; 682219820Sjeff __u32 rkey; 683219820Sjeff __u32 reserved; 684219820Sjeff } atomic; 685219820Sjeff struct { 686219820Sjeff __u32 ah; 687219820Sjeff __u32 remote_qpn; 688219820Sjeff __u32 remote_qkey; 689219820Sjeff __u32 reserved; 690219820Sjeff } ud; 691219820Sjeff } wr; 692219820Sjeff}; 693219820Sjeff 694219820Sjeffstruct ibv_post_send { 695219820Sjeff __u32 command; 696219820Sjeff __u16 in_words; 697219820Sjeff __u16 out_words; 698219820Sjeff __u64 response; 699219820Sjeff __u32 qp_handle; 700219820Sjeff __u32 wr_count; 701219820Sjeff __u32 sge_count; 702219820Sjeff __u32 wqe_size; 703219820Sjeff struct ibv_kern_send_wr send_wr[0]; 704219820Sjeff}; 705219820Sjeff 706219820Sjeffstruct ibv_post_send_resp { 707219820Sjeff __u32 bad_wr; 708219820Sjeff}; 709219820Sjeff 710219820Sjeffstruct ibv_kern_recv_wr { 711219820Sjeff __u64 wr_id; 712219820Sjeff __u32 num_sge; 713219820Sjeff __u32 reserved; 714219820Sjeff}; 715219820Sjeff 716219820Sjeffstruct ibv_post_recv { 717219820Sjeff __u32 command; 718219820Sjeff __u16 in_words; 719219820Sjeff __u16 out_words; 720219820Sjeff __u64 response; 721219820Sjeff __u32 qp_handle; 722219820Sjeff __u32 wr_count; 723219820Sjeff __u32 sge_count; 724219820Sjeff __u32 wqe_size; 725219820Sjeff struct ibv_kern_recv_wr recv_wr[0]; 726219820Sjeff}; 727219820Sjeff 728219820Sjeffstruct ibv_post_recv_resp { 729219820Sjeff __u32 bad_wr; 730219820Sjeff}; 731219820Sjeff 732219820Sjeffstruct ibv_post_srq_recv { 733219820Sjeff __u32 command; 734219820Sjeff __u16 in_words; 735219820Sjeff __u16 out_words; 736219820Sjeff __u64 response; 737219820Sjeff __u32 srq_handle; 738219820Sjeff __u32 wr_count; 739219820Sjeff __u32 sge_count; 740219820Sjeff __u32 wqe_size; 741219820Sjeff struct ibv_kern_recv_wr recv_wr[0]; 742219820Sjeff}; 743219820Sjeff 744219820Sjeffstruct ibv_post_srq_recv_resp { 745219820Sjeff __u32 bad_wr; 746219820Sjeff}; 747219820Sjeff 748219820Sjeffstruct ibv_create_ah { 749219820Sjeff __u32 command; 750219820Sjeff __u16 in_words; 751219820Sjeff __u16 out_words; 752219820Sjeff __u64 response; 753219820Sjeff __u64 user_handle; 754219820Sjeff __u32 pd_handle; 755219820Sjeff __u32 reserved; 756219820Sjeff struct ibv_kern_ah_attr attr; 757219820Sjeff}; 758219820Sjeff 759219820Sjeffstruct ibv_create_ah_resp { 760219820Sjeff __u32 handle; 761219820Sjeff}; 762219820Sjeff 763219820Sjeffstruct ibv_destroy_ah { 764219820Sjeff __u32 command; 765219820Sjeff __u16 in_words; 766219820Sjeff __u16 out_words; 767219820Sjeff __u32 ah_handle; 768219820Sjeff}; 769219820Sjeff 770219820Sjeffstruct ibv_attach_mcast { 771219820Sjeff __u32 command; 772219820Sjeff __u16 in_words; 773219820Sjeff __u16 out_words; 774219820Sjeff __u8 gid[16]; 775219820Sjeff __u32 qp_handle; 776219820Sjeff __u16 mlid; 777219820Sjeff __u16 reserved; 778219820Sjeff __u64 driver_data[0]; 779219820Sjeff}; 780219820Sjeff 781219820Sjeffstruct ibv_detach_mcast { 782219820Sjeff __u32 command; 783219820Sjeff __u16 in_words; 784219820Sjeff __u16 out_words; 785219820Sjeff __u8 gid[16]; 786219820Sjeff __u32 qp_handle; 787219820Sjeff __u16 mlid; 788219820Sjeff __u16 reserved; 789219820Sjeff __u64 driver_data[0]; 790219820Sjeff}; 791219820Sjeff 792219820Sjeffstruct ibv_create_srq { 793219820Sjeff __u32 command; 794219820Sjeff __u16 in_words; 795219820Sjeff __u16 out_words; 796219820Sjeff __u64 response; 797219820Sjeff __u64 user_handle; 798219820Sjeff __u32 pd_handle; 799219820Sjeff __u32 max_wr; 800219820Sjeff __u32 max_sge; 801219820Sjeff __u32 srq_limit; 802219820Sjeff __u64 driver_data[0]; 803219820Sjeff}; 804219820Sjeff 805219820Sjeffstruct ibv_create_xrc_srq { 806219820Sjeff __u32 command; 807219820Sjeff __u16 in_words; 808219820Sjeff __u16 out_words; 809219820Sjeff __u64 response; 810219820Sjeff __u64 user_handle; 811219820Sjeff __u32 pd_handle; 812219820Sjeff __u32 max_wr; 813219820Sjeff __u32 max_sge; 814219820Sjeff __u32 srq_limit; 815219820Sjeff __u32 xrcd_handle; 816219820Sjeff __u32 xrc_cq; 817219820Sjeff __u64 driver_data[0]; 818219820Sjeff}; 819219820Sjeff 820219820Sjeffstruct ibv_create_srq_resp { 821219820Sjeff __u32 srq_handle; 822219820Sjeff __u32 max_wr; 823219820Sjeff __u32 max_sge; 824219820Sjeff __u32 reserved; 825219820Sjeff}; 826219820Sjeff 827219820Sjeffstruct ibv_modify_srq { 828219820Sjeff __u32 command; 829219820Sjeff __u16 in_words; 830219820Sjeff __u16 out_words; 831219820Sjeff __u32 srq_handle; 832219820Sjeff __u32 attr_mask; 833219820Sjeff __u32 max_wr; 834219820Sjeff __u32 srq_limit; 835219820Sjeff __u64 driver_data[0]; 836219820Sjeff}; 837219820Sjeff 838219820Sjeffstruct ibv_query_srq { 839219820Sjeff __u32 command; 840219820Sjeff __u16 in_words; 841219820Sjeff __u16 out_words; 842219820Sjeff __u64 response; 843219820Sjeff __u32 srq_handle; 844219820Sjeff __u32 reserved; 845219820Sjeff __u64 driver_data[0]; 846219820Sjeff}; 847219820Sjeff 848219820Sjeffstruct ibv_query_srq_resp { 849219820Sjeff __u32 max_wr; 850219820Sjeff __u32 max_sge; 851219820Sjeff __u32 srq_limit; 852219820Sjeff __u32 reserved; 853219820Sjeff}; 854219820Sjeff 855219820Sjeffstruct ibv_destroy_srq { 856219820Sjeff __u32 command; 857219820Sjeff __u16 in_words; 858219820Sjeff __u16 out_words; 859219820Sjeff __u64 response; 860219820Sjeff __u32 srq_handle; 861219820Sjeff __u32 reserved; 862219820Sjeff}; 863219820Sjeff 864219820Sjeffstruct ibv_destroy_srq_resp { 865219820Sjeff __u32 events_reported; 866219820Sjeff}; 867219820Sjeff 868219820Sjeffstruct ibv_open_xrc_domain { 869219820Sjeff __u32 command; 870219820Sjeff __u16 in_words; 871219820Sjeff __u16 out_words; 872219820Sjeff __u64 response; 873219820Sjeff __u32 fd; 874219820Sjeff __u32 oflags; 875219820Sjeff __u64 driver_data[0]; 876219820Sjeff}; 877219820Sjeff 878219820Sjeffstruct ibv_open_xrc_domain_resp { 879219820Sjeff __u32 xrcd_handle; 880219820Sjeff}; 881219820Sjeff 882219820Sjeffstruct ibv_close_xrc_domain { 883219820Sjeff __u32 command; 884219820Sjeff __u16 in_words; 885219820Sjeff __u16 out_words; 886219820Sjeff __u64 response; 887219820Sjeff __u32 xrcd_handle; 888219820Sjeff __u32 reserved; 889219820Sjeff __u64 driver_data[0]; 890219820Sjeff}; 891219820Sjeff 892219820Sjeff/* 893219820Sjeff * Compatibility with older ABI versions 894219820Sjeff */ 895219820Sjeff 896219820Sjeffenum { 897219820Sjeff IB_USER_VERBS_CMD_QUERY_PARAMS_V2, 898219820Sjeff IB_USER_VERBS_CMD_GET_CONTEXT_V2, 899219820Sjeff IB_USER_VERBS_CMD_QUERY_DEVICE_V2, 900219820Sjeff IB_USER_VERBS_CMD_QUERY_PORT_V2, 901219820Sjeff IB_USER_VERBS_CMD_QUERY_GID_V2, 902219820Sjeff IB_USER_VERBS_CMD_QUERY_PKEY_V2, 903219820Sjeff IB_USER_VERBS_CMD_ALLOC_PD_V2, 904219820Sjeff IB_USER_VERBS_CMD_DEALLOC_PD_V2, 905219820Sjeff IB_USER_VERBS_CMD_CREATE_AH_V2, 906219820Sjeff IB_USER_VERBS_CMD_MODIFY_AH_V2, 907219820Sjeff IB_USER_VERBS_CMD_QUERY_AH_V2, 908219820Sjeff IB_USER_VERBS_CMD_DESTROY_AH_V2, 909219820Sjeff IB_USER_VERBS_CMD_REG_MR_V2, 910219820Sjeff IB_USER_VERBS_CMD_REG_SMR_V2, 911219820Sjeff IB_USER_VERBS_CMD_REREG_MR_V2, 912219820Sjeff IB_USER_VERBS_CMD_QUERY_MR_V2, 913219820Sjeff IB_USER_VERBS_CMD_DEREG_MR_V2, 914219820Sjeff IB_USER_VERBS_CMD_ALLOC_MW_V2, 915219820Sjeff IB_USER_VERBS_CMD_BIND_MW_V2, 916219820Sjeff IB_USER_VERBS_CMD_DEALLOC_MW_V2, 917219820Sjeff IB_USER_VERBS_CMD_CREATE_CQ_V2, 918219820Sjeff IB_USER_VERBS_CMD_RESIZE_CQ_V2, 919219820Sjeff IB_USER_VERBS_CMD_DESTROY_CQ_V2, 920219820Sjeff IB_USER_VERBS_CMD_POLL_CQ_V2, 921219820Sjeff IB_USER_VERBS_CMD_PEEK_CQ_V2, 922219820Sjeff IB_USER_VERBS_CMD_REQ_NOTIFY_CQ_V2, 923219820Sjeff IB_USER_VERBS_CMD_CREATE_QP_V2, 924219820Sjeff IB_USER_VERBS_CMD_QUERY_QP_V2, 925219820Sjeff IB_USER_VERBS_CMD_MODIFY_QP_V2, 926219820Sjeff IB_USER_VERBS_CMD_DESTROY_QP_V2, 927219820Sjeff IB_USER_VERBS_CMD_POST_SEND_V2, 928219820Sjeff IB_USER_VERBS_CMD_POST_RECV_V2, 929219820Sjeff IB_USER_VERBS_CMD_ATTACH_MCAST_V2, 930219820Sjeff IB_USER_VERBS_CMD_DETACH_MCAST_V2, 931219820Sjeff IB_USER_VERBS_CMD_CREATE_SRQ_V2, 932219820Sjeff IB_USER_VERBS_CMD_MODIFY_SRQ_V2, 933219820Sjeff IB_USER_VERBS_CMD_QUERY_SRQ_V2, 934219820Sjeff IB_USER_VERBS_CMD_DESTROY_SRQ_V2, 935219820Sjeff IB_USER_VERBS_CMD_POST_SRQ_RECV_V2, 936219820Sjeff /* 937219820Sjeff * Set commands that didn't exist to -1 so our compile-time 938219820Sjeff * trick opcodes in IBV_INIT_CMD() doesn't break. 939219820Sjeff */ 940219820Sjeff IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL_V2 = -1, 941219820Sjeff IB_USER_VERBS_CMD_CREATE_XRC_SRQ_V2 = -1, 942219820Sjeff IB_USER_VERBS_CMD_OPEN_XRC_DOMAIN_V2 = -1, 943219820Sjeff IB_USER_VERBS_CMD_CLOSE_XRC_DOMAIN_V2 = -1, 944219820Sjeff IB_USER_VERBS_CMD_CREATE_XRC_RCV_QP_V2 = -1, 945219820Sjeff IB_USER_VERBS_CMD_MODIFY_XRC_RCV_QP_V2 = -1, 946219820Sjeff IB_USER_VERBS_CMD_QUERY_XRC_RCV_QP_V2 = -1, 947219820Sjeff IB_USER_VERBS_CMD_REG_XRC_RCV_QP_V2 = -1, 948219820Sjeff IB_USER_VERBS_CMD_UNREG_XRC_RCV_QP_V2 = -1, 949219820Sjeff}; 950219820Sjeff 951219820Sjeffstruct ibv_destroy_cq_v1 { 952219820Sjeff __u32 command; 953219820Sjeff __u16 in_words; 954219820Sjeff __u16 out_words; 955219820Sjeff __u32 cq_handle; 956219820Sjeff}; 957219820Sjeff 958219820Sjeffstruct ibv_destroy_qp_v1 { 959219820Sjeff __u32 command; 960219820Sjeff __u16 in_words; 961219820Sjeff __u16 out_words; 962219820Sjeff __u32 qp_handle; 963219820Sjeff}; 964219820Sjeff 965219820Sjeffstruct ibv_destroy_srq_v1 { 966219820Sjeff __u32 command; 967219820Sjeff __u16 in_words; 968219820Sjeff __u16 out_words; 969219820Sjeff __u32 srq_handle; 970219820Sjeff}; 971219820Sjeff 972219820Sjeffstruct ibv_get_context_v2 { 973219820Sjeff __u32 command; 974219820Sjeff __u16 in_words; 975219820Sjeff __u16 out_words; 976219820Sjeff __u64 response; 977219820Sjeff __u64 cq_fd_tab; 978219820Sjeff __u64 driver_data[0]; 979219820Sjeff}; 980219820Sjeff 981219820Sjeffstruct ibv_create_cq_v2 { 982219820Sjeff __u32 command; 983219820Sjeff __u16 in_words; 984219820Sjeff __u16 out_words; 985219820Sjeff __u64 response; 986219820Sjeff __u64 user_handle; 987219820Sjeff __u32 cqe; 988219820Sjeff __u32 event_handler; 989219820Sjeff __u64 driver_data[0]; 990219820Sjeff}; 991219820Sjeff 992219820Sjeffstruct ibv_modify_srq_v3 { 993219820Sjeff __u32 command; 994219820Sjeff __u16 in_words; 995219820Sjeff __u16 out_words; 996219820Sjeff __u32 srq_handle; 997219820Sjeff __u32 attr_mask; 998219820Sjeff __u32 max_wr; 999219820Sjeff __u32 max_sge; 1000219820Sjeff __u32 srq_limit; 1001219820Sjeff __u32 reserved; 1002219820Sjeff __u64 driver_data[0]; 1003219820Sjeff}; 1004219820Sjeff 1005219820Sjeffstruct ibv_create_qp_resp_v3 { 1006219820Sjeff __u32 qp_handle; 1007219820Sjeff __u32 qpn; 1008219820Sjeff}; 1009219820Sjeff 1010219820Sjeffstruct ibv_create_qp_resp_v4 { 1011219820Sjeff __u32 qp_handle; 1012219820Sjeff __u32 qpn; 1013219820Sjeff __u32 max_send_wr; 1014219820Sjeff __u32 max_recv_wr; 1015219820Sjeff __u32 max_send_sge; 1016219820Sjeff __u32 max_recv_sge; 1017219820Sjeff __u32 max_inline_data; 1018219820Sjeff}; 1019219820Sjeff 1020219820Sjeffstruct ibv_create_srq_resp_v5 { 1021219820Sjeff __u32 srq_handle; 1022219820Sjeff}; 1023219820Sjeff 1024219820Sjeff#endif /* KERN_ABI_H */ 1025