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 TS Vendor 39 * This object is part of the OpenSM family of objects. 40 */ 41 42#ifndef _OSM_VENDOR_TS_H_ 43#define _OSM_VENDOR_TS_H_ 44 45#undef IN 46#undef OUT 47#include <vapi_types.h> 48#include <evapi.h> 49#include <ib/ts_api_ng/useraccess/include/ts_ib_useraccess.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#include <opensm/osm_log.h> 58 59#ifdef __cplusplus 60# define BEGIN_C_DECLS extern "C" { 61# define END_C_DECLS } 62#else /* !__cplusplus */ 63# define BEGIN_C_DECLS 64# define END_C_DECLS 65#endif /* __cplusplus */ 66 67BEGIN_C_DECLS 68/****s* OpenSM: Vendor TS/osm_bind_handle_t 69 * NAME 70 * osm_bind_handle_t 71 * 72 * DESCRIPTION 73 * handle returned by the vendor transport bind call. 74 * 75 * SYNOPSIS 76 */ 77typedef void *osm_bind_handle_t; 78/* 79**********/ 80#define OSM_DEFAULT_RETRY_COUNT 3 81 82/****s* OpenSM: Vendor osm_ts_bind_info_t 83 * NAME 84 * osm_ts_bind_info_t 85 * 86 * DESCRIPTION 87 * Handle to the result of binding a class callbacks . 88 * 89 * SYNOPSIS 90 */ 91typedef struct _osm_ts_bind_info { 92 int ul_dev_fd; 93 VAPI_hca_hndl_t hca_hndl; 94 struct _osm_vendor *p_vend; 95 void *client_context; 96 uint8_t port_num; 97 void *rcv_callback; 98 void *send_err_callback; 99 struct _osm_mad_pool *p_osm_pool; 100 cl_thread_t poller; 101} osm_ts_bind_info_t; 102/* 103 * FIELDS 104 * ul_dev_file_hdl 105 * the file handle to be used for sending the MADs 106 * 107 * hca_hndl 108 * Handle to the HCA provided by the underlying VAPI 109 * 110 * p_vend 111 * Pointer to the vendor object. 112 * 113 * client_context 114 * User's context passed during osm_bind 115 * 116 * hca_id 117 * HCA Id we bind to. 118 * 119 * port_num 120 * Port number (within the HCA) of the bound port. 121 * 122 * rcv_callback 123 * OSM Callback function to be called on receive of MAD. 124 * 125 * send_err_callback 126 * OSM Callback to be called on send error. 127 * 128 * p_osm_pool 129 * Points to the MAD pool used by OSM 130 * 131 * poller 132 * A thread reading from the device file handle 133 * 134 * SEE ALSO 135 *********/ 136 137/****h* OpenSM/Vendor TS 138 * NAME 139 * Vendor TS 140 * 141 * DESCRIPTION 142 * 143 * The Vendor TS object is thread safe. 144 * 145 * This object should be treated as opaque and should be 146 * manipulated only through the provided functions. 147 * 148 * 149 * AUTHOR 150 * 151 * 152 *********/ 153 154/****s* OpenSM: Vendor TS/osm_ca_info_t 155 * NAME 156 * osm_ca_info_t 157 * 158 * DESCRIPTION 159 * Structure containing information about local Channle Adapters. 160 * 161 * SYNOPSIS 162 */ 163typedef struct _osm_ca_info { 164 ib_net64_t guid; 165 size_t attr_size; 166 ib_ca_attr_t *p_attr; 167 168} osm_ca_info_t; 169 170/* 171 * FIELDS 172 * guid 173 * Node GUID of the local CA. 174 * 175 * attr_size 176 * Size of the CA attributes for this CA. 177 * 178 * p_attr 179 * Pointer to dynamicly allocated CA Attribute structure. 180 * 181 * SEE ALSO 182 *********/ 183 184/***** OpenSM: Vendor TS/osm_vendor_t 185 * NAME 186 * osm_vendor_t 187 * 188 * DESCRIPTION 189 * The structure defining a TS vendor 190 * 191 * SYNOPSIS 192 */ 193typedef struct _osm_vendor { 194 osm_log_t *p_log; 195 uint32_t ca_count; 196 osm_ca_info_t *p_ca_info; 197 uint32_t timeout; 198 struct _osm_transaction_mgr *p_transaction_mgr; 199 osm_ts_bind_info_t smi_bind; 200 osm_ts_bind_info_t gsi_bind; 201} osm_vendor_t; 202 203/* 204 * FIELDS 205 * h_al 206 * Handle returned by TS open call . 207 * 208 * p_log 209 * Pointer to the log object. 210 * 211 * ca_count 212 * Number of CA's in the array pointed to by p_ca_info. 213 * 214 * p_ca_info 215 * Pointer to dynamically allocated array of CA info objects. 216 * 217 * timeout 218 * Transaction timeout time in milliseconds. 219 * 220 * p_transaction_mgr 221 * Pointer to Transaction Manager. 222 * 223 * smi_bind 224 * Bind information for handling SMI MADs 225 * 226 * gsi_bind 227 * Bind information for GSI MADs 228 * 229 * SEE ALSO 230 *********/ 231 232/****f* OpenSM: Vendor TS/CA Info/osm_ca_info_get_port_guid 233 * NAME 234 * osm_ca_info_get_port_guid 235 * 236 * DESCRIPTION 237 * Returns the port GUID of the specified port owned by this CA. 238 * 239 * SYNOPSIS 240 */ 241static inline ib_net64_t 242osm_ca_info_get_port_guid(IN const osm_ca_info_t * const p_ca_info, 243 IN const uint8_t index) 244{ 245 return (p_ca_info->p_attr->p_port_attr[index].port_guid); 246} 247 248/* 249 * PARAMETERS 250 * p_ca_info 251 * [in] Pointer to a CA Info object. 252 * 253 * index 254 * [in] Port "index" for which to retrieve the port GUID. 255 * The index is the offset into the ca's internal array 256 * of port attributes. 257 * 258 * RETURN VALUE 259 * Returns the port GUID of the specified port owned by this CA. 260 * 261 * NOTES 262 * 263 * SEE ALSO 264 *********/ 265 266/****f* OpenSM: Vendor TS/CA Info/osm_ca_info_get_num_ports 267 * NAME 268 * osm_ca_info_get_num_ports 269 * 270 * DESCRIPTION 271 * Returns the number of ports of the given ca_info 272 * 273 * SYNOPSIS 274 */ 275static inline uint8_t 276osm_ca_info_get_num_ports(IN const osm_ca_info_t * const p_ca_info) 277{ 278 return (p_ca_info->p_attr->num_ports); 279} 280 281/* 282 * PARAMETERS 283 * p_ca_info 284 * [in] Pointer to a CA Info object. 285 * 286 * RETURN VALUE 287 * Returns the number of CA ports 288 * 289 * NOTES 290 * 291 * SEE ALSO 292 *********/ 293 294/****f* OpenSM: SM Vendor/osm_vendor_get_guid_ca_and_port 295 * NAME 296 * osm_vendor_get_guid_ca_and_port 297 * 298 * DESCRIPTION 299 * Given the vendor obj and a guid 300 * return the ca id and port number that have that guid 301 * 302 * SYNOPSIS 303 */ 304ib_api_status_t 305osm_vendor_get_guid_ca_and_port(IN osm_vendor_t * const p_vend, 306 IN ib_net64_t const guid, 307 OUT VAPI_hca_hndl_t * p_hca_hndl, 308 OUT VAPI_hca_id_t * p_hca_id, 309 OUT uint32_t * p_port_num); 310 311/* 312 * PARAMETERS 313 * p_vend 314 * [in] Pointer to an osm_vendor_t object. 315 * 316 * guid 317 * [in] The guid to search for. 318 * 319 * p_hca_id 320 * [out] The HCA Id (VAPI_hca_id_t *) that the port is found on. 321 * 322 * p_port_num 323 * [out] Pointer to a port number arg to be filled with the port number with the given guid. 324 * 325 * RETURN VALUES 326 * IB_SUCCESS on SUCCESS 327 * IB_INVALID_GUID if the guid is notfound on any Local HCA Port 328 * 329 * NOTES 330 * 331 * SEE ALSO 332 *********/ 333 334/****f* OpenSM: Vendor TS/osm_vendor_get_all_port_attr 335 * NAME 336 * osm_vendor_get_all_port_attr 337 * 338 * DESCRIPTION 339 * Fill in the array of port_attr with all available ports on ALL the 340 * avilable CAs on this machine. 341 * ALSO - 342 * UPDATE THE VENDOR OBJECT LIST OF CA_INFO STRUCTS 343 * 344 * SYNOPSIS 345 */ 346ib_api_status_t osm_vendor_get_all_port_attr(IN osm_vendor_t * const p_vend, 347 IN ib_port_attr_t * 348 const p_attr_array, 349 IN uint32_t * const p_num_ports); 350 351/* 352 * PARAMETERS 353 * p_vend 354 * [in] Pointer to an osm_vendor_t object. 355 * 356 * p_attr_array 357 * [out] Pre-allocated array of port attributes to be filled in 358 * 359 * p_num_ports 360 * [out] The size of the given array. Filled in by the actual numberof ports found. 361 * 362 * RETURN VALUES 363 * IB_SUCCESS if OK 364 * IB_INSUFFICIENT_MEMORY if not enough place for all ports was provided. 365 * 366 * NOTES 367 * 368 * SEE ALSO 369 *********/ 370 371#define OSM_BIND_INVALID_HANDLE 0 372 373/****s* OpenSM: Vendor TS/osm_vend_wrap_t 374 * NAME 375 * TS Vendor MAD Wrapper 376 * 377 * DESCRIPTION 378 * TS specific MAD wrapper. TS transport layer uses this for 379 * housekeeping. 380 * 381 * SYNOPSIS 382 *********/ 383typedef struct _osm_vend_wrap_t { 384 uint32_t size; 385 osm_bind_handle_t h_bind; 386 ib_mad_t *p_mad_buf; 387 void *p_resp_madw; 388} osm_vend_wrap_t; 389 390/* 391 * FIELDS 392 * size 393 * Size of the allocated MAD 394 * 395 * h_bind 396 * Bind handle used on this transaction 397 * 398 * h_av 399 * Address vector handle used for this transaction. 400 * 401 * p_resp_madw 402 * Pointer to the mad wrapper structure used to hold the pending 403 * reponse to the mad, if any. If a response is expected, the 404 * wrapper for the reponse is allocated during the send call. 405 * 406 * SEE ALSO 407 *********/ 408 409END_C_DECLS 410#endif /* _OSM_VENDOR_TS_H_ */ 411