1*4882a593Smuzhiyun /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */ 2*4882a593Smuzhiyun /* This file is part of the Emulex RoCE Device Driver for 3*4882a593Smuzhiyun * RoCE (RDMA over Converged Ethernet) adapters. 4*4882a593Smuzhiyun * Copyright (C) 2012-2015 Emulex. All rights reserved. 5*4882a593Smuzhiyun * EMULEX and SLI are trademarks of Emulex. 6*4882a593Smuzhiyun * www.emulex.com 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * This software is available to you under a choice of one of two licenses. 9*4882a593Smuzhiyun * You may choose to be licensed under the terms of the GNU General Public 10*4882a593Smuzhiyun * License (GPL) Version 2, available from the file COPYING in the main 11*4882a593Smuzhiyun * directory of this source tree, or the BSD license below: 12*4882a593Smuzhiyun * 13*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 14*4882a593Smuzhiyun * modification, are permitted provided that the following conditions 15*4882a593Smuzhiyun * are met: 16*4882a593Smuzhiyun * 17*4882a593Smuzhiyun * - Redistributions of source code must retain the above copyright notice, 18*4882a593Smuzhiyun * this list of conditions and the following disclaimer. 19*4882a593Smuzhiyun * 20*4882a593Smuzhiyun * - Redistributions in binary form must reproduce the above copyright 21*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in 22*4882a593Smuzhiyun * the documentation and/or other materials provided with the distribution. 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 25*4882a593Smuzhiyun * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE 26*4882a593Smuzhiyun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27*4882a593Smuzhiyun * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 28*4882a593Smuzhiyun * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 29*4882a593Smuzhiyun * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 30*4882a593Smuzhiyun * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 31*4882a593Smuzhiyun * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 32*4882a593Smuzhiyun * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 33*4882a593Smuzhiyun * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 34*4882a593Smuzhiyun * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35*4882a593Smuzhiyun * 36*4882a593Smuzhiyun * Contact Information: 37*4882a593Smuzhiyun * linux-drivers@emulex.com 38*4882a593Smuzhiyun * 39*4882a593Smuzhiyun * Emulex 40*4882a593Smuzhiyun * 3333 Susan Street 41*4882a593Smuzhiyun * Costa Mesa, CA 92626 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #ifndef OCRDMA_ABI_USER_H 45*4882a593Smuzhiyun #define OCRDMA_ABI_USER_H 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #include <linux/types.h> 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define OCRDMA_ABI_VERSION 2 50*4882a593Smuzhiyun #define OCRDMA_BE_ROCE_ABI_VERSION 1 51*4882a593Smuzhiyun /* user kernel communication data structures. */ 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun struct ocrdma_alloc_ucontext_resp { 54*4882a593Smuzhiyun __u32 dev_id; 55*4882a593Smuzhiyun __u32 wqe_size; 56*4882a593Smuzhiyun __u32 max_inline_data; 57*4882a593Smuzhiyun __u32 dpp_wqe_size; 58*4882a593Smuzhiyun __aligned_u64 ah_tbl_page; 59*4882a593Smuzhiyun __u32 ah_tbl_len; 60*4882a593Smuzhiyun __u32 rqe_size; 61*4882a593Smuzhiyun __u8 fw_ver[32]; 62*4882a593Smuzhiyun /* for future use/new features in progress */ 63*4882a593Smuzhiyun __aligned_u64 rsvd1; 64*4882a593Smuzhiyun __aligned_u64 rsvd2; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun struct ocrdma_alloc_pd_ureq { 68*4882a593Smuzhiyun __u32 rsvd[2]; 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun struct ocrdma_alloc_pd_uresp { 72*4882a593Smuzhiyun __u32 id; 73*4882a593Smuzhiyun __u32 dpp_enabled; 74*4882a593Smuzhiyun __u32 dpp_page_addr_hi; 75*4882a593Smuzhiyun __u32 dpp_page_addr_lo; 76*4882a593Smuzhiyun __u32 rsvd[2]; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun struct ocrdma_create_cq_ureq { 80*4882a593Smuzhiyun __u32 dpp_cq; 81*4882a593Smuzhiyun __u32 rsvd; /* pad */ 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun #define MAX_CQ_PAGES 8 85*4882a593Smuzhiyun struct ocrdma_create_cq_uresp { 86*4882a593Smuzhiyun __u32 cq_id; 87*4882a593Smuzhiyun __u32 page_size; 88*4882a593Smuzhiyun __u32 num_pages; 89*4882a593Smuzhiyun __u32 max_hw_cqe; 90*4882a593Smuzhiyun __aligned_u64 page_addr[MAX_CQ_PAGES]; 91*4882a593Smuzhiyun __aligned_u64 db_page_addr; 92*4882a593Smuzhiyun __u32 db_page_size; 93*4882a593Smuzhiyun __u32 phase_change; 94*4882a593Smuzhiyun /* for future use/new features in progress */ 95*4882a593Smuzhiyun __aligned_u64 rsvd1; 96*4882a593Smuzhiyun __aligned_u64 rsvd2; 97*4882a593Smuzhiyun }; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #define MAX_QP_PAGES 8 100*4882a593Smuzhiyun #define MAX_UD_AV_PAGES 8 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun struct ocrdma_create_qp_ureq { 103*4882a593Smuzhiyun __u8 enable_dpp_cq; 104*4882a593Smuzhiyun __u8 rsvd; 105*4882a593Smuzhiyun __u16 dpp_cq_id; 106*4882a593Smuzhiyun __u32 rsvd1; /* pad */ 107*4882a593Smuzhiyun }; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun struct ocrdma_create_qp_uresp { 110*4882a593Smuzhiyun __u16 qp_id; 111*4882a593Smuzhiyun __u16 sq_dbid; 112*4882a593Smuzhiyun __u16 rq_dbid; 113*4882a593Smuzhiyun __u16 resv0; /* pad */ 114*4882a593Smuzhiyun __u32 sq_page_size; 115*4882a593Smuzhiyun __u32 rq_page_size; 116*4882a593Smuzhiyun __u32 num_sq_pages; 117*4882a593Smuzhiyun __u32 num_rq_pages; 118*4882a593Smuzhiyun __aligned_u64 sq_page_addr[MAX_QP_PAGES]; 119*4882a593Smuzhiyun __aligned_u64 rq_page_addr[MAX_QP_PAGES]; 120*4882a593Smuzhiyun __aligned_u64 db_page_addr; 121*4882a593Smuzhiyun __u32 db_page_size; 122*4882a593Smuzhiyun __u32 dpp_credit; 123*4882a593Smuzhiyun __u32 dpp_offset; 124*4882a593Smuzhiyun __u32 num_wqe_allocated; 125*4882a593Smuzhiyun __u32 num_rqe_allocated; 126*4882a593Smuzhiyun __u32 db_sq_offset; 127*4882a593Smuzhiyun __u32 db_rq_offset; 128*4882a593Smuzhiyun __u32 db_shift; 129*4882a593Smuzhiyun __aligned_u64 rsvd[11]; 130*4882a593Smuzhiyun }; 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun struct ocrdma_create_srq_uresp { 133*4882a593Smuzhiyun __u16 rq_dbid; 134*4882a593Smuzhiyun __u16 resv0; /* pad */ 135*4882a593Smuzhiyun __u32 resv1; 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun __u32 rq_page_size; 138*4882a593Smuzhiyun __u32 num_rq_pages; 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun __aligned_u64 rq_page_addr[MAX_QP_PAGES]; 141*4882a593Smuzhiyun __aligned_u64 db_page_addr; 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun __u32 db_page_size; 144*4882a593Smuzhiyun __u32 num_rqe_allocated; 145*4882a593Smuzhiyun __u32 db_rq_offset; 146*4882a593Smuzhiyun __u32 db_shift; 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun __aligned_u64 rsvd2; 149*4882a593Smuzhiyun __aligned_u64 rsvd3; 150*4882a593Smuzhiyun }; 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun #endif /* OCRDMA_ABI_USER_H */ 153