1*d6b92ffaSHans Petter Selasky /*
2*d6b92ffaSHans Petter Selasky * Copyright (c) 2004-2008 Voltaire, Inc. All rights reserved.
3*d6b92ffaSHans Petter Selasky * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
4*d6b92ffaSHans Petter Selasky * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5*d6b92ffaSHans Petter Selasky *
6*d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two
7*d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU
8*d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file
9*d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the
10*d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below:
11*d6b92ffaSHans Petter Selasky *
12*d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or
13*d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following
14*d6b92ffaSHans Petter Selasky * conditions are met:
15*d6b92ffaSHans Petter Selasky *
16*d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above
17*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following
18*d6b92ffaSHans Petter Selasky * disclaimer.
19*d6b92ffaSHans Petter Selasky *
20*d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above
21*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following
22*d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials
23*d6b92ffaSHans Petter Selasky * provided with the distribution.
24*d6b92ffaSHans Petter Selasky *
25*d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26*d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27*d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28*d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29*d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30*d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31*d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32*d6b92ffaSHans Petter Selasky * SOFTWARE.
33*d6b92ffaSHans Petter Selasky *
34*d6b92ffaSHans Petter Selasky */
35*d6b92ffaSHans Petter Selasky
36*d6b92ffaSHans Petter Selasky /*
37*d6b92ffaSHans Petter Selasky * Abstract:
38*d6b92ffaSHans Petter Selasky * Implementation of vendor specific transport interface.
39*d6b92ffaSHans Petter Selasky * This is the "Test" vendor which allows compilation and some
40*d6b92ffaSHans Petter Selasky * testing without a real vendor interface.
41*d6b92ffaSHans Petter Selasky * These objects are part of the opensm family of objects.
42*d6b92ffaSHans Petter Selasky *
43*d6b92ffaSHans Petter Selasky */
44*d6b92ffaSHans Petter Selasky
45*d6b92ffaSHans Petter Selasky #if HAVE_CONFIG_H
46*d6b92ffaSHans Petter Selasky # include <config.h>
47*d6b92ffaSHans Petter Selasky #endif /* HAVE_CONFIG_H */
48*d6b92ffaSHans Petter Selasky
49*d6b92ffaSHans Petter Selasky #ifdef OSM_VENDOR_INTF_TEST
50*d6b92ffaSHans Petter Selasky
51*d6b92ffaSHans Petter Selasky #include <stdlib.h>
52*d6b92ffaSHans Petter Selasky #include <string.h>
53*d6b92ffaSHans Petter Selasky #include <opensm/osm_log.h>
54*d6b92ffaSHans Petter Selasky #include <vendor/osm_vendor_test.h>
55*d6b92ffaSHans Petter Selasky #include <vendor/osm_vendor_api.h>
56*d6b92ffaSHans Petter Selasky
osm_vendor_construct(IN osm_vendor_t * const p_vend)57*d6b92ffaSHans Petter Selasky void osm_vendor_construct(IN osm_vendor_t * const p_vend)
58*d6b92ffaSHans Petter Selasky {
59*d6b92ffaSHans Petter Selasky memset(p_vend, 0, sizeof(*p_vend));
60*d6b92ffaSHans Petter Selasky }
61*d6b92ffaSHans Petter Selasky
osm_vendor_destroy(IN osm_vendor_t * const p_vend)62*d6b92ffaSHans Petter Selasky void osm_vendor_destroy(IN osm_vendor_t * const p_vend)
63*d6b92ffaSHans Petter Selasky {
64*d6b92ffaSHans Petter Selasky UNUSED_PARAM(p_vend);
65*d6b92ffaSHans Petter Selasky }
66*d6b92ffaSHans Petter Selasky
osm_vendor_delete(IN osm_vendor_t ** const pp_vend)67*d6b92ffaSHans Petter Selasky void osm_vendor_delete(IN osm_vendor_t ** const pp_vend)
68*d6b92ffaSHans Petter Selasky {
69*d6b92ffaSHans Petter Selasky CL_ASSERT(pp_vend);
70*d6b92ffaSHans Petter Selasky
71*d6b92ffaSHans Petter Selasky osm_vendor_destroy(*pp_vend);
72*d6b92ffaSHans Petter Selasky free(*pp_vend);
73*d6b92ffaSHans Petter Selasky *pp_vend = NULL;
74*d6b92ffaSHans Petter Selasky }
75*d6b92ffaSHans Petter Selasky
76*d6b92ffaSHans Petter Selasky ib_api_status_t
osm_vendor_init(IN osm_vendor_t * const p_vend,IN osm_log_t * const p_log,IN const uint32_t timeout)77*d6b92ffaSHans Petter Selasky osm_vendor_init(IN osm_vendor_t * const p_vend,
78*d6b92ffaSHans Petter Selasky IN osm_log_t * const p_log, IN const uint32_t timeout)
79*d6b92ffaSHans Petter Selasky {
80*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(p_log);
81*d6b92ffaSHans Petter Selasky
82*d6b92ffaSHans Petter Selasky CL_ASSERT(p_vend);
83*d6b92ffaSHans Petter Selasky CL_ASSERT(p_log);
84*d6b92ffaSHans Petter Selasky
85*d6b92ffaSHans Petter Selasky p_vend->p_log = p_log;
86*d6b92ffaSHans Petter Selasky p_vend->timeout = timeout;
87*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_log);
88*d6b92ffaSHans Petter Selasky return (IB_SUCCESS);
89*d6b92ffaSHans Petter Selasky }
90*d6b92ffaSHans Petter Selasky
osm_vendor_new(IN osm_log_t * const p_log,IN const uint32_t timeout)91*d6b92ffaSHans Petter Selasky osm_vendor_t *osm_vendor_new(IN osm_log_t * const p_log,
92*d6b92ffaSHans Petter Selasky IN const uint32_t timeout)
93*d6b92ffaSHans Petter Selasky {
94*d6b92ffaSHans Petter Selasky ib_api_status_t status;
95*d6b92ffaSHans Petter Selasky osm_vendor_t *p_vend;
96*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(p_log);
97*d6b92ffaSHans Petter Selasky
98*d6b92ffaSHans Petter Selasky CL_ASSERT(p_log);
99*d6b92ffaSHans Petter Selasky
100*d6b92ffaSHans Petter Selasky p_vend = malloc(sizeof(*p_vend));
101*d6b92ffaSHans Petter Selasky if (p_vend != NULL) {
102*d6b92ffaSHans Petter Selasky memset(p_vend, 0, sizeof(*p_vend));
103*d6b92ffaSHans Petter Selasky
104*d6b92ffaSHans Petter Selasky status = osm_vendor_init(p_vend, p_log, timeout);
105*d6b92ffaSHans Petter Selasky if (status != IB_SUCCESS) {
106*d6b92ffaSHans Petter Selasky osm_vendor_delete(&p_vend);
107*d6b92ffaSHans Petter Selasky }
108*d6b92ffaSHans Petter Selasky }
109*d6b92ffaSHans Petter Selasky
110*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_log);
111*d6b92ffaSHans Petter Selasky return (p_vend);
112*d6b92ffaSHans Petter Selasky }
113*d6b92ffaSHans Petter Selasky
osm_vendor_get(IN osm_bind_handle_t h_bind,IN const uint32_t size,IN osm_vend_wrap_t * const p_vend_wrap)114*d6b92ffaSHans Petter Selasky ib_mad_t *osm_vendor_get(IN osm_bind_handle_t h_bind,
115*d6b92ffaSHans Petter Selasky IN const uint32_t size,
116*d6b92ffaSHans Petter Selasky IN osm_vend_wrap_t * const p_vend_wrap)
117*d6b92ffaSHans Petter Selasky {
118*d6b92ffaSHans Petter Selasky osm_vendor_t *p_vend;
119*d6b92ffaSHans Petter Selasky ib_mad_t *p_mad;
120*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(h_bind->p_vend->p_log);
121*d6b92ffaSHans Petter Selasky
122*d6b92ffaSHans Petter Selasky UNUSED_PARAM(p_vend_wrap);
123*d6b92ffaSHans Petter Selasky
124*d6b92ffaSHans Petter Selasky p_vend = h_bind->p_vend;
125*d6b92ffaSHans Petter Selasky
126*d6b92ffaSHans Petter Selasky /*
127*d6b92ffaSHans Petter Selasky Simply malloc the MAD off the heap.
128*d6b92ffaSHans Petter Selasky */
129*d6b92ffaSHans Petter Selasky p_mad = (ib_mad_t *) malloc(size);
130*d6b92ffaSHans Petter Selasky
131*d6b92ffaSHans Petter Selasky osm_log(p_vend->p_log, OSM_LOG_VERBOSE,
132*d6b92ffaSHans Petter Selasky "osm_vendor_get: " "MAD %p.\n", p_mad);
133*d6b92ffaSHans Petter Selasky
134*d6b92ffaSHans Petter Selasky if (p_mad)
135*d6b92ffaSHans Petter Selasky memset(p_mad, 0, size);
136*d6b92ffaSHans Petter Selasky
137*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_vend->p_log);
138*d6b92ffaSHans Petter Selasky return (p_mad);
139*d6b92ffaSHans Petter Selasky }
140*d6b92ffaSHans Petter Selasky
141*d6b92ffaSHans Petter Selasky void
osm_vendor_put(IN osm_bind_handle_t h_bind,IN osm_vend_wrap_t * const p_vend_wrap,IN ib_mad_t * const p_mad)142*d6b92ffaSHans Petter Selasky osm_vendor_put(IN osm_bind_handle_t h_bind,
143*d6b92ffaSHans Petter Selasky IN osm_vend_wrap_t * const p_vend_wrap,
144*d6b92ffaSHans Petter Selasky IN ib_mad_t * const p_mad)
145*d6b92ffaSHans Petter Selasky {
146*d6b92ffaSHans Petter Selasky osm_vendor_t *p_vend;
147*d6b92ffaSHans Petter Selasky
148*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(h_bind->p_vend->p_log);
149*d6b92ffaSHans Petter Selasky
150*d6b92ffaSHans Petter Selasky UNUSED_PARAM(p_vend_wrap);
151*d6b92ffaSHans Petter Selasky
152*d6b92ffaSHans Petter Selasky p_vend = h_bind->p_vend;
153*d6b92ffaSHans Petter Selasky
154*d6b92ffaSHans Petter Selasky osm_log(p_vend->p_log, OSM_LOG_VERBOSE,
155*d6b92ffaSHans Petter Selasky "osm_vendor_put: " "MAD %p.\n", p_mad);
156*d6b92ffaSHans Petter Selasky
157*d6b92ffaSHans Petter Selasky /*
158*d6b92ffaSHans Petter Selasky Return the MAD to the heap.
159*d6b92ffaSHans Petter Selasky */
160*d6b92ffaSHans Petter Selasky free(p_mad);
161*d6b92ffaSHans Petter Selasky
162*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_vend->p_log);
163*d6b92ffaSHans Petter Selasky }
164*d6b92ffaSHans Petter Selasky
165*d6b92ffaSHans Petter Selasky ib_api_status_t
osm_vendor_send(IN osm_bind_handle_t h_bind,IN osm_vend_wrap_t * const p_vend_wrap,IN osm_mad_addr_t * const p_mad_addr,IN ib_mad_t * const p_mad,IN void * transaction_context,IN boolean_t const resp_expected)166*d6b92ffaSHans Petter Selasky osm_vendor_send(IN osm_bind_handle_t h_bind,
167*d6b92ffaSHans Petter Selasky IN osm_vend_wrap_t * const p_vend_wrap,
168*d6b92ffaSHans Petter Selasky IN osm_mad_addr_t * const p_mad_addr,
169*d6b92ffaSHans Petter Selasky IN ib_mad_t * const p_mad,
170*d6b92ffaSHans Petter Selasky IN void *transaction_context, IN boolean_t const resp_expected)
171*d6b92ffaSHans Petter Selasky {
172*d6b92ffaSHans Petter Selasky osm_vendor_t *p_vend = h_bind->p_vend;
173*d6b92ffaSHans Petter Selasky
174*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(p_vend->p_log);
175*d6b92ffaSHans Petter Selasky
176*d6b92ffaSHans Petter Selasky UNUSED_PARAM(p_vend_wrap);
177*d6b92ffaSHans Petter Selasky UNUSED_PARAM(p_mad_addr);
178*d6b92ffaSHans Petter Selasky UNUSED_PARAM(transaction_context);
179*d6b92ffaSHans Petter Selasky UNUSED_PARAM(resp_expected);
180*d6b92ffaSHans Petter Selasky
181*d6b92ffaSHans Petter Selasky osm_log(p_vend->p_log, OSM_LOG_VERBOSE,
182*d6b92ffaSHans Petter Selasky "osm_vendor_send: " "MAD %p.\n", p_mad);
183*d6b92ffaSHans Petter Selasky
184*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_vend->p_log);
185*d6b92ffaSHans Petter Selasky return (IB_SUCCESS);
186*d6b92ffaSHans Petter Selasky }
187*d6b92ffaSHans Petter Selasky
188*d6b92ffaSHans Petter Selasky osm_bind_handle_t
osm_vendor_bind(IN osm_vendor_t * const p_vend,IN osm_bind_info_t * const p_bind_info,IN osm_mad_pool_t * const p_mad_pool,IN osm_vend_mad_recv_callback_t mad_recv_callback,IN void * context)189*d6b92ffaSHans Petter Selasky osm_vendor_bind(IN osm_vendor_t * const p_vend,
190*d6b92ffaSHans Petter Selasky IN osm_bind_info_t * const p_bind_info,
191*d6b92ffaSHans Petter Selasky IN osm_mad_pool_t * const p_mad_pool,
192*d6b92ffaSHans Petter Selasky IN osm_vend_mad_recv_callback_t mad_recv_callback,
193*d6b92ffaSHans Petter Selasky IN void *context)
194*d6b92ffaSHans Petter Selasky {
195*d6b92ffaSHans Petter Selasky osm_bind_handle_t h_bind;
196*d6b92ffaSHans Petter Selasky
197*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(p_vend->p_log);
198*d6b92ffaSHans Petter Selasky
199*d6b92ffaSHans Petter Selasky CL_ASSERT(p_vend);
200*d6b92ffaSHans Petter Selasky CL_ASSERT(p_bind_info);
201*d6b92ffaSHans Petter Selasky CL_ASSERT(p_mad_pool);
202*d6b92ffaSHans Petter Selasky CL_ASSERT(mad_recv_callback);
203*d6b92ffaSHans Petter Selasky CL_ASSERT(context);
204*d6b92ffaSHans Petter Selasky
205*d6b92ffaSHans Petter Selasky UNUSED_PARAM(p_vend);
206*d6b92ffaSHans Petter Selasky UNUSED_PARAM(p_mad_pool);
207*d6b92ffaSHans Petter Selasky UNUSED_PARAM(mad_recv_callback);
208*d6b92ffaSHans Petter Selasky UNUSED_PARAM(context);
209*d6b92ffaSHans Petter Selasky
210*d6b92ffaSHans Petter Selasky h_bind = (osm_bind_handle_t) malloc(sizeof(*h_bind));
211*d6b92ffaSHans Petter Selasky if (h_bind != NULL) {
212*d6b92ffaSHans Petter Selasky memset(h_bind, 0, sizeof(*h_bind));
213*d6b92ffaSHans Petter Selasky h_bind->p_vend = p_vend;
214*d6b92ffaSHans Petter Selasky h_bind->port_guid = p_bind_info->port_guid;
215*d6b92ffaSHans Petter Selasky h_bind->mad_class = p_bind_info->mad_class;
216*d6b92ffaSHans Petter Selasky h_bind->class_version = p_bind_info->class_version;
217*d6b92ffaSHans Petter Selasky h_bind->is_responder = p_bind_info->is_responder;
218*d6b92ffaSHans Petter Selasky h_bind->is_trap_processor = p_bind_info->is_trap_processor;
219*d6b92ffaSHans Petter Selasky h_bind->is_report_processor = p_bind_info->is_report_processor;
220*d6b92ffaSHans Petter Selasky h_bind->send_q_size = p_bind_info->send_q_size;
221*d6b92ffaSHans Petter Selasky h_bind->recv_q_size = p_bind_info->recv_q_size;
222*d6b92ffaSHans Petter Selasky }
223*d6b92ffaSHans Petter Selasky
224*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_vend->p_log);
225*d6b92ffaSHans Petter Selasky return (h_bind);
226*d6b92ffaSHans Petter Selasky }
227*d6b92ffaSHans Petter Selasky
228*d6b92ffaSHans Petter Selasky ib_api_status_t
osm_vendor_get_ports(IN osm_vendor_t * const p_vend,IN ib_net64_t * const p_guids,IN uint32_t * const num_guids)229*d6b92ffaSHans Petter Selasky osm_vendor_get_ports(IN osm_vendor_t * const p_vend,
230*d6b92ffaSHans Petter Selasky IN ib_net64_t * const p_guids,
231*d6b92ffaSHans Petter Selasky IN uint32_t * const num_guids)
232*d6b92ffaSHans Petter Selasky {
233*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(p_vend->p_log);
234*d6b92ffaSHans Petter Selasky
235*d6b92ffaSHans Petter Selasky *p_guids = CL_NTOH64(0x0000000000001234);
236*d6b92ffaSHans Petter Selasky *num_guids = 1;
237*d6b92ffaSHans Petter Selasky
238*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_vend->p_log);
239*d6b92ffaSHans Petter Selasky return (IB_SUCCESS);
240*d6b92ffaSHans Petter Selasky }
241*d6b92ffaSHans Petter Selasky
osm_vendor_local_lid_change(IN osm_bind_handle_t h_bind)242*d6b92ffaSHans Petter Selasky ib_api_status_t osm_vendor_local_lid_change(IN osm_bind_handle_t h_bind)
243*d6b92ffaSHans Petter Selasky {
244*d6b92ffaSHans Petter Selasky osm_vendor_t *p_vend = h_bind->p_vend;
245*d6b92ffaSHans Petter Selasky
246*d6b92ffaSHans Petter Selasky OSM_LOG_ENTER(p_vend->p_log);
247*d6b92ffaSHans Petter Selasky
248*d6b92ffaSHans Petter Selasky OSM_LOG_EXIT(p_vend->p_log);
249*d6b92ffaSHans Petter Selasky
250*d6b92ffaSHans Petter Selasky return (IB_SUCCESS);
251*d6b92ffaSHans Petter Selasky }
252*d6b92ffaSHans Petter Selasky
osm_vendor_set_debug(IN osm_vendor_t * const p_vend,IN int32_t level)253*d6b92ffaSHans Petter Selasky void osm_vendor_set_debug(IN osm_vendor_t * const p_vend, IN int32_t level)
254*d6b92ffaSHans Petter Selasky {
255*d6b92ffaSHans Petter Selasky
256*d6b92ffaSHans Petter Selasky }
257*d6b92ffaSHans Petter Selasky
258*d6b92ffaSHans Petter Selasky #endif /* OSM_VENDOR_INTF_TEST */
259