]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ofed/management/opensm/include/vendor/osm_vendor_mtl.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_mtl.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  *      Definition of interface for the MTL Vendor
39  *         This object is part of the OpenSM family of objects.
40  */
41
42 #ifndef _OSM_VENDOR_MTL_H_
43 #define _OSM_VENDOR_MTL_H_
44
45 #undef IN
46 #undef OUT
47 #include <vapi_types.h>
48 #include <evapi.h>
49 #include <ib_mgt.h>
50 #define IN
51 #define OUT
52 #include "iba/ib_types.h"
53 #include "iba/ib_al.h"
54 #include <complib/cl_thread.h>
55 #include <complib/cl_types_osd.h>
56 #include <opensm/osm_base.h>
57
58 #ifdef __cplusplus
59 #  define BEGIN_C_DECLS extern "C" {
60 #  define END_C_DECLS   }
61 #else                           /* !__cplusplus */
62 #  define BEGIN_C_DECLS
63 #  define END_C_DECLS
64 #endif                          /* __cplusplus */
65
66 BEGIN_C_DECLS
67 /****h* OpenSM/Vendor MTL
68 * NAME
69 *       Vendor MTL
70 *
71 * DESCRIPTION
72 *
73 *       The Vendor MTL object is thread safe.
74 *
75 *       This object should be treated as opaque and should be
76 *       manipulated only through the provided functions.
77 *
78 *
79 * AUTHOR
80 *
81 *
82 *********/
83 /****s* OpenSM: Vendor MTL/osm_ca_info_t
84 * NAME
85 *   osm_ca_info_t
86 *
87 * DESCRIPTION
88 *       Structure containing information about local Channle Adapters.
89 *
90 * SYNOPSIS
91 */
92 typedef struct _osm_ca_info {
93         ib_net64_t guid;
94         size_t attr_size;
95         ib_ca_attr_t *p_attr;
96
97 } osm_ca_info_t;
98
99 /*
100 * FIELDS
101 *       guid
102 *               Node GUID of the local CA.
103 *
104 *       attr_size
105 *               Size of the CA attributes for this CA.
106 *
107 *       p_attr
108 *               Pointer to dynamicly allocated CA Attribute structure.
109 *
110 * SEE ALSO
111 *********/
112
113 #define OSM_DEFAULT_RETRY_COUNT 3
114
115 /***** OpenSM: Vendor MTL/osm_vendor_t
116 * NAME
117 *  osm_vendor_t
118 *
119 * DESCRIPTION
120 *       The structure defining a vendor
121 *
122 * SYNOPSIS
123 */
124 typedef struct _osm_vendor {
125         ib_al_handle_t h_al;
126         osm_log_t *p_log;
127         uint32_t ca_count;
128         osm_ca_info_t *p_ca_info;
129         uint32_t timeout;
130         struct osm_transaction_mgr_t *p_transaction_mgr;
131 } osm_vendor_t;
132
133 /*
134 * FIELDS
135 *       h_al
136 *               Handle returned by MTL open call (ib_open_al).
137 *
138 *       p_log
139 *               Pointer to the log object.
140 *
141 *       ca_count
142 *               Number of CA's in the array pointed to by p_ca_info.
143 *
144 *       p_ca_info
145 *               Pointer to dynamically allocated array of CA info objects.
146 *
147 *       timeout
148 *               Transaction timeout time in milliseconds.
149 *
150 *  p_transaction_mgr
151 *     Pointer to Transaction Manager.
152 *
153 * SEE ALSO
154 *********/
155
156 /****f* OpenSM: Vendor MTL/CA Info/osm_ca_info_get_port_guid
157 * NAME
158 *       osm_ca_info_get_port_guid
159 *
160 * DESCRIPTION
161 *       Returns the port GUID of the specified port owned by this CA.
162 *
163 * SYNOPSIS
164 */
165 static inline ib_net64_t
166 osm_ca_info_get_port_guid(IN const osm_ca_info_t * const p_ca_info,
167                           IN const uint8_t index)
168 {
169         return (p_ca_info->p_attr->p_port_attr[index].port_guid);
170 }
171
172 /*
173 * PARAMETERS
174 *       p_ca_info
175 *               [in] Pointer to a CA Info object.
176 *
177 *       index
178 *               [in] Port "index" for which to retrieve the port GUID.
179 *               The index is the offset into the ca's internal array
180 *               of port attributes.
181 *
182 * RETURN VALUE
183 *       Returns the port GUID of the specified port owned by this CA.
184 *
185 * NOTES
186 *
187 * SEE ALSO
188 *********/
189
190 /****f* OpenSM: Vendor MTL/CA Info/osm_ca_info_get_num_ports
191 * NAME
192 *       osm_ca_info_get_num_ports
193 *
194 * DESCRIPTION
195 *       Returns the number of ports of the given ca_info
196 *
197 * SYNOPSIS
198 */
199 static inline uint8_t
200 osm_ca_info_get_num_ports(IN const osm_ca_info_t * const p_ca_info)
201 {
202         return (p_ca_info->p_attr->num_ports);
203 }
204
205 /*
206 * PARAMETERS
207 *       p_ca_info
208 *               [in] Pointer to a CA Info object.
209 *
210 * RETURN VALUE
211 *       Returns the number of CA ports
212 *
213 * NOTES
214 *
215 * SEE ALSO
216 *********/
217
218 /****f* OpenSM: SM Vendor/osm_vendor_get_guid_ca_and_port
219  * NAME
220  *      osm_vendor_get_guid_ca_and_port
221  *
222  * DESCRIPTION
223  * Given the vendor obj and a guid
224  * return the ca id and port number that have that guid
225  *
226  * SYNOPSIS
227  */
228 ib_api_status_t
229 osm_vendor_get_guid_ca_and_port(IN osm_vendor_t * const p_vend,
230                                 IN ib_net64_t const guid,
231                                 OUT VAPI_hca_hndl_t * p_hca_hndl,
232                                 OUT VAPI_hca_id_t * p_hca_id,
233                                 OUT uint32_t * p_port_num);
234
235 /*
236 * PARAMETERS
237 *       p_vend
238 *               [in] Pointer to an osm_vendor_t object.
239 *
240 *       guid
241 *               [in] The guid to search for.
242 *
243 *       p_hca_id
244 *               [out] The HCA Id (VAPI_hca_id_t *) that the port is found on.
245 *
246 *       p_port_num
247 *               [out] Pointer to a port number arg to be filled with the port number with the given guid.
248 *
249 * RETURN VALUES
250 *       IB_SUCCESS on SUCCESS
251 *  IB_INVALID_GUID if the guid is notfound on any Local HCA Port
252 *
253 * NOTES
254 *
255 * SEE ALSO
256 *********/
257
258 /****f* OpenSM: Vendor MTL/osm_vendor_get_all_port_attr
259  * NAME
260  *      osm_vendor_get_all_port_attr
261  *
262  * DESCRIPTION
263  * Fill in the array of port_attr with all available ports on ALL the
264  * avilable CAs on this machine.
265  * ALSO -
266  * UPDATE THE VENDOR OBJECT LIST OF CA_INFO STRUCTS
267  *
268  * SYNOPSIS
269  */
270 ib_api_status_t osm_vendor_get_all_port_attr(IN osm_vendor_t * const p_vend,
271                                              IN ib_port_attr_t *
272                                              const p_attr_array,
273                                              IN uint32_t * const p_num_ports);
274
275 /*
276 * PARAMETERS
277 *       p_vend
278 *               [in] Pointer to an osm_vendor_t object.
279 *
280 *       p_attr_array
281 *               [out] Pre-allocated array of port attributes to be filled in
282 *
283 *       p_num_ports
284 *               [out] The size of the given array. Filled in by the actual numberof ports found.
285 *
286 * RETURN VALUES
287 *       IB_SUCCESS if OK
288 *  IB_INSUFFICIENT_MEMORY if not enough place for all ports was provided.
289 *
290 * NOTES
291 *
292 * SEE ALSO
293 *********/
294
295 #define OSM_BIND_INVALID_HANDLE 0
296
297 /****s* OpenSM: Vendor MTL/osm_bind_handle_t
298 * NAME
299 *   osm_bind_handle_t
300 *
301 * DESCRIPTION
302 *       handle returned by the vendor transport bind call.
303 *
304 * SYNOPSIS
305 */
306 typedef void *osm_bind_handle_t;
307
308 /***********/
309
310 /****s* OpenSM: Vendor MTL/osm_vend_wrap_t
311 * NAME
312 *   MTL Vendor MAD Wrapper
313 *
314 * DESCRIPTION
315 *       MTL specific MAD wrapper. MTL transport layer uses this for
316 *       housekeeping.
317 *
318 * SYNOPSIS
319 *********/
320 typedef struct _osm_vend_wrap_t {
321         uint32_t size;
322         osm_bind_handle_t h_bind;
323         // ib_av_handle_t         h_av;
324         ib_mad_t *mad_buf_p;
325         void *p_resp_madw;
326 } osm_vend_wrap_t;
327
328 /*
329 * FIELDS
330 *       size
331 *               Size of the allocated MAD
332 *
333 *       h_bind
334 *               Bind handle used on this transaction
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_MTL_H_ */