129c8d9ebSAdit Ranadive /* 229c8d9ebSAdit Ranadive * Copyright (c) 2012-2016 VMware, Inc. All rights reserved. 329c8d9ebSAdit Ranadive * 429c8d9ebSAdit Ranadive * This program is free software; you can redistribute it and/or 529c8d9ebSAdit Ranadive * modify it under the terms of EITHER the GNU General Public License 629c8d9ebSAdit Ranadive * version 2 as published by the Free Software Foundation or the BSD 729c8d9ebSAdit Ranadive * 2-Clause License. This program is distributed in the hope that it 829c8d9ebSAdit Ranadive * will be useful, but WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED 929c8d9ebSAdit Ranadive * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1029c8d9ebSAdit Ranadive * See the GNU General Public License version 2 for more details at 1129c8d9ebSAdit Ranadive * http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html. 1229c8d9ebSAdit Ranadive * 1329c8d9ebSAdit Ranadive * You should have received a copy of the GNU General Public License 1429c8d9ebSAdit Ranadive * along with this program available in the file COPYING in the main 1529c8d9ebSAdit Ranadive * directory of this source tree. 1629c8d9ebSAdit Ranadive * 1729c8d9ebSAdit Ranadive * The BSD 2-Clause License 1829c8d9ebSAdit Ranadive * 1929c8d9ebSAdit Ranadive * Redistribution and use in source and binary forms, with or 2029c8d9ebSAdit Ranadive * without modification, are permitted provided that the following 2129c8d9ebSAdit Ranadive * conditions are met: 2229c8d9ebSAdit Ranadive * 2329c8d9ebSAdit Ranadive * - Redistributions of source code must retain the above 2429c8d9ebSAdit Ranadive * copyright notice, this list of conditions and the following 2529c8d9ebSAdit Ranadive * disclaimer. 2629c8d9ebSAdit Ranadive * 2729c8d9ebSAdit Ranadive * - Redistributions in binary form must reproduce the above 2829c8d9ebSAdit Ranadive * copyright notice, this list of conditions and the following 2929c8d9ebSAdit Ranadive * disclaimer in the documentation and/or other materials 3029c8d9ebSAdit Ranadive * provided with the distribution. 3129c8d9ebSAdit Ranadive * 3229c8d9ebSAdit Ranadive * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3329c8d9ebSAdit Ranadive * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3429c8d9ebSAdit Ranadive * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 3529c8d9ebSAdit Ranadive * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 3629c8d9ebSAdit Ranadive * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 3729c8d9ebSAdit Ranadive * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 3829c8d9ebSAdit Ranadive * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 3929c8d9ebSAdit Ranadive * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4029c8d9ebSAdit Ranadive * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 4129c8d9ebSAdit Ranadive * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 4229c8d9ebSAdit Ranadive * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 4329c8d9ebSAdit Ranadive * OF THE POSSIBILITY OF SUCH DAMAGE. 4429c8d9ebSAdit Ranadive */ 4529c8d9ebSAdit Ranadive 4629c8d9ebSAdit Ranadive #ifndef __PVRDMA_DEV_API_H__ 4729c8d9ebSAdit Ranadive #define __PVRDMA_DEV_API_H__ 4829c8d9ebSAdit Ranadive 4929c8d9ebSAdit Ranadive #include <linux/types.h> 5029c8d9ebSAdit Ranadive 5129c8d9ebSAdit Ranadive #include "pvrdma_verbs.h" 5229c8d9ebSAdit Ranadive 5305297b66SBryan Tan /* 5405297b66SBryan Tan * PVRDMA version macros. Some new features require updates to PVRDMA_VERSION. 5505297b66SBryan Tan * These macros allow us to check for different features if necessary. 5605297b66SBryan Tan */ 5705297b66SBryan Tan 5805297b66SBryan Tan #define PVRDMA_ROCEV1_VERSION 17 5905297b66SBryan Tan #define PVRDMA_ROCEV2_VERSION 18 608aa04ad3SAdit Ranadive #define PVRDMA_PPN64_VERSION 19 61*a52dc3a1SBryan Tan #define PVRDMA_QPHANDLE_VERSION 20 62*a52dc3a1SBryan Tan #define PVRDMA_VERSION PVRDMA_QPHANDLE_VERSION 6305297b66SBryan Tan 6429c8d9ebSAdit Ranadive #define PVRDMA_BOARD_ID 1 6529c8d9ebSAdit Ranadive #define PVRDMA_REV_ID 1 6629c8d9ebSAdit Ranadive 6729c8d9ebSAdit Ranadive /* 6829c8d9ebSAdit Ranadive * Masks and accessors for page directory, which is a two-level lookup: 6929c8d9ebSAdit Ranadive * page directory -> page table -> page. Only one directory for now, but we 7029c8d9ebSAdit Ranadive * could expand that easily. 9 bits for tables, 9 bits for pages, gives one 7129c8d9ebSAdit Ranadive * gigabyte for memory regions and so forth. 7229c8d9ebSAdit Ranadive */ 7329c8d9ebSAdit Ranadive 7429c8d9ebSAdit Ranadive #define PVRDMA_PDIR_SHIFT 18 7529c8d9ebSAdit Ranadive #define PVRDMA_PTABLE_SHIFT 9 7629c8d9ebSAdit Ranadive #define PVRDMA_PAGE_DIR_DIR(x) (((x) >> PVRDMA_PDIR_SHIFT) & 0x1) 7729c8d9ebSAdit Ranadive #define PVRDMA_PAGE_DIR_TABLE(x) (((x) >> PVRDMA_PTABLE_SHIFT) & 0x1ff) 7829c8d9ebSAdit Ranadive #define PVRDMA_PAGE_DIR_PAGE(x) ((x) & 0x1ff) 7929c8d9ebSAdit Ranadive #define PVRDMA_PAGE_DIR_MAX_PAGES (1 * 512 * 512) 8029c8d9ebSAdit Ranadive #define PVRDMA_MAX_FAST_REG_PAGES 128 8129c8d9ebSAdit Ranadive 8229c8d9ebSAdit Ranadive /* 8329c8d9ebSAdit Ranadive * Max MSI-X vectors. 8429c8d9ebSAdit Ranadive */ 8529c8d9ebSAdit Ranadive 8629c8d9ebSAdit Ranadive #define PVRDMA_MAX_INTERRUPTS 3 8729c8d9ebSAdit Ranadive 8829c8d9ebSAdit Ranadive /* Register offsets within PCI resource on BAR1. */ 8929c8d9ebSAdit Ranadive #define PVRDMA_REG_VERSION 0x00 /* R: Version of device. */ 9029c8d9ebSAdit Ranadive #define PVRDMA_REG_DSRLOW 0x04 /* W: Device shared region low PA. */ 9129c8d9ebSAdit Ranadive #define PVRDMA_REG_DSRHIGH 0x08 /* W: Device shared region high PA. */ 9229c8d9ebSAdit Ranadive #define PVRDMA_REG_CTL 0x0c /* W: PVRDMA_DEVICE_CTL */ 9329c8d9ebSAdit Ranadive #define PVRDMA_REG_REQUEST 0x10 /* W: Indicate device request. */ 9429c8d9ebSAdit Ranadive #define PVRDMA_REG_ERR 0x14 /* R: Device error. */ 9529c8d9ebSAdit Ranadive #define PVRDMA_REG_ICR 0x18 /* R: Interrupt cause. */ 9629c8d9ebSAdit Ranadive #define PVRDMA_REG_IMR 0x1c /* R/W: Interrupt mask. */ 9729c8d9ebSAdit Ranadive #define PVRDMA_REG_MACL 0x20 /* R/W: MAC address low. */ 9829c8d9ebSAdit Ranadive #define PVRDMA_REG_MACH 0x24 /* R/W: MAC address high. */ 9929c8d9ebSAdit Ranadive 10029c8d9ebSAdit Ranadive /* Object flags. */ 10129c8d9ebSAdit Ranadive #define PVRDMA_CQ_FLAG_ARMED_SOL BIT(0) /* Armed for solicited-only. */ 10229c8d9ebSAdit Ranadive #define PVRDMA_CQ_FLAG_ARMED BIT(1) /* Armed. */ 10329c8d9ebSAdit Ranadive #define PVRDMA_MR_FLAG_DMA BIT(0) /* DMA region. */ 10429c8d9ebSAdit Ranadive #define PVRDMA_MR_FLAG_FRMR BIT(1) /* Fast reg memory region. */ 10529c8d9ebSAdit Ranadive 10629c8d9ebSAdit Ranadive /* 10729c8d9ebSAdit Ranadive * Atomic operation capability (masked versions are extended atomic 10829c8d9ebSAdit Ranadive * operations. 10929c8d9ebSAdit Ranadive */ 11029c8d9ebSAdit Ranadive 11129c8d9ebSAdit Ranadive #define PVRDMA_ATOMIC_OP_COMP_SWAP BIT(0) /* Compare and swap. */ 11229c8d9ebSAdit Ranadive #define PVRDMA_ATOMIC_OP_FETCH_ADD BIT(1) /* Fetch and add. */ 11329c8d9ebSAdit Ranadive #define PVRDMA_ATOMIC_OP_MASK_COMP_SWAP BIT(2) /* Masked compare and swap. */ 11429c8d9ebSAdit Ranadive #define PVRDMA_ATOMIC_OP_MASK_FETCH_ADD BIT(3) /* Masked fetch and add. */ 11529c8d9ebSAdit Ranadive 11629c8d9ebSAdit Ranadive /* 11729c8d9ebSAdit Ranadive * Base Memory Management Extension flags to support Fast Reg Memory Regions 11829c8d9ebSAdit Ranadive * and Fast Reg Work Requests. Each flag represents a verb operation and we 11929c8d9ebSAdit Ranadive * must support all of them to qualify for the BMME device cap. 12029c8d9ebSAdit Ranadive */ 12129c8d9ebSAdit Ranadive 12229c8d9ebSAdit Ranadive #define PVRDMA_BMME_FLAG_LOCAL_INV BIT(0) /* Local Invalidate. */ 12329c8d9ebSAdit Ranadive #define PVRDMA_BMME_FLAG_REMOTE_INV BIT(1) /* Remote Invalidate. */ 12429c8d9ebSAdit Ranadive #define PVRDMA_BMME_FLAG_FAST_REG_WR BIT(2) /* Fast Reg Work Request. */ 12529c8d9ebSAdit Ranadive 12629c8d9ebSAdit Ranadive /* 12729c8d9ebSAdit Ranadive * GID types. The interpretation of the gid_types bit field in the device 12829c8d9ebSAdit Ranadive * capabilities will depend on the device mode. For now, the device only 12929c8d9ebSAdit Ranadive * supports RoCE as mode, so only the different GID types for RoCE are 13029c8d9ebSAdit Ranadive * defined. 13129c8d9ebSAdit Ranadive */ 13229c8d9ebSAdit Ranadive 13329c8d9ebSAdit Ranadive #define PVRDMA_GID_TYPE_FLAG_ROCE_V1 BIT(0) 13429c8d9ebSAdit Ranadive #define PVRDMA_GID_TYPE_FLAG_ROCE_V2 BIT(1) 13529c8d9ebSAdit Ranadive 13605297b66SBryan Tan /* 13705297b66SBryan Tan * Version checks. This checks whether each version supports specific 13805297b66SBryan Tan * capabilities from the device. 13905297b66SBryan Tan */ 14005297b66SBryan Tan 14105297b66SBryan Tan #define PVRDMA_IS_VERSION17(_dev) \ 14205297b66SBryan Tan (_dev->dsr_version == PVRDMA_ROCEV1_VERSION && \ 14305297b66SBryan Tan _dev->dsr->caps.gid_types == PVRDMA_GID_TYPE_FLAG_ROCE_V1) 14405297b66SBryan Tan 14505297b66SBryan Tan #define PVRDMA_IS_VERSION18(_dev) \ 14605297b66SBryan Tan (_dev->dsr_version >= PVRDMA_ROCEV2_VERSION && \ 14705297b66SBryan Tan (_dev->dsr->caps.gid_types == PVRDMA_GID_TYPE_FLAG_ROCE_V1 || \ 14805297b66SBryan Tan _dev->dsr->caps.gid_types == PVRDMA_GID_TYPE_FLAG_ROCE_V2)) \ 14905297b66SBryan Tan 15005297b66SBryan Tan #define PVRDMA_SUPPORTED(_dev) \ 15105297b66SBryan Tan ((_dev->dsr->caps.mode == PVRDMA_DEVICE_MODE_ROCE) && \ 15205297b66SBryan Tan (PVRDMA_IS_VERSION17(_dev) || PVRDMA_IS_VERSION18(_dev))) 15305297b66SBryan Tan 154a31a2a3bSAdit Ranadive /* 155a31a2a3bSAdit Ranadive * Get capability values based on device version. 156a31a2a3bSAdit Ranadive */ 157a31a2a3bSAdit Ranadive 158a31a2a3bSAdit Ranadive #define PVRDMA_GET_CAP(_dev, _old_val, _val) \ 159a31a2a3bSAdit Ranadive ((PVRDMA_IS_VERSION18(_dev)) ? _val : _old_val) 160a31a2a3bSAdit Ranadive 16129c8d9ebSAdit Ranadive enum pvrdma_pci_resource { 16229c8d9ebSAdit Ranadive PVRDMA_PCI_RESOURCE_MSIX, /* BAR0: MSI-X, MMIO. */ 16329c8d9ebSAdit Ranadive PVRDMA_PCI_RESOURCE_REG, /* BAR1: Registers, MMIO. */ 16429c8d9ebSAdit Ranadive PVRDMA_PCI_RESOURCE_UAR, /* BAR2: UAR pages, MMIO, 64-bit. */ 16529c8d9ebSAdit Ranadive PVRDMA_PCI_RESOURCE_LAST, /* Last. */ 16629c8d9ebSAdit Ranadive }; 16729c8d9ebSAdit Ranadive 16829c8d9ebSAdit Ranadive enum pvrdma_device_ctl { 16929c8d9ebSAdit Ranadive PVRDMA_DEVICE_CTL_ACTIVATE, /* Activate device. */ 170b172679bSAditya Sarwade PVRDMA_DEVICE_CTL_UNQUIESCE, /* Unquiesce device. */ 17129c8d9ebSAdit Ranadive PVRDMA_DEVICE_CTL_RESET, /* Reset device. */ 17229c8d9ebSAdit Ranadive }; 17329c8d9ebSAdit Ranadive 17429c8d9ebSAdit Ranadive enum pvrdma_intr_vector { 17529c8d9ebSAdit Ranadive PVRDMA_INTR_VECTOR_RESPONSE, /* Command response. */ 17629c8d9ebSAdit Ranadive PVRDMA_INTR_VECTOR_ASYNC, /* Async events. */ 17729c8d9ebSAdit Ranadive PVRDMA_INTR_VECTOR_CQ, /* CQ notification. */ 17829c8d9ebSAdit Ranadive /* Additional CQ notification vectors. */ 17929c8d9ebSAdit Ranadive }; 18029c8d9ebSAdit Ranadive 18129c8d9ebSAdit Ranadive enum pvrdma_intr_cause { 18229c8d9ebSAdit Ranadive PVRDMA_INTR_CAUSE_RESPONSE = (1 << PVRDMA_INTR_VECTOR_RESPONSE), 18329c8d9ebSAdit Ranadive PVRDMA_INTR_CAUSE_ASYNC = (1 << PVRDMA_INTR_VECTOR_ASYNC), 18429c8d9ebSAdit Ranadive PVRDMA_INTR_CAUSE_CQ = (1 << PVRDMA_INTR_VECTOR_CQ), 18529c8d9ebSAdit Ranadive }; 18629c8d9ebSAdit Ranadive 18729c8d9ebSAdit Ranadive enum pvrdma_gos_bits { 18829c8d9ebSAdit Ranadive PVRDMA_GOS_BITS_UNK, /* Unknown. */ 18929c8d9ebSAdit Ranadive PVRDMA_GOS_BITS_32, /* 32-bit. */ 19029c8d9ebSAdit Ranadive PVRDMA_GOS_BITS_64, /* 64-bit. */ 19129c8d9ebSAdit Ranadive }; 19229c8d9ebSAdit Ranadive 19329c8d9ebSAdit Ranadive enum pvrdma_gos_type { 19429c8d9ebSAdit Ranadive PVRDMA_GOS_TYPE_UNK, /* Unknown. */ 19529c8d9ebSAdit Ranadive PVRDMA_GOS_TYPE_LINUX, /* Linux. */ 19629c8d9ebSAdit Ranadive }; 19729c8d9ebSAdit Ranadive 19829c8d9ebSAdit Ranadive enum pvrdma_device_mode { 19929c8d9ebSAdit Ranadive PVRDMA_DEVICE_MODE_ROCE, /* RoCE. */ 20029c8d9ebSAdit Ranadive PVRDMA_DEVICE_MODE_IWARP, /* iWarp. */ 20129c8d9ebSAdit Ranadive PVRDMA_DEVICE_MODE_IB, /* InfiniBand. */ 20229c8d9ebSAdit Ranadive }; 20329c8d9ebSAdit Ranadive 20429c8d9ebSAdit Ranadive struct pvrdma_gos_info { 20529c8d9ebSAdit Ranadive u32 gos_bits:2; /* W: PVRDMA_GOS_BITS_ */ 20629c8d9ebSAdit Ranadive u32 gos_type:4; /* W: PVRDMA_GOS_TYPE_ */ 20729c8d9ebSAdit Ranadive u32 gos_ver:16; /* W: Guest OS version. */ 20829c8d9ebSAdit Ranadive u32 gos_misc:10; /* W: Other. */ 20929c8d9ebSAdit Ranadive u32 pad; /* Pad to 8-byte alignment. */ 21029c8d9ebSAdit Ranadive }; 21129c8d9ebSAdit Ranadive 21229c8d9ebSAdit Ranadive struct pvrdma_device_caps { 21329c8d9ebSAdit Ranadive u64 fw_ver; /* R: Query device. */ 21429c8d9ebSAdit Ranadive __be64 node_guid; 21529c8d9ebSAdit Ranadive __be64 sys_image_guid; 21629c8d9ebSAdit Ranadive u64 max_mr_size; 21729c8d9ebSAdit Ranadive u64 page_size_cap; 21829c8d9ebSAdit Ranadive u64 atomic_arg_sizes; /* EX verbs. */ 21929c8d9ebSAdit Ranadive u32 ex_comp_mask; /* EX verbs. */ 22029c8d9ebSAdit Ranadive u32 device_cap_flags2; /* EX verbs. */ 22129c8d9ebSAdit Ranadive u32 max_fa_bit_boundary; /* EX verbs. */ 22229c8d9ebSAdit Ranadive u32 log_max_atomic_inline_arg; /* EX verbs. */ 22329c8d9ebSAdit Ranadive u32 vendor_id; 22429c8d9ebSAdit Ranadive u32 vendor_part_id; 22529c8d9ebSAdit Ranadive u32 hw_ver; 22629c8d9ebSAdit Ranadive u32 max_qp; 22729c8d9ebSAdit Ranadive u32 max_qp_wr; 22829c8d9ebSAdit Ranadive u32 device_cap_flags; 22929c8d9ebSAdit Ranadive u32 max_sge; 23029c8d9ebSAdit Ranadive u32 max_sge_rd; 23129c8d9ebSAdit Ranadive u32 max_cq; 23229c8d9ebSAdit Ranadive u32 max_cqe; 23329c8d9ebSAdit Ranadive u32 max_mr; 23429c8d9ebSAdit Ranadive u32 max_pd; 23529c8d9ebSAdit Ranadive u32 max_qp_rd_atom; 23629c8d9ebSAdit Ranadive u32 max_ee_rd_atom; 23729c8d9ebSAdit Ranadive u32 max_res_rd_atom; 23829c8d9ebSAdit Ranadive u32 max_qp_init_rd_atom; 23929c8d9ebSAdit Ranadive u32 max_ee_init_rd_atom; 24029c8d9ebSAdit Ranadive u32 max_ee; 24129c8d9ebSAdit Ranadive u32 max_rdd; 24229c8d9ebSAdit Ranadive u32 max_mw; 24329c8d9ebSAdit Ranadive u32 max_raw_ipv6_qp; 24429c8d9ebSAdit Ranadive u32 max_raw_ethy_qp; 24529c8d9ebSAdit Ranadive u32 max_mcast_grp; 24629c8d9ebSAdit Ranadive u32 max_mcast_qp_attach; 24729c8d9ebSAdit Ranadive u32 max_total_mcast_qp_attach; 24829c8d9ebSAdit Ranadive u32 max_ah; 24929c8d9ebSAdit Ranadive u32 max_fmr; 25029c8d9ebSAdit Ranadive u32 max_map_per_fmr; 25129c8d9ebSAdit Ranadive u32 max_srq; 25229c8d9ebSAdit Ranadive u32 max_srq_wr; 25329c8d9ebSAdit Ranadive u32 max_srq_sge; 25429c8d9ebSAdit Ranadive u32 max_uar; 25529c8d9ebSAdit Ranadive u32 gid_tbl_len; 25629c8d9ebSAdit Ranadive u16 max_pkeys; 25729c8d9ebSAdit Ranadive u8 local_ca_ack_delay; 25829c8d9ebSAdit Ranadive u8 phys_port_cnt; 25929c8d9ebSAdit Ranadive u8 mode; /* PVRDMA_DEVICE_MODE_ */ 26029c8d9ebSAdit Ranadive u8 atomic_ops; /* PVRDMA_ATOMIC_OP_* bits */ 26129c8d9ebSAdit Ranadive u8 bmme_flags; /* FRWR Mem Mgmt Extensions */ 26229c8d9ebSAdit Ranadive u8 gid_types; /* PVRDMA_GID_TYPE_FLAG_ */ 263a31a2a3bSAdit Ranadive u32 max_fast_reg_page_list_len; 26429c8d9ebSAdit Ranadive }; 26529c8d9ebSAdit Ranadive 26629c8d9ebSAdit Ranadive struct pvrdma_ring_page_info { 26729c8d9ebSAdit Ranadive u32 num_pages; /* Num pages incl. header. */ 26829c8d9ebSAdit Ranadive u32 reserved; /* Reserved. */ 26929c8d9ebSAdit Ranadive u64 pdir_dma; /* Page directory PA. */ 27029c8d9ebSAdit Ranadive }; 27129c8d9ebSAdit Ranadive 27229c8d9ebSAdit Ranadive #pragma pack(push, 1) 27329c8d9ebSAdit Ranadive 27429c8d9ebSAdit Ranadive struct pvrdma_device_shared_region { 27529c8d9ebSAdit Ranadive u32 driver_version; /* W: Driver version. */ 27629c8d9ebSAdit Ranadive u32 pad; /* Pad to 8-byte align. */ 27729c8d9ebSAdit Ranadive struct pvrdma_gos_info gos_info; /* W: Guest OS information. */ 27829c8d9ebSAdit Ranadive u64 cmd_slot_dma; /* W: Command slot address. */ 27929c8d9ebSAdit Ranadive u64 resp_slot_dma; /* W: Response slot address. */ 28029c8d9ebSAdit Ranadive struct pvrdma_ring_page_info async_ring_pages; 28129c8d9ebSAdit Ranadive /* W: Async ring page info. */ 28229c8d9ebSAdit Ranadive struct pvrdma_ring_page_info cq_ring_pages; 28329c8d9ebSAdit Ranadive /* W: CQ ring page info. */ 2848aa04ad3SAdit Ranadive union { 28529c8d9ebSAdit Ranadive u32 uar_pfn; /* W: UAR pageframe. */ 2868aa04ad3SAdit Ranadive u64 uar_pfn64; /* W: 64-bit UAR page frame. */ 2878aa04ad3SAdit Ranadive }; 28829c8d9ebSAdit Ranadive struct pvrdma_device_caps caps; /* R: Device capabilities. */ 28929c8d9ebSAdit Ranadive }; 29029c8d9ebSAdit Ranadive 29129c8d9ebSAdit Ranadive #pragma pack(pop) 29229c8d9ebSAdit Ranadive 29329c8d9ebSAdit Ranadive /* Event types. Currently a 1:1 mapping with enum ib_event. */ 29429c8d9ebSAdit Ranadive enum pvrdma_eqe_type { 29529c8d9ebSAdit Ranadive PVRDMA_EVENT_CQ_ERR, 29629c8d9ebSAdit Ranadive PVRDMA_EVENT_QP_FATAL, 29729c8d9ebSAdit Ranadive PVRDMA_EVENT_QP_REQ_ERR, 29829c8d9ebSAdit Ranadive PVRDMA_EVENT_QP_ACCESS_ERR, 29929c8d9ebSAdit Ranadive PVRDMA_EVENT_COMM_EST, 30029c8d9ebSAdit Ranadive PVRDMA_EVENT_SQ_DRAINED, 30129c8d9ebSAdit Ranadive PVRDMA_EVENT_PATH_MIG, 30229c8d9ebSAdit Ranadive PVRDMA_EVENT_PATH_MIG_ERR, 30329c8d9ebSAdit Ranadive PVRDMA_EVENT_DEVICE_FATAL, 30429c8d9ebSAdit Ranadive PVRDMA_EVENT_PORT_ACTIVE, 30529c8d9ebSAdit Ranadive PVRDMA_EVENT_PORT_ERR, 30629c8d9ebSAdit Ranadive PVRDMA_EVENT_LID_CHANGE, 30729c8d9ebSAdit Ranadive PVRDMA_EVENT_PKEY_CHANGE, 30829c8d9ebSAdit Ranadive PVRDMA_EVENT_SM_CHANGE, 30929c8d9ebSAdit Ranadive PVRDMA_EVENT_SRQ_ERR, 31029c8d9ebSAdit Ranadive PVRDMA_EVENT_SRQ_LIMIT_REACHED, 31129c8d9ebSAdit Ranadive PVRDMA_EVENT_QP_LAST_WQE_REACHED, 31229c8d9ebSAdit Ranadive PVRDMA_EVENT_CLIENT_REREGISTER, 31329c8d9ebSAdit Ranadive PVRDMA_EVENT_GID_CHANGE, 31429c8d9ebSAdit Ranadive }; 31529c8d9ebSAdit Ranadive 31629c8d9ebSAdit Ranadive /* Event queue element. */ 31729c8d9ebSAdit Ranadive struct pvrdma_eqe { 31829c8d9ebSAdit Ranadive u32 type; /* Event type. */ 31929c8d9ebSAdit Ranadive u32 info; /* Handle, other. */ 32029c8d9ebSAdit Ranadive }; 32129c8d9ebSAdit Ranadive 32229c8d9ebSAdit Ranadive /* CQ notification queue element. */ 32329c8d9ebSAdit Ranadive struct pvrdma_cqne { 32429c8d9ebSAdit Ranadive u32 info; /* Handle */ 32529c8d9ebSAdit Ranadive }; 32629c8d9ebSAdit Ranadive 32729c8d9ebSAdit Ranadive enum { 32829c8d9ebSAdit Ranadive PVRDMA_CMD_FIRST, 32929c8d9ebSAdit Ranadive PVRDMA_CMD_QUERY_PORT = PVRDMA_CMD_FIRST, 33029c8d9ebSAdit Ranadive PVRDMA_CMD_QUERY_PKEY, 33129c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_PD, 33229c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_PD, 33329c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_MR, 33429c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_MR, 33529c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_CQ, 33629c8d9ebSAdit Ranadive PVRDMA_CMD_RESIZE_CQ, 33729c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_CQ, 33829c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_QP, 33929c8d9ebSAdit Ranadive PVRDMA_CMD_MODIFY_QP, 34029c8d9ebSAdit Ranadive PVRDMA_CMD_QUERY_QP, 34129c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_QP, 34229c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_UC, 34329c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_UC, 34429c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_BIND, 34529c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_BIND, 3468b10ba78SBryan Tan PVRDMA_CMD_CREATE_SRQ, 3478b10ba78SBryan Tan PVRDMA_CMD_MODIFY_SRQ, 3488b10ba78SBryan Tan PVRDMA_CMD_QUERY_SRQ, 3498b10ba78SBryan Tan PVRDMA_CMD_DESTROY_SRQ, 35029c8d9ebSAdit Ranadive PVRDMA_CMD_MAX, 35129c8d9ebSAdit Ranadive }; 35229c8d9ebSAdit Ranadive 35329c8d9ebSAdit Ranadive enum { 35429c8d9ebSAdit Ranadive PVRDMA_CMD_FIRST_RESP = (1 << 31), 35529c8d9ebSAdit Ranadive PVRDMA_CMD_QUERY_PORT_RESP = PVRDMA_CMD_FIRST_RESP, 35629c8d9ebSAdit Ranadive PVRDMA_CMD_QUERY_PKEY_RESP, 35729c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_PD_RESP, 35829c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_PD_RESP_NOOP, 35929c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_MR_RESP, 36029c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_MR_RESP_NOOP, 36129c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_CQ_RESP, 36229c8d9ebSAdit Ranadive PVRDMA_CMD_RESIZE_CQ_RESP, 36329c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_CQ_RESP_NOOP, 36429c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_QP_RESP, 36529c8d9ebSAdit Ranadive PVRDMA_CMD_MODIFY_QP_RESP, 36629c8d9ebSAdit Ranadive PVRDMA_CMD_QUERY_QP_RESP, 36729c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_QP_RESP, 36829c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_UC_RESP, 36929c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_UC_RESP_NOOP, 37029c8d9ebSAdit Ranadive PVRDMA_CMD_CREATE_BIND_RESP_NOOP, 37129c8d9ebSAdit Ranadive PVRDMA_CMD_DESTROY_BIND_RESP_NOOP, 3728b10ba78SBryan Tan PVRDMA_CMD_CREATE_SRQ_RESP, 3738b10ba78SBryan Tan PVRDMA_CMD_MODIFY_SRQ_RESP, 3748b10ba78SBryan Tan PVRDMA_CMD_QUERY_SRQ_RESP, 3758b10ba78SBryan Tan PVRDMA_CMD_DESTROY_SRQ_RESP, 37629c8d9ebSAdit Ranadive PVRDMA_CMD_MAX_RESP, 37729c8d9ebSAdit Ranadive }; 37829c8d9ebSAdit Ranadive 37929c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr { 38029c8d9ebSAdit Ranadive u64 response; /* Key for response lookup. */ 38129c8d9ebSAdit Ranadive u32 cmd; /* PVRDMA_CMD_ */ 38229c8d9ebSAdit Ranadive u32 reserved; /* Reserved. */ 38329c8d9ebSAdit Ranadive }; 38429c8d9ebSAdit Ranadive 38529c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr { 38629c8d9ebSAdit Ranadive u64 response; /* From cmd hdr. */ 38729c8d9ebSAdit Ranadive u32 ack; /* PVRDMA_CMD_XXX_RESP */ 38829c8d9ebSAdit Ranadive u8 err; /* Error. */ 38929c8d9ebSAdit Ranadive u8 reserved[3]; /* Reserved. */ 39029c8d9ebSAdit Ranadive }; 39129c8d9ebSAdit Ranadive 39229c8d9ebSAdit Ranadive struct pvrdma_cmd_query_port { 39329c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 39429c8d9ebSAdit Ranadive u8 port_num; 39529c8d9ebSAdit Ranadive u8 reserved[7]; 39629c8d9ebSAdit Ranadive }; 39729c8d9ebSAdit Ranadive 39829c8d9ebSAdit Ranadive struct pvrdma_cmd_query_port_resp { 39929c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 40029c8d9ebSAdit Ranadive struct pvrdma_port_attr attrs; 40129c8d9ebSAdit Ranadive }; 40229c8d9ebSAdit Ranadive 40329c8d9ebSAdit Ranadive struct pvrdma_cmd_query_pkey { 40429c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 40529c8d9ebSAdit Ranadive u8 port_num; 40629c8d9ebSAdit Ranadive u8 index; 40729c8d9ebSAdit Ranadive u8 reserved[6]; 40829c8d9ebSAdit Ranadive }; 40929c8d9ebSAdit Ranadive 41029c8d9ebSAdit Ranadive struct pvrdma_cmd_query_pkey_resp { 41129c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 41229c8d9ebSAdit Ranadive u16 pkey; 41329c8d9ebSAdit Ranadive u8 reserved[6]; 41429c8d9ebSAdit Ranadive }; 41529c8d9ebSAdit Ranadive 41629c8d9ebSAdit Ranadive struct pvrdma_cmd_create_uc { 41729c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 4188aa04ad3SAdit Ranadive union { 41929c8d9ebSAdit Ranadive u32 pfn; /* UAR page frame number */ 4208aa04ad3SAdit Ranadive u64 pfn64; /* 64-bit UAR page frame number */ 4218aa04ad3SAdit Ranadive }; 42229c8d9ebSAdit Ranadive }; 42329c8d9ebSAdit Ranadive 42429c8d9ebSAdit Ranadive struct pvrdma_cmd_create_uc_resp { 42529c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 42629c8d9ebSAdit Ranadive u32 ctx_handle; 42729c8d9ebSAdit Ranadive u8 reserved[4]; 42829c8d9ebSAdit Ranadive }; 42929c8d9ebSAdit Ranadive 43029c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_uc { 43129c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 43229c8d9ebSAdit Ranadive u32 ctx_handle; 43329c8d9ebSAdit Ranadive u8 reserved[4]; 43429c8d9ebSAdit Ranadive }; 43529c8d9ebSAdit Ranadive 43629c8d9ebSAdit Ranadive struct pvrdma_cmd_create_pd { 43729c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 43829c8d9ebSAdit Ranadive u32 ctx_handle; 43929c8d9ebSAdit Ranadive u8 reserved[4]; 44029c8d9ebSAdit Ranadive }; 44129c8d9ebSAdit Ranadive 44229c8d9ebSAdit Ranadive struct pvrdma_cmd_create_pd_resp { 44329c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 44429c8d9ebSAdit Ranadive u32 pd_handle; 44529c8d9ebSAdit Ranadive u8 reserved[4]; 44629c8d9ebSAdit Ranadive }; 44729c8d9ebSAdit Ranadive 44829c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_pd { 44929c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 45029c8d9ebSAdit Ranadive u32 pd_handle; 45129c8d9ebSAdit Ranadive u8 reserved[4]; 45229c8d9ebSAdit Ranadive }; 45329c8d9ebSAdit Ranadive 45429c8d9ebSAdit Ranadive struct pvrdma_cmd_create_mr { 45529c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 45629c8d9ebSAdit Ranadive u64 start; 45729c8d9ebSAdit Ranadive u64 length; 45829c8d9ebSAdit Ranadive u64 pdir_dma; 45929c8d9ebSAdit Ranadive u32 pd_handle; 46029c8d9ebSAdit Ranadive u32 access_flags; 46129c8d9ebSAdit Ranadive u32 flags; 46229c8d9ebSAdit Ranadive u32 nchunks; 46329c8d9ebSAdit Ranadive }; 46429c8d9ebSAdit Ranadive 46529c8d9ebSAdit Ranadive struct pvrdma_cmd_create_mr_resp { 46629c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 46729c8d9ebSAdit Ranadive u32 mr_handle; 46829c8d9ebSAdit Ranadive u32 lkey; 46929c8d9ebSAdit Ranadive u32 rkey; 47029c8d9ebSAdit Ranadive u8 reserved[4]; 47129c8d9ebSAdit Ranadive }; 47229c8d9ebSAdit Ranadive 47329c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_mr { 47429c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 47529c8d9ebSAdit Ranadive u32 mr_handle; 47629c8d9ebSAdit Ranadive u8 reserved[4]; 47729c8d9ebSAdit Ranadive }; 47829c8d9ebSAdit Ranadive 47929c8d9ebSAdit Ranadive struct pvrdma_cmd_create_cq { 48029c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 48129c8d9ebSAdit Ranadive u64 pdir_dma; 48229c8d9ebSAdit Ranadive u32 ctx_handle; 48329c8d9ebSAdit Ranadive u32 cqe; 48429c8d9ebSAdit Ranadive u32 nchunks; 48529c8d9ebSAdit Ranadive u8 reserved[4]; 48629c8d9ebSAdit Ranadive }; 48729c8d9ebSAdit Ranadive 48829c8d9ebSAdit Ranadive struct pvrdma_cmd_create_cq_resp { 48929c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 49029c8d9ebSAdit Ranadive u32 cq_handle; 49129c8d9ebSAdit Ranadive u32 cqe; 49229c8d9ebSAdit Ranadive }; 49329c8d9ebSAdit Ranadive 49429c8d9ebSAdit Ranadive struct pvrdma_cmd_resize_cq { 49529c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 49629c8d9ebSAdit Ranadive u32 cq_handle; 49729c8d9ebSAdit Ranadive u32 cqe; 49829c8d9ebSAdit Ranadive }; 49929c8d9ebSAdit Ranadive 50029c8d9ebSAdit Ranadive struct pvrdma_cmd_resize_cq_resp { 50129c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 50229c8d9ebSAdit Ranadive u32 cqe; 50329c8d9ebSAdit Ranadive u8 reserved[4]; 50429c8d9ebSAdit Ranadive }; 50529c8d9ebSAdit Ranadive 50629c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_cq { 50729c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 50829c8d9ebSAdit Ranadive u32 cq_handle; 50929c8d9ebSAdit Ranadive u8 reserved[4]; 51029c8d9ebSAdit Ranadive }; 51129c8d9ebSAdit Ranadive 5128b10ba78SBryan Tan struct pvrdma_cmd_create_srq { 5138b10ba78SBryan Tan struct pvrdma_cmd_hdr hdr; 5148b10ba78SBryan Tan u64 pdir_dma; 5158b10ba78SBryan Tan u32 pd_handle; 5168b10ba78SBryan Tan u32 nchunks; 5178b10ba78SBryan Tan struct pvrdma_srq_attr attrs; 5188b10ba78SBryan Tan u8 srq_type; 5198b10ba78SBryan Tan u8 reserved[7]; 5208b10ba78SBryan Tan }; 5218b10ba78SBryan Tan 5228b10ba78SBryan Tan struct pvrdma_cmd_create_srq_resp { 5238b10ba78SBryan Tan struct pvrdma_cmd_resp_hdr hdr; 5248b10ba78SBryan Tan u32 srqn; 5258b10ba78SBryan Tan u8 reserved[4]; 5268b10ba78SBryan Tan }; 5278b10ba78SBryan Tan 5288b10ba78SBryan Tan struct pvrdma_cmd_modify_srq { 5298b10ba78SBryan Tan struct pvrdma_cmd_hdr hdr; 5308b10ba78SBryan Tan u32 srq_handle; 5318b10ba78SBryan Tan u32 attr_mask; 5328b10ba78SBryan Tan struct pvrdma_srq_attr attrs; 5338b10ba78SBryan Tan }; 5348b10ba78SBryan Tan 5358b10ba78SBryan Tan struct pvrdma_cmd_query_srq { 5368b10ba78SBryan Tan struct pvrdma_cmd_hdr hdr; 5378b10ba78SBryan Tan u32 srq_handle; 5388b10ba78SBryan Tan u8 reserved[4]; 5398b10ba78SBryan Tan }; 5408b10ba78SBryan Tan 5418b10ba78SBryan Tan struct pvrdma_cmd_query_srq_resp { 5428b10ba78SBryan Tan struct pvrdma_cmd_resp_hdr hdr; 5438b10ba78SBryan Tan struct pvrdma_srq_attr attrs; 5448b10ba78SBryan Tan }; 5458b10ba78SBryan Tan 5468b10ba78SBryan Tan struct pvrdma_cmd_destroy_srq { 5478b10ba78SBryan Tan struct pvrdma_cmd_hdr hdr; 5488b10ba78SBryan Tan u32 srq_handle; 5498b10ba78SBryan Tan u8 reserved[4]; 5508b10ba78SBryan Tan }; 5518b10ba78SBryan Tan 55229c8d9ebSAdit Ranadive struct pvrdma_cmd_create_qp { 55329c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 55429c8d9ebSAdit Ranadive u64 pdir_dma; 55529c8d9ebSAdit Ranadive u32 pd_handle; 55629c8d9ebSAdit Ranadive u32 send_cq_handle; 55729c8d9ebSAdit Ranadive u32 recv_cq_handle; 55829c8d9ebSAdit Ranadive u32 srq_handle; 55929c8d9ebSAdit Ranadive u32 max_send_wr; 56029c8d9ebSAdit Ranadive u32 max_recv_wr; 56129c8d9ebSAdit Ranadive u32 max_send_sge; 56229c8d9ebSAdit Ranadive u32 max_recv_sge; 56329c8d9ebSAdit Ranadive u32 max_inline_data; 56429c8d9ebSAdit Ranadive u32 lkey; 56529c8d9ebSAdit Ranadive u32 access_flags; 56629c8d9ebSAdit Ranadive u16 total_chunks; 56729c8d9ebSAdit Ranadive u16 send_chunks; 56829c8d9ebSAdit Ranadive u16 max_atomic_arg; 56929c8d9ebSAdit Ranadive u8 sq_sig_all; 57029c8d9ebSAdit Ranadive u8 qp_type; 57129c8d9ebSAdit Ranadive u8 is_srq; 57229c8d9ebSAdit Ranadive u8 reserved[3]; 57329c8d9ebSAdit Ranadive }; 57429c8d9ebSAdit Ranadive 57529c8d9ebSAdit Ranadive struct pvrdma_cmd_create_qp_resp { 57629c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 57729c8d9ebSAdit Ranadive u32 qpn; 57829c8d9ebSAdit Ranadive u32 max_send_wr; 57929c8d9ebSAdit Ranadive u32 max_recv_wr; 58029c8d9ebSAdit Ranadive u32 max_send_sge; 58129c8d9ebSAdit Ranadive u32 max_recv_sge; 58229c8d9ebSAdit Ranadive u32 max_inline_data; 58329c8d9ebSAdit Ranadive }; 58429c8d9ebSAdit Ranadive 585*a52dc3a1SBryan Tan struct pvrdma_cmd_create_qp_resp_v2 { 586*a52dc3a1SBryan Tan struct pvrdma_cmd_resp_hdr hdr; 587*a52dc3a1SBryan Tan u32 qpn; 588*a52dc3a1SBryan Tan u32 qp_handle; 589*a52dc3a1SBryan Tan u32 max_send_wr; 590*a52dc3a1SBryan Tan u32 max_recv_wr; 591*a52dc3a1SBryan Tan u32 max_send_sge; 592*a52dc3a1SBryan Tan u32 max_recv_sge; 593*a52dc3a1SBryan Tan u32 max_inline_data; 594*a52dc3a1SBryan Tan }; 595*a52dc3a1SBryan Tan 59629c8d9ebSAdit Ranadive struct pvrdma_cmd_modify_qp { 59729c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 59829c8d9ebSAdit Ranadive u32 qp_handle; 59929c8d9ebSAdit Ranadive u32 attr_mask; 60029c8d9ebSAdit Ranadive struct pvrdma_qp_attr attrs; 60129c8d9ebSAdit Ranadive }; 60229c8d9ebSAdit Ranadive 60329c8d9ebSAdit Ranadive struct pvrdma_cmd_query_qp { 60429c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 60529c8d9ebSAdit Ranadive u32 qp_handle; 60629c8d9ebSAdit Ranadive u32 attr_mask; 60729c8d9ebSAdit Ranadive }; 60829c8d9ebSAdit Ranadive 60929c8d9ebSAdit Ranadive struct pvrdma_cmd_query_qp_resp { 61029c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 61129c8d9ebSAdit Ranadive struct pvrdma_qp_attr attrs; 61229c8d9ebSAdit Ranadive }; 61329c8d9ebSAdit Ranadive 61429c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_qp { 61529c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 61629c8d9ebSAdit Ranadive u32 qp_handle; 61729c8d9ebSAdit Ranadive u8 reserved[4]; 61829c8d9ebSAdit Ranadive }; 61929c8d9ebSAdit Ranadive 62029c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_qp_resp { 62129c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 62229c8d9ebSAdit Ranadive u32 events_reported; 62329c8d9ebSAdit Ranadive u8 reserved[4]; 62429c8d9ebSAdit Ranadive }; 62529c8d9ebSAdit Ranadive 62629c8d9ebSAdit Ranadive struct pvrdma_cmd_create_bind { 62729c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 62829c8d9ebSAdit Ranadive u32 mtu; 62929c8d9ebSAdit Ranadive u32 vlan; 63029c8d9ebSAdit Ranadive u32 index; 63129c8d9ebSAdit Ranadive u8 new_gid[16]; 63229c8d9ebSAdit Ranadive u8 gid_type; 63329c8d9ebSAdit Ranadive u8 reserved[3]; 63429c8d9ebSAdit Ranadive }; 63529c8d9ebSAdit Ranadive 63629c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_bind { 63729c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 63829c8d9ebSAdit Ranadive u32 index; 63929c8d9ebSAdit Ranadive u8 dest_gid[16]; 64029c8d9ebSAdit Ranadive u8 reserved[4]; 64129c8d9ebSAdit Ranadive }; 64229c8d9ebSAdit Ranadive 64329c8d9ebSAdit Ranadive union pvrdma_cmd_req { 64429c8d9ebSAdit Ranadive struct pvrdma_cmd_hdr hdr; 64529c8d9ebSAdit Ranadive struct pvrdma_cmd_query_port query_port; 64629c8d9ebSAdit Ranadive struct pvrdma_cmd_query_pkey query_pkey; 64729c8d9ebSAdit Ranadive struct pvrdma_cmd_create_uc create_uc; 64829c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_uc destroy_uc; 64929c8d9ebSAdit Ranadive struct pvrdma_cmd_create_pd create_pd; 65029c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_pd destroy_pd; 65129c8d9ebSAdit Ranadive struct pvrdma_cmd_create_mr create_mr; 65229c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_mr destroy_mr; 65329c8d9ebSAdit Ranadive struct pvrdma_cmd_create_cq create_cq; 65429c8d9ebSAdit Ranadive struct pvrdma_cmd_resize_cq resize_cq; 65529c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_cq destroy_cq; 65629c8d9ebSAdit Ranadive struct pvrdma_cmd_create_qp create_qp; 65729c8d9ebSAdit Ranadive struct pvrdma_cmd_modify_qp modify_qp; 65829c8d9ebSAdit Ranadive struct pvrdma_cmd_query_qp query_qp; 65929c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_qp destroy_qp; 66029c8d9ebSAdit Ranadive struct pvrdma_cmd_create_bind create_bind; 66129c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_bind destroy_bind; 6628b10ba78SBryan Tan struct pvrdma_cmd_create_srq create_srq; 6638b10ba78SBryan Tan struct pvrdma_cmd_modify_srq modify_srq; 6648b10ba78SBryan Tan struct pvrdma_cmd_query_srq query_srq; 6658b10ba78SBryan Tan struct pvrdma_cmd_destroy_srq destroy_srq; 66629c8d9ebSAdit Ranadive }; 66729c8d9ebSAdit Ranadive 66829c8d9ebSAdit Ranadive union pvrdma_cmd_resp { 66929c8d9ebSAdit Ranadive struct pvrdma_cmd_resp_hdr hdr; 67029c8d9ebSAdit Ranadive struct pvrdma_cmd_query_port_resp query_port_resp; 67129c8d9ebSAdit Ranadive struct pvrdma_cmd_query_pkey_resp query_pkey_resp; 67229c8d9ebSAdit Ranadive struct pvrdma_cmd_create_uc_resp create_uc_resp; 67329c8d9ebSAdit Ranadive struct pvrdma_cmd_create_pd_resp create_pd_resp; 67429c8d9ebSAdit Ranadive struct pvrdma_cmd_create_mr_resp create_mr_resp; 67529c8d9ebSAdit Ranadive struct pvrdma_cmd_create_cq_resp create_cq_resp; 67629c8d9ebSAdit Ranadive struct pvrdma_cmd_resize_cq_resp resize_cq_resp; 67729c8d9ebSAdit Ranadive struct pvrdma_cmd_create_qp_resp create_qp_resp; 678*a52dc3a1SBryan Tan struct pvrdma_cmd_create_qp_resp_v2 create_qp_resp_v2; 67929c8d9ebSAdit Ranadive struct pvrdma_cmd_query_qp_resp query_qp_resp; 68029c8d9ebSAdit Ranadive struct pvrdma_cmd_destroy_qp_resp destroy_qp_resp; 6818b10ba78SBryan Tan struct pvrdma_cmd_create_srq_resp create_srq_resp; 6828b10ba78SBryan Tan struct pvrdma_cmd_query_srq_resp query_srq_resp; 68329c8d9ebSAdit Ranadive }; 68429c8d9ebSAdit Ranadive 68529c8d9ebSAdit Ranadive #endif /* __PVRDMA_DEV_API_H__ */ 686