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