1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
/*
* 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 */
|