1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */ 2*f80ad8b4SAndroid Build Coastguard Worker /* QLogic qedr NIC Driver 3*f80ad8b4SAndroid Build Coastguard Worker * Copyright (c) 2015-2016 QLogic Corporation 4*f80ad8b4SAndroid Build Coastguard Worker * 5*f80ad8b4SAndroid Build Coastguard Worker * This software is available to you under a choice of one of two 6*f80ad8b4SAndroid Build Coastguard Worker * licenses. You may choose to be licensed under the terms of the GNU 7*f80ad8b4SAndroid Build Coastguard Worker * General Public License (GPL) Version 2, available from the file 8*f80ad8b4SAndroid Build Coastguard Worker * COPYING in the main directory of this source tree, or the 9*f80ad8b4SAndroid Build Coastguard Worker * OpenIB.org BSD license below: 10*f80ad8b4SAndroid Build Coastguard Worker * 11*f80ad8b4SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or 12*f80ad8b4SAndroid Build Coastguard Worker * without modification, are permitted provided that the following 13*f80ad8b4SAndroid Build Coastguard Worker * conditions are met: 14*f80ad8b4SAndroid Build Coastguard Worker * 15*f80ad8b4SAndroid Build Coastguard Worker * - Redistributions of source code must retain the above 16*f80ad8b4SAndroid Build Coastguard Worker * copyright notice, this list of conditions and the following 17*f80ad8b4SAndroid Build Coastguard Worker * disclaimer. 18*f80ad8b4SAndroid Build Coastguard Worker * 19*f80ad8b4SAndroid Build Coastguard Worker * - Redistributions in binary form must reproduce the above 20*f80ad8b4SAndroid Build Coastguard Worker * copyright notice, this list of conditions and the following 21*f80ad8b4SAndroid Build Coastguard Worker * disclaimer in the documentation and /or other materials 22*f80ad8b4SAndroid Build Coastguard Worker * provided with the distribution. 23*f80ad8b4SAndroid Build Coastguard Worker * 24*f80ad8b4SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25*f80ad8b4SAndroid Build Coastguard Worker * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26*f80ad8b4SAndroid Build Coastguard Worker * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27*f80ad8b4SAndroid Build Coastguard Worker * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 28*f80ad8b4SAndroid Build Coastguard Worker * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 29*f80ad8b4SAndroid Build Coastguard Worker * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 30*f80ad8b4SAndroid Build Coastguard Worker * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 31*f80ad8b4SAndroid Build Coastguard Worker * SOFTWARE. 32*f80ad8b4SAndroid Build Coastguard Worker */ 33*f80ad8b4SAndroid Build Coastguard Worker #ifndef __QEDR_USER_H__ 34*f80ad8b4SAndroid Build Coastguard Worker #define __QEDR_USER_H__ 35*f80ad8b4SAndroid Build Coastguard Worker 36*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 37*f80ad8b4SAndroid Build Coastguard Worker 38*f80ad8b4SAndroid Build Coastguard Worker #define QEDR_ABI_VERSION (8) 39*f80ad8b4SAndroid Build Coastguard Worker 40*f80ad8b4SAndroid Build Coastguard Worker /* user kernel communication data structures. */ 41*f80ad8b4SAndroid Build Coastguard Worker enum qedr_alloc_ucontext_flags { 42*f80ad8b4SAndroid Build Coastguard Worker QEDR_ALLOC_UCTX_EDPM_MODE = 1 << 0, 43*f80ad8b4SAndroid Build Coastguard Worker QEDR_ALLOC_UCTX_DB_REC = 1 << 1, 44*f80ad8b4SAndroid Build Coastguard Worker QEDR_SUPPORT_DPM_SIZES = 1 << 2, 45*f80ad8b4SAndroid Build Coastguard Worker }; 46*f80ad8b4SAndroid Build Coastguard Worker 47*f80ad8b4SAndroid Build Coastguard Worker struct qedr_alloc_ucontext_req { 48*f80ad8b4SAndroid Build Coastguard Worker __u32 context_flags; 49*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 50*f80ad8b4SAndroid Build Coastguard Worker }; 51*f80ad8b4SAndroid Build Coastguard Worker 52*f80ad8b4SAndroid Build Coastguard Worker #define QEDR_LDPM_MAX_SIZE (8192) 53*f80ad8b4SAndroid Build Coastguard Worker #define QEDR_EDPM_TRANS_SIZE (64) 54*f80ad8b4SAndroid Build Coastguard Worker #define QEDR_EDPM_MAX_SIZE (ROCE_REQ_MAX_INLINE_DATA_SIZE) 55*f80ad8b4SAndroid Build Coastguard Worker 56*f80ad8b4SAndroid Build Coastguard Worker enum qedr_rdma_dpm_type { 57*f80ad8b4SAndroid Build Coastguard Worker QEDR_DPM_TYPE_NONE = 0, 58*f80ad8b4SAndroid Build Coastguard Worker QEDR_DPM_TYPE_ROCE_ENHANCED = 1 << 0, 59*f80ad8b4SAndroid Build Coastguard Worker QEDR_DPM_TYPE_ROCE_LEGACY = 1 << 1, 60*f80ad8b4SAndroid Build Coastguard Worker QEDR_DPM_TYPE_IWARP_LEGACY = 1 << 2, 61*f80ad8b4SAndroid Build Coastguard Worker QEDR_DPM_TYPE_ROCE_EDPM_MODE = 1 << 3, 62*f80ad8b4SAndroid Build Coastguard Worker QEDR_DPM_SIZES_SET = 1 << 4, 63*f80ad8b4SAndroid Build Coastguard Worker }; 64*f80ad8b4SAndroid Build Coastguard Worker 65*f80ad8b4SAndroid Build Coastguard Worker struct qedr_alloc_ucontext_resp { 66*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 db_pa; 67*f80ad8b4SAndroid Build Coastguard Worker __u32 db_size; 68*f80ad8b4SAndroid Build Coastguard Worker 69*f80ad8b4SAndroid Build Coastguard Worker __u32 max_send_wr; 70*f80ad8b4SAndroid Build Coastguard Worker __u32 max_recv_wr; 71*f80ad8b4SAndroid Build Coastguard Worker __u32 max_srq_wr; 72*f80ad8b4SAndroid Build Coastguard Worker __u32 sges_per_send_wr; 73*f80ad8b4SAndroid Build Coastguard Worker __u32 sges_per_recv_wr; 74*f80ad8b4SAndroid Build Coastguard Worker __u32 sges_per_srq_wr; 75*f80ad8b4SAndroid Build Coastguard Worker __u32 max_cqes; 76*f80ad8b4SAndroid Build Coastguard Worker __u8 dpm_flags; 77*f80ad8b4SAndroid Build Coastguard Worker __u8 wids_enabled; 78*f80ad8b4SAndroid Build Coastguard Worker __u16 wid_count; 79*f80ad8b4SAndroid Build Coastguard Worker __u16 ldpm_limit_size; 80*f80ad8b4SAndroid Build Coastguard Worker __u8 edpm_trans_size; 81*f80ad8b4SAndroid Build Coastguard Worker __u8 reserved; 82*f80ad8b4SAndroid Build Coastguard Worker __u16 edpm_limit_size; 83*f80ad8b4SAndroid Build Coastguard Worker __u8 padding[6]; 84*f80ad8b4SAndroid Build Coastguard Worker }; 85*f80ad8b4SAndroid Build Coastguard Worker 86*f80ad8b4SAndroid Build Coastguard Worker struct qedr_alloc_pd_ureq { 87*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 rsvd1; 88*f80ad8b4SAndroid Build Coastguard Worker }; 89*f80ad8b4SAndroid Build Coastguard Worker 90*f80ad8b4SAndroid Build Coastguard Worker struct qedr_alloc_pd_uresp { 91*f80ad8b4SAndroid Build Coastguard Worker __u32 pd_id; 92*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 93*f80ad8b4SAndroid Build Coastguard Worker }; 94*f80ad8b4SAndroid Build Coastguard Worker 95*f80ad8b4SAndroid Build Coastguard Worker struct qedr_create_cq_ureq { 96*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 addr; 97*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 len; 98*f80ad8b4SAndroid Build Coastguard Worker }; 99*f80ad8b4SAndroid Build Coastguard Worker 100*f80ad8b4SAndroid Build Coastguard Worker struct qedr_create_cq_uresp { 101*f80ad8b4SAndroid Build Coastguard Worker __u32 db_offset; 102*f80ad8b4SAndroid Build Coastguard Worker __u16 icid; 103*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved; 104*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 db_rec_addr; 105*f80ad8b4SAndroid Build Coastguard Worker }; 106*f80ad8b4SAndroid Build Coastguard Worker 107*f80ad8b4SAndroid Build Coastguard Worker struct qedr_create_qp_ureq { 108*f80ad8b4SAndroid Build Coastguard Worker __u32 qp_handle_hi; 109*f80ad8b4SAndroid Build Coastguard Worker __u32 qp_handle_lo; 110*f80ad8b4SAndroid Build Coastguard Worker 111*f80ad8b4SAndroid Build Coastguard Worker /* SQ */ 112*f80ad8b4SAndroid Build Coastguard Worker /* user space virtual address of SQ buffer */ 113*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 sq_addr; 114*f80ad8b4SAndroid Build Coastguard Worker 115*f80ad8b4SAndroid Build Coastguard Worker /* length of SQ buffer */ 116*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 sq_len; 117*f80ad8b4SAndroid Build Coastguard Worker 118*f80ad8b4SAndroid Build Coastguard Worker /* RQ */ 119*f80ad8b4SAndroid Build Coastguard Worker /* user space virtual address of RQ buffer */ 120*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 rq_addr; 121*f80ad8b4SAndroid Build Coastguard Worker 122*f80ad8b4SAndroid Build Coastguard Worker /* length of RQ buffer */ 123*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 rq_len; 124*f80ad8b4SAndroid Build Coastguard Worker }; 125*f80ad8b4SAndroid Build Coastguard Worker 126*f80ad8b4SAndroid Build Coastguard Worker struct qedr_create_qp_uresp { 127*f80ad8b4SAndroid Build Coastguard Worker __u32 qp_id; 128*f80ad8b4SAndroid Build Coastguard Worker __u32 atomic_supported; 129*f80ad8b4SAndroid Build Coastguard Worker 130*f80ad8b4SAndroid Build Coastguard Worker /* SQ */ 131*f80ad8b4SAndroid Build Coastguard Worker __u32 sq_db_offset; 132*f80ad8b4SAndroid Build Coastguard Worker __u16 sq_icid; 133*f80ad8b4SAndroid Build Coastguard Worker 134*f80ad8b4SAndroid Build Coastguard Worker /* RQ */ 135*f80ad8b4SAndroid Build Coastguard Worker __u32 rq_db_offset; 136*f80ad8b4SAndroid Build Coastguard Worker __u16 rq_icid; 137*f80ad8b4SAndroid Build Coastguard Worker 138*f80ad8b4SAndroid Build Coastguard Worker __u32 rq_db2_offset; 139*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved; 140*f80ad8b4SAndroid Build Coastguard Worker 141*f80ad8b4SAndroid Build Coastguard Worker /* address of SQ doorbell recovery user entry */ 142*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 sq_db_rec_addr; 143*f80ad8b4SAndroid Build Coastguard Worker 144*f80ad8b4SAndroid Build Coastguard Worker /* address of RQ doorbell recovery user entry */ 145*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 rq_db_rec_addr; 146*f80ad8b4SAndroid Build Coastguard Worker 147*f80ad8b4SAndroid Build Coastguard Worker }; 148*f80ad8b4SAndroid Build Coastguard Worker 149*f80ad8b4SAndroid Build Coastguard Worker struct qedr_create_srq_ureq { 150*f80ad8b4SAndroid Build Coastguard Worker /* user space virtual address of producer pair */ 151*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 prod_pair_addr; 152*f80ad8b4SAndroid Build Coastguard Worker 153*f80ad8b4SAndroid Build Coastguard Worker /* user space virtual address of SRQ buffer */ 154*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 srq_addr; 155*f80ad8b4SAndroid Build Coastguard Worker 156*f80ad8b4SAndroid Build Coastguard Worker /* length of SRQ buffer */ 157*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 srq_len; 158*f80ad8b4SAndroid Build Coastguard Worker }; 159*f80ad8b4SAndroid Build Coastguard Worker 160*f80ad8b4SAndroid Build Coastguard Worker struct qedr_create_srq_uresp { 161*f80ad8b4SAndroid Build Coastguard Worker __u16 srq_id; 162*f80ad8b4SAndroid Build Coastguard Worker __u16 reserved0; 163*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved1; 164*f80ad8b4SAndroid Build Coastguard Worker }; 165*f80ad8b4SAndroid Build Coastguard Worker 166*f80ad8b4SAndroid Build Coastguard Worker /* doorbell recovery entry allocated and populated by userspace doorbelling 167*f80ad8b4SAndroid Build Coastguard Worker * entities and mapped to kernel. Kernel uses this to register doorbell 168*f80ad8b4SAndroid Build Coastguard Worker * information with doorbell drop recovery mechanism. 169*f80ad8b4SAndroid Build Coastguard Worker */ 170*f80ad8b4SAndroid Build Coastguard Worker struct qedr_user_db_rec { 171*f80ad8b4SAndroid Build Coastguard Worker __aligned_u64 db_data; /* doorbell data */ 172*f80ad8b4SAndroid Build Coastguard Worker }; 173*f80ad8b4SAndroid Build Coastguard Worker 174*f80ad8b4SAndroid Build Coastguard Worker #endif /* __QEDR_USER_H__ */ 175