1 /*- 2 * SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB 3 * 4 * Copyright (C) 2019 - 2022 Intel Corporation 5 * 6 * This software is available to you under a choice of one of two 7 * licenses. You may choose to be licensed under the terms of the GNU 8 * General Public License (GPL) Version 2, available from the file 9 * COPYING in the main directory of this source tree, or the 10 * OpenFabrics.org BSD license below: 11 * 12 * Redistribution and use in source and binary forms, with or 13 * without modification, are permitted provided that the following 14 * conditions are met: 15 * 16 * - Redistributions of source code must retain the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer. 19 * 20 * - Redistributions in binary form must reproduce the above 21 * copyright notice, this list of conditions and the following 22 * disclaimer in the documentation and/or other materials 23 * provided with the distribution. 24 * 25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32 * SOFTWARE. 33 */ 34 /*$FreeBSD$*/ 35 36 #ifndef PROVIDER_IRDMA_ABI_H 37 #define PROVIDER_IRDMA_ABI_H 38 39 #include "irdma.h" 40 #include <infiniband/kern-abi.h> 41 #include "irdma-abi.h" 42 43 #define IRDMA_MIN_ABI_VERSION 0 44 #define IRDMA_MAX_ABI_VERSION 5 45 46 struct irdma_ualloc_pd_resp { 47 struct ibv_alloc_pd_resp ibv_resp; 48 __u32 pd_id; 49 __u8 rsvd[4]; 50 51 }; 52 struct irdma_ucreate_cq { 53 struct ibv_create_cq ibv_cmd; 54 __aligned_u64 user_cq_buf; 55 __aligned_u64 user_shadow_area; 56 57 }; 58 struct irdma_ucreate_cq_resp { 59 struct ibv_create_cq_resp ibv_resp; 60 __u32 cq_id; 61 __u32 cq_size; 62 63 }; 64 struct irdma_ucreate_cq_ex { 65 struct ibv_create_cq_ex ibv_cmd; 66 __aligned_u64 user_cq_buf; 67 __aligned_u64 user_shadow_area; 68 69 }; 70 struct irdma_ucreate_cq_ex_resp { 71 struct ibv_create_cq_resp_ex ibv_resp; 72 __u32 cq_id; 73 __u32 cq_size; 74 75 }; 76 struct irdma_uresize_cq { 77 struct ibv_resize_cq ibv_cmd; 78 __aligned_u64 user_cq_buffer; 79 80 }; 81 struct irdma_uresize_cq_resp { 82 struct ibv_resize_cq_resp ibv_resp; 83 84 }; 85 struct irdma_ucreate_qp { 86 struct ibv_create_qp ibv_cmd; 87 __aligned_u64 user_wqe_bufs; 88 __aligned_u64 user_compl_ctx; 89 90 }; 91 struct irdma_ucreate_qp_resp { 92 struct ibv_create_qp_resp ibv_resp; 93 __u32 qp_id; 94 __u32 actual_sq_size; 95 __u32 actual_rq_size; 96 __u32 irdma_drv_opt; 97 __u16 push_idx; 98 __u8 lsmm; 99 __u8 rsvd; 100 __u32 qp_caps; 101 102 }; 103 struct irdma_umodify_qp_resp { 104 struct ibv_modify_qp_resp_ex ibv_resp; 105 __aligned_u64 push_wqe_mmap_key; 106 __aligned_u64 push_db_mmap_key; 107 __u16 push_offset; 108 __u8 push_valid; 109 __u8 rd_fence_rate; 110 __u8 rsvd[4]; 111 112 }; 113 struct irdma_get_context { 114 struct ibv_get_context ibv_cmd; 115 __u32 rsvd32; 116 __u8 userspace_ver; 117 __u8 rsvd8[3]; 118 119 }; 120 struct irdma_get_context_resp { 121 struct ibv_get_context_resp ibv_resp; 122 __u32 max_pds; 123 __u32 max_qps; 124 __u32 wq_size; /* size of the WQs (SQ+RQ) in the mmaped area */ 125 __u8 kernel_ver; 126 __u8 rsvd[3]; 127 __aligned_u64 feature_flags; 128 __aligned_u64 db_mmap_key; 129 __u32 max_hw_wq_frags; 130 __u32 max_hw_read_sges; 131 __u32 max_hw_inline; 132 __u32 max_hw_rq_quanta; 133 __u32 max_hw_wq_quanta; 134 __u32 min_hw_cq_size; 135 __u32 max_hw_cq_size; 136 __u16 max_hw_sq_chunk; 137 __u8 hw_rev; 138 __u8 rsvd2; 139 140 }; 141 struct irdma_ureg_mr { 142 struct ibv_reg_mr ibv_cmd; 143 __u16 reg_type; /* enum irdma_memreg_type */ 144 __u16 cq_pages; 145 __u16 rq_pages; 146 __u16 sq_pages; 147 148 }; 149 struct irdma_urereg_mr { 150 struct ibv_rereg_mr ibv_cmd; 151 __u16 reg_type; /* enum irdma_memreg_type */ 152 __u16 cq_pages; 153 __u16 rq_pages; 154 __u16 sq_pages; 155 156 }; 157 struct irdma_ucreate_ah_resp { 158 struct ibv_create_ah_resp ibv_resp; 159 __u32 ah_id; 160 __u8 rsvd[4]; 161 162 }; 163 164 struct irdma_modify_qp_cmd { 165 struct ibv_modify_qp_ex ibv_cmd; 166 __u8 sq_flush; 167 __u8 rq_flush; 168 __u8 rsvd[6]; 169 }; 170 171 struct irdma_query_device_ex { 172 struct ibv_query_device_ex ibv_cmd; 173 }; 174 175 struct irdma_query_device_ex_resp { 176 struct ibv_query_device_resp_ex ibv_resp; 177 __u32 comp_mask; 178 __u32 response_length; 179 struct ibv_odp_caps_resp odp_caps; 180 __u64 timestamp_mask; 181 __u64 hca_core_clock; 182 __u64 device_cap_flags_ex; 183 struct ibv_rss_caps_resp rss_caps; 184 __u32 max_wq_type_rq; 185 __u32 raw_packet_caps; 186 struct ibv_tso_caps tso_caps; 187 }; 188 #endif /* PROVIDER_IRDMA_ABI_H */ 189