/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_IB_ADAPTERS_MLNX_UMAP_H #define _SYS_IB_ADAPTERS_MLNX_UMAP_H #ifdef __cplusplus extern "C" { #endif /* * mlnx_umap.h * Contains all of the definions necessary for communicating the data * needed for direct userland access to resources on Mellanox HCAs. */ /* * Note: The structs in this file are used in the interface(s) * between kernel service drivers, e.g. daplt, and the libraries * on top of them, e.g. udapl_tavor.so.1. When any of the * structs in this file change, any version control between the * kernel service driver and the library will need to change. * * There is a version control on the structs defined here. The library * (consumer of structs from ibt_ci_data_out()) must verify a version * field to correctly read the data provided by the kernel driver * (tavor, arbel, and hermon). */ #define MLNX_UMAP_IF_VERSION 2 /* * The following defines are used in the database type field for each database * entry. They specify the type of object (UAR pages, PIDs, CQ, QP, and MR * umemcookie) that corresponds to the database key value. On database queries, * this type value must match the search criterion. */ #define MLNX_UMAP_UARPG_RSRC 0x11 #define MLNX_UMAP_BLUEFLAMEPG_RSRC 0x12 #define MLNX_UMAP_PID_RSRC 0x22 #define MLNX_UMAP_CQMEM_RSRC 0x33 #define MLNX_UMAP_QPMEM_RSRC 0x44 #define MLNX_UMAP_MRMEM_RSRC 0x55 #define MLNX_UMAP_SRQMEM_RSRC 0x66 #define MLNX_UMAP_DBRMEM_RSRC 0x77 #define MLNX_UMAP_RSRC_TYPE_MASK 0xFF #define MLNX_UMAP_RSRC_TYPE_SHIFT 8 /* umap structures */ typedef struct mlnx_umap_cq_data_out_s { uint_t mcq_rev; uint32_t mcq_cqnum; uint64_t mcq_mapoffset; uint64_t mcq_maplen; uint32_t mcq_numcqe; uint32_t mcq_cqesz; /* Arbel/Hermon doorbell records */ uint64_t mcq_armdbr_mapoffset; uint64_t mcq_armdbr_maplen; uint64_t mcq_polldbr_mapoffset; uint64_t mcq_polldbr_maplen; uint32_t mcq_armdbr_offset; uint32_t mcq_polldbr_offset; } mlnx_umap_cq_data_out_t; typedef struct mlnx_umap_qp_data_out_s { uint_t mqp_rev; uint32_t mqp_qpnum; uint64_t mqp_mapoffset; uint64_t mqp_maplen; uint32_t mqp_rq_off; uint32_t mqp_rq_desc_addr; uint32_t mqp_rq_numwqe; uint32_t mqp_rq_wqesz; uint32_t mqp_sq_off; uint32_t mqp_sq_desc_addr; uint32_t mqp_sq_numwqe; uint32_t mqp_sq_wqesz; /* Arbel/Hermon doorbell records */ uint64_t mqp_sdbr_mapoffset; uint64_t mqp_sdbr_maplen; uint64_t mqp_rdbr_mapoffset; uint64_t mqp_rdbr_maplen; uint32_t mqp_sdbr_offset; uint32_t mqp_rdbr_offset; /* Hermon send queue headroom, in units of wqes */ uint32_t mqp_sq_headroomwqes; } mlnx_umap_qp_data_out_t; typedef struct mlnx_umap_srq_data_out_s { uint_t msrq_rev; uint32_t msrq_srqnum; uint64_t msrq_mapoffset; uint64_t msrq_maplen; uint32_t msrq_desc_addr; uint32_t msrq_numwqe; uint32_t msrq_wqesz; uint32_t msrq_pad1; /* reserved */ /* Arbel/Hermon doorbell records */ uint64_t msrq_rdbr_mapoffset; uint64_t msrq_rdbr_maplen; uint32_t msrq_rdbr_offset; uint32_t msrq_reserved; } mlnx_umap_srq_data_out_t; typedef struct mlnx_umap_pd_data_out_s { uint_t mpd_rev; uint32_t mpd_pdnum; } mlnx_umap_pd_data_out_t; #ifdef __cplusplus } #endif #endif /* _SYS_IB_ADAPTERS_MLNX_UMAP_H */