]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ofed/management/opensm/include/vendor/osm_vendor_al.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ofed / management / opensm / include / vendor / osm_vendor_al.h
1 /*
2  * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
3  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
4  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5  *
6  * This software is available to you under a choice of one of two
7  * licenses.  You may choose to be licensed under the terms of the GNU
8  * General Public License (GPL) Version 2, available from the file
9  * COPYING in the main directory of this source tree, or the
10  * OpenIB.org BSD license below:
11  *
12  *     Redistribution and use in source and binary forms, with or
13  *     without modification, are permitted provided that the following
14  *     conditions are met:
15  *
16  *      - Redistributions of source code must retain the above
17  *        copyright notice, this list of conditions and the following
18  *        disclaimer.
19  *
20  *      - Redistributions in binary form must reproduce the above
21  *        copyright notice, this list of conditions and the following
22  *        disclaimer in the documentation and/or other materials
23  *        provided with the distribution.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32  * SOFTWARE.
33  *
34  */
35
36 /*
37  * Abstract:
38  *      Declaration of osm_mad_wrapper_t.
39  *      This object represents the context wrapper for OpenSM MAD processing.
40  *      This object is part of the OpenSM family of objects.
41  */
42
43 #ifndef _OSM_VENDOR_AL_H_
44 #define _OSM_VENDOR_AL_H_
45
46 #include <iba/ib_types.h>
47 #include <iba/ib_al.h>
48 #include <complib/cl_qlist.h>
49 #include <complib/cl_thread.h>
50 #include <opensm/osm_base.h>
51 #include <opensm/osm_log.h>
52
53 #ifdef __cplusplus
54 #  define BEGIN_C_DECLS extern "C" {
55 #  define END_C_DECLS   }
56 #else                           /* !__cplusplus */
57 #  define BEGIN_C_DECLS
58 #  define END_C_DECLS
59 #endif                          /* __cplusplus */
60
61 BEGIN_C_DECLS
62 /****h* OpenSM/Vendor AL
63 * NAME
64 *       Vendor AL
65 *
66 * DESCRIPTION
67 *
68 *       The Vendor AL object is thread safe.
69 *
70 *       This object should be treated as opaque and should be
71 *       manipulated only through the provided functions.
72 *
73 *       Enable various hacks to compensate for bugs in external code...
74 *
75 *
76 * AUTHOR
77 *
78 *
79 *********/
80 /****h* OpenSM/Vendor Access Layer (AL)
81 * NAME
82 *       Vendor AL
83 *
84 * DESCRIPTION
85 *       This file is the vendor specific file for the AL Infiniband API.
86 *
87 * AUTHOR
88 *       Steve King, Intel
89 *
90 *********/
91 #define OSM_AL_SQ_SGE 256
92 #define OSM_AL_RQ_SGE 256
93 #define OSM_DEFAULT_RETRY_COUNT 3
94 /* AL supports RMPP */
95 #define VENDOR_RMPP_SUPPORT 1
96 /****s* OpenSM: Vendor AL/osm_ca_info_t
97 * NAME
98 *   osm_ca_info_t
99 *
100 * DESCRIPTION
101 *       Structure containing information about local Channle Adapters.
102 *
103 * SYNOPSIS
104 */
105 typedef struct _osm_ca_info {
106         ib_net64_t guid;
107         size_t attr_size;
108         ib_ca_attr_t *p_attr;
109
110 } osm_ca_info_t;
111 /*
112 * FIELDS
113 *       guid
114 *               Node GUID of the local CA.
115 *
116 *       attr_size
117 *               Size of the CA attributes for this CA.
118 *
119 *       p_attr
120 *               Pointer to dynamicly allocated CA Attribute structure.
121 *
122 * SEE ALSO
123 *********/
124
125 /****f* OpenSM: CA Info/osm_ca_info_get_num_ports
126 * NAME
127 *       osm_ca_info_get_num_ports
128 *
129 * DESCRIPTION
130 *       Returns the number of ports owned by this CA.
131 *
132 * SYNOPSIS
133 */
134 static inline uint8_t
135 osm_ca_info_get_num_ports(IN const osm_ca_info_t * const p_ca_info)
136 {
137         return (p_ca_info->p_attr->num_ports);
138 }
139
140 /*
141 * PARAMETERS
142 *       p_ca_info
143 *               [in] Pointer to a CA Info object.
144 *
145 * RETURN VALUE
146 *       Returns the number of ports owned by this CA.
147 *
148 * NOTES
149 *
150 * SEE ALSO
151 *********/
152
153 /****f* OpenSM: CA Info/osm_ca_info_get_port_guid
154 * NAME
155 *       osm_ca_info_get_port_guid
156 *
157 * DESCRIPTION
158 *       Returns the port GUID of the specified port owned by this CA.
159 *
160 * SYNOPSIS
161 */
162 static inline ib_net64_t
163 osm_ca_info_get_port_guid(IN const osm_ca_info_t * const p_ca_info,
164                           IN const uint8_t index)
165 {
166         return (p_ca_info->p_attr->p_port_attr[index].port_guid);
167 }
168
169 /*
170 * PARAMETERS
171 *       p_ca_info
172 *               [in] Pointer to a CA Info object.
173 *
174 *       index
175 *               [in] Port "index" for which to retrieve the port GUID.
176 *               The index is the offset into the ca's internal array
177 *               of port attributes.
178 *
179 * RETURN VALUE
180 *       Returns the port GUID of the specified port owned by this CA.
181 *
182 * NOTES
183 *
184 * SEE ALSO
185 *********/
186
187 /****f* OpenSM: CA Info/osm_ca_info_get_port_num
188 * NAME
189 *       osm_ca_info_get_port_num
190 *
191 * DESCRIPTION
192 *       Returns the port number of the specified port owned by this CA.
193 *       Port numbers start with 1 for HCA's.
194 *
195 * SYNOPSIS
196 */
197 static inline uint8_t
198 osm_ca_info_get_port_num(IN const osm_ca_info_t * const p_ca_info,
199                          IN const uint8_t index)
200 {
201         return (p_ca_info->p_attr->p_port_attr[index].port_num);
202 }
203
204 /*
205 * PARAMETERS
206 *       p_ca_info
207 *               [in] Pointer to a CA Info object.
208 *
209 *       index
210 *               [in] Port "index" for which to retrieve the port GUID.
211 *               The index is the offset into the ca's internal array
212 *               of port attributes.
213 *
214 * RETURN VALUE
215 *       Returns the port GUID of the specified port owned by this CA.
216 *
217 * NOTES
218 *
219 * SEE ALSO
220 *********/
221
222 /****f* OpenSM: CA Info/osm_ca_info_get_ca_guid
223 * NAME
224 *       osm_ca_info_get_ca_guid
225 *
226 * DESCRIPTION
227 *       Returns the GUID of the specified CA.
228 *
229 * SYNOPSIS
230 */
231 static inline ib_net64_t
232 osm_ca_info_get_ca_guid(IN const osm_ca_info_t * const p_ca_info)
233 {
234         return (p_ca_info->p_attr->ca_guid);
235 }
236
237 /*
238 * PARAMETERS
239 *       p_ca_info
240 *               [in] Pointer to a CA Info object.
241 *
242 * RETURN VALUE
243 *       Returns the GUID of the specified CA.
244 *
245 * NOTES
246 *
247 * SEE ALSO
248 *********/
249
250 /****s* OpenSM: Vendor AL/osm_bind_handle_t
251 * NAME
252 *   osm_bind_handle_t
253 *
254 * DESCRIPTION
255 *       handle returned by the vendor transport bind call.
256 *
257 * SYNOPSIS
258 */
259 typedef struct _osm_vendor {
260         ib_al_handle_t h_al;
261         osm_log_t *p_log;
262         uint32_t ca_count;
263         osm_ca_info_t *p_ca_info;
264         uint32_t timeout;
265         ib_ca_handle_t h_ca;
266         ib_pd_handle_t h_pd;
267
268 } osm_vendor_t;
269 /*
270 * FIELDS
271 *       h_al
272 *               Handle returned by AL open call (ib_open_al).
273 *
274 *       p_log
275 *               Pointer to the log object.
276 *
277 *       ca_count
278 *               Number of CA's in the array pointed to by p_ca_info.
279 *
280 *       p_ca_info
281 *               Pointer to dynamically allocated array of CA info objects.
282 *
283 *       h_pool
284 *               MAD Pool handle returned by ib_create_mad_pool at init time.
285 *
286 *       timeout
287 *               Transaction timeout time in milliseconds.
288 *
289 * SEE ALSO
290 *********/
291
292 #define OSM_BIND_INVALID_HANDLE 0
293
294 /****s* OpenSM: Vendor AL/osm_bind_handle_t
295 * NAME
296 *   osm_bind_handle_t
297 *
298 * DESCRIPTION
299 *       handle returned by the vendor transport bind call.
300 *
301 * SYNOPSIS
302 */
303 typedef void *osm_bind_handle_t;
304 /***********/
305
306 /****s* OpenSM/osm_vend_wrap_t
307 * NAME
308 *   AL Vendor MAD Wrapper
309 *
310 * DESCRIPTION
311 *       AL specific MAD wrapper. AL transport layer uses this for
312 *       housekeeping.
313 *
314 * SYNOPSIS
315 *********/
316 typedef struct _osm_vend_wrap_t {
317         uint32_t size;
318         osm_bind_handle_t h_bind;
319         ib_mad_element_t *p_elem;
320         ib_av_handle_t h_av;
321         void *p_resp_madw;
322
323 } osm_vend_wrap_t;
324 /*
325 * FIELDS
326 *       size
327 *               Size of the allocated MAD
328 *
329 *       h_bind
330 *               Bind handle used on this transaction
331 *
332 *       p_elem
333 *               Pointer to the mad element structure associated with
334 *               this mad.
335 *
336 *       h_av
337 *               Address vector handle used for this transaction.
338 *
339 *       p_resp_madw
340 *               Pointer to the mad wrapper structure used to hold the pending
341 *               reponse to the mad, if any.  If a response is expected, the
342 *               wrapper for the reponse is allocated during the send call.
343 *
344 * SEE ALSO
345 *********/
346
347 END_C_DECLS
348 #endif                          /* _OSM_VENDOR_AL_H_ */