1/*
2 * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
3 * Copyright (c) 2002-2011 Mellanox Technologies LTD. All rights reserved.
4 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5 * Copyright (c) 2009 HNR Consulting. All rights reserved.
6 * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
7 *
8 * This software is available to you under a choice of one of two
9 * licenses.  You may choose to be licensed under the terms of the GNU
10 * General Public License (GPL) Version 2, available from the file
11 * COPYING in the main directory of this source tree, or the
12 * OpenIB.org BSD license below:
13 *
14 *     Redistribution and use in source and binary forms, with or
15 *     without modification, are permitted provided that the following
16 *     conditions are met:
17 *
18 *      - Redistributions of source code must retain the above
19 *        copyright notice, this list of conditions and the following
20 *        disclaimer.
21 *
22 *      - Redistributions in binary form must reproduce the above
23 *        copyright notice, this list of conditions and the following
24 *        disclaimer in the documentation and/or other materials
25 *        provided with the distribution.
26 *
27 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
31 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
32 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
33 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
34 * SOFTWARE.
35 *
36 */
37
38#if !defined(__IB_TYPES_H__)
39#define __IB_TYPES_H__
40
41#include <string.h>
42#include <complib/cl_types.h>
43#include <complib/cl_byteswap.h>
44
45#ifdef __cplusplus
46#  define BEGIN_C_DECLS extern "C" {
47#  define END_C_DECLS   }
48#else				/* !__cplusplus */
49#  define BEGIN_C_DECLS
50#  define END_C_DECLS
51#endif				/* __cplusplus */
52
53BEGIN_C_DECLS
54#if defined( __WIN__ )
55#if defined( EXPORT_AL_SYMBOLS )
56#define OSM_EXPORT	__declspec(dllexport)
57#else
58#define OSM_EXPORT	__declspec(dllimport)
59#endif
60#define OSM_API __stdcall
61#define OSM_CDECL __cdecl
62#else
63#define OSM_EXPORT	extern
64#define OSM_API
65#define OSM_CDECL
66#define __ptr64
67#endif
68/****h* IBA Base/Constants
69* NAME
70*	Constants
71*
72* DESCRIPTION
73*	The following constants are used throughout the IBA code base.
74*
75*	Definitions are from the InfiniBand Architecture Specification v1.3.1
76*
77*********/
78/****d* IBA Base: Constants/MAD_BLOCK_SIZE
79* NAME
80*	MAD_BLOCK_SIZE
81*
82* DESCRIPTION
83*	Size of a non-RMPP MAD datagram.
84*
85* SOURCE
86*/
87#define MAD_BLOCK_SIZE						256
88/**********/
89/****d* IBA Base: Constants/MAD_RMPP_HDR_SIZE
90* NAME
91*	MAD_RMPP_HDR_SIZE
92*
93* DESCRIPTION
94*	Size of an RMPP header, including the common MAD header.
95*
96* SOURCE
97*/
98#define MAD_RMPP_HDR_SIZE					36
99/**********/
100/****d* IBA Base: Constants/MAD_RMPP_DATA_SIZE
101* NAME
102*	MAD_RMPP_DATA_SIZE
103*
104* DESCRIPTION
105*	Size of an RMPP transaction data section.
106*
107* SOURCE
108*/
109#define MAD_RMPP_DATA_SIZE		(MAD_BLOCK_SIZE - MAD_RMPP_HDR_SIZE)
110/**********/
111/****d* IBA Base: Constants/MAD_BLOCK_GRH_SIZE
112* NAME
113*	MAD_BLOCK_GRH_SIZE
114*
115* DESCRIPTION
116*	Size of a MAD datagram, including the GRH.
117*
118* SOURCE
119*/
120#define MAD_BLOCK_GRH_SIZE					296
121/**********/
122/****d* IBA Base: Constants/IB_LID_PERMISSIVE
123* NAME
124*	IB_LID_PERMISSIVE
125*
126* DESCRIPTION
127*	Permissive LID
128*
129* SOURCE
130*/
131#define IB_LID_PERMISSIVE					0xFFFF
132/**********/
133/****d* IBA Base: Constants/IB_DEFAULT_PKEY
134* NAME
135*	IB_DEFAULT_PKEY
136*
137* DESCRIPTION
138*	P_Key value for the default partition.
139*
140* SOURCE
141*/
142#define IB_DEFAULT_PKEY						0xFFFF
143/**********/
144/****d* IBA Base: Constants/IB_QP1_WELL_KNOWN_Q_KEY
145* NAME
146*	IB_QP1_WELL_KNOWN_Q_KEY
147*
148* DESCRIPTION
149*	Well-known Q_Key for QP1 privileged mode access (15.4.2).
150*
151* SOURCE
152*/
153#define IB_QP1_WELL_KNOWN_Q_KEY				CL_HTON32(0x80010000)
154/*********/
155#define IB_QP0						0
156#define IB_QP1						CL_HTON32(1)
157#define IB_QP_PRIVILEGED_Q_KEY				CL_HTON32(0x80000000)
158/****d* IBA Base: Constants/IB_LID_UCAST_START
159* NAME
160*	IB_LID_UCAST_START
161*
162* DESCRIPTION
163*	Lowest valid unicast LID value.
164*
165* SOURCE
166*/
167#define IB_LID_UCAST_START_HO				0x0001
168#define IB_LID_UCAST_START				(CL_HTON16(IB_LID_UCAST_START_HO))
169/**********/
170/****d* IBA Base: Constants/IB_LID_UCAST_END
171* NAME
172*	IB_LID_UCAST_END
173*
174* DESCRIPTION
175*	Highest valid unicast LID value.
176*
177* SOURCE
178*/
179#define IB_LID_UCAST_END_HO				0xBFFF
180#define IB_LID_UCAST_END				(CL_HTON16(IB_LID_UCAST_END_HO))
181/**********/
182/****d* IBA Base: Constants/IB_LID_MCAST_START
183* NAME
184*	IB_LID_MCAST_START
185*
186* DESCRIPTION
187*	Lowest valid multicast LID value.
188*
189* SOURCE
190*/
191#define IB_LID_MCAST_START_HO				0xC000
192#define IB_LID_MCAST_START				(CL_HTON16(IB_LID_MCAST_START_HO))
193/**********/
194/****d* IBA Base: Constants/IB_LID_MCAST_END
195* NAME
196*	IB_LID_MCAST_END
197*
198* DESCRIPTION
199*	Highest valid multicast LID value.
200*
201* SOURCE
202*/
203#define IB_LID_MCAST_END_HO				0xFFFE
204#define IB_LID_MCAST_END				(CL_HTON16(IB_LID_MCAST_END_HO))
205/**********/
206/****d* IBA Base: Constants/IB_DEFAULT_SUBNET_PREFIX
207* NAME
208*	IB_DEFAULT_SUBNET_PREFIX
209*
210* DESCRIPTION
211*	Default subnet GID prefix.
212*
213* SOURCE
214*/
215#define IB_DEFAULT_SUBNET_PREFIX			(CL_HTON64(0xFE80000000000000ULL))
216#define IB_DEFAULT_SUBNET_PREFIX_HO			(0xFE80000000000000ULL)
217/**********/
218/****d* IBA Base: Constants/IB_NODE_NUM_PORTS_MAX
219* NAME
220*	IB_NODE_NUM_PORTS_MAX
221*
222* DESCRIPTION
223*	Maximum number of ports in a single node (14.2.5.7).
224* SOURCE
225*/
226#define IB_NODE_NUM_PORTS_MAX				0xFE
227/**********/
228/****d* IBA Base: Constants/IB_INVALID_PORT_NUM
229* NAME
230*	IB_INVALID_PORT_NUM
231*
232* DESCRIPTION
233*	Value used to indicate an invalid port number (14.2.5.10).
234*
235* SOURCE
236*/
237#define IB_INVALID_PORT_NUM				0xFF
238/*********/
239/****d* IBA Base: Constants/IB_SUBNET_PATH_HOPS_MAX
240* NAME
241*	IB_SUBNET_PATH_HOPS_MAX
242*
243* DESCRIPTION
244*	Maximum number of directed route switch hops in a subnet (14.2.1.2).
245*
246* SOURCE
247*/
248#define IB_SUBNET_PATH_HOPS_MAX				64
249/*********/
250/****d* IBA Base: Constants/IB_HOPLIMIT_MAX
251* NAME
252*	IB_HOPLIMIT_MAX
253*
254* DESCRIPTION
255*       Maximum number of router hops allowed.
256*
257* SOURCE
258*/
259#define IB_HOPLIMIT_MAX					255
260/*********/
261/****d* IBA Base: Constants/IB_MC_SCOPE_*
262* NAME
263*	IB_MC_SCOPE_*
264*
265* DESCRIPTION
266*	Scope component definitions from IBA 1.2.1 (Table 3 p. 148)
267*/
268#define IB_MC_SCOPE_LINK_LOCAL		0x2
269#define IB_MC_SCOPE_SITE_LOCAL		0x5
270#define IB_MC_SCOPE_ORG_LOCAL		0x8
271#define IB_MC_SCOPE_GLOBAL		0xE
272/*********/
273/****d* IBA Base: Constants/IB_PKEY_MAX_BLOCKS
274* NAME
275*	IB_PKEY_MAX_BLOCKS
276*
277* DESCRIPTION
278*	Maximum number of PKEY blocks (14.2.5.7).
279*
280* SOURCE
281*/
282#define IB_PKEY_MAX_BLOCKS				2048
283/*********/
284/****d* IBA Base: Constants/IB_MCAST_MAX_BLOCK_ID
285* NAME
286*	IB_MCAST_MAX_BLOCK_ID
287*
288* DESCRIPTION
289*	Maximum number of Multicast port mask blocks
290*
291* SOURCE
292*/
293#define IB_MCAST_MAX_BLOCK_ID				511
294/*********/
295/****d* IBA Base: Constants/IB_MCAST_BLOCK_ID_MASK_HO
296* NAME
297*	IB_MCAST_BLOCK_ID_MASK_HO
298*
299* DESCRIPTION
300*	Mask (host order) to recover the Multicast block ID.
301*
302* SOURCE
303*/
304#define IB_MCAST_BLOCK_ID_MASK_HO			0x000001FF
305/*********/
306/****d* IBA Base: Constants/IB_MCAST_BLOCK_SIZE
307* NAME
308*	IB_MCAST_BLOCK_SIZE
309*
310* DESCRIPTION
311*	Number of port mask entries in a multicast forwarding table block.
312*
313* SOURCE
314*/
315#define IB_MCAST_BLOCK_SIZE				32
316/*********/
317/****d* IBA Base: Constants/IB_MCAST_MASK_SIZE
318* NAME
319*	IB_MCAST_MASK_SIZE
320*
321* DESCRIPTION
322*	Number of port mask bits in each entry in the multicast forwarding table.
323*
324* SOURCE
325*/
326#define IB_MCAST_MASK_SIZE				16
327/*********/
328/****d* IBA Base: Constants/IB_MCAST_POSITION_MASK_HO
329* NAME
330*	IB_MCAST_POSITION_MASK_HO
331*
332* DESCRIPTION
333*	Mask (host order) to recover the multicast block position.
334*
335* SOURCE
336*/
337#define IB_MCAST_POSITION_MASK_HO			0xF0000000
338/*********/
339/****d* IBA Base: Constants/IB_MCAST_POSITION_MAX
340* NAME
341*	IB_MCAST_POSITION_MAX
342*
343* DESCRIPTION
344*	Maximum value for the multicast block position.
345*
346* SOURCE
347*/
348#define IB_MCAST_POSITION_MAX				0xF
349/*********/
350/****d* IBA Base: Constants/IB_MCAST_POSITION_SHIFT
351* NAME
352*	IB_MCAST_POSITION_SHIFT
353*
354* DESCRIPTION
355*	Shift value to normalize the multicast block position value.
356*
357* SOURCE
358*/
359#define IB_MCAST_POSITION_SHIFT				28
360/*********/
361/****d* IBA Base: Constants/IB_PKEY_ENTRIES_MAX
362* NAME
363*	IB_PKEY_ENTRIES_MAX
364*
365* DESCRIPTION
366*	Maximum number of PKEY entries per port (14.2.5.7).
367*
368* SOURCE
369*/
370#define IB_PKEY_ENTRIES_MAX (IB_PKEY_MAX_BLOCKS * IB_NUM_PKEY_ELEMENTS_IN_BLOCK)
371/*********/
372/****d* IBA Base: Constants/IB_PKEY_BASE_MASK
373* NAME
374*	IB_PKEY_BASE_MASK
375*
376* DESCRIPTION
377*	Masks for the base P_Key value given a P_Key Entry.
378*
379* SOURCE
380*/
381#define IB_PKEY_BASE_MASK				(CL_HTON16(0x7FFF))
382/*********/
383/****d* IBA Base: Constants/IB_PKEY_TYPE_MASK
384* NAME
385*	IB_PKEY_TYPE_MASK
386*
387* DESCRIPTION
388*	Masks for the P_Key membership type given a P_Key Entry.
389*
390* SOURCE
391*/
392#define IB_PKEY_TYPE_MASK				(CL_HTON16(0x8000))
393/*********/
394/****d* IBA Base: Constants/IB_DEFAULT_PARTIAL_PKEY
395* NAME
396*	IB_DEFAULT_PARTIAL_PKEY
397*
398* DESCRIPTION
399*	0x7FFF in network order
400*
401* SOURCE
402*/
403#define IB_DEFAULT_PARTIAL_PKEY				(CL_HTON16(0x7FFF))
404/**********/
405/****d* IBA Base: Constants/IB_MCLASS_SUBN_LID
406* NAME
407*	IB_MCLASS_SUBN_LID
408*
409* DESCRIPTION
410*	Subnet Management Class, Subnet Manager LID routed (13.4.4)
411*
412* SOURCE
413*/
414#define IB_MCLASS_SUBN_LID				0x01
415/**********/
416/****d* IBA Base: Constants/IB_MCLASS_SUBN_DIR
417* NAME
418*	IB_MCLASS_SUBN_DIR
419*
420* DESCRIPTION
421*	Subnet Management Class, Subnet Manager directed route (13.4.4)
422*
423* SOURCE
424*/
425#define IB_MCLASS_SUBN_DIR				0x81
426/**********/
427/****d* IBA Base: Constants/IB_MCLASS_SUBN_ADM
428* NAME
429*	IB_MCLASS_SUBN_ADM
430*
431* DESCRIPTION
432*	Management Class, Subnet Administration (13.4.4)
433*
434* SOURCE
435*/
436#define IB_MCLASS_SUBN_ADM				0x03
437/**********/
438/****d* IBA Base: Constants/IB_MCLASS_PERF
439* NAME
440*	IB_MCLASS_PERF
441*
442* DESCRIPTION
443*	Management Class, Performance Management (13.4.4)
444*
445* SOURCE
446*/
447#define IB_MCLASS_PERF					0x04
448/**********/
449/****d* IBA Base: Constants/IB_MCLASS_BM
450* NAME
451*	IB_MCLASS_BM
452*
453* DESCRIPTION
454*	Management Class, Baseboard Management (13.4.4)
455*
456* SOURCE
457*/
458#define IB_MCLASS_BM					0x05
459/**********/
460/****d* IBA Base: Constants/IB_MCLASS_DEV_MGMT
461* NAME
462*	IB_MCLASS_DEV_MGMT
463*
464* DESCRIPTION
465*	Management Class, Device Management (13.4.4)
466*
467* SOURCE
468*/
469#define IB_MCLASS_DEV_MGMT				0x06
470/**********/
471/****d* IBA Base: Constants/IB_MCLASS_COMM_MGMT
472* NAME
473*	IB_MCLASS_COMM_MGMT
474*
475* DESCRIPTION
476*	Management Class, Communication Management (13.4.4)
477*
478* SOURCE
479*/
480#define IB_MCLASS_COMM_MGMT				0x07
481/**********/
482/****d* IBA Base: Constants/IB_MCLASS_SNMP
483* NAME
484*	IB_MCLASS_SNMP
485*
486* DESCRIPTION
487*	Management Class, SNMP Tunneling (13.4.4)
488*
489* SOURCE
490*/
491#define IB_MCLASS_SNMP					0x08
492/**********/
493/****d* IBA Base: Constants/IB_MCLASS_VENDOR_LOW_RANGE_MIN
494* NAME
495*	IB_MCLASS_VENDOR_LOW_RANGE_MIN
496*
497* DESCRIPTION
498*	Management Class, Vendor Specific Low Range Start
499*
500* SOURCE
501*/
502#define IB_MCLASS_VENDOR_LOW_RANGE_MIN			0x09
503/**********/
504/****d* IBA Base: Constants/IB_MCLASS_VENDOR_LOW_RANGE_MAX
505* NAME
506*	IB_MCLASS_VENDOR_LOW_RANGE_MAX
507*
508* DESCRIPTION
509*	Management Class, Vendor Specific Low Range End
510*
511* SOURCE
512*/
513#define IB_MCLASS_VENDOR_LOW_RANGE_MAX			0x0F
514/**********/
515/****d* IBA Base: Constants/IB_MCLASS_DEV_ADM
516* NAME
517*	IB_MCLASS_DEV_ADM
518*
519* DESCRIPTION
520*	Management Class, Device Administration
521*
522* SOURCE
523*/
524#define IB_MCLASS_DEV_ADM				0x10
525/**********/
526/****d* IBA Base: Constants/IB_MCLASS_BIS
527* NAME
528*	IB_MCLASS_BIS
529*
530* DESCRIPTION
531*	Management Class, BIS
532*
533* SOURCE
534*/
535#define IB_MCLASS_BIS					0x12
536/**********/
537/****d* IBA Base: Constants/IB_MCLASS_CC
538* NAME
539*	IB_MCLASS_CC
540*
541* DESCRIPTION
542*	Management Class, Congestion Control (A10.4.1)
543*
544* SOURCE
545*/
546#define IB_MCLASS_CC					0x21
547/**********/
548/****d* IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MIN
549* NAME
550*	IB_MCLASS_VENDOR_HIGH_RANGE_MIN
551*
552* DESCRIPTION
553*	Management Class, Vendor Specific High Range Start
554*
555* SOURCE
556*/
557#define IB_MCLASS_VENDOR_HIGH_RANGE_MIN			0x30
558/**********/
559/****d* IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MAX
560* NAME
561*	IB_MCLASS_VENDOR_HIGH_RANGE_MAX
562*
563* DESCRIPTION
564*	Management Class, Vendor Specific High Range End
565*
566* SOURCE
567*/
568#define IB_MCLASS_VENDOR_HIGH_RANGE_MAX			0x4F
569/**********/
570/****f* IBA Base: Types/ib_class_is_vendor_specific_low
571* NAME
572*	ib_class_is_vendor_specific_low
573*
574* DESCRIPTION
575*	Indicates if the Class Code if a vendor specific class from
576*  the low range
577*
578* SYNOPSIS
579*/
580static inline boolean_t OSM_API
581ib_class_is_vendor_specific_low(IN const uint8_t class_code)
582{
583	return ((class_code >= IB_MCLASS_VENDOR_LOW_RANGE_MIN) &&
584		(class_code <= IB_MCLASS_VENDOR_LOW_RANGE_MAX));
585}
586
587/*
588* PARAMETERS
589*	class_code
590*		[in] The Management Datagram Class Code
591*
592* RETURN VALUE
593*	TRUE if the class is in the Low range of Vendor Specific MADs
594*	FALSE otherwise.
595*
596* NOTES
597*
598* SEE ALSO
599* IB_MCLASS_VENDOR_LOW_RANGE_MIN, IB_MCLASS_VENDOR_LOW_RANGE_MAX
600*********/
601
602/****f* IBA Base: Types/ib_class_is_vendor_specific_high
603* NAME
604*	ib_class_is_vendor_specific_high
605*
606* DESCRIPTION
607*	Indicates if the Class Code if a vendor specific class from
608*  the high range
609*
610* SYNOPSIS
611*/
612static inline boolean_t OSM_API
613ib_class_is_vendor_specific_high(IN const uint8_t class_code)
614{
615	return ((class_code >= IB_MCLASS_VENDOR_HIGH_RANGE_MIN) &&
616		(class_code <= IB_MCLASS_VENDOR_HIGH_RANGE_MAX));
617}
618
619/*
620* PARAMETERS
621*	class_code
622*		[in] The Management Datagram Class Code
623*
624* RETURN VALUE
625*	TRUE if the class is in the High range of Vendor Specific MADs
626*	FALSE otherwise.
627*
628* NOTES
629*
630* SEE ALSO
631* IB_MCLASS_VENDOR_HIGH_RANGE_MIN, IB_MCLASS_VENDOR_HIGH_RANGE_MAX
632*********/
633
634/****f* IBA Base: Types/ib_class_is_vendor_specific
635* NAME
636*	ib_class_is_vendor_specific
637*
638* DESCRIPTION
639*	Indicates if the Class Code if a vendor specific class
640*
641* SYNOPSIS
642*/
643static inline boolean_t OSM_API
644ib_class_is_vendor_specific(IN const uint8_t class_code)
645{
646	return (ib_class_is_vendor_specific_low(class_code) ||
647		ib_class_is_vendor_specific_high(class_code));
648}
649
650/*
651* PARAMETERS
652*	class_code
653*		[in] The Management Datagram Class Code
654*
655* RETURN VALUE
656*	TRUE if the class is a Vendor Specific MAD
657*	FALSE otherwise.
658*
659* NOTES
660*
661* SEE ALSO
662*  ib_class_is_vendor_specific_low, ib_class_is_vendor_specific_high
663*********/
664
665/****f* IBA Base: Types/ib_class_is_rmpp
666* NAME
667*	ib_class_is_rmpp
668*
669* DESCRIPTION
670*	Indicates if the Class Code supports RMPP
671*
672* SYNOPSIS
673*/
674static inline boolean_t OSM_API ib_class_is_rmpp(IN const uint8_t class_code)
675{
676	return ((class_code == IB_MCLASS_SUBN_ADM) ||
677		(class_code == IB_MCLASS_DEV_MGMT) ||
678		(class_code == IB_MCLASS_DEV_ADM) ||
679		(class_code == IB_MCLASS_BIS) ||
680		ib_class_is_vendor_specific_high(class_code));
681}
682
683/*
684* PARAMETERS
685*	class_code
686*		[in] The Management Datagram Class Code
687*
688* RETURN VALUE
689*	TRUE if the class supports RMPP
690*	FALSE otherwise.
691*
692* NOTES
693*
694*********/
695
696/*
697 *	MAD methods
698 */
699
700/****d* IBA Base: Constants/IB_MAX_METHOD
701* NAME
702*	IB_MAX_METHOD
703*
704* DESCRIPTION
705*	Total number of methods available to a class, not including the R-bit.
706*
707* SOURCE
708*/
709#define IB_MAX_METHODS						128
710/**********/
711
712/****d* IBA Base: Constants/IB_MAD_METHOD_RESP_MASK
713* NAME
714*	IB_MAD_METHOD_RESP_MASK
715*
716* DESCRIPTION
717*	Response mask to extract 'R' bit from the method field. (13.4.5)
718*
719* SOURCE
720*/
721#define IB_MAD_METHOD_RESP_MASK				0x80
722/**********/
723
724/****d* IBA Base: Constants/IB_MAD_METHOD_GET
725* NAME
726*	IB_MAD_METHOD_GET
727*
728* DESCRIPTION
729*	Get() Method (13.4.5)
730*
731* SOURCE
732*/
733#define IB_MAD_METHOD_GET					0x01
734/**********/
735
736/****d* IBA Base: Constants/IB_MAD_METHOD_SET
737* NAME
738*	IB_MAD_METHOD_SET
739*
740* DESCRIPTION
741*	Set() Method (13.4.5)
742*
743* SOURCE
744*/
745#define IB_MAD_METHOD_SET					0x02
746/**********/
747
748/****d* IBA Base: Constants/IB_MAD_METHOD_GET_RESP
749* NAME
750*	IB_MAD_METHOD_GET_RESP
751*
752* DESCRIPTION
753*	GetResp() Method (13.4.5)
754*
755* SOURCE
756*/
757#define IB_MAD_METHOD_GET_RESP				0x81
758/**********/
759
760#define IB_MAD_METHOD_DELETE				0x15
761
762/****d* IBA Base: Constants/IB_MAD_METHOD_GETTABLE
763* NAME
764*	IB_MAD_METHOD_GETTABLE
765*
766* DESCRIPTION
767*	SubnAdmGetTable() Method (15.2.2)
768*
769* SOURCE
770*/
771#define IB_MAD_METHOD_GETTABLE				0x12
772/**********/
773
774/****d* IBA Base: Constants/IB_MAD_METHOD_GETTABLE_RESP
775* NAME
776*	IB_MAD_METHOD_GETTABLE_RESP
777*
778* DESCRIPTION
779*	SubnAdmGetTableResp() Method (15.2.2)
780*
781* SOURCE
782*/
783#define IB_MAD_METHOD_GETTABLE_RESP			0x92
784
785/**********/
786
787#define IB_MAD_METHOD_GETTRACETABLE			0x13
788#define IB_MAD_METHOD_GETMULTI				0x14
789#define IB_MAD_METHOD_GETMULTI_RESP			0x94
790
791/****d* IBA Base: Constants/IB_MAD_METHOD_SEND
792* NAME
793*	IB_MAD_METHOD_SEND
794*
795* DESCRIPTION
796*	Send() Method (13.4.5)
797*
798* SOURCE
799*/
800#define IB_MAD_METHOD_SEND					0x03
801/**********/
802
803/****d* IBA Base: Constants/IB_MAD_METHOD_TRAP
804* NAME
805*	IB_MAD_METHOD_TRAP
806*
807* DESCRIPTION
808*	Trap() Method (13.4.5)
809*
810* SOURCE
811*/
812#define IB_MAD_METHOD_TRAP					0x05
813/**********/
814
815/****d* IBA Base: Constants/IB_MAD_METHOD_REPORT
816* NAME
817*	IB_MAD_METHOD_REPORT
818*
819* DESCRIPTION
820*	Report() Method (13.4.5)
821*
822* SOURCE
823*/
824#define IB_MAD_METHOD_REPORT				0x06
825/**********/
826
827/****d* IBA Base: Constants/IB_MAD_METHOD_REPORT_RESP
828* NAME
829*	IB_MAD_METHOD_REPORT_RESP
830*
831* DESCRIPTION
832*	ReportResp() Method (13.4.5)
833*
834* SOURCE
835*/
836#define IB_MAD_METHOD_REPORT_RESP			0x86
837/**********/
838
839/****d* IBA Base: Constants/IB_MAD_METHOD_TRAP_REPRESS
840* NAME
841*	IB_MAD_METHOD_TRAP_REPRESS
842*
843* DESCRIPTION
844*	TrapRepress() Method (13.4.5)
845*
846* SOURCE
847*/
848#define IB_MAD_METHOD_TRAP_REPRESS			0x07
849/**********/
850
851/****d* IBA Base: Constants/IB_MAD_STATUS_BUSY
852* NAME
853*	IB_MAD_STATUS_BUSY
854*
855* DESCRIPTION
856*	Temporarily busy, MAD discarded (13.4.7)
857*
858* SOURCE
859*/
860#define IB_MAD_STATUS_BUSY				(CL_HTON16(0x0001))
861/**********/
862
863/****d* IBA Base: Constants/IB_MAD_STATUS_REDIRECT
864* NAME
865*	IB_MAD_STATUS_REDIRECT
866*
867* DESCRIPTION
868*	QP Redirection required (13.4.7)
869*
870* SOURCE
871*/
872#define IB_MAD_STATUS_REDIRECT				(CL_HTON16(0x0002))
873/**********/
874
875/****d* IBA Base: Constants/IB_MAD_STATUS_UNSUP_CLASS_VER
876* NAME
877*	IB_MAD_STATUS_UNSUP_CLASS_VER
878*
879* DESCRIPTION
880*	Unsupported class version (13.4.7)
881*
882* SOURCE
883*/
884#define IB_MAD_STATUS_UNSUP_CLASS_VER			(CL_HTON16(0x0004))
885/**********/
886
887/****d* IBA Base: Constants/IB_MAD_STATUS_UNSUP_METHOD
888* NAME
889*	IB_MAD_STATUS_UNSUP_METHOD
890*
891* DESCRIPTION
892*	Unsupported method (13.4.7)
893*
894* SOURCE
895*/
896#define IB_MAD_STATUS_UNSUP_METHOD			(CL_HTON16(0x0008))
897/**********/
898
899/****d* IBA Base: Constants/IB_MAD_STATUS_UNSUP_METHOD_ATTR
900* NAME
901*	IB_MAD_STATUS_UNSUP_METHOD_ATTR
902*
903* DESCRIPTION
904*	Unsupported method/attribute combination (13.4.7)
905*
906* SOURCE
907*/
908#define IB_MAD_STATUS_UNSUP_METHOD_ATTR			(CL_HTON16(0x000C))
909/**********/
910
911/****d* IBA Base: Constants/IB_MAD_STATUS_INVALID_FIELD
912* NAME
913*	IB_MAD_STATUS_INVALID_FIELD
914*
915* DESCRIPTION
916*	Attribute contains one or more invalid fields (13.4.7)
917*
918* SOURCE
919*/
920#define IB_MAD_STATUS_INVALID_FIELD			(CL_HTON16(0x001C))
921/**********/
922
923#define IB_MAD_STATUS_CLASS_MASK			(CL_HTON16(0xFF00))
924
925#define IB_SA_MAD_STATUS_SUCCESS			(CL_HTON16(0x0000))
926#define IB_SA_MAD_STATUS_NO_RESOURCES			(CL_HTON16(0x0100))
927#define IB_SA_MAD_STATUS_REQ_INVALID			(CL_HTON16(0x0200))
928#define IB_SA_MAD_STATUS_NO_RECORDS			(CL_HTON16(0x0300))
929#define IB_SA_MAD_STATUS_TOO_MANY_RECORDS		(CL_HTON16(0x0400))
930#define IB_SA_MAD_STATUS_INVALID_GID			(CL_HTON16(0x0500))
931#define IB_SA_MAD_STATUS_INSUF_COMPS			(CL_HTON16(0x0600))
932#define IB_SA_MAD_STATUS_DENIED				(CL_HTON16(0x0700))
933#define IB_SA_MAD_STATUS_PRIO_SUGGESTED			(CL_HTON16(0x0800))
934
935#define IB_DM_MAD_STATUS_NO_IOC_RESP			(CL_HTON16(0x0100))
936#define IB_DM_MAD_STATUS_NO_SVC_ENTRIES			(CL_HTON16(0x0200))
937#define IB_DM_MAD_STATUS_IOC_FAILURE			(CL_HTON16(0x8000))
938
939/****d* IBA Base: Constants/IB_MAD_ATTR_CLASS_PORT_INFO
940* NAME
941*	IB_MAD_ATTR_CLASS_PORT_INFO
942*
943* DESCRIPTION
944*	ClassPortInfo attribute (13.4.8)
945*
946* SOURCE
947*/
948#define IB_MAD_ATTR_CLASS_PORT_INFO			(CL_HTON16(0x0001))
949/**********/
950
951/****d* IBA Base: Constants/IB_MAD_ATTR_NOTICE
952* NAME
953*	IB_MAD_ATTR_NOTICE
954*
955* DESCRIPTION
956*	Notice attribute (13.4.8)
957*
958* SOURCE
959*/
960#define IB_MAD_ATTR_NOTICE					(CL_HTON16(0x0002))
961/**********/
962
963/****d* IBA Base: Constants/IB_MAD_ATTR_INFORM_INFO
964* NAME
965*	IB_MAD_ATTR_INFORM_INFO
966*
967* DESCRIPTION
968*	InformInfo attribute (13.4.8)
969*
970* SOURCE
971*/
972#define IB_MAD_ATTR_INFORM_INFO				(CL_HTON16(0x0003))
973/**********/
974
975/****d* IBA Base: Constants/IB_MAD_ATTR_NODE_DESC
976* NAME
977*	IB_MAD_ATTR_NODE_DESC
978*
979* DESCRIPTION
980*	NodeDescription attribute (14.2.5)
981*
982* SOURCE
983*/
984#define IB_MAD_ATTR_NODE_DESC				(CL_HTON16(0x0010))
985
986/****d* IBA Base: Constants/IB_MAD_ATTR_PORT_SMPL_CTRL
987* NAME
988*	IB_MAD_ATTR_PORT_SMPL_CTRL
989*
990* DESCRIPTION
991*	PortSamplesControl attribute (16.1.3)
992*
993* SOURCE
994*/
995#define IB_MAD_ATTR_PORT_SMPL_CTRL			(CL_HTON16(0x0010))
996/**********/
997
998/****d* IBA Base: Constants/IB_MAD_ATTR_NODE_INFO
999* NAME
1000*	IB_MAD_ATTR_NODE_INFO
1001*
1002* DESCRIPTION
1003*	NodeInfo attribute (14.2.5)
1004*
1005* SOURCE
1006*/
1007#define IB_MAD_ATTR_NODE_INFO				(CL_HTON16(0x0011))
1008/**********/
1009
1010/****d* IBA Base: Constants/IB_MAD_ATTR_PORT_SMPL_RSLT
1011* NAME
1012*	IB_MAD_ATTR_PORT_SMPL_RSLT
1013*
1014* DESCRIPTION
1015*	PortSamplesResult attribute (16.1.3)
1016*
1017* SOURCE
1018*/
1019#define IB_MAD_ATTR_PORT_SMPL_RSLT			(CL_HTON16(0x0011))
1020/**********/
1021
1022/****d* IBA Base: Constants/IB_MAD_ATTR_SWITCH_INFO
1023* NAME
1024*	IB_MAD_ATTR_SWITCH_INFO
1025*
1026* DESCRIPTION
1027*	SwitchInfo attribute (14.2.5)
1028*
1029* SOURCE
1030*/
1031#define IB_MAD_ATTR_SWITCH_INFO				(CL_HTON16(0x0012))
1032/**********/
1033
1034/****d* IBA Base: Constants/IB_MAD_ATTR_PORT_CNTRS
1035* NAME
1036*	IB_MAD_ATTR_PORT_CNTRS
1037*
1038* DESCRIPTION
1039*	PortCounters attribute (16.1.3)
1040*
1041* SOURCE
1042*/
1043#define IB_MAD_ATTR_PORT_CNTRS				(CL_HTON16(0x0012))
1044/**********/
1045
1046/****d* IBA Base: Constants/IB_MAD_ATTR_PORT_CNTRS_EXT
1047* NAME
1048*       IB_MAD_ATTR_PORT_CNTRS_EXT
1049*
1050* DESCRIPTION
1051*       PortCountersExtended attribute (16.1.4)
1052*
1053* SOURCE
1054*/
1055#define IB_MAD_ATTR_PORT_CNTRS_EXT			(CL_HTON16(0x001D))
1056/**********/
1057
1058/****d* IBA Base: Constants/IB_MAD_ATTR_PORT_XMIT_DATA_SL
1059* NAME
1060*	IB_MAD_ATTR_PORT_XMIT_DATA_SL
1061*
1062* DESCRIPTION
1063*	PortXmitDataSL attribute (A13.6.4)
1064*
1065* SOURCE
1066*/
1067#define IB_MAD_ATTR_PORT_XMIT_DATA_SL			(CL_HTON16(0x0036))
1068/**********/
1069
1070/****d* IBA Base: Constants/IB_MAD_ATTR_PORT_RCV_DATA_SL
1071* NAME
1072*	IB_MAD_ATTR_PORT_RCV_DATA_SL
1073*
1074* DESCRIPTION
1075*	PortRcvDataSL attribute (A13.6.4)
1076*
1077* SOURCE
1078*/
1079#define IB_MAD_ATTR_PORT_RCV_DATA_SL			(CL_HTON16(0x0037))
1080/**********/
1081
1082/****d* IBA Base: Constants/IB_MAD_ATTR_GUID_INFO
1083* NAME
1084*	IB_MAD_ATTR_GUID_INFO
1085*
1086* DESCRIPTION
1087*	GUIDInfo attribute (14.2.5)
1088*
1089* SOURCE
1090*/
1091#define IB_MAD_ATTR_GUID_INFO				(CL_HTON16(0x0014))
1092/**********/
1093
1094/****d* IBA Base: Constants/IB_MAD_ATTR_PORT_INFO
1095* NAME
1096*	IB_MAD_ATTR_PORT_INFO
1097*
1098* DESCRIPTION
1099*	PortInfo attribute (14.2.5)
1100*
1101* SOURCE
1102*/
1103#define IB_MAD_ATTR_PORT_INFO				(CL_HTON16(0x0015))
1104/**********/
1105
1106/****d* IBA Base: Constants/IB_MAD_ATTR_P_KEY_TABLE
1107* NAME
1108*	IB_MAD_ATTR_P_KEY_TABLE
1109*
1110* DESCRIPTION
1111*	PartitionTable attribute (14.2.5)
1112*
1113* SOURCE
1114*/
1115#define IB_MAD_ATTR_P_KEY_TABLE				(CL_HTON16(0x0016))
1116/**********/
1117
1118/****d* IBA Base: Constants/IB_MAD_ATTR_SLVL_TABLE
1119* NAME
1120*	IB_MAD_ATTR_SLVL_TABLE
1121*
1122* DESCRIPTION
1123*	SL VL Mapping Table attribute (14.2.5)
1124*
1125* SOURCE
1126*/
1127#define IB_MAD_ATTR_SLVL_TABLE				(CL_HTON16(0x0017))
1128/**********/
1129
1130/****d* IBA Base: Constants/IB_MAD_ATTR_VL_ARBITRATION
1131* NAME
1132*	IB_MAD_ATTR_VL_ARBITRATION
1133*
1134* DESCRIPTION
1135*	VL Arbitration Table attribute (14.2.5)
1136*
1137* SOURCE
1138*/
1139#define IB_MAD_ATTR_VL_ARBITRATION			(CL_HTON16(0x0018))
1140/**********/
1141
1142/****d* IBA Base: Constants/IB_MAD_ATTR_LIN_FWD_TBL
1143* NAME
1144*	IB_MAD_ATTR_LIN_FWD_TBL
1145*
1146* DESCRIPTION
1147*	Switch linear forwarding table
1148*
1149* SOURCE
1150*/
1151#define IB_MAD_ATTR_LIN_FWD_TBL				(CL_HTON16(0x0019))
1152/**********/
1153
1154/****d* IBA Base: Constants/IB_MAD_ATTR_RND_FWD_TBL
1155* NAME
1156*	IB_MAD_ATTR_RND_FWD_TBL
1157*
1158* DESCRIPTION
1159*	Switch random forwarding table
1160*
1161* SOURCE
1162*/
1163#define IB_MAD_ATTR_RND_FWD_TBL				(CL_HTON16(0x001A))
1164/**********/
1165
1166/****d* IBA Base: Constants/IB_MAD_ATTR_MCAST_FWD_TBL
1167* NAME
1168*	IB_MAD_ATTR_MCAST_FWD_TBL
1169*
1170* DESCRIPTION
1171*	Switch multicast forwarding table
1172*
1173* SOURCE
1174*/
1175#define IB_MAD_ATTR_MCAST_FWD_TBL			(CL_HTON16(0x001B))
1176/**********/
1177
1178/****d* IBA Base: Constants/IB_MAD_ATTR_NODE_RECORD
1179* NAME
1180*	IB_MAD_ATTR_NODE_RECORD
1181*
1182* DESCRIPTION
1183*	NodeRecord attribute (15.2.5)
1184*
1185* SOURCE
1186*/
1187#define IB_MAD_ATTR_NODE_RECORD				(CL_HTON16(0x0011))
1188/**********/
1189
1190/****d* IBA Base: Constants/IB_MAD_ATTR_PORTINFO_RECORD
1191* NAME
1192*	IB_MAD_ATTR_PORTINFO_RECORD
1193*
1194* DESCRIPTION
1195*	PortInfoRecord attribute (15.2.5)
1196*
1197* SOURCE
1198*/
1199#define IB_MAD_ATTR_PORTINFO_RECORD			(CL_HTON16(0x0012))
1200/**********/
1201
1202/****d* IBA Base: Constants/IB_MAD_ATTR_SWITCH_INFO_RECORD
1203* NAME
1204*       IB_MAD_ATTR_SWITCH_INFO_RECORD
1205*
1206* DESCRIPTION
1207*       SwitchInfoRecord attribute (15.2.5)
1208*
1209* SOURCE
1210*/
1211#define IB_MAD_ATTR_SWITCH_INFO_RECORD			(CL_HTON16(0x0014))
1212/**********/
1213
1214/****d* IBA Base: Constants/IB_MAD_ATTR_LINK_RECORD
1215* NAME
1216*	IB_MAD_ATTR_LINK_RECORD
1217*
1218* DESCRIPTION
1219*	LinkRecord attribute (15.2.5)
1220*
1221* SOURCE
1222*/
1223#define IB_MAD_ATTR_LINK_RECORD				(CL_HTON16(0x0020))
1224/**********/
1225
1226/****d* IBA Base: Constants/IB_MAD_ATTR_SM_INFO
1227* NAME
1228*	IB_MAD_ATTR_SM_INFO
1229*
1230* DESCRIPTION
1231*	SMInfo attribute (14.2.5)
1232*
1233* SOURCE
1234*/
1235#define IB_MAD_ATTR_SM_INFO				(CL_HTON16(0x0020))
1236/**********/
1237
1238/****d* IBA Base: Constants/IB_MAD_ATTR_SMINFO_RECORD
1239* NAME
1240*	IB_MAD_ATTR_SMINFO_RECORD
1241*
1242* DESCRIPTION
1243*	SMInfoRecord attribute (15.2.5)
1244*
1245* SOURCE
1246*/
1247#define IB_MAD_ATTR_SMINFO_RECORD			(CL_HTON16(0x0018))
1248/**********/
1249
1250/****d* IBA Base: Constants/IB_MAD_ATTR_GUIDINFO_RECORD
1251* NAME
1252*       IB_MAD_ATTR_GUIDINFO_RECORD
1253*
1254* DESCRIPTION
1255*       GuidInfoRecord attribute (15.2.5)
1256*
1257* SOURCE
1258*/
1259#define IB_MAD_ATTR_GUIDINFO_RECORD			(CL_HTON16(0x0030))
1260/**********/
1261
1262/****d* IBA Base: Constants/IB_MAD_ATTR_VENDOR_DIAG
1263* NAME
1264*	IB_MAD_ATTR_VENDOR_DIAG
1265*
1266* DESCRIPTION
1267*	VendorDiag attribute (14.2.5)
1268*
1269* SOURCE
1270*/
1271#define IB_MAD_ATTR_VENDOR_DIAG				(CL_HTON16(0x0030))
1272/**********/
1273
1274/****d* IBA Base: Constants/IB_MAD_ATTR_LED_INFO
1275* NAME
1276*	IB_MAD_ATTR_LED_INFO
1277*
1278* DESCRIPTION
1279*	LedInfo attribute (14.2.5)
1280*
1281* SOURCE
1282*/
1283#define IB_MAD_ATTR_LED_INFO				(CL_HTON16(0x0031))
1284/**********/
1285
1286/****d* IBA Base: Constants/IB_MAD_ATTR_MLNX_EXTENDED_PORT_INFO
1287* NAME
1288*	IB_MAD_ATTR_MLNX_EXTENDED_PORT_INFO
1289*
1290* DESCRIPTION
1291*	Vendor specific SM attribute (14.2.5)
1292*
1293* SOURCE
1294*/
1295#define IB_MAD_ATTR_MLNX_EXTENDED_PORT_INFO		(CL_HTON16(0xFF90))
1296/**********/
1297
1298/****d* IBA Base: Constants/IB_MAD_ATTR_SERVICE_RECORD
1299* NAME
1300*	IB_MAD_ATTR_SERVICE_RECORD
1301*
1302* DESCRIPTION
1303*	ServiceRecord attribute (15.2.5)
1304*
1305* SOURCE
1306*/
1307#define IB_MAD_ATTR_SERVICE_RECORD			(CL_HTON16(0x0031))
1308/**********/
1309
1310/****d* IBA Base: Constants/IB_MAD_ATTR_LFT_RECORD
1311* NAME
1312*	IB_MAD_ATTR_LFT_RECORD
1313*
1314* DESCRIPTION
1315*	LinearForwardingTableRecord attribute (15.2.5.6)
1316*
1317* SOURCE
1318*/
1319#define IB_MAD_ATTR_LFT_RECORD				(CL_HTON16(0x0015))
1320/**********/
1321
1322/****d* IBA Base: Constants/IB_MAD_ATTR_MFT_RECORD
1323* NAME
1324*       IB_MAD_ATTR_MFT_RECORD
1325*
1326* DESCRIPTION
1327*       MulticastForwardingTableRecord attribute (15.2.5.8)
1328*
1329* SOURCE
1330*/
1331#define IB_MAD_ATTR_MFT_RECORD				(CL_HTON16(0x0017))
1332/**********/
1333
1334/****d* IBA Base: Constants/IB_MAD_ATTR_PKEYTBL_RECORD
1335* NAME
1336*	IB_MAD_ATTR_PKEYTBL_RECORD
1337*
1338* DESCRIPTION
1339*	PKEY Table Record attribute (15.2.5)
1340*
1341* SOURCE
1342*/
1343#define IB_MAD_ATTR_PKEY_TBL_RECORD			(CL_HTON16(0x0033))
1344/**********/
1345
1346/****d* IBA Base: Constants/IB_MAD_ATTR_PATH_RECORD
1347* NAME
1348*	IB_MAD_ATTR_PATH_RECORD
1349*
1350* DESCRIPTION
1351*	PathRecord attribute (15.2.5)
1352*
1353* SOURCE
1354*/
1355#define IB_MAD_ATTR_PATH_RECORD				(CL_HTON16(0x0035))
1356/**********/
1357
1358/****d* IBA Base: Constants/IB_MAD_ATTR_VLARB_RECORD
1359* NAME
1360*	IB_MAD_ATTR_VLARB_RECORD
1361*
1362* DESCRIPTION
1363*	VL Arbitration Table Record attribute (15.2.5)
1364*
1365* SOURCE
1366*/
1367#define IB_MAD_ATTR_VLARB_RECORD			(CL_HTON16(0x0036))
1368/**********/
1369
1370/****d* IBA Base: Constants/IB_MAD_ATTR_SLVL_RECORD
1371* NAME
1372*	IB_MAD_ATTR_SLVL_RECORD
1373*
1374* DESCRIPTION
1375*	SLtoVL Mapping Table Record attribute (15.2.5)
1376*
1377* SOURCE
1378*/
1379#define IB_MAD_ATTR_SLVL_RECORD				(CL_HTON16(0x0013))
1380/**********/
1381
1382/****d* IBA Base: Constants/IB_MAD_ATTR_MCMEMBER_RECORD
1383* NAME
1384*	IB_MAD_ATTR_MCMEMBER_RECORD
1385*
1386* DESCRIPTION
1387*	MCMemberRecord attribute (15.2.5)
1388*
1389* SOURCE
1390*/
1391#define IB_MAD_ATTR_MCMEMBER_RECORD			(CL_HTON16(0x0038))
1392/**********/
1393
1394/****d* IBA Base: Constants/IB_MAD_ATTR_TRACE_RECORD
1395* NAME
1396*	IB_MAD_ATTR_TRACE_RECORD
1397*
1398* DESCRIPTION
1399*	TraceRecord attribute (15.2.5)
1400*
1401* SOURCE
1402*/
1403#define IB_MAD_ATTR_TRACE_RECORD			(CL_HTON16(0x0039))
1404/**********/
1405
1406/****d* IBA Base: Constants/IB_MAD_ATTR_MULTIPATH_RECORD
1407* NAME
1408*	IB_MAD_ATTR_MULTIPATH_RECORD
1409*
1410* DESCRIPTION
1411*	MultiPathRecord attribute (15.2.5)
1412*
1413* SOURCE
1414*/
1415#define IB_MAD_ATTR_MULTIPATH_RECORD			(CL_HTON16(0x003A))
1416/**********/
1417
1418/****d* IBA Base: Constants/IB_MAD_ATTR_SVC_ASSOCIATION_RECORD
1419* NAME
1420*	IB_MAD_ATTR_SVC_ASSOCIATION_RECORD
1421*
1422* DESCRIPTION
1423*	Service Association Record attribute (15.2.5)
1424*
1425* SOURCE
1426*/
1427#define IB_MAD_ATTR_SVC_ASSOCIATION_RECORD		(CL_HTON16(0x003B))
1428/**********/
1429
1430/****d* IBA Base: Constants/IB_MAD_ATTR_INFORM_INFO_RECORD
1431* NAME
1432*	IB_MAD_ATTR_INFORM_INFO_RECORD
1433*
1434* DESCRIPTION
1435*	InformInfo Record attribute (15.2.5)
1436*
1437* SOURCE
1438*/
1439#define IB_MAD_ATTR_INFORM_INFO_RECORD			(CL_HTON16(0x00F3))
1440
1441/****d* IBA Base: Constants/IB_MAD_ATTR_IO_UNIT_INFO
1442* NAME
1443*	IB_MAD_ATTR_IO_UNIT_INFO
1444*
1445* DESCRIPTION
1446*	IOUnitInfo attribute (16.3.3)
1447*
1448* SOURCE
1449*/
1450#define IB_MAD_ATTR_IO_UNIT_INFO			(CL_HTON16(0x0010))
1451/**********/
1452
1453/****d* IBA Base: Constants/IB_MAD_ATTR_IO_CONTROLLER_PROFILE
1454* NAME
1455*	IB_MAD_ATTR_IO_CONTROLLER_PROFILE
1456*
1457* DESCRIPTION
1458*	IOControllerProfile attribute (16.3.3)
1459*
1460* SOURCE
1461*/
1462#define IB_MAD_ATTR_IO_CONTROLLER_PROFILE	(CL_HTON16(0x0011))
1463/**********/
1464
1465/****d* IBA Base: Constants/IB_MAD_ATTR_SERVICE_ENTRIES
1466* NAME
1467*	IB_MAD_ATTR_SERVICE_ENTRIES
1468*
1469* DESCRIPTION
1470*	ServiceEntries attribute (16.3.3)
1471*
1472* SOURCE
1473*/
1474#define IB_MAD_ATTR_SERVICE_ENTRIES			(CL_HTON16(0x0012))
1475/**********/
1476
1477/****d* IBA Base: Constants/IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT
1478* NAME
1479*	IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT
1480*
1481* DESCRIPTION
1482*	DiagnosticTimeout attribute (16.3.3)
1483*
1484* SOURCE
1485*/
1486#define IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT		(CL_HTON16(0x0020))
1487/**********/
1488
1489/****d* IBA Base: Constants/IB_MAD_ATTR_PREPARE_TO_TEST
1490* NAME
1491*	IB_MAD_ATTR_PREPARE_TO_TEST
1492*
1493* DESCRIPTION
1494*	PrepareToTest attribute (16.3.3)
1495*
1496* SOURCE
1497*/
1498#define IB_MAD_ATTR_PREPARE_TO_TEST			(CL_HTON16(0x0021))
1499/**********/
1500
1501/****d* IBA Base: Constants/IB_MAD_ATTR_TEST_DEVICE_ONCE
1502* NAME
1503*	IB_MAD_ATTR_TEST_DEVICE_ONCE
1504*
1505* DESCRIPTION
1506*	TestDeviceOnce attribute (16.3.3)
1507*
1508* SOURCE
1509*/
1510#define IB_MAD_ATTR_TEST_DEVICE_ONCE		(CL_HTON16(0x0022))
1511/**********/
1512
1513/****d* IBA Base: Constants/IB_MAD_ATTR_TEST_DEVICE_LOOP
1514* NAME
1515*	IB_MAD_ATTR_TEST_DEVICE_LOOP
1516*
1517* DESCRIPTION
1518*	TestDeviceLoop attribute (16.3.3)
1519*
1520* SOURCE
1521*/
1522#define IB_MAD_ATTR_TEST_DEVICE_LOOP		(CL_HTON16(0x0023))
1523/**********/
1524
1525/****d* IBA Base: Constants/IB_MAD_ATTR_DIAG_CODE
1526* NAME
1527*	IB_MAD_ATTR_DIAG_CODE
1528*
1529* DESCRIPTION
1530*	DiagCode attribute (16.3.3)
1531*
1532* SOURCE
1533*/
1534#define IB_MAD_ATTR_DIAG_CODE				(CL_HTON16(0x0024))
1535/**********/
1536
1537/****d* IBA Base: Constants/IB_MAD_ATTR_SVC_ASSOCIATION_RECORD
1538* NAME
1539*	IB_MAD_ATTR_SVC_ASSOCIATION_RECORD
1540*
1541* DESCRIPTION
1542*	Service Association Record attribute (15.2.5)
1543*
1544* SOURCE
1545*/
1546#define IB_MAD_ATTR_SVC_ASSOCIATION_RECORD	(CL_HTON16(0x003B))
1547/**********/
1548
1549/****d* IBA Base: Constants/IB_MAD_ATTR_CONG_INFO
1550* NAME
1551*	IB_MAD_ATTR_CONG_INFO
1552*
1553* DESCRIPTION
1554*	CongestionInfo attribute (A10.4.3)
1555*
1556* SOURCE
1557*/
1558#define IB_MAD_ATTR_CONG_INFO				(CL_HTON16(0x0011))
1559/**********/
1560
1561/****d* IBA Base: Constants/IB_MAD_ATTR_CONG_KEY_INFO
1562* NAME
1563*	IB_MAD_ATTR_CONG_KEY_INFO
1564*
1565* DESCRIPTION
1566*	CongestionKeyInfo attribute (A10.4.3)
1567*
1568* SOURCE
1569*/
1570#define IB_MAD_ATTR_CONG_KEY_INFO			(CL_HTON16(0x0012))
1571/**********/
1572
1573/****d* IBA Base: Constants/IB_MAD_ATTR_CONG_LOG
1574* NAME
1575*	IB_MAD_ATTR_CONG_LOG
1576*
1577* DESCRIPTION
1578*	CongestionLog attribute (A10.4.3)
1579*
1580* SOURCE
1581*/
1582#define IB_MAD_ATTR_CONG_LOG				(CL_HTON16(0x0013))
1583/**********/
1584
1585/****d* IBA Base: Constants/IB_MAD_ATTR_SW_CONG_SETTING
1586* NAME
1587*	IB_MAD_ATTR_SW_CONG_SETTING
1588*
1589* DESCRIPTION
1590*	SwitchCongestionSetting attribute (A10.4.3)
1591*
1592* SOURCE
1593*/
1594#define IB_MAD_ATTR_SW_CONG_SETTING			(CL_HTON16(0x0014))
1595/**********/
1596
1597/****d* IBA Base: Constants/IB_MAD_ATTR_SW_PORT_CONG_SETTING
1598* NAME
1599*	IB_MAD_ATTR_SW_PORT_CONG_SETTING
1600*
1601* DESCRIPTION
1602*	SwitchPortCongestionSetting attribute (A10.4.3)
1603*
1604* SOURCE
1605*/
1606#define IB_MAD_ATTR_SW_PORT_CONG_SETTING		(CL_HTON16(0x0015))
1607/**********/
1608
1609/****d* IBA Base: Constants/IB_MAD_ATTR_CA_CONG_SETTING
1610* NAME
1611*	IB_MAD_ATTR_CA_CONG_SETTING
1612*
1613* DESCRIPTION
1614*	CACongestionSetting attribute (A10.4.3)
1615*
1616* SOURCE
1617*/
1618#define IB_MAD_ATTR_CA_CONG_SETTING			(CL_HTON16(0x0016))
1619/**********/
1620
1621/****d* IBA Base: Constants/IB_MAD_ATTR_CC_TBL
1622* NAME
1623*	IB_MAD_ATTR_CC_TBL
1624*
1625* DESCRIPTION
1626*	CongestionControlTable attribute (A10.4.3)
1627*
1628* SOURCE
1629*/
1630#define IB_MAD_ATTR_CC_TBL				(CL_HTON16(0x0017))
1631/**********/
1632
1633/****d* IBA Base: Constants/IB_MAD_ATTR_TIME_STAMP
1634* NAME
1635*	IB_MAD_ATTR_TIME_STAMP
1636*
1637* DESCRIPTION
1638*	TimeStamp attribute (A10.4.3)
1639*
1640* SOURCE
1641*/
1642#define IB_MAD_ATTR_TIME_STAMP				(CL_HTON16(0x0018))
1643/**********/
1644
1645/****d* IBA Base: Constants/IB_NODE_TYPE_CA
1646* NAME
1647*	IB_NODE_TYPE_CA
1648*
1649* DESCRIPTION
1650*	Encoded generic node type used in MAD attributes (13.4.8.2)
1651*
1652* SOURCE
1653*/
1654#define IB_NODE_TYPE_CA						0x01
1655/**********/
1656
1657/****d* IBA Base: Constants/IB_NODE_TYPE_SWITCH
1658* NAME
1659*	IB_NODE_TYPE_SWITCH
1660*
1661* DESCRIPTION
1662*	Encoded generic node type used in MAD attributes (13.4.8.2)
1663*
1664* SOURCE
1665*/
1666#define IB_NODE_TYPE_SWITCH					0x02
1667/**********/
1668
1669/****d* IBA Base: Constants/IB_NODE_TYPE_ROUTER
1670* NAME
1671*	IB_NODE_TYPE_ROUTER
1672*
1673* DESCRIPTION
1674*	Encoded generic node type used in MAD attributes (13.4.8.2)
1675*
1676* SOURCE
1677*/
1678#define IB_NODE_TYPE_ROUTER					0x03
1679/**********/
1680
1681/****d* IBA Base: Constants/IB_NOTICE_PRODUCER_TYPE_CA
1682* NAME
1683*	IB_NOTICE_PRODUCER_TYPE_CA
1684*
1685* DESCRIPTION
1686*	Encoded generic producer type used in Notice attribute (13.4.8.2)
1687*
1688* SOURCE
1689*/
1690#define IB_NOTICE_PRODUCER_TYPE_CA			(CL_HTON32(0x000001))
1691/**********/
1692
1693/****d* IBA Base: Constants/IB_NOTICE_PRODUCER_TYPE_SWITCH
1694* NAME
1695*	IB_NOTICE_PRODUCER_TYPE_SWITCH
1696*
1697* DESCRIPTION
1698*	Encoded generic producer type used in Notice attribute (13.4.8.2)
1699*
1700* SOURCE
1701*/
1702#define IB_NOTICE_PRODUCER_TYPE_SWITCH			(CL_HTON32(0x000002))
1703/**********/
1704
1705/****d* IBA Base: Constants/IB_NOTICE_PRODUCER_TYPE_ROUTER
1706* NAME
1707*	IB_NOTICE_PRODUCER_TYPE_ROUTER
1708*
1709* DESCRIPTION
1710*	Encoded generic producer type used in Notice attribute (13.4.8.2)
1711*
1712* SOURCE
1713*/
1714#define IB_NOTICE_PRODUCER_TYPE_ROUTER			(CL_HTON32(0x000003))
1715/**********/
1716
1717/****d* IBA Base: Constants/IB_NOTICE_PRODUCER_TYPE_CLASS_MGR
1718* NAME
1719*	IB_NOTICE_PRODUCER_TYPE_CLASS_MGR
1720*
1721* DESCRIPTION
1722*	Encoded generic producer type used in Notice attribute (13.4.8.2)
1723*
1724* SOURCE
1725*/
1726#define IB_NOTICE_PRODUCER_TYPE_CLASS_MGR		(CL_HTON32(0x000004))
1727/**********/
1728
1729/****d* IBA Base: Constants/IB_MTU_LEN_TYPE
1730* NAME
1731*	IB_MTU_LEN_TYPE
1732*
1733* DESCRIPTION
1734*	Encoded path MTU.
1735*		1: 256
1736*		2: 512
1737*		3: 1024
1738*		4: 2048
1739*		5: 4096
1740*		others: reserved
1741*
1742* SOURCE
1743*/
1744#define IB_MTU_LEN_256							1
1745#define IB_MTU_LEN_512							2
1746#define IB_MTU_LEN_1024							3
1747#define IB_MTU_LEN_2048							4
1748#define IB_MTU_LEN_4096							5
1749
1750#define IB_MIN_MTU    IB_MTU_LEN_256
1751#define IB_MAX_MTU    IB_MTU_LEN_4096
1752
1753/**********/
1754
1755/****d* IBA Base: Constants/IB_PATH_SELECTOR_TYPE
1756* NAME
1757*	IB_PATH_SELECTOR_TYPE
1758*
1759* DESCRIPTION
1760*	Path selector.
1761*		0: greater than specified
1762*		1: less than specified
1763*		2: exactly the specified
1764*		3: largest available
1765*
1766* SOURCE
1767*/
1768#define IB_PATH_SELECTOR_GREATER_THAN		0
1769#define IB_PATH_SELECTOR_LESS_THAN		1
1770#define IB_PATH_SELECTOR_EXACTLY		2
1771#define IB_PATH_SELECTOR_LARGEST		3
1772/**********/
1773
1774/****d* IBA Base: Constants/IB_SMINFO_STATE_NOTACTIVE
1775* NAME
1776*	IB_SMINFO_STATE_NOTACTIVE
1777*
1778* DESCRIPTION
1779*	Encoded state value used in the SMInfo attribute.
1780*
1781* SOURCE
1782*/
1783#define IB_SMINFO_STATE_NOTACTIVE			0
1784/**********/
1785
1786/****d* IBA Base: Constants/IB_SMINFO_STATE_DISCOVERING
1787* NAME
1788*	IB_SMINFO_STATE_DISCOVERING
1789*
1790* DESCRIPTION
1791*	Encoded state value used in the SMInfo attribute.
1792*
1793* SOURCE
1794*/
1795#define IB_SMINFO_STATE_DISCOVERING			1
1796/**********/
1797
1798/****d* IBA Base: Constants/IB_SMINFO_STATE_STANDBY
1799* NAME
1800*	IB_SMINFO_STATE_STANDBY
1801*
1802* DESCRIPTION
1803*	Encoded state value used in the SMInfo attribute.
1804*
1805* SOURCE
1806*/
1807#define IB_SMINFO_STATE_STANDBY				2
1808/**********/
1809
1810/****d* IBA Base: Constants/IB_SMINFO_STATE_MASTER
1811* NAME
1812*	IB_SMINFO_STATE_MASTER
1813*
1814* DESCRIPTION
1815*	Encoded state value used in the SMInfo attribute.
1816*
1817* SOURCE
1818*/
1819#define IB_SMINFO_STATE_MASTER				3
1820/**********/
1821
1822/****d* IBA Base: Constants/IB_PATH_REC_SL_MASK
1823* NAME
1824*	IB_PATH_REC_SL_MASK
1825*
1826* DESCRIPTION
1827*	Mask for the sl field for path record
1828*
1829* SOURCE
1830*/
1831#define IB_PATH_REC_SL_MASK				0x000F
1832
1833/****d* IBA Base: Constants/IB_MULTIPATH_REC_SL_MASK
1834* NAME
1835*	IB_MULTIPATH_REC_SL_MASK
1836*
1837* DESCRIPTION
1838*	Mask for the sl field for MultiPath record
1839*
1840* SOURCE
1841*/
1842#define IB_MULTIPATH_REC_SL_MASK			0x000F
1843
1844/****d* IBA Base: Constants/IB_PATH_REC_QOS_CLASS_MASK
1845* NAME
1846*	IB_PATH_REC_QOS_CLASS_MASK
1847*
1848* DESCRIPTION
1849*	Mask for the QoS class field for path record
1850*
1851* SOURCE
1852*/
1853#define IB_PATH_REC_QOS_CLASS_MASK			0xFFF0
1854
1855/****d* IBA Base: Constants/IB_MULTIPATH_REC_QOS_CLASS_MASK
1856* NAME
1857*	IB_MULTIPATH_REC_QOS_CLASS_MASK
1858*
1859* DESCRIPTION
1860*	Mask for the QoS class field for MultiPath record
1861*
1862* SOURCE
1863*/
1864#define IB_MULTIPATH_REC_QOS_CLASS_MASK			0xFFF0
1865
1866/****d* IBA Base: Constants/IB_PATH_REC_SELECTOR_MASK
1867* NAME
1868*	IB_PATH_REC_SELECTOR_MASK
1869*
1870* DESCRIPTION
1871*	Mask for the selector field for path record MTU, rate,
1872*	and packet lifetime.
1873*
1874* SOURCE
1875*/
1876#define IB_PATH_REC_SELECTOR_MASK			0xC0
1877
1878/****d* IBA Base: Constants/IB_MULTIPATH_REC_SELECTOR_MASK
1879* NAME
1880*       IB_MULTIPATH_REC_SELECTOR_MASK
1881*
1882* DESCRIPTION
1883*       Mask for the selector field for multipath record MTU, rate,
1884*       and packet lifetime.
1885*
1886* SOURCE
1887*/
1888#define IB_MULTIPATH_REC_SELECTOR_MASK                       0xC0
1889/**********/
1890
1891/****d* IBA Base: Constants/IB_PATH_REC_BASE_MASK
1892* NAME
1893*	IB_PATH_REC_BASE_MASK
1894*
1895* DESCRIPTION
1896*	Mask for the base value field for path record MTU, rate,
1897*	and packet lifetime.
1898*
1899* SOURCE
1900*/
1901#define IB_PATH_REC_BASE_MASK				0x3F
1902/**********/
1903
1904/****d* IBA Base: Constants/IB_MULTIPATH_REC_BASE_MASK
1905* NAME
1906*       IB_MULTIPATH_REC_BASE_MASK
1907*
1908* DESCRIPTION
1909*       Mask for the base value field for multipath record MTU, rate,
1910*       and packet lifetime.
1911*
1912* SOURCE
1913*/
1914#define IB_MULTIPATH_REC_BASE_MASK                      0x3F
1915/**********/
1916
1917/****h* IBA Base/Type Definitions
1918* NAME
1919*	Type Definitions
1920*
1921* DESCRIPTION
1922*	Definitions are from the InfiniBand Architecture Specification v1.2
1923*
1924*********/
1925
1926/****d* IBA Base: Types/ib_net16_t
1927* NAME
1928*	ib_net16_t
1929*
1930* DESCRIPTION
1931*	Defines the network ordered type for 16-bit values.
1932*
1933* SOURCE
1934*/
1935typedef uint16_t ib_net16_t;
1936/**********/
1937
1938/****d* IBA Base: Types/ib_net32_t
1939* NAME
1940*	ib_net32_t
1941*
1942* DESCRIPTION
1943*	Defines the network ordered type for 32-bit values.
1944*
1945* SOURCE
1946*/
1947typedef uint32_t ib_net32_t;
1948/**********/
1949
1950/****d* IBA Base: Types/ib_net64_t
1951* NAME
1952*	ib_net64_t
1953*
1954* DESCRIPTION
1955*	Defines the network ordered type for 64-bit values.
1956*
1957* SOURCE
1958*/
1959typedef uint64_t ib_net64_t;
1960/**********/
1961
1962/****d* IBA Base: Types/ib_gid_prefix_t
1963* NAME
1964*	ib_gid_prefix_t
1965*
1966* DESCRIPTION
1967*
1968* SOURCE
1969*/
1970typedef ib_net64_t ib_gid_prefix_t;
1971/**********/
1972
1973/****d* IBA Base: Constants/ib_link_states_t
1974* NAME
1975*	ib_link_states_t
1976*
1977* DESCRIPTION
1978*	Defines the link states of a port.
1979*
1980* SOURCE
1981*/
1982#define IB_LINK_NO_CHANGE 0
1983#define IB_LINK_DOWN      1
1984#define IB_LINK_INIT	  2
1985#define IB_LINK_ARMED     3
1986#define IB_LINK_ACTIVE    4
1987#define IB_LINK_ACT_DEFER 5
1988/**********/
1989
1990static const char *const __ib_node_type_str[] = {
1991	"UNKNOWN",
1992	"Channel Adapter",
1993	"Switch",
1994	"Router"
1995};
1996
1997/****f* IBA Base: Types/ib_get_node_type_str
1998* NAME
1999*	ib_get_node_type_str
2000*
2001* DESCRIPTION
2002*	Returns a string for the specified node type.
2003*	14.2.5.3 NodeInfo
2004*
2005* SYNOPSIS
2006*/
2007static inline const char *OSM_API ib_get_node_type_str(IN uint8_t node_type)
2008{
2009	if (node_type > IB_NODE_TYPE_ROUTER)
2010		node_type = 0;
2011	return (__ib_node_type_str[node_type]);
2012}
2013
2014/*
2015* PARAMETERS
2016*	node_type
2017*		[in] Encoded node type as returned in the NodeInfo attribute.
2018
2019* RETURN VALUES
2020*	Pointer to the node type string.
2021*
2022* NOTES
2023*
2024* SEE ALSO
2025* ib_node_info_t
2026*********/
2027
2028static const char *const __ib_producer_type_str[] = {
2029	"UNKNOWN",
2030	"Channel Adapter",
2031	"Switch",
2032	"Router",
2033	"Class Manager"
2034};
2035
2036/****f* IBA Base: Types/ib_get_producer_type_str
2037* NAME
2038*	ib_get_producer_type_str
2039*
2040* DESCRIPTION
2041*	Returns a string for the specified producer type
2042*	13.4.8.2 Notice
2043*	13.4.8.3 InformInfo
2044*
2045* SYNOPSIS
2046*/
2047static inline const char *OSM_API
2048ib_get_producer_type_str(IN ib_net32_t producer_type)
2049{
2050	if (cl_ntoh32(producer_type) >
2051	    CL_NTOH32(IB_NOTICE_PRODUCER_TYPE_CLASS_MGR))
2052		producer_type = 0;
2053	return (__ib_producer_type_str[cl_ntoh32(producer_type)]);
2054}
2055
2056/*
2057* PARAMETERS
2058*	producer_type
2059*		[in] Encoded producer type from the Notice attribute
2060
2061* RETURN VALUES
2062*	Pointer to the producer type string.
2063*
2064* NOTES
2065*
2066* SEE ALSO
2067* ib_notice_get_prod_type
2068*********/
2069
2070static const char *const __ib_port_state_str[] = {
2071	"No State Change (NOP)",
2072	"DOWN",
2073	"INIT",
2074	"ARMED",
2075	"ACTIVE",
2076	"ACTDEFER",
2077	"UNKNOWN"
2078};
2079
2080/****f* IBA Base: Types/ib_get_port_state_str
2081* NAME
2082*	ib_get_port_state_str
2083*
2084* DESCRIPTION
2085*	Returns a string for the specified port state.
2086*
2087* SYNOPSIS
2088*/
2089static inline const char *OSM_API ib_get_port_state_str(IN uint8_t port_state)
2090{
2091	if (port_state > IB_LINK_ACTIVE)
2092		port_state = IB_LINK_ACTIVE + 1;
2093	return (__ib_port_state_str[port_state]);
2094}
2095
2096/*
2097* PARAMETERS
2098*	port_state
2099*		[in] Encoded port state as returned in the PortInfo attribute.
2100
2101* RETURN VALUES
2102*	Pointer to the port state string.
2103*
2104* NOTES
2105*
2106* SEE ALSO
2107* ib_port_info_t
2108*********/
2109
2110/****f* IBA Base: Types/ib_get_port_state_from_str
2111* NAME
2112*	ib_get_port_state_from_str
2113*
2114* DESCRIPTION
2115*	Returns a string for the specified port state.
2116*
2117* SYNOPSIS
2118*/
2119static inline uint8_t OSM_API
2120ib_get_port_state_from_str(IN char *p_port_state_str)
2121{
2122	if (!strncmp(p_port_state_str, "No State Change (NOP)", 12))
2123		return (0);
2124	else if (!strncmp(p_port_state_str, "DOWN", 4))
2125		return (1);
2126	else if (!strncmp(p_port_state_str, "INIT", 4))
2127		return (2);
2128	else if (!strncmp(p_port_state_str, "ARMED", 5))
2129		return (3);
2130	else if (!strncmp(p_port_state_str, "ACTIVE", 6))
2131		return (4);
2132	else if (!strncmp(p_port_state_str, "ACTDEFER", 8))
2133		return (5);
2134	return (6);
2135}
2136
2137/*
2138* PARAMETERS
2139*	p_port_state_str
2140*		[in] A string matching one returned by ib_get_port_state_str
2141*
2142* RETURN VALUES
2143*	The appropriate code.
2144*
2145* NOTES
2146*
2147* SEE ALSO
2148*	ib_port_info_t
2149*********/
2150
2151/****d* IBA Base: Constants/Join States
2152* NAME
2153*	Join States
2154*
2155* DESCRIPTION
2156*	Defines the join state flags for multicast group management.
2157*
2158* SOURCE
2159*/
2160#define IB_JOIN_STATE_FULL		1
2161#define IB_JOIN_STATE_NON		2
2162#define IB_JOIN_STATE_SEND_ONLY		4
2163/**********/
2164
2165/****f* IBA Base: Types/ib_pkey_get_base
2166* NAME
2167*	ib_pkey_get_base
2168*
2169* DESCRIPTION
2170*	Returns the base P_Key value with the membership bit stripped.
2171*
2172* SYNOPSIS
2173*/
2174static inline ib_net16_t OSM_API ib_pkey_get_base(IN const ib_net16_t pkey)
2175{
2176	return ((ib_net16_t) (pkey & IB_PKEY_BASE_MASK));
2177}
2178
2179/*
2180* PARAMETERS
2181*	pkey
2182*		[in] P_Key value
2183*
2184* RETURN VALUE
2185*	Returns the base P_Key value with the membership bit stripped.
2186*
2187* NOTES
2188*
2189* SEE ALSO
2190*********/
2191
2192/****f* IBA Base: Types/ib_pkey_is_full_member
2193* NAME
2194*	ib_pkey_is_full_member
2195*
2196* DESCRIPTION
2197*	Indicates if the port is a full member of the partition.
2198*
2199* SYNOPSIS
2200*/
2201static inline boolean_t OSM_API ib_pkey_is_full_member(IN const ib_net16_t pkey)
2202{
2203	return ((pkey & IB_PKEY_TYPE_MASK) == IB_PKEY_TYPE_MASK);
2204}
2205
2206/*
2207* PARAMETERS
2208*	pkey
2209*		[in] P_Key value
2210*
2211* RETURN VALUE
2212*	TRUE if the port is a full member of the partition.
2213*	FALSE otherwise.
2214*
2215* NOTES
2216*
2217* SEE ALSO
2218* ib_pkey_get_base, ib_net16_t
2219*********/
2220
2221/****f* IBA Base: Types/ib_pkey_is_invalid
2222* NAME
2223*	ib_pkey_is_invalid
2224*
2225* DESCRIPTION
2226*	Returns TRUE if the given P_Key is an invalid P_Key
2227*  C10-116: the CI shall regard a P_Key as invalid if its low-order
2228*           15 bits are all zero...
2229*
2230* SYNOPSIS
2231*/
2232static inline boolean_t OSM_API ib_pkey_is_invalid(IN const ib_net16_t pkey)
2233{
2234	return ib_pkey_get_base(pkey) == 0x0000 ? TRUE : FALSE;
2235}
2236
2237/*
2238* PARAMETERS
2239*	pkey
2240*		[in] P_Key value
2241*
2242* RETURN VALUE
2243*	Returns the base P_Key value with the membership bit stripped.
2244*
2245* NOTES
2246*
2247* SEE ALSO
2248*********/
2249
2250/****d* IBA Base: Types/ib_gid_t
2251* NAME
2252*	ib_gid_t
2253*
2254* DESCRIPTION
2255*
2256* SYNOPSIS
2257*/
2258#include <complib/cl_packon.h>
2259typedef union _ib_gid {
2260	uint8_t raw[16];
2261	struct _ib_gid_unicast {
2262		ib_gid_prefix_t prefix;
2263		ib_net64_t interface_id;
2264	} PACK_SUFFIX unicast;
2265	struct _ib_gid_multicast {
2266		uint8_t header[2];
2267		uint8_t raw_group_id[14];
2268	} PACK_SUFFIX multicast;
2269} PACK_SUFFIX ib_gid_t;
2270#include <complib/cl_packoff.h>
2271/*
2272* FIELDS
2273*	raw
2274*		GID represented as an unformated byte array.
2275*
2276*	unicast
2277*		Typical unicast representation with subnet prefix and
2278*		port GUID.
2279*
2280*	multicast
2281*		Representation for multicast use.
2282*
2283* SEE ALSO
2284*********/
2285
2286/****f* IBA Base: Types/ib_gid_is_multicast
2287* NAME
2288*	ib_gid_is_multicast
2289*
2290* DESCRIPTION
2291*       Returns a boolean indicating whether a GID is a multicast GID.
2292*
2293* SYNOPSIS
2294*/
2295static inline boolean_t OSM_API ib_gid_is_multicast(IN const ib_gid_t * p_gid)
2296{
2297	return (p_gid->raw[0] == 0xFF);
2298}
2299
2300/****f* IBA Base: Types/ib_gid_get_scope
2301* NAME
2302*	ib_gid_get_scope
2303*
2304* DESCRIPTION
2305*	Returns scope of (assumed) multicast GID.
2306*
2307* SYNOPSIS
2308*/
2309static inline uint8_t OSM_API ib_mgid_get_scope(IN const ib_gid_t * p_gid)
2310{
2311	return (p_gid->raw[1] & 0x0F);
2312}
2313
2314/****f* IBA Base: Types/ib_gid_set_scope
2315* NAME
2316*	ib_gid_set_scope
2317*
2318* DESCRIPTION
2319*	Sets scope of (assumed) multicast GID.
2320*
2321* SYNOPSIS
2322*/
2323static inline void OSM_API
2324ib_mgid_set_scope(IN ib_gid_t * const p_gid, IN const uint8_t scope)
2325{
2326	p_gid->raw[1] &= 0xF0;
2327	p_gid->raw[1] |= scope & 0x0F;
2328}
2329
2330/****f* IBA Base: Types/ib_gid_set_default
2331* NAME
2332*	ib_gid_set_default
2333*
2334* DESCRIPTION
2335*	Sets a GID to the default value.
2336*
2337* SYNOPSIS
2338*/
2339static inline void OSM_API
2340ib_gid_set_default(IN ib_gid_t * const p_gid, IN const ib_net64_t interface_id)
2341{
2342	p_gid->unicast.prefix = IB_DEFAULT_SUBNET_PREFIX;
2343	p_gid->unicast.interface_id = interface_id;
2344}
2345
2346/*
2347* PARAMETERS
2348*	p_gid
2349*		[in] Pointer to the GID object.
2350*
2351*	interface_id
2352*		[in] Manufacturer assigned EUI64 value of a port.
2353*
2354* RETURN VALUES
2355*	None.
2356*
2357* NOTES
2358*
2359* SEE ALSO
2360*	ib_gid_t
2361*********/
2362
2363/****f* IBA Base: Types/ib_gid_get_subnet_prefix
2364* NAME
2365*	ib_gid_get_subnet_prefix
2366*
2367* DESCRIPTION
2368*	Gets the subnet prefix from a GID.
2369*
2370* SYNOPSIS
2371*/
2372static inline ib_net64_t OSM_API
2373ib_gid_get_subnet_prefix(IN const ib_gid_t * const p_gid)
2374{
2375	return (p_gid->unicast.prefix);
2376}
2377
2378/*
2379* PARAMETERS
2380*	p_gid
2381*		[in] Pointer to the GID object.
2382*
2383* RETURN VALUES
2384*	64-bit subnet prefix value.
2385*
2386* NOTES
2387*
2388* SEE ALSO
2389*	ib_gid_t
2390*********/
2391
2392/****f* IBA Base: Types/ib_gid_is_link_local
2393* NAME
2394*	ib_gid_is_link_local
2395*
2396* DESCRIPTION
2397*	Returns TRUE if the unicast GID scoping indicates link local,
2398*	FALSE otherwise.
2399*
2400* SYNOPSIS
2401*/
2402static inline boolean_t OSM_API
2403ib_gid_is_link_local(IN const ib_gid_t * const p_gid)
2404{
2405	return ((ib_gid_get_subnet_prefix(p_gid) &
2406		 CL_HTON64(0xFFC0000000000000ULL)) == IB_DEFAULT_SUBNET_PREFIX);
2407}
2408
2409/*
2410* PARAMETERS
2411*	p_gid
2412*		[in] Pointer to the GID object.
2413*
2414* RETURN VALUES
2415*	Returns TRUE if the unicast GID scoping indicates link local,
2416*	FALSE otherwise.
2417*
2418* NOTES
2419*
2420* SEE ALSO
2421*	ib_gid_t
2422*********/
2423
2424/****f* IBA Base: Types/ib_gid_is_site_local
2425* NAME
2426*	ib_gid_is_site_local
2427*
2428* DESCRIPTION
2429*	Returns TRUE if the unicast GID scoping indicates site local,
2430*	FALSE otherwise.
2431*
2432* SYNOPSIS
2433*/
2434static inline boolean_t OSM_API
2435ib_gid_is_site_local(IN const ib_gid_t * const p_gid)
2436{
2437	return ((ib_gid_get_subnet_prefix(p_gid) &
2438		 CL_HTON64(0xFFFFFFFFFFFF0000ULL)) ==
2439		CL_HTON64(0xFEC0000000000000ULL));
2440}
2441
2442/*
2443* PARAMETERS
2444*	p_gid
2445*		[in] Pointer to the GID object.
2446*
2447* RETURN VALUES
2448*	Returns TRUE if the unicast GID scoping indicates site local,
2449*	FALSE otherwise.
2450*
2451* NOTES
2452*
2453* SEE ALSO
2454*	ib_gid_t
2455*********/
2456
2457/****f* IBA Base: Types/ib_gid_get_guid
2458* NAME
2459*	ib_gid_get_guid
2460*
2461* DESCRIPTION
2462*	Gets the guid from a GID.
2463*
2464* SYNOPSIS
2465*/
2466static inline ib_net64_t OSM_API
2467ib_gid_get_guid(IN const ib_gid_t * const p_gid)
2468{
2469	return (p_gid->unicast.interface_id);
2470}
2471
2472/*
2473* PARAMETERS
2474*	p_gid
2475*		[in] Pointer to the GID object.
2476*
2477* RETURN VALUES
2478*	64-bit GUID value.
2479*
2480* NOTES
2481*
2482* SEE ALSO
2483*	ib_gid_t
2484*********/
2485
2486/****s* IBA Base: Types/ib_path_rec_t
2487* NAME
2488*	ib_path_rec_t
2489*
2490* DESCRIPTION
2491*	Path records encapsulate the properties of a given
2492*	route between two end-points on a subnet.
2493*
2494* SYNOPSIS
2495*/
2496#include <complib/cl_packon.h>
2497typedef struct _ib_path_rec {
2498	ib_net64_t service_id;
2499	ib_gid_t dgid;
2500	ib_gid_t sgid;
2501	ib_net16_t dlid;
2502	ib_net16_t slid;
2503	ib_net32_t hop_flow_raw;
2504	uint8_t tclass;
2505	uint8_t num_path;
2506	ib_net16_t pkey;
2507	ib_net16_t qos_class_sl;
2508	uint8_t mtu;
2509	uint8_t rate;
2510	uint8_t pkt_life;
2511	uint8_t preference;
2512	uint8_t resv2[6];
2513} PACK_SUFFIX ib_path_rec_t;
2514#include <complib/cl_packoff.h>
2515/*
2516* FIELDS
2517*	service_id
2518*		Service ID for QoS.
2519*
2520*	dgid
2521*		GID of destination port.
2522*
2523*	sgid
2524*		GID of source port.
2525*
2526*	dlid
2527*		LID of destination port.
2528*
2529*	slid
2530*		LID of source port.
2531*
2532*	hop_flow_raw
2533*		Global routing parameters: hop count, flow label and raw bit.
2534*
2535*	tclass
2536*		Another global routing parameter.
2537*
2538*	num_path
2539*		Reversible path - 1 bit to say if path is reversible.
2540*		num_path [6:0] In queries, maximum number of paths to return.
2541*		In responses, undefined.
2542*
2543*	pkey
2544*		Partition key (P_Key) to use on this path.
2545*
2546*	qos_class_sl
2547*		QoS class and service level to use on this path.
2548*
2549*	mtu
2550*		MTU and MTU selector fields to use on this path
2551*
2552*	rate
2553*		Rate and rate selector fields to use on this path.
2554*
2555*	pkt_life
2556*		Packet lifetime
2557*
2558*	preference
2559*		Indicates the relative merit of this path versus other path
2560*		records returned from the SA.  Lower numbers are better.
2561*
2562*	resv2
2563*		Reserved bytes.
2564* SEE ALSO
2565*********/
2566
2567/* Path Record Component Masks */
2568#define  IB_PR_COMPMASK_SERVICEID_MSB     (CL_HTON64(((uint64_t)1)<<0))
2569#define  IB_PR_COMPMASK_SERVICEID_LSB     (CL_HTON64(((uint64_t)1)<<1))
2570#define  IB_PR_COMPMASK_DGID              (CL_HTON64(((uint64_t)1)<<2))
2571#define  IB_PR_COMPMASK_SGID              (CL_HTON64(((uint64_t)1)<<3))
2572#define  IB_PR_COMPMASK_DLID              (CL_HTON64(((uint64_t)1)<<4))
2573#define  IB_PR_COMPMASK_SLID              (CL_HTON64(((uint64_t)1)<<5))
2574#define  IB_PR_COMPMASK_RAWTRAFFIC        (CL_HTON64(((uint64_t)1)<<6))
2575#define  IB_PR_COMPMASK_RESV0             (CL_HTON64(((uint64_t)1)<<7))
2576#define  IB_PR_COMPMASK_FLOWLABEL         (CL_HTON64(((uint64_t)1)<<8))
2577#define  IB_PR_COMPMASK_HOPLIMIT          (CL_HTON64(((uint64_t)1)<<9))
2578#define  IB_PR_COMPMASK_TCLASS            (CL_HTON64(((uint64_t)1)<<10))
2579#define  IB_PR_COMPMASK_REVERSIBLE        (CL_HTON64(((uint64_t)1)<<11))
2580#define  IB_PR_COMPMASK_NUMBPATH          (CL_HTON64(((uint64_t)1)<<12))
2581#define  IB_PR_COMPMASK_PKEY              (CL_HTON64(((uint64_t)1)<<13))
2582#define  IB_PR_COMPMASK_QOS_CLASS         (CL_HTON64(((uint64_t)1)<<14))
2583#define  IB_PR_COMPMASK_SL                (CL_HTON64(((uint64_t)1)<<15))
2584#define  IB_PR_COMPMASK_MTUSELEC          (CL_HTON64(((uint64_t)1)<<16))
2585#define  IB_PR_COMPMASK_MTU               (CL_HTON64(((uint64_t)1)<<17))
2586#define  IB_PR_COMPMASK_RATESELEC         (CL_HTON64(((uint64_t)1)<<18))
2587#define  IB_PR_COMPMASK_RATE              (CL_HTON64(((uint64_t)1)<<19))
2588#define  IB_PR_COMPMASK_PKTLIFETIMESELEC  (CL_HTON64(((uint64_t)1)<<20))
2589#define  IB_PR_COMPMASK_PKTLIFETIME       (CL_HTON64(((uint64_t)1)<<21))
2590
2591#define  IB_PR_COMPMASK_SERVICEID (IB_PR_COMPMASK_SERVICEID_MSB | \
2592				   IB_PR_COMPMASK_SERVICEID_LSB)
2593
2594/* Link Record Component Masks */
2595#define IB_LR_COMPMASK_FROM_LID           (CL_HTON64(((uint64_t)1)<<0))
2596#define IB_LR_COMPMASK_FROM_PORT          (CL_HTON64(((uint64_t)1)<<1))
2597#define IB_LR_COMPMASK_TO_PORT            (CL_HTON64(((uint64_t)1)<<2))
2598#define IB_LR_COMPMASK_TO_LID             (CL_HTON64(((uint64_t)1)<<3))
2599
2600/* VL Arbitration Record Masks */
2601#define IB_VLA_COMPMASK_LID               (CL_HTON64(((uint64_t)1)<<0))
2602#define IB_VLA_COMPMASK_OUT_PORT          (CL_HTON64(((uint64_t)1)<<1))
2603#define IB_VLA_COMPMASK_BLOCK             (CL_HTON64(((uint64_t)1)<<2))
2604
2605/* SLtoVL Mapping Record Masks */
2606#define IB_SLVL_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))
2607#define IB_SLVL_COMPMASK_IN_PORT          (CL_HTON64(((uint64_t)1)<<1))
2608#define IB_SLVL_COMPMASK_OUT_PORT         (CL_HTON64(((uint64_t)1)<<2))
2609
2610/* P_Key Table Record Masks */
2611#define IB_PKEY_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))
2612#define IB_PKEY_COMPMASK_BLOCK            (CL_HTON64(((uint64_t)1)<<1))
2613#define IB_PKEY_COMPMASK_PORT             (CL_HTON64(((uint64_t)1)<<2))
2614
2615/* Switch Info Record Masks */
2616#define IB_SWIR_COMPMASK_LID		  (CL_HTON64(((uint64_t)1)<<0))
2617#define IB_SWIR_COMPMASK_RESERVED1	  (CL_HTON64(((uint64_t)1)<<1))
2618
2619/* LFT Record Masks */
2620#define IB_LFTR_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))
2621#define IB_LFTR_COMPMASK_BLOCK            (CL_HTON64(((uint64_t)1)<<1))
2622
2623/* MFT Record Masks */
2624#define IB_MFTR_COMPMASK_LID		  (CL_HTON64(((uint64_t)1)<<0))
2625#define IB_MFTR_COMPMASK_POSITION	  (CL_HTON64(((uint64_t)1)<<1))
2626#define IB_MFTR_COMPMASK_RESERVED1	  (CL_HTON64(((uint64_t)1)<<2))
2627#define IB_MFTR_COMPMASK_BLOCK		  (CL_HTON64(((uint64_t)1)<<3))
2628#define IB_MFTR_COMPMASK_RESERVED2	  (CL_HTON64(((uint64_t)1)<<4))
2629
2630/* NodeInfo Record Masks */
2631#define IB_NR_COMPMASK_LID                (CL_HTON64(((uint64_t)1)<<0))
2632#define IB_NR_COMPMASK_RESERVED1          (CL_HTON64(((uint64_t)1)<<1))
2633#define IB_NR_COMPMASK_BASEVERSION        (CL_HTON64(((uint64_t)1)<<2))
2634#define IB_NR_COMPMASK_CLASSVERSION       (CL_HTON64(((uint64_t)1)<<3))
2635#define IB_NR_COMPMASK_NODETYPE           (CL_HTON64(((uint64_t)1)<<4))
2636#define IB_NR_COMPMASK_NUMPORTS           (CL_HTON64(((uint64_t)1)<<5))
2637#define IB_NR_COMPMASK_SYSIMAGEGUID       (CL_HTON64(((uint64_t)1)<<6))
2638#define IB_NR_COMPMASK_NODEGUID           (CL_HTON64(((uint64_t)1)<<7))
2639#define IB_NR_COMPMASK_PORTGUID           (CL_HTON64(((uint64_t)1)<<8))
2640#define IB_NR_COMPMASK_PARTCAP            (CL_HTON64(((uint64_t)1)<<9))
2641#define IB_NR_COMPMASK_DEVID              (CL_HTON64(((uint64_t)1)<<10))
2642#define IB_NR_COMPMASK_REV                (CL_HTON64(((uint64_t)1)<<11))
2643#define IB_NR_COMPMASK_PORTNUM            (CL_HTON64(((uint64_t)1)<<12))
2644#define IB_NR_COMPMASK_VENDID             (CL_HTON64(((uint64_t)1)<<13))
2645#define IB_NR_COMPMASK_NODEDESC           (CL_HTON64(((uint64_t)1)<<14))
2646
2647/* Service Record Component Masks Sec 15.2.5.14 Ver 1.1*/
2648#define IB_SR_COMPMASK_SID                (CL_HTON64(((uint64_t)1)<<0))
2649#define IB_SR_COMPMASK_SGID               (CL_HTON64(((uint64_t)1)<<1))
2650#define IB_SR_COMPMASK_SPKEY              (CL_HTON64(((uint64_t)1)<<2))
2651#define IB_SR_COMPMASK_RES1               (CL_HTON64(((uint64_t)1)<<3))
2652#define IB_SR_COMPMASK_SLEASE             (CL_HTON64(((uint64_t)1)<<4))
2653#define IB_SR_COMPMASK_SKEY               (CL_HTON64(((uint64_t)1)<<5))
2654#define IB_SR_COMPMASK_SNAME              (CL_HTON64(((uint64_t)1)<<6))
2655#define IB_SR_COMPMASK_SDATA8_0           (CL_HTON64(((uint64_t)1)<<7))
2656#define IB_SR_COMPMASK_SDATA8_1           (CL_HTON64(((uint64_t)1)<<8))
2657#define IB_SR_COMPMASK_SDATA8_2           (CL_HTON64(((uint64_t)1)<<9))
2658#define IB_SR_COMPMASK_SDATA8_3           (CL_HTON64(((uint64_t)1)<<10))
2659#define IB_SR_COMPMASK_SDATA8_4           (CL_HTON64(((uint64_t)1)<<11))
2660#define IB_SR_COMPMASK_SDATA8_5           (CL_HTON64(((uint64_t)1)<<12))
2661#define IB_SR_COMPMASK_SDATA8_6           (CL_HTON64(((uint64_t)1)<<13))
2662#define IB_SR_COMPMASK_SDATA8_7           (CL_HTON64(((uint64_t)1)<<14))
2663#define IB_SR_COMPMASK_SDATA8_8           (CL_HTON64(((uint64_t)1)<<15))
2664#define IB_SR_COMPMASK_SDATA8_9           (CL_HTON64(((uint64_t)1)<<16))
2665#define IB_SR_COMPMASK_SDATA8_10       (CL_HTON64(((uint64_t)1)<<17))
2666#define IB_SR_COMPMASK_SDATA8_11       (CL_HTON64(((uint64_t)1)<<18))
2667#define IB_SR_COMPMASK_SDATA8_12       (CL_HTON64(((uint64_t)1)<<19))
2668#define IB_SR_COMPMASK_SDATA8_13       (CL_HTON64(((uint64_t)1)<<20))
2669#define IB_SR_COMPMASK_SDATA8_14       (CL_HTON64(((uint64_t)1)<<21))
2670#define IB_SR_COMPMASK_SDATA8_15       (CL_HTON64(((uint64_t)1)<<22))
2671#define IB_SR_COMPMASK_SDATA16_0       (CL_HTON64(((uint64_t)1)<<23))
2672#define IB_SR_COMPMASK_SDATA16_1       (CL_HTON64(((uint64_t)1)<<24))
2673#define IB_SR_COMPMASK_SDATA16_2       (CL_HTON64(((uint64_t)1)<<25))
2674#define IB_SR_COMPMASK_SDATA16_3       (CL_HTON64(((uint64_t)1)<<26))
2675#define IB_SR_COMPMASK_SDATA16_4       (CL_HTON64(((uint64_t)1)<<27))
2676#define IB_SR_COMPMASK_SDATA16_5       (CL_HTON64(((uint64_t)1)<<28))
2677#define IB_SR_COMPMASK_SDATA16_6       (CL_HTON64(((uint64_t)1)<<29))
2678#define IB_SR_COMPMASK_SDATA16_7       (CL_HTON64(((uint64_t)1)<<30))
2679#define IB_SR_COMPMASK_SDATA32_0       (CL_HTON64(((uint64_t)1)<<31))
2680#define IB_SR_COMPMASK_SDATA32_1       (CL_HTON64(((uint64_t)1)<<32))
2681#define IB_SR_COMPMASK_SDATA32_2       (CL_HTON64(((uint64_t)1)<<33))
2682#define IB_SR_COMPMASK_SDATA32_3       (CL_HTON64(((uint64_t)1)<<34))
2683#define IB_SR_COMPMASK_SDATA64_0       (CL_HTON64(((uint64_t)1)<<35))
2684#define IB_SR_COMPMASK_SDATA64_1       (CL_HTON64(((uint64_t)1)<<36))
2685
2686/* Port Info Record Component Masks */
2687#define IB_PIR_COMPMASK_LID              (CL_HTON64(((uint64_t)1)<<0))
2688#define IB_PIR_COMPMASK_PORTNUM          (CL_HTON64(((uint64_t)1)<<1))
2689#define IB_PIR_COMPMASK_OPTIONS		 (CL_HTON64(((uint64_t)1)<<2))
2690#define IB_PIR_COMPMASK_MKEY             (CL_HTON64(((uint64_t)1)<<3))
2691#define IB_PIR_COMPMASK_GIDPRE           (CL_HTON64(((uint64_t)1)<<4))
2692#define IB_PIR_COMPMASK_BASELID          (CL_HTON64(((uint64_t)1)<<5))
2693#define IB_PIR_COMPMASK_SMLID            (CL_HTON64(((uint64_t)1)<<6))
2694#define IB_PIR_COMPMASK_CAPMASK          (CL_HTON64(((uint64_t)1)<<7))
2695#define IB_PIR_COMPMASK_DIAGCODE         (CL_HTON64(((uint64_t)1)<<8))
2696#define IB_PIR_COMPMASK_MKEYLEASEPRD     (CL_HTON64(((uint64_t)1)<<9))
2697#define IB_PIR_COMPMASK_LOCALPORTNUM     (CL_HTON64(((uint64_t)1)<<10))
2698#define IB_PIR_COMPMASK_LINKWIDTHENABLED (CL_HTON64(((uint64_t)1)<<11))
2699#define IB_PIR_COMPMASK_LNKWIDTHSUPPORT  (CL_HTON64(((uint64_t)1)<<12))
2700#define IB_PIR_COMPMASK_LNKWIDTHACTIVE   (CL_HTON64(((uint64_t)1)<<13))
2701#define IB_PIR_COMPMASK_LNKSPEEDSUPPORT  (CL_HTON64(((uint64_t)1)<<14))
2702#define IB_PIR_COMPMASK_PORTSTATE        (CL_HTON64(((uint64_t)1)<<15))
2703#define IB_PIR_COMPMASK_PORTPHYSTATE     (CL_HTON64(((uint64_t)1)<<16))
2704#define IB_PIR_COMPMASK_LINKDWNDFLTSTATE (CL_HTON64(((uint64_t)1)<<17))
2705#define IB_PIR_COMPMASK_MKEYPROTBITS     (CL_HTON64(((uint64_t)1)<<18))
2706#define IB_PIR_COMPMASK_RESV2            (CL_HTON64(((uint64_t)1)<<19))
2707#define IB_PIR_COMPMASK_LMC              (CL_HTON64(((uint64_t)1)<<20))
2708#define IB_PIR_COMPMASK_LINKSPEEDACTIVE  (CL_HTON64(((uint64_t)1)<<21))
2709#define IB_PIR_COMPMASK_LINKSPEEDENABLE  (CL_HTON64(((uint64_t)1)<<22))
2710#define IB_PIR_COMPMASK_NEIGHBORMTU      (CL_HTON64(((uint64_t)1)<<23))
2711#define IB_PIR_COMPMASK_MASTERSMSL       (CL_HTON64(((uint64_t)1)<<24))
2712#define IB_PIR_COMPMASK_VLCAP            (CL_HTON64(((uint64_t)1)<<25))
2713#define IB_PIR_COMPMASK_INITTYPE         (CL_HTON64(((uint64_t)1)<<26))
2714#define IB_PIR_COMPMASK_VLHIGHLIMIT      (CL_HTON64(((uint64_t)1)<<27))
2715#define IB_PIR_COMPMASK_VLARBHIGHCAP     (CL_HTON64(((uint64_t)1)<<28))
2716#define IB_PIR_COMPMASK_VLARBLOWCAP      (CL_HTON64(((uint64_t)1)<<29))
2717#define IB_PIR_COMPMASK_INITTYPEREPLY    (CL_HTON64(((uint64_t)1)<<30))
2718#define IB_PIR_COMPMASK_MTUCAP           (CL_HTON64(((uint64_t)1)<<31))
2719#define IB_PIR_COMPMASK_VLSTALLCNT       (CL_HTON64(((uint64_t)1)<<32))
2720#define IB_PIR_COMPMASK_HOQLIFE          (CL_HTON64(((uint64_t)1)<<33))
2721#define IB_PIR_COMPMASK_OPVLS            (CL_HTON64(((uint64_t)1)<<34))
2722#define IB_PIR_COMPMASK_PARENFIN         (CL_HTON64(((uint64_t)1)<<35))
2723#define IB_PIR_COMPMASK_PARENFOUT        (CL_HTON64(((uint64_t)1)<<36))
2724#define IB_PIR_COMPMASK_FILTERRAWIN      (CL_HTON64(((uint64_t)1)<<37))
2725#define IB_PIR_COMPMASK_FILTERRAWOUT     (CL_HTON64(((uint64_t)1)<<38))
2726#define IB_PIR_COMPMASK_MKEYVIO          (CL_HTON64(((uint64_t)1)<<39))
2727#define IB_PIR_COMPMASK_PKEYVIO          (CL_HTON64(((uint64_t)1)<<40))
2728#define IB_PIR_COMPMASK_QKEYVIO          (CL_HTON64(((uint64_t)1)<<41))
2729#define IB_PIR_COMPMASK_GUIDCAP          (CL_HTON64(((uint64_t)1)<<42))
2730#define IB_PIR_COMPMASK_CLIENTREREG	 (CL_HTON64(((uint64_t)1)<<43))
2731#define IB_PIR_COMPMASK_RESV3            (CL_HTON64(((uint64_t)1)<<44))
2732#define IB_PIR_COMPMASK_SUBNTO           (CL_HTON64(((uint64_t)1)<<45))
2733#define IB_PIR_COMPMASK_RESV4            (CL_HTON64(((uint64_t)1)<<46))
2734#define IB_PIR_COMPMASK_RESPTIME         (CL_HTON64(((uint64_t)1)<<47))
2735#define IB_PIR_COMPMASK_LOCALPHYERR      (CL_HTON64(((uint64_t)1)<<48))
2736#define IB_PIR_COMPMASK_OVERRUNERR       (CL_HTON64(((uint64_t)1)<<49))
2737#define IB_PIR_COMPMASK_MAXCREDHINT	 (CL_HTON64(((uint64_t)1)<<50))
2738#define IB_PIR_COMPMASK_RESV5		 (CL_HTON64(((uint64_t)1)<<51))
2739#define IB_PIR_COMPMASK_LINKRTLAT	 (CL_HTON64(((uint64_t)1)<<52))
2740#define IB_PIR_COMPMASK_CAPMASK2	 (CL_HTON64(((uint64_t)1)<<53))
2741#define IB_PIR_COMPMASK_LINKSPDEXTACT	 (CL_HTON64(((uint64_t)1)<<54))
2742#define IB_PIR_COMPMASK_LINKSPDEXTSUPP	 (CL_HTON64(((uint64_t)1)<<55))
2743#define IB_PIR_COMPMASK_RESV7		 (CL_HTON64(((uint64_t)1)<<56))
2744#define IB_PIR_COMPMASK_LINKSPDEXTENAB	 (CL_HTON64(((uint64_t)1)<<57))
2745
2746/* Multicast Member Record Component Masks */
2747#define IB_MCR_COMPMASK_GID         (CL_HTON64(((uint64_t)1)<<0))
2748#define IB_MCR_COMPMASK_MGID        (CL_HTON64(((uint64_t)1)<<0))
2749#define IB_MCR_COMPMASK_PORT_GID    (CL_HTON64(((uint64_t)1)<<1))
2750#define IB_MCR_COMPMASK_QKEY        (CL_HTON64(((uint64_t)1)<<2))
2751#define IB_MCR_COMPMASK_MLID        (CL_HTON64(((uint64_t)1)<<3))
2752#define IB_MCR_COMPMASK_MTU_SEL     (CL_HTON64(((uint64_t)1)<<4))
2753#define IB_MCR_COMPMASK_MTU         (CL_HTON64(((uint64_t)1)<<5))
2754#define IB_MCR_COMPMASK_TCLASS      (CL_HTON64(((uint64_t)1)<<6))
2755#define IB_MCR_COMPMASK_PKEY        (CL_HTON64(((uint64_t)1)<<7))
2756#define IB_MCR_COMPMASK_RATE_SEL    (CL_HTON64(((uint64_t)1)<<8))
2757#define IB_MCR_COMPMASK_RATE        (CL_HTON64(((uint64_t)1)<<9))
2758#define IB_MCR_COMPMASK_LIFE_SEL    (CL_HTON64(((uint64_t)1)<<10))
2759#define IB_MCR_COMPMASK_LIFE        (CL_HTON64(((uint64_t)1)<<11))
2760#define IB_MCR_COMPMASK_SL          (CL_HTON64(((uint64_t)1)<<12))
2761#define IB_MCR_COMPMASK_FLOW        (CL_HTON64(((uint64_t)1)<<13))
2762#define IB_MCR_COMPMASK_HOP         (CL_HTON64(((uint64_t)1)<<14))
2763#define IB_MCR_COMPMASK_SCOPE       (CL_HTON64(((uint64_t)1)<<15))
2764#define IB_MCR_COMPMASK_JOIN_STATE  (CL_HTON64(((uint64_t)1)<<16))
2765#define IB_MCR_COMPMASK_PROXY       (CL_HTON64(((uint64_t)1)<<17))
2766
2767/* GUID Info Record Component Masks */
2768#define IB_GIR_COMPMASK_LID		(CL_HTON64(((uint64_t)1)<<0))
2769#define IB_GIR_COMPMASK_BLOCKNUM	(CL_HTON64(((uint64_t)1)<<1))
2770#define IB_GIR_COMPMASK_RESV1		(CL_HTON64(((uint64_t)1)<<2))
2771#define IB_GIR_COMPMASK_RESV2		(CL_HTON64(((uint64_t)1)<<3))
2772#define IB_GIR_COMPMASK_GID0		(CL_HTON64(((uint64_t)1)<<4))
2773#define IB_GIR_COMPMASK_GID1		(CL_HTON64(((uint64_t)1)<<5))
2774#define IB_GIR_COMPMASK_GID2		(CL_HTON64(((uint64_t)1)<<6))
2775#define IB_GIR_COMPMASK_GID3		(CL_HTON64(((uint64_t)1)<<7))
2776#define IB_GIR_COMPMASK_GID4		(CL_HTON64(((uint64_t)1)<<8))
2777#define IB_GIR_COMPMASK_GID5		(CL_HTON64(((uint64_t)1)<<9))
2778#define IB_GIR_COMPMASK_GID6		(CL_HTON64(((uint64_t)1)<<10))
2779#define IB_GIR_COMPMASK_GID7		(CL_HTON64(((uint64_t)1)<<11))
2780
2781/* MultiPath Record Component Masks */
2782#define IB_MPR_COMPMASK_RAWTRAFFIC	(CL_HTON64(((uint64_t)1)<<0))
2783#define IB_MPR_COMPMASK_RESV0		(CL_HTON64(((uint64_t)1)<<1))
2784#define IB_MPR_COMPMASK_FLOWLABEL	(CL_HTON64(((uint64_t)1)<<2))
2785#define IB_MPR_COMPMASK_HOPLIMIT	(CL_HTON64(((uint64_t)1)<<3))
2786#define IB_MPR_COMPMASK_TCLASS		(CL_HTON64(((uint64_t)1)<<4))
2787#define IB_MPR_COMPMASK_REVERSIBLE	(CL_HTON64(((uint64_t)1)<<5))
2788#define IB_MPR_COMPMASK_NUMBPATH	(CL_HTON64(((uint64_t)1)<<6))
2789#define IB_MPR_COMPMASK_PKEY		(CL_HTON64(((uint64_t)1)<<7))
2790#define IB_MPR_COMPMASK_QOS_CLASS	(CL_HTON64(((uint64_t)1)<<8))
2791#define IB_MPR_COMPMASK_SL		(CL_HTON64(((uint64_t)1)<<9))
2792#define IB_MPR_COMPMASK_MTUSELEC	(CL_HTON64(((uint64_t)1)<<10))
2793#define IB_MPR_COMPMASK_MTU		(CL_HTON64(((uint64_t)1)<<11))
2794#define IB_MPR_COMPMASK_RATESELEC	(CL_HTON64(((uint64_t)1)<<12))
2795#define IB_MPR_COMPMASK_RATE		(CL_HTON64(((uint64_t)1)<<13))
2796#define IB_MPR_COMPMASK_PKTLIFETIMESELEC (CL_HTON64(((uint64_t)1)<<14))
2797#define IB_MPR_COMPMASK_PKTLIFETIME	(CL_HTON64(((uint64_t)1)<<15))
2798#define IB_MPR_COMPMASK_SERVICEID_MSB	(CL_HTON64(((uint64_t)1)<<16))
2799#define IB_MPR_COMPMASK_INDEPSELEC	(CL_HTON64(((uint64_t)1)<<17))
2800#define IB_MPR_COMPMASK_RESV3		(CL_HTON64(((uint64_t)1)<<18))
2801#define IB_MPR_COMPMASK_SGIDCOUNT	(CL_HTON64(((uint64_t)1)<<19))
2802#define IB_MPR_COMPMASK_DGIDCOUNT	(CL_HTON64(((uint64_t)1)<<20))
2803#define IB_MPR_COMPMASK_SERVICEID_LSB	(CL_HTON64(((uint64_t)1)<<21))
2804
2805#define IB_MPR_COMPMASK_SERVICEID (IB_MPR_COMPMASK_SERVICEID_MSB | \
2806				   IB_MPR_COMPMASK_SERVICEID_LSB)
2807
2808/* SMInfo Record Component Masks */
2809#define IB_SMIR_COMPMASK_LID		(CL_HTON64(((uint64_t)1)<<0))
2810#define IB_SMIR_COMPMASK_RESV0		(CL_HTON64(((uint64_t)1)<<1))
2811#define IB_SMIR_COMPMASK_GUID		(CL_HTON64(((uint64_t)1)<<2))
2812#define IB_SMIR_COMPMASK_SMKEY		(CL_HTON64(((uint64_t)1)<<3))
2813#define IB_SMIR_COMPMASK_ACTCOUNT	(CL_HTON64(((uint64_t)1)<<4))
2814#define IB_SMIR_COMPMASK_PRIORITY	(CL_HTON64(((uint64_t)1)<<5))
2815#define IB_SMIR_COMPMASK_SMSTATE	(CL_HTON64(((uint64_t)1)<<6))
2816
2817/* InformInfo Record Component Masks */
2818#define IB_IIR_COMPMASK_SUBSCRIBERGID	(CL_HTON64(((uint64_t)1)<<0))
2819#define IB_IIR_COMPMASK_ENUM		(CL_HTON64(((uint64_t)1)<<1))
2820#define IB_IIR_COMPMASK_RESV0		(CL_HTON64(((uint64_t)1)<<2))
2821#define IB_IIR_COMPMASK_GID		(CL_HTON64(((uint64_t)1)<<3))
2822#define IB_IIR_COMPMASK_LIDRANGEBEGIN	(CL_HTON64(((uint64_t)1)<<4))
2823#define IB_IIR_COMPMASK_LIDRANGEEND	(CL_HTON64(((uint64_t)1)<<5))
2824#define IB_IIR_COMPMASK_RESV1		(CL_HTON64(((uint64_t)1)<<6))
2825#define IB_IIR_COMPMASK_ISGENERIC	(CL_HTON64(((uint64_t)1)<<7))
2826#define IB_IIR_COMPMASK_SUBSCRIBE	(CL_HTON64(((uint64_t)1)<<8))
2827#define IB_IIR_COMPMASK_TYPE		(CL_HTON64(((uint64_t)1)<<9))
2828#define IB_IIR_COMPMASK_TRAPNUMB	(CL_HTON64(((uint64_t)1)<<10))
2829#define IB_IIR_COMPMASK_DEVICEID	(CL_HTON64(((uint64_t)1)<<10))
2830#define IB_IIR_COMPMASK_QPN		(CL_HTON64(((uint64_t)1)<<11))
2831#define IB_IIR_COMPMASK_RESV2		(CL_HTON64(((uint64_t)1)<<12))
2832#define IB_IIR_COMPMASK_RESPTIME	(CL_HTON64(((uint64_t)1)<<13))
2833#define IB_IIR_COMPMASK_RESV3		(CL_HTON64(((uint64_t)1)<<14))
2834#define IB_IIR_COMPMASK_PRODTYPE	(CL_HTON64(((uint64_t)1)<<15))
2835#define IB_IIR_COMPMASK_VENDID		(CL_HTON64(((uint64_t)1)<<15))
2836
2837/****f* IBA Base: Types/ib_path_rec_init_local
2838* NAME
2839*	ib_path_rec_init_local
2840*
2841* DESCRIPTION
2842*	Initializes a subnet local path record.
2843*
2844* SYNOPSIS
2845*/
2846static inline void OSM_API
2847ib_path_rec_init_local(IN ib_path_rec_t * const p_rec,
2848		       IN ib_gid_t * const p_dgid,
2849		       IN ib_gid_t * const p_sgid,
2850		       IN ib_net16_t dlid,
2851		       IN ib_net16_t slid,
2852		       IN uint8_t num_path,
2853		       IN ib_net16_t pkey,
2854		       IN uint8_t sl,
2855		       IN uint16_t qos_class,
2856		       IN uint8_t mtu_selector,
2857		       IN uint8_t mtu,
2858		       IN uint8_t rate_selector,
2859		       IN uint8_t rate,
2860		       IN uint8_t pkt_life_selector,
2861		       IN uint8_t pkt_life, IN uint8_t preference)
2862{
2863	p_rec->dgid = *p_dgid;
2864	p_rec->sgid = *p_sgid;
2865	p_rec->dlid = dlid;
2866	p_rec->slid = slid;
2867	p_rec->num_path = num_path;
2868	p_rec->pkey = pkey;
2869	p_rec->qos_class_sl = cl_hton16((sl & IB_PATH_REC_SL_MASK) |
2870					(qos_class << 4));
2871	p_rec->mtu = (uint8_t) ((mtu & IB_PATH_REC_BASE_MASK) |
2872				(uint8_t) (mtu_selector << 6));
2873	p_rec->rate = (uint8_t) ((rate & IB_PATH_REC_BASE_MASK) |
2874				 (uint8_t) (rate_selector << 6));
2875	p_rec->pkt_life = (uint8_t) ((pkt_life & IB_PATH_REC_BASE_MASK) |
2876				     (uint8_t) (pkt_life_selector << 6));
2877	p_rec->preference = preference;
2878
2879	/* Clear global routing fields for local path records */
2880	p_rec->hop_flow_raw = 0;
2881	p_rec->tclass = 0;
2882	p_rec->service_id = 0;
2883
2884	memset(p_rec->resv2, 0, sizeof(p_rec->resv2));
2885}
2886
2887/*
2888* PARAMETERS
2889*	p_rec
2890*		[in] Pointer to the path record object.
2891*
2892*	dgid
2893*		[in] GID of destination port.
2894*
2895*	sgid
2896*		[in] GID of source port.
2897*
2898*	dlid
2899*		[in] LID of destination port.
2900*
2901*	slid
2902*		[in] LID of source port.
2903*
2904*	num_path
2905*		[in] Reversible path - 1 bit to say if path is reversible.
2906*		num_path [6:0] In queries, maximum number of paths to return.
2907*		In responses, undefined.
2908*
2909*	pkey
2910*		[in] Partition key (P_Key) to use on this path.
2911*
2912*	qos_class
2913*		[in] QoS class to use on this path.  Lower 12-bits are valid.
2914*
2915*	sl
2916*		[in] Service level to use on this path.  Lower 4-bits are valid.
2917*
2918*	mtu_selector
2919*		[in] Encoded MTU selector value to use on this path
2920*
2921*	mtu
2922*		[in] Encoded MTU to use on this path
2923*
2924*	rate_selector
2925*		[in] Encoded rate selector value to use on this path.
2926*
2927*	rate
2928*		[in] Encoded rate to use on this path.
2929*
2930*	pkt_life_selector
2931*		[in] Encoded Packet selector value lifetime for this path.
2932*
2933*	pkt_life
2934*		[in] Encoded Packet lifetime for this path.
2935*
2936*	preference
2937*		[in] Indicates the relative merit of this path versus other path
2938*		records returned from the SA.  Lower numbers are better.
2939*
2940* RETURN VALUES
2941*	None.
2942*
2943* NOTES
2944*
2945* SEE ALSO
2946*	ib_gid_t
2947*********/
2948
2949/****f* IBA Base: Types/ib_path_rec_num_path
2950* NAME
2951*	ib_path_rec_num_path
2952*
2953* DESCRIPTION
2954*	Get max number of paths to return.
2955*
2956* SYNOPSIS
2957*/
2958static inline uint8_t OSM_API
2959ib_path_rec_num_path(IN const ib_path_rec_t * const p_rec)
2960{
2961	return (p_rec->num_path & 0x7F);
2962}
2963
2964/*
2965* PARAMETERS
2966*	p_rec
2967*		[in] Pointer to the path record object.
2968*
2969* RETURN VALUES
2970*	Maximum number of paths to return for each unique SGID_DGID combination.
2971*
2972* NOTES
2973*
2974* SEE ALSO
2975*	ib_path_rec_t
2976*********/
2977
2978/****f* IBA Base: Types/ib_path_rec_set_sl
2979* NAME
2980*	ib_path_rec_set_sl
2981*
2982* DESCRIPTION
2983*	Set path service level.
2984*
2985* SYNOPSIS
2986*/
2987static inline void OSM_API
2988ib_path_rec_set_sl(IN ib_path_rec_t * const p_rec, IN const uint8_t sl)
2989{
2990	p_rec->qos_class_sl =
2991	    (p_rec->qos_class_sl & CL_HTON16(IB_PATH_REC_QOS_CLASS_MASK)) |
2992	    cl_hton16(sl & IB_PATH_REC_SL_MASK);
2993}
2994
2995/*
2996* PARAMETERS
2997*	p_rec
2998*		[in] Pointer to the path record object.
2999*
3000*	sl
3001*		[in] Service level to set.
3002*
3003* RETURN VALUES
3004*	None
3005*
3006* NOTES
3007*
3008* SEE ALSO
3009*	ib_path_rec_t
3010*********/
3011
3012/****f* IBA Base: Types/ib_path_rec_sl
3013* NAME
3014*	ib_path_rec_sl
3015*
3016* DESCRIPTION
3017*	Get path service level.
3018*
3019* SYNOPSIS
3020*/
3021static inline uint8_t OSM_API
3022ib_path_rec_sl(IN const ib_path_rec_t * const p_rec)
3023{
3024	return (uint8_t)(cl_ntoh16(p_rec->qos_class_sl) & IB_PATH_REC_SL_MASK);
3025}
3026
3027/*
3028* PARAMETERS
3029*	p_rec
3030*		[in] Pointer to the path record object.
3031*
3032* RETURN VALUES
3033*	SL.
3034*
3035* NOTES
3036*
3037* SEE ALSO
3038*	ib_path_rec_t
3039*********/
3040
3041/****f* IBA Base: Types/ib_path_rec_set_qos_class
3042* NAME
3043*	ib_path_rec_set_qos_class
3044*
3045* DESCRIPTION
3046*	Set path QoS class.
3047*
3048* SYNOPSIS
3049*/
3050static inline void OSM_API
3051ib_path_rec_set_qos_class(IN ib_path_rec_t * const p_rec,
3052			  IN const uint16_t qos_class)
3053{
3054	p_rec->qos_class_sl =
3055	    (p_rec->qos_class_sl & CL_HTON16(IB_PATH_REC_SL_MASK)) |
3056	    cl_hton16(qos_class << 4);
3057}
3058
3059/*
3060* PARAMETERS
3061*	p_rec
3062*		[in] Pointer to the path record object.
3063*
3064*	qos_class
3065*		[in] QoS class to set.
3066*
3067* RETURN VALUES
3068*	None
3069*
3070* NOTES
3071*
3072* SEE ALSO
3073*	ib_path_rec_t
3074*********/
3075
3076/****f* IBA Base: Types/ib_path_rec_qos_class
3077* NAME
3078*	ib_path_rec_qos_class
3079*
3080* DESCRIPTION
3081*	Get QoS class.
3082*
3083* SYNOPSIS
3084*/
3085static inline uint16_t OSM_API
3086ib_path_rec_qos_class(IN const ib_path_rec_t * const p_rec)
3087{
3088	return (cl_ntoh16(p_rec->qos_class_sl) >> 4);
3089}
3090
3091/*
3092* PARAMETERS
3093*	p_rec
3094*		[in] Pointer to the path record object.
3095*
3096* RETURN VALUES
3097*	QoS class of the path record.
3098*
3099* NOTES
3100*
3101* SEE ALSO
3102*	ib_path_rec_t
3103*********/
3104
3105/****f* IBA Base: Types/ib_path_rec_mtu
3106* NAME
3107*	ib_path_rec_mtu
3108*
3109* DESCRIPTION
3110*	Get encoded path MTU.
3111*
3112* SYNOPSIS
3113*/
3114static inline uint8_t OSM_API
3115ib_path_rec_mtu(IN const ib_path_rec_t * const p_rec)
3116{
3117	return ((uint8_t) (p_rec->mtu & IB_PATH_REC_BASE_MASK));
3118}
3119
3120/*
3121* PARAMETERS
3122*	p_rec
3123*		[in] Pointer to the path record object.
3124*
3125* RETURN VALUES
3126*	Encoded path MTU.
3127*		1: 256
3128*		2: 512
3129*		3: 1024
3130*		4: 2048
3131*		5: 4096
3132*		others: reserved
3133*
3134* NOTES
3135*
3136* SEE ALSO
3137*	ib_path_rec_t
3138*********/
3139
3140/****f* IBA Base: Types/ib_path_rec_mtu_sel
3141* NAME
3142*	ib_path_rec_mtu_sel
3143*
3144* DESCRIPTION
3145*	Get encoded path MTU selector.
3146*
3147* SYNOPSIS
3148*/
3149static inline uint8_t OSM_API
3150ib_path_rec_mtu_sel(IN const ib_path_rec_t * const p_rec)
3151{
3152	return ((uint8_t) ((p_rec->mtu & IB_PATH_REC_SELECTOR_MASK) >> 6));
3153}
3154
3155/*
3156* PARAMETERS
3157*	p_rec
3158*		[in] Pointer to the path record object.
3159*
3160* RETURN VALUES
3161*	Encoded path MTU selector value (for queries).
3162*		0: greater than MTU specified
3163*		1: less than MTU specified
3164*		2: exactly the MTU specified
3165*		3: largest MTU available
3166*
3167* NOTES
3168*
3169* SEE ALSO
3170*	ib_path_rec_t
3171*********/
3172
3173/****f* IBA Base: Types/ib_path_rec_rate
3174* NAME
3175*	ib_path_rec_rate
3176*
3177* DESCRIPTION
3178*	Get encoded path rate.
3179*
3180* SYNOPSIS
3181*/
3182static inline uint8_t OSM_API
3183ib_path_rec_rate(IN const ib_path_rec_t * const p_rec)
3184{
3185	return ((uint8_t) (p_rec->rate & IB_PATH_REC_BASE_MASK));
3186}
3187
3188/*
3189* PARAMETERS
3190*	p_rec
3191*		[in] Pointer to the path record object.
3192*
3193* RETURN VALUES
3194*	Encoded path rate.
3195*		2: 2.5 Gb/sec.
3196*		3: 10 Gb/sec.
3197*		4: 30 Gb/sec.
3198*		5: 5 Gb/sec.
3199*		6: 20 Gb/sec.
3200*		7: 40 Gb/sec.
3201*		8: 60 Gb/sec.
3202*		9: 80 Gb/sec.
3203*		10: 120 Gb/sec.
3204*		11: 14 Gb/sec.
3205*		12: 56 Gb/sec.
3206*		13: 112 Gb/sec.
3207*		14: 168 Gb/sec.
3208*		15: 25 Gb/sec.
3209*		16: 100 Gb/sec.
3210*		17: 200 Gb/sec.
3211*		18: 300 Gb/sec.
3212*		others: reserved
3213*
3214* NOTES
3215*
3216* SEE ALSO
3217*	ib_path_rec_t
3218*********/
3219
3220/****f* IBA Base: Types/ib_path_rec_rate_sel
3221* NAME
3222*	ib_path_rec_rate_sel
3223*
3224* DESCRIPTION
3225*	Get encoded path rate selector.
3226*
3227* SYNOPSIS
3228*/
3229static inline uint8_t OSM_API
3230ib_path_rec_rate_sel(IN const ib_path_rec_t * const p_rec)
3231{
3232	return ((uint8_t) ((p_rec->rate & IB_PATH_REC_SELECTOR_MASK) >> 6));
3233}
3234
3235/*
3236* PARAMETERS
3237*	p_rec
3238*		[in] Pointer to the path record object.
3239*
3240* RETURN VALUES
3241*	Encoded path rate selector value (for queries).
3242*		0: greater than rate specified
3243*		1: less than rate specified
3244*		2: exactly the rate specified
3245*		3: largest rate available
3246*
3247* NOTES
3248*
3249* SEE ALSO
3250*	ib_path_rec_t
3251*********/
3252
3253/****f* IBA Base: Types/ib_path_rec_pkt_life
3254* NAME
3255*	ib_path_rec_pkt_life
3256*
3257* DESCRIPTION
3258*	Get encoded path pkt_life.
3259*
3260* SYNOPSIS
3261*/
3262static inline uint8_t OSM_API
3263ib_path_rec_pkt_life(IN const ib_path_rec_t * const p_rec)
3264{
3265	return ((uint8_t) (p_rec->pkt_life & IB_PATH_REC_BASE_MASK));
3266}
3267
3268/*
3269* PARAMETERS
3270*	p_rec
3271*		[in] Pointer to the path record object.
3272*
3273* RETURN VALUES
3274*	Encoded path pkt_life = 4.096 usec * 2 ** PacketLifeTime.
3275*
3276* NOTES
3277*
3278* SEE ALSO
3279*	ib_path_rec_t
3280*********/
3281
3282/****f* IBA Base: Types/ib_path_rec_pkt_life_sel
3283* NAME
3284*	ib_path_rec_pkt_life_sel
3285*
3286* DESCRIPTION
3287*	Get encoded path pkt_lifetime selector.
3288*
3289* SYNOPSIS
3290*/
3291static inline uint8_t OSM_API
3292ib_path_rec_pkt_life_sel(IN const ib_path_rec_t * const p_rec)
3293{
3294	return ((uint8_t) ((p_rec->pkt_life & IB_PATH_REC_SELECTOR_MASK) >> 6));
3295}
3296
3297/*
3298* PARAMETERS
3299*	p_rec
3300*		[in] Pointer to the path record object.
3301*
3302* RETURN VALUES
3303*	Encoded path pkt_lifetime selector value (for queries).
3304*		0: greater than rate specified
3305*		1: less than rate specified
3306*		2: exactly the rate specified
3307*		3: smallest packet lifetime available
3308*
3309* NOTES
3310*
3311* SEE ALSO
3312*	ib_path_rec_t
3313*********/
3314
3315/****f* IBA Base: Types/ib_path_rec_flow_lbl
3316* NAME
3317*	ib_path_rec_flow_lbl
3318*
3319* DESCRIPTION
3320*	Get flow label.
3321*
3322* SYNOPSIS
3323*/
3324static inline uint32_t OSM_API
3325ib_path_rec_flow_lbl(IN const ib_path_rec_t * const p_rec)
3326{
3327	return (((cl_ntoh32(p_rec->hop_flow_raw) >> 8) & 0x000FFFFF));
3328}
3329
3330/*
3331* PARAMETERS
3332*	p_rec
3333*		[in] Pointer to the path record object.
3334*
3335* RETURN VALUES
3336*	Flow label of the path record.
3337*
3338* NOTES
3339*
3340* SEE ALSO
3341*	ib_path_rec_t
3342*********/
3343
3344/****f* IBA Base: Types/ib_path_rec_hop_limit
3345* NAME
3346*	ib_path_rec_hop_limit
3347*
3348* DESCRIPTION
3349*	Get hop limit.
3350*
3351* SYNOPSIS
3352*/
3353static inline uint8_t OSM_API
3354ib_path_rec_hop_limit(IN const ib_path_rec_t * const p_rec)
3355{
3356	return ((uint8_t) (cl_ntoh32(p_rec->hop_flow_raw) & 0x000000FF));
3357}
3358
3359/*
3360* PARAMETERS
3361*	p_rec
3362*		[in] Pointer to the path record object.
3363*
3364* RETURN VALUES
3365*	Hop limit of the path record.
3366*
3367* NOTES
3368*
3369* SEE ALSO
3370*	ib_path_rec_t
3371*********/
3372
3373/****s* IBA Base: Constants/IB_CLASS_CAP_TRAP
3374* NAME
3375*	IB_CLASS_CAP_TRAP
3376*
3377* DESCRIPTION
3378*	ClassPortInfo CapabilityMask bits.  This bit will be set
3379*	if the class supports Trap() MADs (13.4.8.1).
3380*
3381* SEE ALSO
3382*	ib_class_port_info_t, IB_CLASS_CAP_GETSET, IB_CLASS_CAP_CAPMASK2
3383*
3384* SOURCE
3385*/
3386#define IB_CLASS_CAP_TRAP					0x0001
3387/*********/
3388
3389/****s* IBA Base: Constants/IB_CLASS_CAP_GETSET
3390* NAME
3391*	IB_CLASS_CAP_GETSET
3392*
3393* DESCRIPTION
3394*	ClassPortInfo CapabilityMask bits.  This bit will be set
3395*	if the class supports Get(Notice) and Set(Notice) MADs (13.4.8.1).
3396*
3397* SEE ALSO
3398*	ib_class_port_info_t, IB_CLASS_CAP_TRAP, IB_CLASS_CAP_CAPMASK2
3399*
3400* SOURCE
3401*/
3402#define IB_CLASS_CAP_GETSET					0x0002
3403/*********/
3404
3405/****s* IBA Base: Constants/IB_CLASS_CAP_CAPMASK2
3406* NAME
3407*	IB_CLASS_CAP_CAPMASK2
3408*
3409* DESCRIPTION
3410*	ClassPortInfo CapabilityMask bits.
3411*	This bit will be set of the class supports additional class specific
3412*	capabilities (CapabilityMask2) (13.4.8.1).
3413*
3414* SEE ALSO
3415*	ib_class_port_info_t, IB_CLASS_CAP_TRAP, IB_CLASS_CAP_GETSET
3416*
3417* SOURCE
3418*/
3419#define IB_CLASS_CAP_CAPMASK2					0x0004
3420/*********/
3421
3422/****s* IBA Base: Constants/IB_CLASS_ENH_PORT0_CC_MASK
3423* NAME
3424*	IB_CLASS_ENH_PORT0_CC_MASK
3425*
3426* DESCRIPTION
3427*	ClassPortInfo CapabilityMask bits.
3428*	Switch only: This bit will be set if the EnhancedPort0
3429*	supports CA Congestion Control (A10.4.3.1).
3430*
3431* SEE ALSO
3432*	ib_class_port_info_t
3433*
3434* SOURCE
3435*/
3436#define IB_CLASS_ENH_PORT0_CC_MASK			0x0100
3437/*********/
3438
3439/****s* IBA Base: Constants/IB_CLASS_RESP_TIME_MASK
3440* NAME
3441*	IB_CLASS_RESP_TIME_MASK
3442*
3443* DESCRIPTION
3444*	Mask bits to extract the response time value from the
3445*	cap_mask2_resp_time field of ib_class_port_info_t.
3446*
3447* SEE ALSO
3448*	ib_class_port_info_t
3449*
3450* SOURCE
3451*/
3452#define IB_CLASS_RESP_TIME_MASK				0x1F
3453/*********/
3454
3455/****s* IBA Base: Constants/IB_CLASS_CAPMASK2_SHIFT
3456* NAME
3457*	IB_CLASS_CAPMASK2_SHIFT
3458*
3459* DESCRIPTION
3460*	Number of bits to shift to extract the capability mask2
3461*	from the cap_mask2_resp_time field of ib_class_port_info_t.
3462*
3463* SEE ALSO
3464*	ib_class_port_info_t
3465*
3466* SOURCE
3467*/
3468#define IB_CLASS_CAPMASK2_SHIFT				5
3469/*********/
3470
3471/****s* IBA Base: Types/ib_class_port_info_t
3472* NAME
3473*	ib_class_port_info_t
3474*
3475* DESCRIPTION
3476*	IBA defined ClassPortInfo attribute (13.4.8.1)
3477*
3478* SYNOPSIS
3479*/
3480#include <complib/cl_packon.h>
3481typedef struct _ib_class_port_info {
3482	uint8_t base_ver;
3483	uint8_t class_ver;
3484	ib_net16_t cap_mask;
3485	ib_net32_t cap_mask2_resp_time;
3486	ib_gid_t redir_gid;
3487	ib_net32_t redir_tc_sl_fl;
3488	ib_net16_t redir_lid;
3489	ib_net16_t redir_pkey;
3490	ib_net32_t redir_qp;
3491	ib_net32_t redir_qkey;
3492	ib_gid_t trap_gid;
3493	ib_net32_t trap_tc_sl_fl;
3494	ib_net16_t trap_lid;
3495	ib_net16_t trap_pkey;
3496	ib_net32_t trap_hop_qp;
3497	ib_net32_t trap_qkey;
3498} PACK_SUFFIX ib_class_port_info_t;
3499#include <complib/cl_packoff.h>
3500/*
3501* FIELDS
3502*	base_ver
3503*		Maximum supported MAD Base Version.
3504*
3505*	class_ver
3506*		Maximum supported management class version.
3507*
3508*	cap_mask
3509*		Supported capabilities of this management class.
3510*
3511*	cap_mask2_resp_time
3512*		Maximum expected response time and additional
3513*		supported capabilities of this management class.
3514*
3515*	redir_gid
3516*		GID to use for redirection, or zero
3517*
3518*	redir_tc_sl_fl
3519*		Traffic class, service level and flow label the requester
3520*		should use if the service is redirected.
3521*
3522*	redir_lid
3523*		LID used for redirection, or zero
3524*
3525*	redir_pkey
3526*		P_Key used for redirection
3527*
3528*	redir_qp
3529*		QP number used for redirection
3530*
3531*	redir_qkey
3532*		Q_Key associated with the redirected QP.  This shall be the
3533*		well known Q_Key value.
3534*
3535*	trap_gid
3536*		GID value used for trap messages from this service.
3537*
3538*	trap_tc_sl_fl
3539*		Traffic class, service level and flow label used for
3540*		trap messages originated by this service.
3541*
3542*	trap_lid
3543*		LID used for trap messages, or zero
3544*
3545*	trap_pkey
3546*		P_Key used for trap messages
3547*
3548*	trap_hop_qp
3549*		Hop limit (upper 8 bits) and QP number used for trap messages
3550*
3551*	trap_qkey
3552*		Q_Key associated with the trap messages QP.
3553*
3554* SEE ALSO
3555*	IB_CLASS_CAP_GETSET, IB_CLASS_CAP_TRAP
3556*
3557*********/
3558
3559#define IB_PM_ALL_PORT_SELECT			(CL_HTON16(((uint16_t)1)<<8))
3560#define IB_PM_EXT_WIDTH_SUPPORTED		(CL_HTON16(((uint16_t)1)<<9))
3561#define IB_PM_EXT_WIDTH_NOIETF_SUP		(CL_HTON16(((uint16_t)1)<<10))
3562#define IB_PM_SAMPLES_ONLY_SUP			(CL_HTON16(((uint16_t)1)<<11))
3563#define IB_PM_PC_XMIT_WAIT_SUP			(CL_HTON16(((uint16_t)1)<<12))
3564#define IS_PM_INH_LMTD_PKEY_MC_CONSTR_ERR	(CL_HTON16(((uint16_t)1)<<13))
3565#define IS_PM_RSFEC_COUNTERS_SUP		(CL_HTON16(((uint16_t)1)<<14))
3566#define IB_PM_IS_QP1_DROP_SUP			(CL_HTON16(((uint16_t)1)<<15))
3567/* CapabilityMask2 */
3568#define IB_PM_IS_PM_KEY_SUPPORTED		(CL_HTON32(((uint32_t)1)<<0))
3569#define IB_PM_IS_ADDL_PORT_CTRS_EXT_SUP		(CL_HTON32(((uint32_t)1)<<1))
3570
3571/****f* IBA Base: Types/ib_class_set_resp_time_val
3572* NAME
3573*	ib_class_set_resp_time_val
3574*
3575* DESCRIPTION
3576*	Set maximum expected response time.
3577*
3578* SYNOPSIS
3579*/
3580static inline void OSM_API
3581ib_class_set_resp_time_val(IN ib_class_port_info_t * const p_cpi,
3582			   IN const uint8_t val)
3583{
3584	p_cpi->cap_mask2_resp_time =
3585	    (p_cpi->cap_mask2_resp_time & CL_HTON32(~IB_CLASS_RESP_TIME_MASK)) |
3586	    cl_hton32(val & IB_CLASS_RESP_TIME_MASK);
3587}
3588
3589/*
3590* PARAMETERS
3591*	p_cpi
3592*		[in] Pointer to the class port info object.
3593*
3594*	val
3595*		[in] Response time value to set.
3596*
3597* RETURN VALUES
3598*	None
3599*
3600* NOTES
3601*
3602* SEE ALSO
3603*	ib_class_port_info_t
3604*********/
3605
3606/****f* IBA Base: Types/ib_class_resp_time_val
3607* NAME
3608*	ib_class_resp_time_val
3609*
3610* DESCRIPTION
3611*	Get response time value.
3612*
3613* SYNOPSIS
3614*/
3615static inline uint8_t OSM_API
3616ib_class_resp_time_val(IN ib_class_port_info_t * const p_cpi)
3617{
3618	return (uint8_t)(cl_ntoh32(p_cpi->cap_mask2_resp_time) &
3619			 IB_CLASS_RESP_TIME_MASK);
3620}
3621
3622/*
3623* PARAMETERS
3624*	p_cpi
3625*		[in] Pointer to the class port info object.
3626*
3627* RETURN VALUES
3628*	Response time value.
3629*
3630* NOTES
3631*
3632* SEE ALSO
3633*	ib_class_port_info_t
3634*********/
3635
3636/****f* IBA Base: Types/ib_class_set_cap_mask2
3637* NAME
3638*	ib_class_set_cap_mask2
3639*
3640* DESCRIPTION
3641*	Set ClassPortInfo:CapabilityMask2.
3642*
3643* SYNOPSIS
3644*/
3645static inline void OSM_API
3646ib_class_set_cap_mask2(IN ib_class_port_info_t * const p_cpi,
3647		       IN const uint32_t cap_mask2)
3648{
3649	p_cpi->cap_mask2_resp_time = (p_cpi->cap_mask2_resp_time &
3650		CL_HTON32(IB_CLASS_RESP_TIME_MASK)) |
3651		cl_hton32(cap_mask2 << IB_CLASS_CAPMASK2_SHIFT);
3652}
3653
3654/*
3655* PARAMETERS
3656*	p_cpi
3657*		[in] Pointer to the class port info object.
3658*
3659*	cap_mask2
3660*		[in] CapabilityMask2 value to set.
3661*
3662* RETURN VALUES
3663*	None
3664*
3665* NOTES
3666*
3667* SEE ALSO
3668*	ib_class_port_info_t
3669*********/
3670
3671/****f* IBA Base: Types/ib_class_cap_mask2
3672* NAME
3673*	ib_class_cap_mask2
3674*
3675* DESCRIPTION
3676*	Get ClassPortInfo:CapabilityMask2.
3677*
3678* SYNOPSIS
3679*/
3680static inline uint32_t OSM_API
3681ib_class_cap_mask2(IN const ib_class_port_info_t * const p_cpi)
3682{
3683	return (cl_ntoh32(p_cpi->cap_mask2_resp_time) >> IB_CLASS_CAPMASK2_SHIFT);
3684}
3685
3686/*
3687* PARAMETERS
3688*	p_cpi
3689*		[in] Pointer to the class port info object.
3690*
3691* RETURN VALUES
3692*	CapabilityMask2 of the ClassPortInfo.
3693*
3694* NOTES
3695*
3696* SEE ALSO
3697*	ib_class_port_info_t
3698*********/
3699
3700/****s* IBA Base: Types/ib_sm_info_t
3701* NAME
3702*	ib_sm_info_t
3703*
3704* DESCRIPTION
3705*	SMInfo structure (14.2.5.13).
3706*
3707* SYNOPSIS
3708*/
3709#include <complib/cl_packon.h>
3710typedef struct _ib_sm_info {
3711	ib_net64_t guid;
3712	ib_net64_t sm_key;
3713	ib_net32_t act_count;
3714	uint8_t pri_state;
3715} PACK_SUFFIX ib_sm_info_t;
3716#include <complib/cl_packoff.h>
3717/*
3718* FIELDS
3719*	guid
3720*		Port GUID for this SM.
3721*
3722*	sm_key
3723*		SM_Key of this SM.
3724*
3725*	act_count
3726*		Activity counter used as a heartbeat.
3727*
3728*	pri_state
3729*		Priority and State information
3730*
3731* SEE ALSO
3732*********/
3733
3734/****f* IBA Base: Types/ib_sminfo_get_priority
3735* NAME
3736*	ib_sminfo_get_priority
3737*
3738* DESCRIPTION
3739*	Returns the priority value.
3740*
3741* SYNOPSIS
3742*/
3743static inline uint8_t OSM_API
3744ib_sminfo_get_priority(IN const ib_sm_info_t * const p_smi)
3745{
3746	return ((uint8_t) ((p_smi->pri_state & 0xF0) >> 4));
3747}
3748
3749/*
3750* PARAMETERS
3751*	p_smi
3752*		[in] Pointer to the SMInfo Attribute.
3753*
3754* RETURN VALUES
3755*	Returns the priority value.
3756*
3757* NOTES
3758*
3759* SEE ALSO
3760*********/
3761
3762/****f* IBA Base: Types/ib_sminfo_get_state
3763* NAME
3764*	ib_sminfo_get_state
3765*
3766* DESCRIPTION
3767*	Returns the state value.
3768*
3769* SYNOPSIS
3770*/
3771static inline uint8_t OSM_API
3772ib_sminfo_get_state(IN const ib_sm_info_t * const p_smi)
3773{
3774	return ((uint8_t) (p_smi->pri_state & 0x0F));
3775}
3776
3777/*
3778* PARAMETERS
3779*	p_smi
3780*		[in] Pointer to the SMInfo Attribute.
3781*
3782* RETURN VALUES
3783*	Returns the state value.
3784*
3785* NOTES
3786*
3787* SEE ALSO
3788*********/
3789
3790/****s* IBA Base: Types/ib_mad_t
3791* NAME
3792*	ib_mad_t
3793*
3794* DESCRIPTION
3795*	IBA defined MAD header (13.4.3)
3796*
3797* SYNOPSIS
3798*/
3799#include <complib/cl_packon.h>
3800typedef struct _ib_mad {
3801	uint8_t base_ver;
3802	uint8_t mgmt_class;
3803	uint8_t class_ver;
3804	uint8_t method;
3805	ib_net16_t status;
3806	ib_net16_t class_spec;
3807	ib_net64_t trans_id;
3808	ib_net16_t attr_id;
3809	ib_net16_t resv;
3810	ib_net32_t attr_mod;
3811} PACK_SUFFIX ib_mad_t;
3812#include <complib/cl_packoff.h>
3813/*
3814* FIELDS
3815*	base_ver
3816*		MAD base format.
3817*
3818*	mgmt_class
3819*		Class of operation.
3820*
3821*	class_ver
3822*		Version of MAD class-specific format.
3823*
3824*	method
3825*		Method to perform, including 'R' bit.
3826*
3827*	status
3828*		Status of operation.
3829*
3830*	class_spec
3831*		Reserved for subnet management.
3832*
3833*	trans_id
3834*		Transaction ID.
3835*
3836*	attr_id
3837*		Attribute ID.
3838*
3839*	resv
3840*		Reserved field.
3841*
3842*	attr_mod
3843*		Attribute modifier.
3844*
3845* SEE ALSO
3846*********/
3847
3848/****s* IBA Base: Types/ib_rmpp_mad_t
3849* NAME
3850*	ib_rmpp_mad_t
3851*
3852* DESCRIPTION
3853*	IBA defined MAD RMPP header (13.6.2.1)
3854*
3855* SYNOPSIS
3856*/
3857#include <complib/cl_packon.h>
3858typedef struct _ib_rmpp_mad {
3859	ib_mad_t common_hdr;
3860	uint8_t rmpp_version;
3861	uint8_t rmpp_type;
3862	uint8_t rmpp_flags;
3863	uint8_t rmpp_status;
3864	ib_net32_t seg_num;
3865	ib_net32_t paylen_newwin;
3866} PACK_SUFFIX ib_rmpp_mad_t;
3867#include <complib/cl_packoff.h>
3868/*
3869* SEE ALSO
3870*	ib_mad_t
3871*********/
3872
3873/****f* IBA Base: Types/ib_mad_init_new
3874* NAME
3875*	ib_mad_init_new
3876*
3877* DESCRIPTION
3878*	Initializes a MAD common header.
3879*
3880* SYNOPSIS
3881*/
3882static inline void OSM_API
3883ib_mad_init_new(IN ib_mad_t * const p_mad,
3884		IN const uint8_t mgmt_class,
3885		IN const uint8_t class_ver,
3886		IN const uint8_t method,
3887		IN const ib_net64_t trans_id,
3888		IN const ib_net16_t attr_id, IN const ib_net32_t attr_mod)
3889{
3890	CL_ASSERT(p_mad);
3891	p_mad->base_ver = 1;
3892	p_mad->mgmt_class = mgmt_class;
3893	p_mad->class_ver = class_ver;
3894	p_mad->method = method;
3895	p_mad->status = 0;
3896	p_mad->class_spec = 0;
3897	p_mad->trans_id = trans_id;
3898	p_mad->attr_id = attr_id;
3899	p_mad->resv = 0;
3900	p_mad->attr_mod = attr_mod;
3901}
3902
3903/*
3904* PARAMETERS
3905*	p_mad
3906*		[in] Pointer to the MAD common header.
3907*
3908*	mgmt_class
3909*		[in] Class of operation.
3910*
3911*	class_ver
3912*		[in] Version of MAD class-specific format.
3913*
3914*	method
3915*		[in] Method to perform, including 'R' bit.
3916*
3917*	trans_Id
3918*		[in] Transaction ID.
3919*
3920*	attr_id
3921*		[in] Attribute ID.
3922*
3923*	attr_mod
3924*		[in] Attribute modifier.
3925*
3926* RETURN VALUES
3927*	None.
3928*
3929* NOTES
3930*
3931* SEE ALSO
3932*	ib_mad_t
3933*********/
3934
3935/****f* IBA Base: Types/ib_mad_init_response
3936* NAME
3937*	ib_mad_init_response
3938*
3939* DESCRIPTION
3940*	Initializes a MAD common header as a response.
3941*
3942* SYNOPSIS
3943*/
3944static inline void OSM_API
3945ib_mad_init_response(IN const ib_mad_t * const p_req_mad,
3946		     IN ib_mad_t * const p_mad, IN const ib_net16_t status)
3947{
3948	CL_ASSERT(p_req_mad);
3949	CL_ASSERT(p_mad);
3950	*p_mad = *p_req_mad;
3951	p_mad->status = status;
3952	if (p_mad->method == IB_MAD_METHOD_SET)
3953		p_mad->method = IB_MAD_METHOD_GET;
3954	p_mad->method |= IB_MAD_METHOD_RESP_MASK;
3955}
3956
3957/*
3958* PARAMETERS
3959*	p_req_mad
3960*		[in] Pointer to the MAD common header in the original request MAD.
3961*
3962*	p_mad
3963*		[in] Pointer to the MAD common header to initialize.
3964*
3965*	status
3966*		[in] MAD Status value to return;
3967*
3968* RETURN VALUES
3969*	None.
3970*
3971* NOTES
3972*	p_req_mad and p_mad may point to the same MAD.
3973*
3974* SEE ALSO
3975*	ib_mad_t
3976*********/
3977
3978/****f* IBA Base: Types/ib_mad_is_response
3979* NAME
3980*	ib_mad_is_response
3981*
3982* DESCRIPTION
3983*	Returns TRUE if the MAD is a response ('R' bit set)
3984*	or if the MAD is a TRAP REPRESS,
3985*	FALSE otherwise.
3986*
3987* SYNOPSIS
3988*/
3989static inline boolean_t OSM_API
3990ib_mad_is_response(IN const ib_mad_t * const p_mad)
3991{
3992	CL_ASSERT(p_mad);
3993	return (p_mad->method & IB_MAD_METHOD_RESP_MASK ||
3994		p_mad->method == IB_MAD_METHOD_TRAP_REPRESS);
3995}
3996
3997/*
3998* PARAMETERS
3999*	p_mad
4000*		[in] Pointer to the MAD.
4001*
4002* RETURN VALUES
4003*	Returns TRUE if the MAD is a response ('R' bit set),
4004*	FALSE otherwise.
4005*
4006* NOTES
4007*
4008* SEE ALSO
4009*	ib_mad_t
4010*********/
4011
4012#define IB_RMPP_TYPE_DATA		1
4013#define IB_RMPP_TYPE_ACK		2
4014#define IB_RMPP_TYPE_STOP		3
4015#define IB_RMPP_TYPE_ABORT		4
4016
4017#define IB_RMPP_NO_RESP_TIME		0x1F
4018#define IB_RMPP_FLAG_ACTIVE		0x01
4019#define IB_RMPP_FLAG_FIRST		0x02
4020#define IB_RMPP_FLAG_LAST		0x04
4021
4022#define IB_RMPP_STATUS_SUCCESS		0
4023#define IB_RMPP_STATUS_RESX		1	/* resources exhausted */
4024#define IB_RMPP_STATUS_T2L		118	/* time too long */
4025#define IB_RMPP_STATUS_BAD_LEN		119	/* incon. last and payload len */
4026#define IB_RMPP_STATUS_BAD_SEG		120	/* incon. first and segment no */
4027#define IB_RMPP_STATUS_BADT		121	/* bad rmpp type */
4028#define IB_RMPP_STATUS_W2S		122	/* newwindowlast too small */
4029#define IB_RMPP_STATUS_S2B		123	/* segment no too big */
4030#define IB_RMPP_STATUS_BAD_STATUS	124	/* illegal status */
4031#define IB_RMPP_STATUS_UNV		125	/* unsupported version */
4032#define IB_RMPP_STATUS_TMR		126	/* too many retries */
4033#define IB_RMPP_STATUS_UNSPEC		127	/* unspecified */
4034
4035/****f* IBA Base: Types/ib_rmpp_is_flag_set
4036* NAME
4037*	ib_rmpp_is_flag_set
4038*
4039* DESCRIPTION
4040*	Returns TRUE if the MAD has the given RMPP flag set.
4041*
4042* SYNOPSIS
4043*/
4044static inline boolean_t OSM_API
4045ib_rmpp_is_flag_set(IN const ib_rmpp_mad_t * const p_rmpp_mad,
4046		    IN const uint8_t flag)
4047{
4048	CL_ASSERT(p_rmpp_mad);
4049	return ((p_rmpp_mad->rmpp_flags & flag) == flag);
4050}
4051
4052/*
4053* PARAMETERS
4054*	ib_rmpp_mad_t
4055*		[in] Pointer to a MAD with an RMPP header.
4056*
4057*	flag
4058*		[in] The RMPP flag being examined.
4059*
4060* RETURN VALUES
4061*	Returns TRUE if the MAD has the given RMPP flag set.
4062*
4063* NOTES
4064*
4065* SEE ALSO
4066*	ib_mad_t, ib_rmpp_mad_t
4067*********/
4068
4069static inline void OSM_API
4070ib_rmpp_set_resp_time(IN ib_rmpp_mad_t * const p_rmpp_mad,
4071		      IN const uint8_t resp_time)
4072{
4073	CL_ASSERT(p_rmpp_mad);
4074	p_rmpp_mad->rmpp_flags |= (resp_time << 3);
4075}
4076
4077static inline uint8_t OSM_API
4078ib_rmpp_get_resp_time(IN const ib_rmpp_mad_t * const p_rmpp_mad)
4079{
4080	CL_ASSERT(p_rmpp_mad);
4081	return ((uint8_t) (p_rmpp_mad->rmpp_flags >> 3));
4082}
4083
4084/****d* IBA Base: Constants/IB_SMP_DIRECTION
4085* NAME
4086*	IB_SMP_DIRECTION
4087*
4088* DESCRIPTION
4089*	The Direction bit for directed route SMPs.
4090*
4091* SOURCE
4092*/
4093#define IB_SMP_DIRECTION_HO		0x8000
4094#define IB_SMP_DIRECTION		(CL_HTON16(IB_SMP_DIRECTION_HO))
4095/**********/
4096
4097/****d* IBA Base: Constants/IB_SMP_STATUS_MASK
4098* NAME
4099*	IB_SMP_STATUS_MASK
4100*
4101* DESCRIPTION
4102*	Mask value for extracting status from a directed route SMP.
4103*
4104* SOURCE
4105*/
4106#define IB_SMP_STATUS_MASK_HO		0x7FFF
4107#define IB_SMP_STATUS_MASK		(CL_HTON16(IB_SMP_STATUS_MASK_HO))
4108/**********/
4109
4110/****s* IBA Base: Types/ib_smp_t
4111* NAME
4112*	ib_smp_t
4113*
4114* DESCRIPTION
4115*	IBA defined SMP. (14.2.1.2)
4116*
4117* SYNOPSIS
4118*/
4119#define IB_SMP_DATA_SIZE 64
4120#include <complib/cl_packon.h>
4121typedef struct _ib_smp {
4122	uint8_t base_ver;
4123	uint8_t mgmt_class;
4124	uint8_t class_ver;
4125	uint8_t method;
4126	ib_net16_t status;
4127	uint8_t hop_ptr;
4128	uint8_t hop_count;
4129	ib_net64_t trans_id;
4130	ib_net16_t attr_id;
4131	ib_net16_t resv;
4132	ib_net32_t attr_mod;
4133	ib_net64_t m_key;
4134	ib_net16_t dr_slid;
4135	ib_net16_t dr_dlid;
4136	uint32_t resv1[7];
4137	uint8_t data[IB_SMP_DATA_SIZE];
4138	uint8_t initial_path[IB_SUBNET_PATH_HOPS_MAX];
4139	uint8_t return_path[IB_SUBNET_PATH_HOPS_MAX];
4140} PACK_SUFFIX ib_smp_t;
4141#include <complib/cl_packoff.h>
4142/*
4143* FIELDS
4144*	base_ver
4145*		MAD base format.
4146*
4147*	mgmt_class
4148*		Class of operation.
4149*
4150*	class_ver
4151*		Version of MAD class-specific format.
4152*
4153*	method
4154*		Method to perform, including 'R' bit.
4155*
4156*	status
4157*		Status of operation.
4158*
4159*	hop_ptr
4160*		Hop pointer for directed route MADs.
4161*
4162*	hop_count
4163*		Hop count for directed route MADs.
4164*
4165*	trans_Id
4166*		Transaction ID.
4167*
4168*	attr_id
4169*		Attribute ID.
4170*
4171*	resv
4172*		Reserved field.
4173*
4174*	attr_mod
4175*		Attribute modifier.
4176*
4177*	m_key
4178*		Management key value.
4179*
4180*	dr_slid
4181*		Directed route source LID.
4182*
4183*	dr_dlid
4184*		Directed route destination LID.
4185*
4186*	resv0
4187*		Reserved for 64 byte alignment.
4188*
4189*	data
4190*		MAD data payload.
4191*
4192*	initial_path
4193*		Outbound port list.
4194*
4195*	return_path
4196*		Inbound port list.
4197*
4198* SEE ALSO
4199*********/
4200
4201/****f* IBA Base: Types/ib_smp_get_status
4202* NAME
4203*	ib_smp_get_status
4204*
4205* DESCRIPTION
4206*	Returns the SMP status value in network order.
4207*
4208* SYNOPSIS
4209*/
4210static inline ib_net16_t OSM_API
4211ib_smp_get_status(IN const ib_smp_t * const p_smp)
4212{
4213	return ((ib_net16_t) (p_smp->status & IB_SMP_STATUS_MASK));
4214}
4215
4216/*
4217* PARAMETERS
4218*	p_smp
4219*		[in] Pointer to the SMP packet.
4220*
4221* RETURN VALUES
4222*	Returns the SMP status value in network order.
4223*
4224* NOTES
4225*
4226* SEE ALSO
4227*	ib_smp_t
4228*********/
4229
4230/****f* IBA Base: Types/ib_smp_is_response
4231* NAME
4232*	ib_smp_is_response
4233*
4234* DESCRIPTION
4235*	Returns TRUE if the SMP is a response MAD, FALSE otherwise.
4236*
4237* SYNOPSIS
4238*/
4239static inline boolean_t OSM_API
4240ib_smp_is_response(IN const ib_smp_t * const p_smp)
4241{
4242	return (ib_mad_is_response((const ib_mad_t *)p_smp));
4243}
4244
4245/*
4246* PARAMETERS
4247*	p_smp
4248*		[in] Pointer to the SMP packet.
4249*
4250* RETURN VALUES
4251*	Returns TRUE if the SMP is a response MAD, FALSE otherwise.
4252*
4253* NOTES
4254*
4255* SEE ALSO
4256*	ib_smp_t
4257*********/
4258
4259/****f* IBA Base: Types/ib_smp_is_d
4260* NAME
4261*	ib_smp_is_d
4262*
4263* DESCRIPTION
4264*	Returns TRUE if the SMP 'D' (direction) bit is set.
4265*
4266* SYNOPSIS
4267*/
4268static inline boolean_t OSM_API ib_smp_is_d(IN const ib_smp_t * const p_smp)
4269{
4270	return ((p_smp->status & IB_SMP_DIRECTION) == IB_SMP_DIRECTION);
4271}
4272
4273/*
4274* PARAMETERS
4275*	p_smp
4276*		[in] Pointer to the SMP packet.
4277*
4278* RETURN VALUES
4279*	Returns TRUE if the SMP 'D' (direction) bit is set.
4280*
4281* NOTES
4282*
4283* SEE ALSO
4284*	ib_smp_t
4285*********/
4286
4287/****f* IBA Base: Types/ib_smp_init_new
4288* NAME
4289*	ib_smp_init_new
4290*
4291* DESCRIPTION
4292*	Initializes a MAD common header.
4293*
4294* TODO
4295*	This is too big for inlining, but leave it here for now
4296*	since there is not yet another convenient spot.
4297*
4298* SYNOPSIS
4299*/
4300static inline void OSM_API
4301ib_smp_init_new(IN ib_smp_t * const p_smp,
4302		IN const uint8_t method,
4303		IN const ib_net64_t trans_id,
4304		IN const ib_net16_t attr_id,
4305		IN const ib_net32_t attr_mod,
4306		IN const uint8_t hop_count,
4307		IN const ib_net64_t m_key,
4308		IN const uint8_t * path_out,
4309		IN const ib_net16_t dr_slid, IN const ib_net16_t dr_dlid)
4310{
4311	CL_ASSERT(p_smp);
4312	CL_ASSERT(hop_count < IB_SUBNET_PATH_HOPS_MAX);
4313	p_smp->base_ver = 1;
4314	p_smp->mgmt_class = IB_MCLASS_SUBN_DIR;
4315	p_smp->class_ver = 1;
4316	p_smp->method = method;
4317	p_smp->status = 0;
4318	p_smp->hop_ptr = 0;
4319	p_smp->hop_count = hop_count;
4320	p_smp->trans_id = trans_id;
4321	p_smp->attr_id = attr_id;
4322	p_smp->resv = 0;
4323	p_smp->attr_mod = attr_mod;
4324	p_smp->m_key = m_key;
4325	p_smp->dr_slid = dr_slid;
4326	p_smp->dr_dlid = dr_dlid;
4327
4328	memset(p_smp->resv1, 0,
4329	       sizeof(p_smp->resv1) +
4330	       sizeof(p_smp->data) +
4331	       sizeof(p_smp->initial_path) + sizeof(p_smp->return_path));
4332
4333	/* copy the path */
4334	memcpy(&p_smp->initial_path, path_out, sizeof(p_smp->initial_path));
4335}
4336
4337/*
4338* PARAMETERS
4339*	p_smp
4340*		[in] Pointer to the SMP packet.
4341*
4342*	method
4343*		[in] Method to perform, including 'R' bit.
4344*
4345*	trans_Id
4346*		[in] Transaction ID.
4347*
4348*	attr_id
4349*		[in] Attribute ID.
4350*
4351*	attr_mod
4352*		[in] Attribute modifier.
4353*
4354*	hop_count
4355*		[in] Number of hops in the path.
4356*
4357*	m_key
4358*		[in] Management key for this SMP.
4359*
4360*	path_out
4361*		[in] Port array for outbound path.
4362*
4363*
4364* RETURN VALUES
4365*	None.
4366*
4367* NOTES
4368*	Payload area is initialized to zero.
4369*
4370*
4371* SEE ALSO
4372*	ib_mad_t
4373*********/
4374
4375/****f* IBA Base: Types/ib_smp_get_payload_ptr
4376* NAME
4377*	ib_smp_get_payload_ptr
4378*
4379* DESCRIPTION
4380*	Gets a pointer to the SMP payload area.
4381*
4382* SYNOPSIS
4383*/
4384static inline void *OSM_API
4385ib_smp_get_payload_ptr(IN const ib_smp_t * const p_smp)
4386{
4387	return ((void *)p_smp->data);
4388}
4389
4390/*
4391* PARAMETERS
4392*	p_smp
4393*		[in] Pointer to the SMP packet.
4394*
4395* RETURN VALUES
4396*	Pointer to SMP payload area.
4397*
4398* NOTES
4399*
4400* SEE ALSO
4401*	ib_mad_t
4402*********/
4403
4404/****s* IBA Base: Types/ib_node_info_t
4405* NAME
4406*	ib_node_info_t
4407*
4408* DESCRIPTION
4409*	IBA defined NodeInfo. (14.2.5.3)
4410*
4411* SYNOPSIS
4412*/
4413#include <complib/cl_packon.h>
4414typedef struct _ib_node_info {
4415	uint8_t base_version;
4416	uint8_t class_version;
4417	uint8_t node_type;
4418	uint8_t num_ports;
4419	ib_net64_t sys_guid;
4420	ib_net64_t node_guid;
4421	ib_net64_t port_guid;
4422	ib_net16_t partition_cap;
4423	ib_net16_t device_id;
4424	ib_net32_t revision;
4425	ib_net32_t port_num_vendor_id;
4426} PACK_SUFFIX ib_node_info_t;
4427#include <complib/cl_packoff.h>
4428/************/
4429
4430/****s* IBA Base: Types/ib_sa_mad_t
4431* NAME
4432*	ib_sa_mad_t
4433*
4434* DESCRIPTION
4435*	IBA defined SA MAD format. (15.2.1)
4436*
4437* SYNOPSIS
4438*/
4439#define IB_SA_DATA_SIZE 200
4440
4441#include <complib/cl_packon.h>
4442typedef struct _ib_sa_mad {
4443	uint8_t base_ver;
4444	uint8_t mgmt_class;
4445	uint8_t class_ver;
4446	uint8_t method;
4447	ib_net16_t status;
4448	ib_net16_t resv;
4449	ib_net64_t trans_id;
4450	ib_net16_t attr_id;
4451	ib_net16_t resv1;
4452	ib_net32_t attr_mod;
4453	uint8_t rmpp_version;
4454	uint8_t rmpp_type;
4455	uint8_t rmpp_flags;
4456	uint8_t rmpp_status;
4457	ib_net32_t seg_num;
4458	ib_net32_t paylen_newwin;
4459	ib_net64_t sm_key;
4460	ib_net16_t attr_offset;
4461	ib_net16_t resv3;
4462	ib_net64_t comp_mask;
4463	uint8_t data[IB_SA_DATA_SIZE];
4464} PACK_SUFFIX ib_sa_mad_t;
4465#include <complib/cl_packoff.h>
4466/**********/
4467#define IB_SA_MAD_HDR_SIZE (sizeof(ib_sa_mad_t) - IB_SA_DATA_SIZE)
4468
4469static inline uint32_t OSM_API ib_get_attr_size(IN const ib_net16_t attr_offset)
4470{
4471	return (((uint32_t) cl_ntoh16(attr_offset)) << 3);
4472}
4473
4474static inline ib_net16_t OSM_API ib_get_attr_offset(IN const uint32_t attr_size)
4475{
4476	return (cl_hton16((uint16_t) (attr_size >> 3)));
4477}
4478
4479/****f* IBA Base: Types/ib_sa_mad_get_payload_ptr
4480* NAME
4481*	ib_sa_mad_get_payload_ptr
4482*
4483* DESCRIPTION
4484*	Gets a pointer to the SA MAD's payload area.
4485*
4486* SYNOPSIS
4487*/
4488static inline void *OSM_API
4489ib_sa_mad_get_payload_ptr(IN const ib_sa_mad_t * const p_sa_mad)
4490{
4491	return ((void *)p_sa_mad->data);
4492}
4493
4494/*
4495* PARAMETERS
4496*	p_sa_mad
4497*		[in] Pointer to the SA MAD packet.
4498*
4499* RETURN VALUES
4500*	Pointer to SA MAD payload area.
4501*
4502* NOTES
4503*
4504* SEE ALSO
4505*	ib_mad_t
4506*********/
4507
4508#define IB_NODE_INFO_PORT_NUM_MASK		(CL_HTON32(0xFF000000))
4509#define IB_NODE_INFO_VEND_ID_MASK		(CL_HTON32(0x00FFFFFF))
4510#if CPU_LE
4511#define IB_NODE_INFO_PORT_NUM_SHIFT 0
4512#else
4513#define IB_NODE_INFO_PORT_NUM_SHIFT 24
4514#endif
4515
4516/****f* IBA Base: Types/ib_node_info_get_local_port_num
4517* NAME
4518*	ib_node_info_get_local_port_num
4519*
4520* DESCRIPTION
4521*	Gets the local port number from the NodeInfo attribute.
4522*
4523* SYNOPSIS
4524*/
4525static inline uint8_t OSM_API
4526ib_node_info_get_local_port_num(IN const ib_node_info_t * const p_ni)
4527{
4528	return ((uint8_t) ((p_ni->port_num_vendor_id &
4529			    IB_NODE_INFO_PORT_NUM_MASK)
4530			   >> IB_NODE_INFO_PORT_NUM_SHIFT));
4531}
4532
4533/*
4534* PARAMETERS
4535*	p_ni
4536*		[in] Pointer to a NodeInfo attribute.
4537*
4538* RETURN VALUES
4539*	Local port number that returned the attribute.
4540*
4541* NOTES
4542*
4543* SEE ALSO
4544*	ib_node_info_t
4545*********/
4546
4547/****f* IBA Base: Types/ib_node_info_get_vendor_id
4548* NAME
4549*	ib_node_info_get_vendor_id
4550*
4551* DESCRIPTION
4552*	Gets the VendorID from the NodeInfo attribute.
4553*
4554* SYNOPSIS
4555*/
4556static inline ib_net32_t OSM_API
4557ib_node_info_get_vendor_id(IN const ib_node_info_t * const p_ni)
4558{
4559	return ((ib_net32_t) (p_ni->port_num_vendor_id &
4560			      IB_NODE_INFO_VEND_ID_MASK));
4561}
4562
4563/*
4564* PARAMETERS
4565*	p_ni
4566*		[in] Pointer to a NodeInfo attribute.
4567*
4568* RETURN VALUES
4569*	VendorID that returned the attribute.
4570*
4571* NOTES
4572*
4573* SEE ALSO
4574*	ib_node_info_t
4575*********/
4576
4577#define IB_NODE_DESCRIPTION_SIZE 64
4578
4579#include <complib/cl_packon.h>
4580typedef struct _ib_node_desc {
4581	// Node String is an array of UTF-8 characters
4582	// that describe the node in text format
4583	// Note that this string is NOT NULL TERMINATED!
4584	uint8_t description[IB_NODE_DESCRIPTION_SIZE];
4585} PACK_SUFFIX ib_node_desc_t;
4586#include <complib/cl_packoff.h>
4587
4588#include <complib/cl_packon.h>
4589typedef struct _ib_node_record_t {
4590	ib_net16_t lid;
4591	ib_net16_t resv;
4592	ib_node_info_t node_info;
4593	ib_node_desc_t node_desc;
4594	uint8_t pad[4];
4595} PACK_SUFFIX ib_node_record_t;
4596#include <complib/cl_packoff.h>
4597
4598/****s* IBA Base: Types/ib_port_info_t
4599* NAME
4600*	ib_port_info_t
4601*
4602* DESCRIPTION
4603*	IBA defined PortInfo. (14.2.5.6)
4604*
4605* SYNOPSIS
4606*/
4607#include <complib/cl_packon.h>
4608typedef struct _ib_port_info {
4609	ib_net64_t m_key;
4610	ib_net64_t subnet_prefix;
4611	ib_net16_t base_lid;
4612	ib_net16_t master_sm_base_lid;
4613	ib_net32_t capability_mask;
4614	ib_net16_t diag_code;
4615	ib_net16_t m_key_lease_period;
4616	uint8_t local_port_num;
4617	uint8_t link_width_enabled;
4618	uint8_t link_width_supported;
4619	uint8_t link_width_active;
4620	uint8_t state_info1;	/* LinkSpeedSupported and PortState */
4621	uint8_t state_info2;	/* PortPhysState and LinkDownDefaultState */
4622	uint8_t mkey_lmc;	/* M_KeyProtectBits and LMC */
4623	uint8_t link_speed;	/* LinkSpeedEnabled and LinkSpeedActive */
4624	uint8_t mtu_smsl;
4625	uint8_t vl_cap;		/* VLCap and InitType */
4626	uint8_t vl_high_limit;
4627	uint8_t vl_arb_high_cap;
4628	uint8_t vl_arb_low_cap;
4629	uint8_t mtu_cap;
4630	uint8_t vl_stall_life;
4631	uint8_t vl_enforce;
4632	ib_net16_t m_key_violations;
4633	ib_net16_t p_key_violations;
4634	ib_net16_t q_key_violations;
4635	uint8_t guid_cap;
4636	uint8_t subnet_timeout;	/* cli_rereg(1b), mcast_pkey_trap_suppr(1b), reserv(1b), timeout(5b) */
4637	uint8_t resp_time_value; /* reserv(3b), rtv(5b) */
4638	uint8_t error_threshold; /* local phy errors(4b), overrun errors(4b) */
4639	ib_net16_t max_credit_hint;
4640	ib_net32_t link_rt_latency; /* reserv(8b), link round trip lat(24b) */
4641	ib_net16_t capability_mask2;
4642	uint8_t link_speed_ext;	/* LinkSpeedExtActive and LinkSpeedExtSupported */
4643	uint8_t link_speed_ext_enabled; /* reserv(3b), LinkSpeedExtEnabled(5b) */
4644} PACK_SUFFIX ib_port_info_t;
4645#include <complib/cl_packoff.h>
4646/************/
4647
4648#define IB_PORT_STATE_MASK			0x0F
4649#define IB_PORT_LMC_MASK			0x07
4650#define IB_PORT_LMC_MAX				0x07
4651#define IB_PORT_MPB_MASK			0xC0
4652#define IB_PORT_MPB_SHIFT			6
4653#define IB_PORT_LINK_SPEED_SHIFT		4
4654#define IB_PORT_LINK_SPEED_SUPPORTED_MASK	0xF0
4655#define IB_PORT_LINK_SPEED_ACTIVE_MASK		0xF0
4656#define IB_PORT_LINK_SPEED_ENABLED_MASK		0x0F
4657#define IB_PORT_PHYS_STATE_MASK			0xF0
4658#define IB_PORT_PHYS_STATE_SHIFT		4
4659#define IB_PORT_PHYS_STATE_NO_CHANGE		0
4660#define IB_PORT_PHYS_STATE_SLEEP		1
4661#define IB_PORT_PHYS_STATE_POLLING		2
4662#define IB_PORT_PHYS_STATE_DISABLED		3
4663#define IB_PORT_PHYS_STATE_PORTCONFTRAIN	4
4664#define IB_PORT_PHYS_STATE_LINKUP	        5
4665#define IB_PORT_PHYS_STATE_LINKERRRECOVER	6
4666#define IB_PORT_PHYS_STATE_PHYTEST	        7
4667#define IB_PORT_LNKDWNDFTSTATE_MASK		0x0F
4668
4669#define IB_PORT_CAP_RESV0         (CL_HTON32(0x00000001))
4670#define IB_PORT_CAP_IS_SM         (CL_HTON32(0x00000002))
4671#define IB_PORT_CAP_HAS_NOTICE    (CL_HTON32(0x00000004))
4672#define IB_PORT_CAP_HAS_TRAP      (CL_HTON32(0x00000008))
4673#define IB_PORT_CAP_HAS_IPD       (CL_HTON32(0x00000010))
4674#define IB_PORT_CAP_HAS_AUTO_MIG  (CL_HTON32(0x00000020))
4675#define IB_PORT_CAP_HAS_SL_MAP    (CL_HTON32(0x00000040))
4676#define IB_PORT_CAP_HAS_NV_MKEY   (CL_HTON32(0x00000080))
4677#define IB_PORT_CAP_HAS_NV_PKEY   (CL_HTON32(0x00000100))
4678#define IB_PORT_CAP_HAS_LED_INFO  (CL_HTON32(0x00000200))
4679#define IB_PORT_CAP_SM_DISAB      (CL_HTON32(0x00000400))
4680#define IB_PORT_CAP_HAS_SYS_IMG_GUID  (CL_HTON32(0x00000800))
4681#define IB_PORT_CAP_HAS_PKEY_SW_EXT_PORT_TRAP (CL_HTON32(0x00001000))
4682#define IB_PORT_CAP_HAS_CABLE_INFO  (CL_HTON32(0x00002000))
4683#define IB_PORT_CAP_HAS_EXT_SPEEDS  (CL_HTON32(0x00004000))
4684#define IB_PORT_CAP_HAS_CAP_MASK2 (CL_HTON32(0x00008000))
4685#define IB_PORT_CAP_HAS_COM_MGT   (CL_HTON32(0x00010000))
4686#define IB_PORT_CAP_HAS_SNMP      (CL_HTON32(0x00020000))
4687#define IB_PORT_CAP_REINIT        (CL_HTON32(0x00040000))
4688#define IB_PORT_CAP_HAS_DEV_MGT   (CL_HTON32(0x00080000))
4689#define IB_PORT_CAP_HAS_VEND_CLS  (CL_HTON32(0x00100000))
4690#define IB_PORT_CAP_HAS_DR_NTC    (CL_HTON32(0x00200000))
4691#define IB_PORT_CAP_HAS_CAP_NTC   (CL_HTON32(0x00400000))
4692#define IB_PORT_CAP_HAS_BM        (CL_HTON32(0x00800000))
4693#define IB_PORT_CAP_HAS_LINK_RT_LATENCY (CL_HTON32(0x01000000))
4694#define IB_PORT_CAP_HAS_CLIENT_REREG (CL_HTON32(0x02000000))
4695#define IB_PORT_CAP_HAS_OTHER_LOCAL_CHANGES_NTC (CL_HTON32(0x04000000))
4696#define IB_PORT_CAP_HAS_LINK_SPEED_WIDTH_PAIRS_TBL (CL_HTON32(0x08000000))
4697#define IB_PORT_CAP_HAS_VEND_MADS (CL_HTON32(0x10000000))
4698#define IB_PORT_CAP_HAS_MCAST_PKEY_TRAP_SUPPRESS (CL_HTON32(0x20000000))
4699#define IB_PORT_CAP_HAS_MCAST_FDB_TOP (CL_HTON32(0x40000000))
4700#define IB_PORT_CAP_HAS_HIER_INFO (CL_HTON32(0x80000000))
4701
4702#define IB_PORT_CAP2_IS_SET_NODE_DESC_SUPPORTED (CL_HTON16(0x0001))
4703#define IB_PORT_CAP2_IS_PORT_INFO_EXT_SUPPORTED (CL_HTON16(0x0002))
4704#define IB_PORT_CAP2_IS_VIRT_SUPPORTED (CL_HTON16(0x0004))
4705#define IB_PORT_CAP2_IS_SWITCH_PORT_STATE_TBL_SUPP (CL_HTON16(0x0008))
4706#define IB_PORT_CAP2_IS_LINK_WIDTH_2X_SUPPORTED (CL_HTON16(0x0010))
4707
4708/****s* IBA Base: Types/ib_port_info_ext_t
4709* NAME
4710*	ib_port_info_ext_t
4711*
4712* DESCRIPTION
4713*	IBA defined PortInfoExtended. (14.2.5.19)
4714*
4715* SYNOPSIS
4716*/
4717#include <complib/cl_packon.h>
4718typedef struct _ib_port_info_ext {
4719	ib_net32_t cap_mask;
4720	ib_net16_t fec_mode_active;
4721	ib_net16_t fdr_fec_mode_sup;
4722	ib_net16_t fdr_fec_mode_enable;
4723	ib_net16_t edr_fec_mode_sup;
4724	ib_net16_t edr_fec_mode_enable;
4725	uint8_t reserved[50];
4726} PACK_SUFFIX ib_port_info_ext_t;
4727#include <complib/cl_packoff.h>
4728/************/
4729
4730#define IB_PORT_EXT_NO_FEC_MODE_ACTIVE		    0
4731#define IB_PORT_EXT_FIRE_CODE_FEC_MODE_ACTIVE	    (CL_HTON16(0x0001))
4732#define IB_PORT_EXT_RS_FEC_MODE_ACTIVE		    (CL_HTON16(0x0002))
4733#define IB_PORT_EXT_LOW_LATENCY_RS_FEC_MODE_ACTIVE  (CL_HTON16(0x0003))
4734
4735#define IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED (CL_HTON32(0x00000001))
4736/****f* IBA Base: Types/ib_port_info_get_port_state
4737* NAME
4738*	ib_port_info_get_port_state
4739*
4740* DESCRIPTION
4741*	Returns the port state.
4742*
4743* SYNOPSIS
4744*/
4745static inline uint8_t OSM_API
4746ib_port_info_get_port_state(IN const ib_port_info_t * const p_pi)
4747{
4748	return ((uint8_t) (p_pi->state_info1 & IB_PORT_STATE_MASK));
4749}
4750
4751/*
4752* PARAMETERS
4753*	p_pi
4754*		[in] Pointer to a PortInfo attribute.
4755*
4756* RETURN VALUES
4757*	Port state.
4758*
4759* NOTES
4760*
4761* SEE ALSO
4762*********/
4763
4764/****f* IBA Base: Types/ib_port_info_set_port_state
4765* NAME
4766*	ib_port_info_set_port_state
4767*
4768* DESCRIPTION
4769*	Sets the port state.
4770*
4771* SYNOPSIS
4772*/
4773static inline void OSM_API
4774ib_port_info_set_port_state(IN ib_port_info_t * const p_pi,
4775			    IN const uint8_t port_state)
4776{
4777	p_pi->state_info1 = (uint8_t) ((p_pi->state_info1 & 0xF0) | port_state);
4778}
4779
4780/*
4781* PARAMETERS
4782*	p_pi
4783*		[in] Pointer to a PortInfo attribute.
4784*
4785*	port_state
4786*		[in] Port state value to set.
4787*
4788* RETURN VALUES
4789*	None.
4790*
4791* NOTES
4792*
4793* SEE ALSO
4794*********/
4795
4796/****f* IBA Base: Types/ib_port_info_get_vl_cap
4797* NAME
4798*	ib_port_info_get_vl_cap
4799*
4800* DESCRIPTION
4801*	Gets the VL Capability of a port.
4802*
4803* SYNOPSIS
4804*/
4805static inline uint8_t OSM_API
4806ib_port_info_get_vl_cap(IN const ib_port_info_t * const p_pi)
4807{
4808	return ((p_pi->vl_cap >> 4) & 0x0F);
4809}
4810
4811/*
4812* PARAMETERS
4813*	p_pi
4814*		[in] Pointer to a PortInfo attribute.
4815*
4816* RETURN VALUES
4817*	VL_CAP field
4818*
4819* NOTES
4820*
4821* SEE ALSO
4822*********/
4823
4824/****f* IBA Base: Types/ib_port_info_get_init_type
4825* NAME
4826*	ib_port_info_get_init_type
4827*
4828* DESCRIPTION
4829*	Gets the init type of a port.
4830*
4831* SYNOPSIS
4832*/
4833static inline uint8_t OSM_API
4834ib_port_info_get_init_type(IN const ib_port_info_t * const p_pi)
4835{
4836	return (uint8_t) (p_pi->vl_cap & 0x0F);
4837}
4838
4839/*
4840* PARAMETERS
4841*	p_pi
4842*		[in] Pointer to a PortInfo attribute.
4843*
4844* RETURN VALUES
4845*	InitType field
4846*
4847* NOTES
4848*
4849* SEE ALSO
4850*********/
4851
4852/****f* IBA Base: Types/ib_port_info_get_op_vls
4853* NAME
4854*	ib_port_info_get_op_vls
4855*
4856* DESCRIPTION
4857*	Gets the operational VLs on a port.
4858*
4859* SYNOPSIS
4860*/
4861static inline uint8_t OSM_API
4862ib_port_info_get_op_vls(IN const ib_port_info_t * const p_pi)
4863{
4864	return ((p_pi->vl_enforce >> 4) & 0x0F);
4865}
4866
4867/*
4868* PARAMETERS
4869*	p_pi
4870*		[in] Pointer to a PortInfo attribute.
4871*
4872* RETURN VALUES
4873*	OP_VLS field
4874*
4875* NOTES
4876*
4877* SEE ALSO
4878*********/
4879
4880/****f* IBA Base: Types/ib_port_info_set_op_vls
4881* NAME
4882*	ib_port_info_set_op_vls
4883*
4884* DESCRIPTION
4885*	Sets the operational VLs on a port.
4886*
4887* SYNOPSIS
4888*/
4889static inline void OSM_API
4890ib_port_info_set_op_vls(IN ib_port_info_t * const p_pi, IN const uint8_t op_vls)
4891{
4892	p_pi->vl_enforce =
4893	    (uint8_t) ((p_pi->vl_enforce & 0x0F) | (op_vls << 4));
4894}
4895
4896/*
4897* PARAMETERS
4898*	p_pi
4899*		[in] Pointer to a PortInfo attribute.
4900*
4901*	op_vls
4902*		[in] Encoded operation VLs value.
4903*
4904* RETURN VALUES
4905*	None.
4906*
4907* NOTES
4908*
4909* SEE ALSO
4910*********/
4911
4912/****f* IBA Base: Types/ib_port_info_set_state_no_change
4913* NAME
4914*	ib_port_info_set_state_no_change
4915*
4916* DESCRIPTION
4917*	Sets the port state fields to the value for "no change".
4918*
4919* SYNOPSIS
4920*/
4921static inline void OSM_API
4922ib_port_info_set_state_no_change(IN ib_port_info_t * const p_pi)
4923{
4924	ib_port_info_set_port_state(p_pi, IB_LINK_NO_CHANGE);
4925	p_pi->state_info2 = 0;
4926}
4927
4928/*
4929* PARAMETERS
4930*	p_pi
4931*		[in] Pointer to a PortInfo attribute.
4932*
4933* RETURN VALUES
4934*	None.
4935*
4936* NOTES
4937*
4938* SEE ALSO
4939*********/
4940
4941/****f* IBA Base: Types/ib_port_info_get_link_speed_sup
4942* NAME
4943*	ib_port_info_get_link_speed_sup
4944*
4945* DESCRIPTION
4946*	Returns the encoded value for the link speed supported.
4947*
4948* SYNOPSIS
4949*/
4950static inline uint8_t OSM_API
4951ib_port_info_get_link_speed_sup(IN const ib_port_info_t * const p_pi)
4952{
4953	return ((uint8_t) ((p_pi->state_info1 &
4954			    IB_PORT_LINK_SPEED_SUPPORTED_MASK) >>
4955			   IB_PORT_LINK_SPEED_SHIFT));
4956}
4957
4958/*
4959* PARAMETERS
4960*	p_pi
4961*		[in] Pointer to a PortInfo attribute.
4962*
4963* RETURN VALUES
4964*	Returns the encoded value for the link speed supported.
4965*
4966* NOTES
4967*
4968* SEE ALSO
4969*********/
4970
4971/****f* IBA Base: Types/ib_port_info_set_link_speed_sup
4972* NAME
4973*	ib_port_info_set_link_speed_sup
4974*
4975* DESCRIPTION
4976*	Given an integer of the supported link speed supported.
4977*	Set the appropriate bits in state_info1
4978*
4979* SYNOPSIS
4980*/
4981static inline void OSM_API
4982ib_port_info_set_link_speed_sup(IN uint8_t const speed,
4983				IN ib_port_info_t * p_pi)
4984{
4985	p_pi->state_info1 =
4986	    (~IB_PORT_LINK_SPEED_SUPPORTED_MASK & p_pi->state_info1) |
4987	    (IB_PORT_LINK_SPEED_SUPPORTED_MASK &
4988	     (speed << IB_PORT_LINK_SPEED_SHIFT));
4989}
4990
4991/*
4992* PARAMETERS
4993*	speed
4994*		[in] Supported Speeds Code.
4995*
4996*	p_pi
4997*		[in] Pointer to a PortInfo attribute.
4998*
4999* RETURN VALUES
5000*	This function does not return a value.
5001*
5002* NOTES
5003*
5004* SEE ALSO
5005*********/
5006
5007/****f* IBA Base: Types/ib_port_info_get_port_phys_state
5008* NAME
5009*	ib_port_info_get_port_phys_state
5010*
5011* DESCRIPTION
5012*	Returns the encoded value for the port physical state.
5013*
5014* SYNOPSIS
5015*/
5016static inline uint8_t OSM_API
5017ib_port_info_get_port_phys_state(IN const ib_port_info_t * const p_pi)
5018{
5019	return ((uint8_t) ((p_pi->state_info2 &
5020			    IB_PORT_PHYS_STATE_MASK) >>
5021			   IB_PORT_PHYS_STATE_SHIFT));
5022}
5023
5024/*
5025* PARAMETERS
5026*	p_pi
5027*		[in] Pointer to a PortInfo attribute.
5028*
5029* RETURN VALUES
5030*	Returns the encoded value for the port physical state.
5031*
5032* NOTES
5033*
5034* SEE ALSO
5035*********/
5036
5037/****f* IBA Base: Types/ib_port_info_set_port_phys_state
5038* NAME
5039*	ib_port_info_set_port_phys_state
5040*
5041* DESCRIPTION
5042*	Given an integer of the port physical state,
5043*	Set the appropriate bits in state_info2
5044*
5045* SYNOPSIS
5046*/
5047static inline void OSM_API
5048ib_port_info_set_port_phys_state(IN uint8_t const phys_state,
5049				 IN ib_port_info_t * p_pi)
5050{
5051	p_pi->state_info2 =
5052	    (~IB_PORT_PHYS_STATE_MASK & p_pi->state_info2) |
5053	    (IB_PORT_PHYS_STATE_MASK &
5054	     (phys_state << IB_PORT_PHYS_STATE_SHIFT));
5055}
5056
5057/*
5058* PARAMETERS
5059*	phys_state
5060*		[in] port physical state.
5061*
5062*	p_pi
5063*		[in] Pointer to a PortInfo attribute.
5064*
5065* RETURN VALUES
5066*	This function does not return a value.
5067*
5068* NOTES
5069*
5070* SEE ALSO
5071*********/
5072
5073/****f* IBA Base: Types/ib_port_info_get_link_down_def_state
5074* NAME
5075*	ib_port_info_get_link_down_def_state
5076*
5077* DESCRIPTION
5078*	Returns the link down default state.
5079*
5080* SYNOPSIS
5081*/
5082static inline uint8_t OSM_API
5083ib_port_info_get_link_down_def_state(IN const ib_port_info_t * const p_pi)
5084{
5085	return ((uint8_t) (p_pi->state_info2 & IB_PORT_LNKDWNDFTSTATE_MASK));
5086}
5087
5088/*
5089* PARAMETERS
5090*	p_pi
5091*		[in] Pointer to a PortInfo attribute.
5092*
5093* RETURN VALUES
5094*	link down default state of the port.
5095*
5096* NOTES
5097*
5098* SEE ALSO
5099*********/
5100
5101/****f* IBA Base: Types/ib_port_info_set_link_down_def_state
5102* NAME
5103*	ib_port_info_set_link_down_def_state
5104*
5105* DESCRIPTION
5106*	Sets the link down default state of the port.
5107*
5108* SYNOPSIS
5109*/
5110static inline void OSM_API
5111ib_port_info_set_link_down_def_state(IN ib_port_info_t * const p_pi,
5112				     IN const uint8_t link_dwn_state)
5113{
5114	p_pi->state_info2 =
5115	    (uint8_t) ((p_pi->state_info2 & 0xF0) | link_dwn_state);
5116}
5117
5118/*
5119* PARAMETERS
5120*	p_pi
5121*		[in] Pointer to a PortInfo attribute.
5122*
5123*	link_dwn_state
5124*		[in] Link down default state of the port.
5125*
5126* RETURN VALUES
5127*	None.
5128*
5129* NOTES
5130*
5131* SEE ALSO
5132*********/
5133
5134/****f* IBA Base: Types/ib_port_info_get_link_speed_active
5135* NAME
5136*	ib_port_info_get_link_speed_active
5137*
5138* DESCRIPTION
5139*	Returns the Link Speed Active value assigned to this port.
5140*
5141* SYNOPSIS
5142*/
5143static inline uint8_t OSM_API
5144ib_port_info_get_link_speed_active(IN const ib_port_info_t * const p_pi)
5145{
5146	return ((uint8_t) ((p_pi->link_speed &
5147			    IB_PORT_LINK_SPEED_ACTIVE_MASK) >>
5148			   IB_PORT_LINK_SPEED_SHIFT));
5149}
5150
5151/*
5152* PARAMETERS
5153*	p_pi
5154*		[in] Pointer to a PortInfo attribute.
5155*
5156* RETURN VALUES
5157*	Returns the link speed active value assigned to this port.
5158*
5159* NOTES
5160*
5161* SEE ALSO
5162*********/
5163
5164#define IB_LINK_WIDTH_ACTIVE_1X			1
5165#define IB_LINK_WIDTH_ACTIVE_4X			2
5166#define IB_LINK_WIDTH_ACTIVE_8X			4
5167#define IB_LINK_WIDTH_ACTIVE_12X 		8
5168#define IB_LINK_WIDTH_ACTIVE_2X			16
5169#define IB_LINK_SPEED_ACTIVE_EXTENDED		0
5170#define IB_LINK_SPEED_ACTIVE_2_5		1
5171#define IB_LINK_SPEED_ACTIVE_5			2
5172#define IB_LINK_SPEED_ACTIVE_10			4
5173#define IB_LINK_SPEED_EXT_ACTIVE_NONE		0
5174#define IB_LINK_SPEED_EXT_ACTIVE_14		1
5175#define IB_LINK_SPEED_EXT_ACTIVE_25		2
5176#define IB_LINK_SPEED_EXT_DISABLE		30
5177#define IB_LINK_SPEED_EXT_SET_LSES		31
5178
5179/* following v1 ver1.3 p984 */
5180#define IB_PATH_RECORD_RATE_2_5_GBS		2
5181#define IB_PATH_RECORD_RATE_10_GBS		3
5182#define IB_PATH_RECORD_RATE_30_GBS		4
5183#define IB_PATH_RECORD_RATE_5_GBS		5
5184#define IB_PATH_RECORD_RATE_20_GBS		6
5185#define IB_PATH_RECORD_RATE_40_GBS		7
5186#define IB_PATH_RECORD_RATE_60_GBS		8
5187#define IB_PATH_RECORD_RATE_80_GBS		9
5188#define IB_PATH_RECORD_RATE_120_GBS		10
5189#define IB_PATH_RECORD_RATE_14_GBS		11
5190#define IB_PATH_RECORD_RATE_56_GBS		12
5191#define IB_PATH_RECORD_RATE_112_GBS		13
5192#define IB_PATH_RECORD_RATE_168_GBS		14
5193#define IB_PATH_RECORD_RATE_25_GBS		15
5194#define IB_PATH_RECORD_RATE_100_GBS		16
5195#define IB_PATH_RECORD_RATE_200_GBS		17
5196#define IB_PATH_RECORD_RATE_300_GBS		18
5197#define IB_PATH_RECORD_RATE_28_GBS		19
5198#define IB_PATH_RECORD_RATE_50_GBS		20
5199
5200#define IB_MIN_RATE    IB_PATH_RECORD_RATE_2_5_GBS
5201#define IB_MAX_RATE    IB_PATH_RECORD_RATE_50_GBS
5202
5203static inline uint8_t OSM_API
5204ib_port_info_get_link_speed_ext_active(IN const ib_port_info_t * const p_pi);
5205
5206/****f* IBA Base: Types/ib_port_info_compute_rate
5207* NAME
5208*	ib_port_info_compute_rate
5209*
5210* DESCRIPTION
5211*	Returns the encoded value for the path rate.
5212*
5213* SYNOPSIS
5214*/
5215static inline uint8_t OSM_API
5216ib_port_info_compute_rate(IN const ib_port_info_t * const p_pi,
5217			  IN const int extended)
5218{
5219	uint8_t rate = 0;
5220
5221	if (extended) {
5222		switch (ib_port_info_get_link_speed_ext_active(p_pi)) {
5223		case IB_LINK_SPEED_EXT_ACTIVE_14:
5224			switch (p_pi->link_width_active) {
5225			case IB_LINK_WIDTH_ACTIVE_1X:
5226				rate = IB_PATH_RECORD_RATE_14_GBS;
5227				break;
5228
5229			case IB_LINK_WIDTH_ACTIVE_4X:
5230				rate = IB_PATH_RECORD_RATE_56_GBS;
5231				break;
5232
5233			case IB_LINK_WIDTH_ACTIVE_8X:
5234				rate = IB_PATH_RECORD_RATE_112_GBS;
5235				break;
5236
5237			case IB_LINK_WIDTH_ACTIVE_12X:
5238				rate = IB_PATH_RECORD_RATE_168_GBS;
5239				break;
5240
5241			case IB_LINK_WIDTH_ACTIVE_2X:
5242				rate = IB_PATH_RECORD_RATE_28_GBS;
5243				break;
5244
5245			default:
5246				rate = IB_PATH_RECORD_RATE_14_GBS;
5247				break;
5248			}
5249			break;
5250		case IB_LINK_SPEED_EXT_ACTIVE_25:
5251			switch (p_pi->link_width_active) {
5252			case IB_LINK_WIDTH_ACTIVE_1X:
5253				rate = IB_PATH_RECORD_RATE_25_GBS;
5254				break;
5255
5256			case IB_LINK_WIDTH_ACTIVE_4X:
5257				rate = IB_PATH_RECORD_RATE_100_GBS;
5258				break;
5259
5260			case IB_LINK_WIDTH_ACTIVE_8X:
5261				rate = IB_PATH_RECORD_RATE_200_GBS;
5262				break;
5263
5264			case IB_LINK_WIDTH_ACTIVE_12X:
5265				rate = IB_PATH_RECORD_RATE_300_GBS;
5266				break;
5267
5268			case IB_LINK_WIDTH_ACTIVE_2X:
5269				rate = IB_PATH_RECORD_RATE_50_GBS;
5270				break;
5271
5272			default:
5273				rate = IB_PATH_RECORD_RATE_25_GBS;
5274				break;
5275			}
5276			break;
5277		/* IB_LINK_SPEED_EXT_ACTIVE_NONE and any others */
5278		default:
5279			break;
5280		}
5281		if (rate)
5282			return rate;
5283	}
5284
5285	switch (ib_port_info_get_link_speed_active(p_pi)) {
5286	case IB_LINK_SPEED_ACTIVE_2_5:
5287		switch (p_pi->link_width_active) {
5288		case IB_LINK_WIDTH_ACTIVE_1X:
5289			rate = IB_PATH_RECORD_RATE_2_5_GBS;
5290			break;
5291
5292		case IB_LINK_WIDTH_ACTIVE_4X:
5293			rate = IB_PATH_RECORD_RATE_10_GBS;
5294			break;
5295
5296		case IB_LINK_WIDTH_ACTIVE_8X:
5297			rate = IB_PATH_RECORD_RATE_20_GBS;
5298			break;
5299
5300		case IB_LINK_WIDTH_ACTIVE_12X:
5301			rate = IB_PATH_RECORD_RATE_30_GBS;
5302			break;
5303
5304		case IB_LINK_WIDTH_ACTIVE_2X:
5305			rate = IB_PATH_RECORD_RATE_5_GBS;
5306			break;
5307
5308		default:
5309			rate = IB_PATH_RECORD_RATE_2_5_GBS;
5310			break;
5311		}
5312		break;
5313	case IB_LINK_SPEED_ACTIVE_5:
5314		switch (p_pi->link_width_active) {
5315		case IB_LINK_WIDTH_ACTIVE_1X:
5316			rate = IB_PATH_RECORD_RATE_5_GBS;
5317			break;
5318
5319		case IB_LINK_WIDTH_ACTIVE_4X:
5320			rate = IB_PATH_RECORD_RATE_20_GBS;
5321			break;
5322
5323		case IB_LINK_WIDTH_ACTIVE_8X:
5324			rate = IB_PATH_RECORD_RATE_40_GBS;
5325			break;
5326
5327		case IB_LINK_WIDTH_ACTIVE_12X:
5328			rate = IB_PATH_RECORD_RATE_60_GBS;
5329			break;
5330
5331		case IB_LINK_WIDTH_ACTIVE_2X:
5332			rate = IB_PATH_RECORD_RATE_10_GBS;
5333			break;
5334
5335		default:
5336			rate = IB_PATH_RECORD_RATE_5_GBS;
5337			break;
5338		}
5339		break;
5340	case IB_LINK_SPEED_ACTIVE_10:
5341		switch (p_pi->link_width_active) {
5342		case IB_LINK_WIDTH_ACTIVE_1X:
5343			rate = IB_PATH_RECORD_RATE_10_GBS;
5344			break;
5345
5346		case IB_LINK_WIDTH_ACTIVE_4X:
5347			rate = IB_PATH_RECORD_RATE_40_GBS;
5348			break;
5349
5350		case IB_LINK_WIDTH_ACTIVE_8X:
5351			rate = IB_PATH_RECORD_RATE_80_GBS;
5352			break;
5353
5354		case IB_LINK_WIDTH_ACTIVE_12X:
5355			rate = IB_PATH_RECORD_RATE_120_GBS;
5356			break;
5357
5358		case IB_LINK_WIDTH_ACTIVE_2X:
5359			rate = IB_PATH_RECORD_RATE_20_GBS;
5360			break;
5361
5362		default:
5363			rate = IB_PATH_RECORD_RATE_10_GBS;
5364			break;
5365		}
5366		break;
5367	default:
5368		rate = IB_PATH_RECORD_RATE_2_5_GBS;
5369		break;
5370	}
5371
5372	return rate;
5373}
5374
5375/*
5376* PARAMETERS
5377*	p_pi
5378*		[in] Pointer to a PortInfo attribute.
5379*
5380*	extended
5381*		[in] Indicates whether or not to use extended link speeds.
5382*
5383* RETURN VALUES
5384*	Returns the encoded value for the link speed supported.
5385*
5386* NOTES
5387*
5388* SEE ALSO
5389*********/
5390
5391/****f* IBA Base: Types/ib_path_get_ipd
5392* NAME
5393*	ib_path_get_ipd
5394*
5395* DESCRIPTION
5396*	Returns the encoded value for the inter packet delay.
5397*
5398* SYNOPSIS
5399*/
5400static inline uint8_t OSM_API
5401ib_path_get_ipd(IN uint8_t local_link_width_supported, IN uint8_t path_rec_rate)
5402{
5403	uint8_t ipd = 0;
5404
5405	switch (local_link_width_supported) {
5406		/* link_width_supported = 1: 1x */
5407	case 1:
5408		break;
5409
5410		/* link_width_supported = 3: 1x or 4x */
5411	case 3:
5412		switch (path_rec_rate & 0x3F) {
5413		case IB_PATH_RECORD_RATE_2_5_GBS:
5414			ipd = 3;
5415			break;
5416		default:
5417			break;
5418		}
5419		break;
5420
5421		/* link_width_supported = 11: 1x or 4x or 12x */
5422	case 11:
5423		switch (path_rec_rate & 0x3F) {
5424		case IB_PATH_RECORD_RATE_2_5_GBS:
5425			ipd = 11;
5426			break;
5427		case IB_PATH_RECORD_RATE_10_GBS:
5428			ipd = 2;
5429			break;
5430		default:
5431			break;
5432		}
5433		break;
5434
5435	default:
5436		break;
5437	}
5438
5439	return ipd;
5440}
5441
5442/*
5443* PARAMETERS
5444*	local_link_width_supported
5445*		[in] link with supported for this port
5446*
5447*	path_rec_rate
5448*		[in] rate field of the path record
5449*
5450* RETURN VALUES
5451*	Returns the ipd
5452*
5453* NOTES
5454*
5455* SEE ALSO
5456*********/
5457
5458/****f* IBA Base: Types/ib_port_info_get_mtu_cap
5459* NAME
5460*	ib_port_info_get_mtu_cap
5461*
5462* DESCRIPTION
5463*	Returns the encoded value for the maximum MTU supported by this port.
5464*
5465* SYNOPSIS
5466*/
5467static inline uint8_t OSM_API
5468ib_port_info_get_mtu_cap(IN const ib_port_info_t * const p_pi)
5469{
5470	return ((uint8_t) (p_pi->mtu_cap & 0x0F));
5471}
5472
5473/*
5474* PARAMETERS
5475*	p_pi
5476*		[in] Pointer to a PortInfo attribute.
5477*
5478* RETURN VALUES
5479*	Returns the encooded value for the maximum MTU supported by this port.
5480*
5481* NOTES
5482*
5483* SEE ALSO
5484*********/
5485
5486/****f* IBA Base: Types/ib_port_info_get_neighbor_mtu
5487* NAME
5488*	ib_port_info_get_neighbor_mtu
5489*
5490* DESCRIPTION
5491*	Returns the encoded value for the neighbor MTU supported by this port.
5492*
5493* SYNOPSIS
5494*/
5495static inline uint8_t OSM_API
5496ib_port_info_get_neighbor_mtu(IN const ib_port_info_t * const p_pi)
5497{
5498	return ((uint8_t) ((p_pi->mtu_smsl & 0xF0) >> 4));
5499}
5500
5501/*
5502* PARAMETERS
5503*	p_pi
5504*		[in] Pointer to a PortInfo attribute.
5505*
5506* RETURN VALUES
5507*	Returns the encoded value for the neighbor MTU at this port.
5508*
5509* NOTES
5510*
5511* SEE ALSO
5512*********/
5513
5514/****f* IBA Base: Types/ib_port_info_set_neighbor_mtu
5515* NAME
5516*	ib_port_info_set_neighbor_mtu
5517*
5518* DESCRIPTION
5519*	Sets the Neighbor MTU value in the PortInfo attribute.
5520*
5521* SYNOPSIS
5522*/
5523static inline void OSM_API
5524ib_port_info_set_neighbor_mtu(IN ib_port_info_t * const p_pi,
5525			      IN const uint8_t mtu)
5526{
5527	CL_ASSERT(mtu <= 5);
5528	CL_ASSERT(mtu != 0);
5529	p_pi->mtu_smsl = (uint8_t) ((p_pi->mtu_smsl & 0x0F) | (mtu << 4));
5530}
5531
5532/*
5533* PARAMETERS
5534*	p_pi
5535*		[in] Pointer to a PortInfo attribute.
5536*
5537*	mtu
5538*		[in] Encoded MTU value to set
5539*
5540* RETURN VALUES
5541*	None.
5542*
5543* NOTES
5544*
5545* SEE ALSO
5546*********/
5547
5548/****f* IBA Base: Types/ib_port_info_get_master_smsl
5549* NAME
5550*	ib_port_info_get_master_smsl
5551*
5552* DESCRIPTION
5553*	Returns the encoded value for the Master SMSL at this port.
5554*
5555* SYNOPSIS
5556*/
5557static inline uint8_t OSM_API
5558ib_port_info_get_master_smsl(IN const ib_port_info_t * const p_pi)
5559{
5560	return (uint8_t) (p_pi->mtu_smsl & 0x0F);
5561}
5562
5563/*
5564* PARAMETERS
5565*	p_pi
5566*		[in] Pointer to a PortInfo attribute.
5567*
5568* RETURN VALUES
5569*	Returns the encoded value for the Master SMSL at this port.
5570*
5571* NOTES
5572*
5573* SEE ALSO
5574*********/
5575
5576/****f* IBA Base: Types/ib_port_info_set_master_smsl
5577* NAME
5578*	ib_port_info_set_master_smsl
5579*
5580* DESCRIPTION
5581*	Sets the Master SMSL value in the PortInfo attribute.
5582*
5583* SYNOPSIS
5584*/
5585static inline void OSM_API
5586ib_port_info_set_master_smsl(IN ib_port_info_t * const p_pi,
5587			     IN const uint8_t smsl)
5588{
5589	p_pi->mtu_smsl = (uint8_t) ((p_pi->mtu_smsl & 0xF0) | smsl);
5590}
5591
5592/*
5593* PARAMETERS
5594*	p_pi
5595*		[in] Pointer to a PortInfo attribute.
5596*
5597*	mtu
5598*		[in] Encoded Master SMSL value to set
5599*
5600* RETURN VALUES
5601*	None.
5602*
5603* NOTES
5604*
5605* SEE ALSO
5606*********/
5607
5608/****f* IBA Base: Types/ib_port_info_set_timeout
5609* NAME
5610*	ib_port_info_set_timeout
5611*
5612* DESCRIPTION
5613*	Sets the encoded subnet timeout value in the PortInfo attribute.
5614*
5615* SYNOPSIS
5616*/
5617static inline void OSM_API
5618ib_port_info_set_timeout(IN ib_port_info_t * const p_pi,
5619			 IN const uint8_t timeout)
5620{
5621	CL_ASSERT(timeout <= 0x1F);
5622	p_pi->subnet_timeout =
5623	    (uint8_t) ((p_pi->subnet_timeout & 0xE0) | (timeout & 0x1F));
5624}
5625
5626/*
5627* PARAMETERS
5628*	p_pi
5629*		[in] Pointer to a PortInfo attribute.
5630*
5631*	timeout
5632*		[in] Encoded timeout value to set
5633*
5634* RETURN VALUES
5635*	None.
5636*
5637* NOTES
5638*
5639* SEE ALSO
5640*********/
5641
5642/****f* IBA Base: Types/ib_port_info_set_client_rereg
5643* NAME
5644*	ib_port_info_set_client_rereg
5645*
5646* DESCRIPTION
5647*	Sets the encoded client reregistration bit value in the PortInfo attribute.
5648*
5649* SYNOPSIS
5650*/
5651static inline void OSM_API
5652ib_port_info_set_client_rereg(IN ib_port_info_t * const p_pi,
5653			      IN const uint8_t client_rereg)
5654{
5655	CL_ASSERT(client_rereg <= 0x1);
5656	p_pi->subnet_timeout =
5657	    (uint8_t) ((p_pi->subnet_timeout & 0x7F) | (client_rereg << 7));
5658}
5659
5660/*
5661* PARAMETERS
5662*	p_pi
5663*		[in] Pointer to a PortInfo attribute.
5664*
5665*	client_rereg
5666*		[in] Client reregistration value to set (either 1 or 0).
5667*
5668* RETURN VALUES
5669*	None.
5670*
5671* NOTES
5672*
5673* SEE ALSO
5674*********/
5675
5676/****f* IBA Base: Types/ib_port_info_set_mcast_pkey_trap_suppress
5677* NAME
5678*	ib_port_info_set_mcast_pkey_trap_suppress
5679*
5680* DESCRIPTION
5681*	Sets the encoded multicast pkey trap suppression enabled bit value
5682*	in the PortInfo attribute.
5683*
5684* SYNOPSIS
5685*/
5686static inline void OSM_API
5687ib_port_info_set_mcast_pkey_trap_suppress(IN ib_port_info_t * const p_pi,
5688					  IN const uint8_t trap_suppress)
5689{
5690	CL_ASSERT(trap_suppress <= 0x1);
5691	p_pi->subnet_timeout =
5692	    (uint8_t) ((p_pi->subnet_timeout & 0xBF) | (trap_suppress << 6));
5693}
5694
5695/*
5696* PARAMETERS
5697*	p_pi
5698*		[in] Pointer to a PortInfo attribute.
5699*
5700*	trap_suppress
5701*		[in] Multicast pkey trap suppression enabled value to set
5702*		     (either 1 or 0).
5703*
5704* RETURN VALUES
5705*	None.
5706*
5707* NOTES
5708*
5709* SEE ALSO
5710*********/
5711
5712/****f* IBA Base: Types/ib_port_info_get_timeout
5713* NAME
5714*	ib_port_info_get_timeout
5715*
5716* DESCRIPTION
5717*	Gets the encoded subnet timeout value in the PortInfo attribute.
5718*
5719* SYNOPSIS
5720*/
5721static inline uint8_t OSM_API
5722ib_port_info_get_timeout(IN ib_port_info_t const *p_pi)
5723{
5724	return (p_pi->subnet_timeout & 0x1F);
5725}
5726
5727/*
5728* PARAMETERS
5729*	p_pi
5730*		[in] Pointer to a PortInfo attribute.
5731*
5732* RETURN VALUES
5733*	The encoded timeout value
5734*
5735* NOTES
5736*
5737* SEE ALSO
5738*********/
5739
5740/****f* IBA Base: Types/ib_port_info_get_link_speed_ext_active
5741* NAME
5742*	ib_port_info_get_link_speed_ext_active
5743*
5744* DESCRIPTION
5745*	Gets the encoded LinkSpeedExtActive value in the PortInfo attribute.
5746*
5747* SYNOPSIS
5748*/
5749static inline uint8_t OSM_API
5750ib_port_info_get_link_speed_ext_active(IN const ib_port_info_t * const p_pi)
5751{
5752	return ((p_pi->link_speed_ext & 0xF0) >> 4);
5753}
5754
5755/*
5756* PARAMETERS
5757*	p_pi
5758*		[in] Pointer to a PortInfo attribute.
5759*
5760* RETURN VALUES
5761*	The encoded LinkSpeedExtActive value
5762*
5763* NOTES
5764*
5765* SEE ALSO
5766*********/
5767
5768/****f* IBA Base: Types/ib_port_info_get_link_speed_ext_sup
5769* NAME
5770*	ib_port_info_get_link_speed_ext_sup
5771*
5772* DESCRIPTION
5773*	Returns the encoded value for the link speed extended supported.
5774*
5775* SYNOPSIS
5776*/
5777static inline uint8_t OSM_API
5778ib_port_info_get_link_speed_ext_sup(IN const ib_port_info_t * const p_pi)
5779{
5780	return (p_pi->link_speed_ext & 0x0F);
5781}
5782
5783/*
5784* PARAMETERS
5785*	p_pi
5786*		[in] Pointer to a PortInfo attribute.
5787*
5788* RETURN VALUES
5789*	The encoded LinkSpeedExtSupported value
5790*
5791* NOTES
5792*
5793* SEE ALSO
5794*********/
5795
5796/****f* IBA Base: Types/ib_port_info_get_link_speed_ext_enabled
5797* NAME
5798*	ib_port_info_get_link_speed_ext_enabled
5799*
5800* DESCRIPTION
5801*	Gets the encoded LinkSpeedExtEnabled value in the PortInfo attribute.
5802*
5803* SYNOPSIS
5804*/
5805static inline uint8_t OSM_API
5806ib_port_info_get_link_speed_ext_enabled(IN const ib_port_info_t * const p_pi)
5807{
5808        return (p_pi->link_speed_ext_enabled & 0x1F);
5809}
5810
5811/*
5812* PARAMETERS
5813*	p_pi
5814*		[in] Pointer to a PortInfo attribute.
5815*
5816* RETURN VALUES
5817*	The encoded LinkSpeedExtEnabled value
5818*
5819* NOTES
5820*
5821* SEE ALSO
5822*********/
5823
5824/****f* IBA Base: Types/ib_port_info_set_link_speed_ext_enabled
5825* NAME
5826*	ib_port_info_set_link_speed_ext_enabled
5827*
5828* DESCRIPTION
5829*	Sets the link speed extended enabled value in the PortInfo attribute.
5830*
5831* SYNOPSIS
5832*/
5833static inline void OSM_API
5834ib_port_info_set_link_speed_ext_enabled(IN ib_port_info_t * const p_pi,
5835					IN const uint8_t link_speed_ext_enabled)
5836{
5837	CL_ASSERT(link_speed_ext_enabled <= 0x1F);
5838	p_pi->link_speed_ext_enabled = link_speed_ext_enabled & 0x1F;
5839}
5840
5841/*
5842* PARAMETERS
5843*	p_pi
5844*		[in] Pointer to a PortInfo attribute.
5845*
5846*	link_speed_ext_enabled
5847*		[in] link speed extehded enabled value to set.
5848*
5849* RETURN VALUES
5850*	The encoded LinkSpeedExtEnabled value
5851*
5852* NOTES
5853*
5854* SEE ALSO
5855*********/
5856
5857/****f* IBA Base: Types/ib_port_info_get_resp_time_value
5858* NAME
5859*	ib_port_info_get_resp_time_value
5860*
5861* DESCRIPTION
5862*	Gets the encoded resp time value in the PortInfo attribute.
5863*
5864* SYNOPSIS
5865*/
5866static inline uint8_t OSM_API
5867ib_port_info_get_resp_time_value(IN const ib_port_info_t * const p_pi)
5868{
5869	return (p_pi->resp_time_value & 0x1F);
5870}
5871
5872/*
5873* PARAMETERS
5874*	p_pi
5875*		[in] Pointer to a PortInfo attribute.
5876*
5877* RETURN VALUES
5878*	The encoded resp time value
5879*
5880* NOTES
5881*
5882* SEE ALSO
5883*********/
5884
5885/****f* IBA Base: Types/ib_port_info_get_client_rereg
5886* NAME
5887*	ib_port_info_get_client_rereg
5888*
5889* DESCRIPTION
5890*	Gets the encoded client reregistration bit value in the PortInfo attribute.
5891*
5892* SYNOPSIS
5893*/
5894static inline uint8_t OSM_API
5895ib_port_info_get_client_rereg(IN ib_port_info_t const *p_pi)
5896{
5897	return ((p_pi->subnet_timeout & 0x80) >> 7);
5898}
5899
5900/*
5901* PARAMETERS
5902*	p_pi
5903*		[in] Pointer to a PortInfo attribute.
5904*
5905* RETURN VALUES
5906*	Client reregistration value (either 1 or 0).
5907*
5908* NOTES
5909*
5910* SEE ALSO
5911*********/
5912
5913/****f* IBA Base: Types/ib_port_info_get_mcast_pkey_trap_suppress
5914* NAME
5915*	ib_port_info_get_mcast_pkey_trap_suppress
5916*
5917* DESCRIPTION
5918*	Gets the encoded multicast pkey trap suppression enabled bit value
5919*	in the PortInfo attribute.
5920*
5921* SYNOPSIS
5922*/
5923static inline uint8_t OSM_API
5924ib_port_info_get_mcast_pkey_trap_suppress(IN ib_port_info_t const *p_pi)
5925{
5926	return ((p_pi->subnet_timeout & 0x40) >> 6);
5927}
5928
5929/*
5930* PARAMETERS
5931*	p_pi
5932*		[in] Pointer to a PortInfo attribute.
5933*
5934* RETURN VALUES
5935*	Multicast PKey trap suppression enabled value (either 1 or 0).
5936*
5937* NOTES
5938*
5939* SEE ALSO
5940*********/
5941
5942/****f* IBA Base: Types/ib_port_info_set_hoq_lifetime
5943* NAME
5944*	ib_port_info_set_hoq_lifetime
5945*
5946* DESCRIPTION
5947*	Sets the Head of Queue Lifetime for which a packet can live in the head
5948*  of VL queue
5949*
5950* SYNOPSIS
5951*/
5952static inline void OSM_API
5953ib_port_info_set_hoq_lifetime(IN ib_port_info_t * const p_pi,
5954			      IN const uint8_t hoq_life)
5955{
5956	p_pi->vl_stall_life = (uint8_t) ((hoq_life & 0x1f) |
5957					 (p_pi->vl_stall_life & 0xe0));
5958}
5959
5960/*
5961* PARAMETERS
5962*	p_pi
5963*		[in] Pointer to a PortInfo attribute.
5964*
5965*	hoq_life
5966*		[in] Encoded lifetime value to set
5967*
5968* RETURN VALUES
5969*	None.
5970*
5971* NOTES
5972*
5973* SEE ALSO
5974*********/
5975
5976/****f* IBA Base: Types/ib_port_info_get_hoq_lifetime
5977* NAME
5978*	ib_port_info_get_hoq_lifetime
5979*
5980* DESCRIPTION
5981*	Gets the Head of Queue Lifetime for which a packet can live in the head
5982*  of VL queue
5983*
5984* SYNOPSIS
5985*/
5986static inline uint8_t OSM_API
5987ib_port_info_get_hoq_lifetime(IN const ib_port_info_t * const p_pi)
5988{
5989	return ((uint8_t) (p_pi->vl_stall_life & 0x1f));
5990}
5991
5992/*
5993* PARAMETERS
5994*	p_pi
5995*		[in] Pointer to a PortInfo attribute.
5996*
5997* RETURN VALUES
5998*     Encoded lifetime value
5999*
6000* NOTES
6001*
6002* SEE ALSO
6003*********/
6004
6005/****f* IBA Base: Types/ib_port_info_set_vl_stall_count
6006* NAME
6007*	ib_port_info_set_vl_stall_count
6008*
6009* DESCRIPTION
6010*	Sets the VL Stall Count which define the number of contiguous
6011*  HLL (hoq) drops that will put the VL into stalled mode.
6012*
6013* SYNOPSIS
6014*/
6015static inline void OSM_API
6016ib_port_info_set_vl_stall_count(IN ib_port_info_t * const p_pi,
6017				IN const uint8_t vl_stall_count)
6018{
6019	p_pi->vl_stall_life = (uint8_t) ((p_pi->vl_stall_life & 0x1f) |
6020					 ((vl_stall_count << 5) & 0xe0));
6021}
6022
6023/*
6024* PARAMETERS
6025*	p_pi
6026*		[in] Pointer to a PortInfo attribute.
6027*
6028*	vl_stall_count
6029*		[in] value to set
6030*
6031* RETURN VALUES
6032*	None.
6033*
6034* NOTES
6035*
6036* SEE ALSO
6037*********/
6038
6039/****f* IBA Base: Types/ib_port_info_get_vl_stall_count
6040* NAME
6041*	ib_port_info_get_vl_stall_count
6042*
6043* DESCRIPTION
6044*	Gets the VL Stall Count which define the number of contiguous
6045*  HLL (hoq) drops that will put the VL into stalled mode
6046*
6047* SYNOPSIS
6048*/
6049static inline uint8_t OSM_API
6050ib_port_info_get_vl_stall_count(IN const ib_port_info_t * const p_pi)
6051{
6052	return ((uint8_t) (p_pi->vl_stall_life & 0xe0) >> 5);
6053}
6054
6055/*
6056* PARAMETERS
6057*	p_pi
6058*		[in] Pointer to a PortInfo attribute.
6059*
6060* RETURN VALUES
6061*     vl stall count
6062*
6063* NOTES
6064*
6065* SEE ALSO
6066*********/
6067
6068/****f* IBA Base: Types/ib_port_info_get_lmc
6069* NAME
6070*	ib_port_info_get_lmc
6071*
6072* DESCRIPTION
6073*	Returns the LMC value assigned to this port.
6074*
6075* SYNOPSIS
6076*/
6077static inline uint8_t OSM_API
6078ib_port_info_get_lmc(IN const ib_port_info_t * const p_pi)
6079{
6080	return ((uint8_t) (p_pi->mkey_lmc & IB_PORT_LMC_MASK));
6081}
6082
6083/*
6084* PARAMETERS
6085*	p_pi
6086*		[in] Pointer to a PortInfo attribute.
6087*
6088* RETURN VALUES
6089*	Returns the LMC value assigned to this port.
6090*
6091* NOTES
6092*
6093* SEE ALSO
6094*********/
6095
6096/****f* IBA Base: Types/ib_port_info_set_lmc
6097* NAME
6098*	ib_port_info_set_lmc
6099*
6100* DESCRIPTION
6101*	Sets the LMC value in the PortInfo attribute.
6102*
6103* SYNOPSIS
6104*/
6105static inline void OSM_API
6106ib_port_info_set_lmc(IN ib_port_info_t * const p_pi, IN const uint8_t lmc)
6107{
6108	CL_ASSERT(lmc <= IB_PORT_LMC_MAX);
6109	p_pi->mkey_lmc = (uint8_t) ((p_pi->mkey_lmc & 0xF8) | lmc);
6110}
6111
6112/*
6113* PARAMETERS
6114*	p_pi
6115*		[in] Pointer to a PortInfo attribute.
6116*
6117*	lmc
6118*		[in] LMC value to set, must be less than 7.
6119*
6120* RETURN VALUES
6121*	None.
6122*
6123* NOTES
6124*
6125* SEE ALSO
6126*********/
6127
6128/****f* IBA Base: Types/ib_port_info_get_link_speed_enabled
6129* NAME
6130*	ib_port_info_get_link_speed_enabled
6131*
6132* DESCRIPTION
6133*	Returns the link speed enabled value assigned to this port.
6134*
6135* SYNOPSIS
6136*/
6137static inline uint8_t OSM_API
6138ib_port_info_get_link_speed_enabled(IN const ib_port_info_t * const p_pi)
6139{
6140	return ((uint8_t) (p_pi->link_speed & IB_PORT_LINK_SPEED_ENABLED_MASK));
6141}
6142
6143/*
6144* PARAMETERS
6145*	p_pi
6146*		[in] Pointer to a PortInfo attribute.
6147*
6148* RETURN VALUES
6149*	Port state.
6150*
6151* NOTES
6152*
6153* SEE ALSO
6154*********/
6155
6156/****f* IBA Base: Types/ib_port_info_set_link_speed_enabled
6157* NAME
6158*	ib_port_info_set_link_speed_enabled
6159*
6160* DESCRIPTION
6161*	Sets the link speed enabled value in the PortInfo attribute.
6162*
6163* SYNOPSIS
6164*/
6165static inline void OSM_API
6166ib_port_info_set_link_speed_enabled(IN ib_port_info_t * const p_pi,
6167				    IN const uint8_t link_speed_enabled)
6168{
6169	p_pi->link_speed =
6170	    (uint8_t) ((p_pi->link_speed & 0xF0) | link_speed_enabled);
6171}
6172
6173/*
6174* PARAMETERS
6175*	p_pi
6176*		[in] Pointer to a PortInfo attribute.
6177*
6178*	link_speed_enabled
6179*		[in] link speed enabled value to set.
6180*
6181* RETURN VALUES
6182*	None.
6183*
6184* NOTES
6185*
6186* SEE ALSO
6187*********/
6188
6189/****f* IBA Base: Types/ib_port_info_get_mpb
6190* NAME
6191*	ib_port_info_get_mpb
6192*
6193* DESCRIPTION
6194*	Returns the M_Key protect bits assigned to this port.
6195*
6196* SYNOPSIS
6197*/
6198static inline uint8_t OSM_API
6199ib_port_info_get_mpb(IN const ib_port_info_t * const p_pi)
6200{
6201	return ((uint8_t) ((p_pi->mkey_lmc & IB_PORT_MPB_MASK) >>
6202			   IB_PORT_MPB_SHIFT));
6203}
6204
6205/*
6206* PARAMETERS
6207*	p_ni
6208*		[in] Pointer to a PortInfo attribute.
6209*
6210* RETURN VALUES
6211*	Returns the M_Key protect bits assigned to this port.
6212*
6213* NOTES
6214*
6215* SEE ALSO
6216*********/
6217
6218/****f* IBA Base: Types/ib_port_info_set_mpb
6219* NAME
6220*	ib_port_info_set_mpb
6221*
6222* DESCRIPTION
6223*	Set the M_Key protect bits of this port.
6224*
6225* SYNOPSIS
6226*/
6227static inline void OSM_API
6228ib_port_info_set_mpb(IN ib_port_info_t * p_pi, IN uint8_t mpb)
6229{
6230	p_pi->mkey_lmc =
6231	    (~IB_PORT_MPB_MASK & p_pi->mkey_lmc) |
6232	    (IB_PORT_MPB_MASK & (mpb << IB_PORT_MPB_SHIFT));
6233}
6234
6235/*
6236* PARAMETERS
6237*	mpb
6238*		[in] M_Key protect bits
6239*	p_ni
6240*		[in] Pointer to a PortInfo attribute.
6241*
6242* RETURN VALUES
6243*
6244* NOTES
6245*
6246* SEE ALSO
6247*********/
6248
6249/****f* IBA Base: Types/ib_port_info_get_local_phy_err_thd
6250* NAME
6251*	ib_port_info_get_local_phy_err_thd
6252*
6253* DESCRIPTION
6254*	Returns the Phy Link Threshold
6255*
6256* SYNOPSIS
6257*/
6258static inline uint8_t OSM_API
6259ib_port_info_get_local_phy_err_thd(IN const ib_port_info_t * const p_pi)
6260{
6261	return (uint8_t) ((p_pi->error_threshold & 0xF0) >> 4);
6262}
6263
6264/*
6265* PARAMETERS
6266*	p_pi
6267*		[in] Pointer to a PortInfo attribute.
6268*
6269* RETURN VALUES
6270*	Returns the Phy Link error threshold assigned to this port.
6271*
6272* NOTES
6273*
6274* SEE ALSO
6275*********/
6276
6277/****f* IBA Base: Types/ib_port_info_get_overrun_err_thd
6278* NAME
6279*	ib_port_info_get_local_overrun_err_thd
6280*
6281* DESCRIPTION
6282*	Returns the Credits Overrun Errors Threshold
6283*
6284* SYNOPSIS
6285*/
6286static inline uint8_t OSM_API
6287ib_port_info_get_overrun_err_thd(IN const ib_port_info_t * const p_pi)
6288{
6289	return (uint8_t) (p_pi->error_threshold & 0x0F);
6290}
6291
6292/*
6293* PARAMETERS
6294*	p_pi
6295*		[in] Pointer to a PortInfo attribute.
6296*
6297* RETURN VALUES
6298*	Returns the Credits Overrun errors threshold assigned to this port.
6299*
6300* NOTES
6301*
6302* SEE ALSO
6303*********/
6304
6305/****f* IBA Base: Types/ib_port_info_set_phy_and_overrun_err_thd
6306* NAME
6307*	ib_port_info_set_phy_and_overrun_err_thd
6308*
6309* DESCRIPTION
6310*	Sets the Phy Link and Credits Overrun Errors Threshold
6311*
6312* SYNOPSIS
6313*/
6314static inline void OSM_API
6315ib_port_info_set_phy_and_overrun_err_thd(IN ib_port_info_t * const p_pi,
6316					 IN uint8_t phy_threshold,
6317					 IN uint8_t overrun_threshold)
6318{
6319	p_pi->error_threshold =
6320	    (uint8_t) (((phy_threshold & 0x0F) << 4) |
6321		       (overrun_threshold & 0x0F));
6322}
6323
6324/*
6325* PARAMETERS
6326*	p_pi
6327*		[in] Pointer to a PortInfo attribute.
6328*
6329*	phy_threshold
6330*		[in] Physical Link Errors Threshold above which Trap 129 is generated
6331*
6332*  overrun_threshold
6333*     [in] Credits overrun Errors Threshold above which Trap 129 is generated
6334*
6335* RETURN VALUES
6336*	None.
6337*
6338* NOTES
6339*
6340* SEE ALSO
6341*********/
6342
6343/****f* IBA Base: Types/ib_port_info_get_m_key
6344* NAME
6345*	ib_port_info_get_m_key
6346*
6347* DESCRIPTION
6348*	Gets the M_Key
6349*
6350* SYNOPSIS
6351*/
6352static inline ib_net64_t OSM_API
6353ib_port_info_get_m_key(IN const ib_port_info_t * const p_pi)
6354{
6355	return p_pi->m_key;
6356}
6357
6358/*
6359* PARAMETERS
6360*	p_pi
6361*		[in] Pointer to a PortInfo attribute.
6362*
6363* RETURN VALUES
6364*	M_Key.
6365*
6366* NOTES
6367*
6368* SEE ALSO
6369*********/
6370
6371/****f* IBA Base: Types/ib_port_info_set_m_key
6372* NAME
6373*	ib_port_info_set_m_key
6374*
6375* DESCRIPTION
6376*	Sets the M_Key value
6377*
6378* SYNOPSIS
6379*/
6380static inline void OSM_API
6381ib_port_info_set_m_key(IN ib_port_info_t * const p_pi, IN ib_net64_t m_key)
6382{
6383	p_pi->m_key = m_key;
6384}
6385
6386/*
6387* PARAMETERS
6388*	p_pi
6389*		[in] Pointer to a PortInfo attribute.
6390*	m_key
6391*		[in] M_Key value.
6392*
6393* RETURN VALUES
6394*	None.
6395*
6396* NOTES
6397*
6398* SEE ALSO
6399*********/
6400
6401
6402/****s* IBA Base: Types/ib_mlnx_ext_port_info_t
6403* NAME
6404*	ib_mlnx_ext_port_info_t
6405*
6406* DESCRIPTION
6407*	Mellanox ExtendedPortInfo (Vendor specific SM class attribute).
6408*
6409* SYNOPSIS
6410*/
6411#include <complib/cl_packon.h>
6412typedef struct _ib_mlnx_ext_port_info {
6413	uint8_t resvd1[3];
6414	uint8_t state_change_enable;
6415	uint8_t resvd2[3];
6416	uint8_t link_speed_supported;
6417	uint8_t resvd3[3];
6418	uint8_t link_speed_enabled;
6419	uint8_t resvd4[3];
6420	uint8_t link_speed_active;
6421	uint8_t resvd5[48];
6422} PACK_SUFFIX ib_mlnx_ext_port_info_t;
6423#include <complib/cl_packoff.h>
6424/************/
6425
6426#define FDR10 0x01
6427
6428typedef uint8_t ib_svc_name_t[64];
6429
6430#include <complib/cl_packon.h>
6431typedef struct _ib_service_record {
6432	ib_net64_t service_id;
6433	ib_gid_t service_gid;
6434	ib_net16_t service_pkey;
6435	ib_net16_t resv;
6436	ib_net32_t service_lease;
6437	uint8_t service_key[16];
6438	ib_svc_name_t service_name;
6439	uint8_t service_data8[16];
6440	ib_net16_t service_data16[8];
6441	ib_net32_t service_data32[4];
6442	ib_net64_t service_data64[2];
6443} PACK_SUFFIX ib_service_record_t;
6444#include <complib/cl_packoff.h>
6445
6446#include <complib/cl_packon.h>
6447typedef struct _ib_portinfo_record {
6448	ib_net16_t lid;
6449	uint8_t port_num;
6450	uint8_t options;
6451	ib_port_info_t port_info;
6452	uint8_t pad[4];
6453} PACK_SUFFIX ib_portinfo_record_t;
6454#include <complib/cl_packoff.h>
6455
6456#include <complib/cl_packon.h>
6457typedef struct _ib_portinfoext_record {
6458	ib_net16_t lid;
6459	uint8_t port_num;
6460	uint8_t options;
6461	ib_port_info_ext_t port_info_ext;
6462} PACK_SUFFIX ib_portinfoext_record_t;
6463#include <complib/cl_packoff.h>
6464
6465#include <complib/cl_packon.h>
6466typedef struct _ib_link_record {
6467	ib_net16_t from_lid;
6468	uint8_t from_port_num;
6469	uint8_t to_port_num;
6470	ib_net16_t to_lid;
6471	uint8_t pad[2];
6472} PACK_SUFFIX ib_link_record_t;
6473#include <complib/cl_packoff.h>
6474
6475#include <complib/cl_packon.h>
6476typedef struct _ib_sminfo_record {
6477	ib_net16_t lid;
6478	uint16_t resv0;
6479	ib_sm_info_t sm_info;
6480	uint8_t pad[7];
6481} PACK_SUFFIX ib_sminfo_record_t;
6482#include <complib/cl_packoff.h>
6483
6484/****s* IBA Base: Types/ib_lft_record_t
6485* NAME
6486*	ib_lft_record_t
6487*
6488* DESCRIPTION
6489*	IBA defined LinearForwardingTableRecord (15.2.5.6)
6490*
6491* SYNOPSIS
6492*/
6493#include <complib/cl_packon.h>
6494typedef struct _ib_lft_record {
6495	ib_net16_t lid;
6496	ib_net16_t block_num;
6497	uint32_t resv0;
6498	uint8_t lft[64];
6499} PACK_SUFFIX ib_lft_record_t;
6500#include <complib/cl_packoff.h>
6501/************/
6502
6503/****s* IBA Base: Types/ib_mft_record_t
6504* NAME
6505*	ib_mft_record_t
6506*
6507* DESCRIPTION
6508*	IBA defined MulticastForwardingTableRecord (15.2.5.8)
6509*
6510* SYNOPSIS
6511*/
6512#include <complib/cl_packon.h>
6513typedef struct _ib_mft_record {
6514	ib_net16_t lid;
6515	ib_net16_t position_block_num;
6516	uint32_t resv0;
6517	ib_net16_t mft[IB_MCAST_BLOCK_SIZE];
6518} PACK_SUFFIX ib_mft_record_t;
6519#include <complib/cl_packoff.h>
6520/************/
6521
6522/****s* IBA Base: Types/ib_switch_info_t
6523* NAME
6524*	ib_switch_info_t
6525*
6526* DESCRIPTION
6527*	IBA defined SwitchInfo. (14.2.5.4)
6528*
6529* SYNOPSIS
6530*/
6531#include <complib/cl_packon.h>
6532typedef struct _ib_switch_info {
6533	ib_net16_t lin_cap;
6534	ib_net16_t rand_cap;
6535	ib_net16_t mcast_cap;
6536	ib_net16_t lin_top;
6537	uint8_t def_port;
6538	uint8_t def_mcast_pri_port;
6539	uint8_t def_mcast_not_port;
6540	uint8_t life_state;
6541	ib_net16_t lids_per_port;
6542	ib_net16_t enforce_cap;
6543	uint8_t flags;
6544	uint8_t resvd;
6545	ib_net16_t mcast_top;
6546} PACK_SUFFIX ib_switch_info_t;
6547#include <complib/cl_packoff.h>
6548/************/
6549
6550#include <complib/cl_packon.h>
6551typedef struct _ib_switch_info_record {
6552	ib_net16_t lid;
6553	uint16_t resv0;
6554	ib_switch_info_t switch_info;
6555} PACK_SUFFIX ib_switch_info_record_t;
6556#include <complib/cl_packoff.h>
6557
6558#define IB_SWITCH_PSC 0x04
6559
6560/****f* IBA Base: Types/ib_switch_info_get_state_change
6561* NAME
6562*	ib_switch_info_get_state_change
6563*
6564* DESCRIPTION
6565*	Returns the value of the state change flag.
6566*
6567* SYNOPSIS
6568*/
6569static inline boolean_t OSM_API
6570ib_switch_info_get_state_change(IN const ib_switch_info_t * const p_si)
6571{
6572	return ((p_si->life_state & IB_SWITCH_PSC) == IB_SWITCH_PSC);
6573}
6574
6575/*
6576* PARAMETERS
6577*	p_si
6578*		[in] Pointer to a SwitchInfo attribute.
6579*
6580* RETURN VALUES
6581*	Returns the value of the state change flag.
6582*
6583* NOTES
6584*
6585* SEE ALSO
6586*********/
6587
6588/****f* IBA Base: Types/ib_switch_info_clear_state_change
6589* NAME
6590*	ib_switch_info_clear_state_change
6591*
6592* DESCRIPTION
6593*	Clears the switch's state change bit.
6594*
6595* SYNOPSIS
6596*/
6597static inline void OSM_API
6598ib_switch_info_clear_state_change(IN ib_switch_info_t * const p_si)
6599{
6600	p_si->life_state = (uint8_t) (p_si->life_state & 0xFB);
6601}
6602
6603/*
6604* PARAMETERS
6605*	p_si
6606*		[in] Pointer to a SwitchInfo attribute.
6607*
6608* RETURN VALUES
6609*	None
6610*
6611* NOTES
6612*
6613* SEE ALSO
6614*********/
6615
6616/****f* IBA Base: Types/ib_switch_info_state_change_set
6617* NAME
6618*	ib_switch_info_state_change_set
6619*
6620* DESCRIPTION
6621*	Clears the switch's state change bit.
6622*
6623* SYNOPSIS
6624*/
6625static inline void OSM_API
6626ib_switch_info_state_change_set(IN ib_switch_info_t * const p_si)
6627{
6628	p_si->life_state = (uint8_t) ((p_si->life_state & ~IB_SWITCH_PSC) | IB_SWITCH_PSC);
6629}
6630
6631/*
6632* PARAMETERS
6633*	p_si
6634*		[in] Pointer to a SwitchInfo attribute.
6635*
6636* RETURN VALUES
6637*	None
6638*
6639* NOTES
6640*
6641* SEE ALSO
6642*********/
6643
6644/****f* IBA Base: Types/ib_switch_info_get_opt_sl2vlmapping
6645* NAME
6646*	ib_switch_info_get_state_opt_sl2vlmapping
6647*
6648* DESCRIPTION
6649*       Returns the value of the optimized SLtoVLMapping programming flag.
6650*
6651* SYNOPSIS
6652*/
6653static inline boolean_t OSM_API
6654ib_switch_info_get_opt_sl2vlmapping(IN const ib_switch_info_t * const p_si)
6655{
6656        return ((p_si->life_state & 0x01) == 0x01);
6657}
6658
6659/*
6660* PARAMETERS
6661*	p_si
6662*		[in] Pointer to a SwitchInfo attribute.
6663*
6664* RETURN VALUES
6665*	Returns the value of the optimized SLtoVLMapping programming flag.
6666*
6667* NOTES
6668*
6669* SEE ALSO
6670*********/
6671
6672/****f* IBA Base: Types/ib_switch_info_set_life_time
6673* NAME
6674*	ib_switch_info_set_life_time
6675*
6676* DESCRIPTION
6677*	Sets the value of LifeTimeValue.
6678*
6679* SYNOPSIS
6680*/
6681static inline void OSM_API
6682ib_switch_info_set_life_time(IN ib_switch_info_t * const p_si,
6683			     IN const uint8_t life_time_val)
6684{
6685	p_si->life_state = (p_si->life_state & 0x1f) |
6686			   (life_time_val << 3);
6687}
6688
6689/*
6690* PARAMETERS
6691*	p_si
6692*		[in] Pointer to a SwitchInfo attribute.
6693*	life_time_val
6694*		[in] LiveTimeValue.
6695*
6696* RETURN VALUES
6697*	None.
6698*
6699* NOTES
6700*
6701* SEE ALSO
6702*********/
6703
6704/****f* IBA Base: Types/ib_switch_info_is_enhanced_port0
6705* NAME
6706*	ib_switch_info_is_enhanced_port0
6707*
6708* DESCRIPTION
6709*	Returns TRUE if the enhancedPort0 bit is on (meaning the switch
6710*  port zero supports enhanced functions).
6711*  Returns FALSE otherwise.
6712*
6713* SYNOPSIS
6714*/
6715static inline boolean_t OSM_API
6716ib_switch_info_is_enhanced_port0(IN const ib_switch_info_t * const p_si)
6717{
6718	return ((p_si->flags & 0x08) == 0x08);
6719}
6720
6721/*
6722* PARAMETERS
6723*	p_si
6724*		[in] Pointer to a SwitchInfo attribute.
6725*
6726* RETURN VALUES
6727*	Returns TRUE if the switch supports enhanced port 0. FALSE otherwise.
6728*
6729* NOTES
6730*
6731* SEE ALSO
6732*********/
6733
6734/****s* IBA Base: Types/ib_guid_info_t
6735* NAME
6736*	ib_guid_info_t
6737*
6738* DESCRIPTION
6739*	IBA defined GuidInfo. (14.2.5.5)
6740*
6741* SYNOPSIS
6742*/
6743#define	GUID_TABLE_MAX_ENTRIES		8
6744
6745#include <complib/cl_packon.h>
6746typedef struct _ib_guid_info {
6747	ib_net64_t guid[GUID_TABLE_MAX_ENTRIES];
6748} PACK_SUFFIX ib_guid_info_t;
6749#include <complib/cl_packoff.h>
6750/************/
6751
6752#include <complib/cl_packon.h>
6753typedef struct _ib_guidinfo_record {
6754	ib_net16_t lid;
6755	uint8_t block_num;
6756	uint8_t resv;
6757	uint32_t reserved;
6758	ib_guid_info_t guid_info;
6759} PACK_SUFFIX ib_guidinfo_record_t;
6760#include <complib/cl_packoff.h>
6761
6762#define IB_MULTIPATH_MAX_GIDS 11	/* Support max that can fit into first MAD (for now) */
6763
6764#include <complib/cl_packon.h>
6765typedef struct _ib_multipath_rec_t {
6766	ib_net32_t hop_flow_raw;
6767	uint8_t tclass;
6768	uint8_t num_path;
6769	ib_net16_t pkey;
6770	ib_net16_t qos_class_sl;
6771	uint8_t mtu;
6772	uint8_t rate;
6773	uint8_t pkt_life;
6774	uint8_t service_id_8msb;
6775	uint8_t independence;	/* formerly resv2 */
6776	uint8_t sgid_count;
6777	uint8_t dgid_count;
6778	uint8_t service_id_56lsb[7];
6779	ib_gid_t gids[IB_MULTIPATH_MAX_GIDS];
6780} PACK_SUFFIX ib_multipath_rec_t;
6781#include <complib/cl_packoff.h>
6782/*
6783* FIELDS
6784*       hop_flow_raw
6785*               Global routing parameters: hop count, flow label and raw bit.
6786*
6787*       tclass
6788*               Another global routing parameter.
6789*
6790*       num_path
6791*     Reversible path - 1 bit to say if path is reversible.
6792*               num_path [6:0] In queries, maximum number of paths to return.
6793*               In responses, undefined.
6794*
6795*       pkey
6796*               Partition key (P_Key) to use on this path.
6797*
6798*       qos_class_sl
6799*               QoS class and service level to use on this path.
6800*
6801*       mtu
6802*               MTU and MTU selector fields to use on this path
6803*       rate
6804*               Rate and rate selector fields to use on this path.
6805*
6806*       pkt_life
6807*               Packet lifetime
6808*
6809*	service_id_8msb
6810*		8 most significant bits of Service ID
6811*
6812*	service_id_56lsb
6813*		56 least significant bits of Service ID
6814*
6815*       preference
6816*               Indicates the relative merit of this path versus other path
6817*               records returned from the SA.  Lower numbers are better.
6818*
6819* SEE ALSO
6820*********/
6821
6822/****f* IBA Base: Types/ib_multipath_rec_num_path
6823* NAME
6824*       ib_multipath_rec_num_path
6825*
6826* DESCRIPTION
6827*       Get max number of paths to return.
6828*
6829* SYNOPSIS
6830*/
6831static inline uint8_t OSM_API
6832ib_multipath_rec_num_path(IN const ib_multipath_rec_t * const p_rec)
6833{
6834	return (p_rec->num_path & 0x7F);
6835}
6836
6837/*
6838* PARAMETERS
6839*       p_rec
6840*               [in] Pointer to the multipath record object.
6841*
6842* RETURN VALUES
6843*       Maximum number of paths to return for each unique SGID_DGID combination.
6844*
6845* NOTES
6846*
6847* SEE ALSO
6848*       ib_multipath_rec_t
6849*********/
6850
6851/****f* IBA Base: Types/ib_multipath_rec_set_sl
6852* NAME
6853*	ib_multipath_rec_set_sl
6854*
6855* DESCRIPTION
6856*	Set path service level.
6857*
6858* SYNOPSIS
6859*/
6860static inline void OSM_API
6861ib_multipath_rec_set_sl(
6862	IN ib_multipath_rec_t* const p_rec,
6863	IN const uint8_t sl )
6864{
6865	p_rec->qos_class_sl =
6866		(p_rec->qos_class_sl & CL_HTON16(IB_MULTIPATH_REC_QOS_CLASS_MASK)) |
6867			cl_hton16(sl & IB_MULTIPATH_REC_SL_MASK);
6868}
6869/*
6870* PARAMETERS
6871*	p_rec
6872*		[in] Pointer to the MultiPath record object.
6873*
6874*	sl
6875*		[in] Service level to set.
6876*
6877* RETURN VALUES
6878*	None
6879*
6880* NOTES
6881*
6882* SEE ALSO
6883*	ib_multipath_rec_t
6884*********/
6885
6886/****f* IBA Base: Types/ib_multipath_rec_sl
6887* NAME
6888*       ib_multipath_rec_sl
6889*
6890* DESCRIPTION
6891*       Get multipath service level.
6892*
6893* SYNOPSIS
6894*/
6895static inline uint8_t OSM_API
6896ib_multipath_rec_sl(IN const ib_multipath_rec_t * const p_rec)
6897{
6898	return ((uint8_t) ((cl_ntoh16(p_rec->qos_class_sl)) & IB_MULTIPATH_REC_SL_MASK));
6899}
6900
6901/*
6902* PARAMETERS
6903*       p_rec
6904*               [in] Pointer to the multipath record object.
6905*
6906* RETURN VALUES
6907*	SL.
6908*
6909* NOTES
6910*
6911* SEE ALSO
6912*       ib_multipath_rec_t
6913*********/
6914
6915/****f* IBA Base: Types/ib_multipath_rec_set_qos_class
6916* NAME
6917*	ib_multipath_rec_set_qos_class
6918*
6919* DESCRIPTION
6920*	Set path QoS class.
6921*
6922* SYNOPSIS
6923*/
6924static inline void	OSM_API
6925ib_multipath_rec_set_qos_class(
6926	IN ib_multipath_rec_t* const p_rec,
6927	IN const uint16_t qos_class )
6928{
6929	p_rec->qos_class_sl =
6930		(p_rec->qos_class_sl & CL_HTON16(IB_MULTIPATH_REC_SL_MASK)) |
6931			cl_hton16(qos_class << 4);
6932}
6933/*
6934* PARAMETERS
6935*	p_rec
6936*		[in] Pointer to the MultiPath record object.
6937*
6938*	qos_class
6939*		[in] QoS class to set.
6940*
6941* RETURN VALUES
6942*	None
6943*
6944* NOTES
6945*
6946* SEE ALSO
6947*	ib_multipath_rec_t
6948*********/
6949
6950/****f* IBA Base: Types/ib_multipath_rec_qos_class
6951* NAME
6952*	ib_multipath_rec_qos_class
6953*
6954* DESCRIPTION
6955*	Get QoS class.
6956*
6957* SYNOPSIS
6958*/
6959static inline uint16_t	OSM_API
6960ib_multipath_rec_qos_class(
6961	IN	const	ib_multipath_rec_t* const	p_rec )
6962{
6963	return (cl_ntoh16( p_rec->qos_class_sl ) >> 4);
6964}
6965/*
6966* PARAMETERS
6967*	p_rec
6968*		[in] Pointer to the MultiPath record object.
6969*
6970* RETURN VALUES
6971*	QoS class of the MultiPath record.
6972*
6973* NOTES
6974*
6975* SEE ALSO
6976*	ib_multipath_rec_t
6977*********/
6978
6979/****f* IBA Base: Types/ib_multipath_rec_mtu
6980* NAME
6981*       ib_multipath_rec_mtu
6982*
6983* DESCRIPTION
6984*       Get encoded path MTU.
6985*
6986* SYNOPSIS
6987*/
6988static inline uint8_t OSM_API
6989ib_multipath_rec_mtu(IN const ib_multipath_rec_t * const p_rec)
6990{
6991	return ((uint8_t) (p_rec->mtu & IB_MULTIPATH_REC_BASE_MASK));
6992}
6993
6994/*
6995* PARAMETERS
6996*       p_rec
6997*               [in] Pointer to the multipath record object.
6998*
6999* RETURN VALUES
7000*       Encoded path MTU.
7001*               1: 256
7002*               2: 512
7003*               3: 1024
7004*               4: 2048
7005*               5: 4096
7006*               others: reserved
7007*
7008* NOTES
7009*
7010* SEE ALSO
7011*       ib_multipath_rec_t
7012*********/
7013
7014/****f* IBA Base: Types/ib_multipath_rec_mtu_sel
7015* NAME
7016*       ib_multipath_rec_mtu_sel
7017*
7018* DESCRIPTION
7019*       Get encoded multipath MTU selector.
7020*
7021* SYNOPSIS
7022*/
7023static inline uint8_t OSM_API
7024ib_multipath_rec_mtu_sel(IN const ib_multipath_rec_t * const p_rec)
7025{
7026	return ((uint8_t) ((p_rec->mtu & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6));
7027}
7028
7029/*
7030* PARAMETERS
7031*       p_rec
7032*               [in] Pointer to the multipath record object.
7033*
7034* RETURN VALUES
7035*       Encoded path MTU selector value (for queries).
7036*               0: greater than MTU specified
7037*               1: less than MTU specified
7038*               2: exactly the MTU specified
7039*               3: largest MTU available
7040*
7041* NOTES
7042*
7043* SEE ALSO
7044*       ib_multipath_rec_t
7045*********/
7046
7047/****f* IBA Base: Types/ib_multipath_rec_rate
7048* NAME
7049*	ib_multipath_rec_rate
7050*
7051* DESCRIPTION
7052*	Get encoded multipath rate.
7053*
7054* SYNOPSIS
7055*/
7056static inline uint8_t OSM_API
7057ib_multipath_rec_rate(IN const ib_multipath_rec_t * const p_rec)
7058{
7059	return ((uint8_t) (p_rec->rate & IB_MULTIPATH_REC_BASE_MASK));
7060}
7061
7062/*
7063* PARAMETERS
7064*	p_rec
7065*		[in] Pointer to the multipath record object.
7066*
7067* RETURN VALUES
7068*	Encoded multipath rate.
7069*		2: 2.5 Gb/sec.
7070*		3: 10 Gb/sec.
7071*		4: 30 Gb/sec.
7072*		5: 5 Gb/sec.
7073*		6: 20 Gb/sec.
7074*		7: 40 Gb/sec.
7075*		8: 60 Gb/sec.
7076*		9: 80 Gb/sec.
7077*		10: 120 Gb/sec.
7078*		11: 14 Gb/sec.
7079*		12: 56 Gb/sec.
7080*		13: 112 Gb/sec.
7081*		14: 168 Gb/sec.
7082*		15: 25 Gb/sec.
7083*		16: 100 Gb/sec.
7084*		17: 200 Gb/sec.
7085*		18: 300 Gb/sec.
7086*               others: reserved
7087*
7088* NOTES
7089*
7090* SEE ALSO
7091*       ib_multipath_rec_t
7092*********/
7093
7094/****f* IBA Base: Types/ib_multipath_rec_rate_sel
7095* NAME
7096*       ib_multipath_rec_rate_sel
7097*
7098* DESCRIPTION
7099*       Get encoded multipath rate selector.
7100*
7101* SYNOPSIS
7102*/
7103static inline uint8_t OSM_API
7104ib_multipath_rec_rate_sel(IN const ib_multipath_rec_t * const p_rec)
7105{
7106	return ((uint8_t)
7107		((p_rec->rate & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6));
7108}
7109
7110/*
7111* PARAMETERS
7112*       p_rec
7113*               [in] Pointer to the multipath record object.
7114*
7115* RETURN VALUES
7116*       Encoded path rate selector value (for queries).
7117*               0: greater than rate specified
7118*               1: less than rate specified
7119*               2: exactly the rate specified
7120*               3: largest rate available
7121*
7122* NOTES
7123*
7124* SEE ALSO
7125*       ib_multipath_rec_t
7126*********/
7127
7128/****f* IBA Base: Types/ib_multipath_rec_pkt_life
7129* NAME
7130*       ib_multipath_rec_pkt_life
7131*
7132* DESCRIPTION
7133*       Get encoded multipath pkt_life.
7134*
7135* SYNOPSIS
7136*/
7137static inline uint8_t OSM_API
7138ib_multipath_rec_pkt_life(IN const ib_multipath_rec_t * const p_rec)
7139{
7140	return ((uint8_t) (p_rec->pkt_life & IB_MULTIPATH_REC_BASE_MASK));
7141}
7142
7143/*
7144* PARAMETERS
7145*       p_rec
7146*               [in] Pointer to the multipath record object.
7147*
7148* RETURN VALUES
7149*       Encoded multipath pkt_life = 4.096 usec * 2 ** PacketLifeTime.
7150*
7151* NOTES
7152*
7153* SEE ALSO
7154*       ib_multipath_rec_t
7155*********/
7156
7157/****f* IBA Base: Types/ib_multipath_rec_pkt_life_sel
7158* NAME
7159*       ib_multipath_rec_pkt_life_sel
7160*
7161* DESCRIPTION
7162*       Get encoded multipath pkt_lifetime selector.
7163*
7164* SYNOPSIS
7165*/
7166static inline uint8_t OSM_API
7167ib_multipath_rec_pkt_life_sel(IN const ib_multipath_rec_t * const p_rec)
7168{
7169	return ((uint8_t)
7170		((p_rec->pkt_life & IB_MULTIPATH_REC_SELECTOR_MASK) >> 6));
7171}
7172
7173/*
7174* PARAMETERS
7175*       p_rec
7176*               [in] Pointer to the multipath record object.
7177*
7178* RETURN VALUES
7179*       Encoded path pkt_lifetime selector value (for queries).
7180*               0: greater than rate specified
7181*               1: less than rate specified
7182*               2: exactly the rate specified
7183*               3: smallest packet lifetime available
7184*
7185* NOTES
7186*
7187* SEE ALSO
7188*       ib_multipath_rec_t
7189*********/
7190
7191/****f* IBA Base: Types/ib_multipath_rec_service_id
7192* NAME
7193*	ib_multipath_rec_service_id
7194*
7195* DESCRIPTION
7196*	Get multipath service id.
7197*
7198* SYNOPSIS
7199*/
7200static inline ib_net64_t OSM_API
7201ib_multipath_rec_service_id(IN const ib_multipath_rec_t * const p_rec)
7202{
7203	union {
7204		ib_net64_t sid;
7205		uint8_t sid_arr[8];
7206	} sid_union;
7207	sid_union.sid_arr[0] = p_rec->service_id_8msb;
7208	memcpy(&sid_union.sid_arr[1], p_rec->service_id_56lsb, 7);
7209	return sid_union.sid;
7210}
7211
7212/*
7213* PARAMETERS
7214*	p_rec
7215*		[in] Pointer to the multipath record object.
7216*
7217* RETURN VALUES
7218*	Service ID
7219*
7220* NOTES
7221*
7222* SEE ALSO
7223*	ib_multipath_rec_t
7224*********/
7225
7226#define IB_NUM_PKEY_ELEMENTS_IN_BLOCK		32
7227/****s* IBA Base: Types/ib_pkey_table_t
7228* NAME
7229*	ib_pkey_table_t
7230*
7231* DESCRIPTION
7232*	IBA defined PKey table. (14.2.5.7)
7233*
7234* SYNOPSIS
7235*/
7236
7237#include <complib/cl_packon.h>
7238typedef struct _ib_pkey_table {
7239	ib_net16_t pkey_entry[IB_NUM_PKEY_ELEMENTS_IN_BLOCK];
7240} PACK_SUFFIX ib_pkey_table_t;
7241#include <complib/cl_packoff.h>
7242/************/
7243
7244/****s* IBA Base: Types/ib_pkey_table_record_t
7245* NAME
7246*	ib_pkey_table_record_t
7247*
7248* DESCRIPTION
7249*	IBA defined P_Key Table Record for SA Query. (15.2.5.11)
7250*
7251* SYNOPSIS
7252*/
7253#include <complib/cl_packon.h>
7254typedef struct _ib_pkey_table_record {
7255	ib_net16_t lid;		// for CA: lid of port, for switch lid of port 0
7256	ib_net16_t block_num;
7257	uint8_t port_num;	// for switch: port number, for CA: reserved
7258	uint8_t reserved1;
7259	uint16_t reserved2;
7260	ib_pkey_table_t pkey_tbl;
7261} PACK_SUFFIX ib_pkey_table_record_t;
7262#include <complib/cl_packoff.h>
7263/************/
7264
7265#define IB_DROP_VL 15
7266#define IB_MAX_NUM_VLS 16
7267/****s* IBA Base: Types/ib_slvl_table_t
7268* NAME
7269*	ib_slvl_table_t
7270*
7271* DESCRIPTION
7272*	IBA defined SL2VL Mapping Table Attribute. (14.2.5.8)
7273*
7274* SYNOPSIS
7275*/
7276#include <complib/cl_packon.h>
7277typedef struct _ib_slvl_table {
7278	uint8_t raw_vl_by_sl[IB_MAX_NUM_VLS / 2];
7279} PACK_SUFFIX ib_slvl_table_t;
7280#include <complib/cl_packoff.h>
7281/************/
7282
7283/****s* IBA Base: Types/ib_slvl_table_record_t
7284* NAME
7285*	ib_slvl_table_record_t
7286*
7287* DESCRIPTION
7288*	IBA defined SL to VL Mapping Table Record for SA Query. (15.2.5.4)
7289*
7290* SYNOPSIS
7291*/
7292#include <complib/cl_packon.h>
7293typedef struct _ib_slvl_table_record {
7294	ib_net16_t lid;		// for CA: lid of port, for switch lid of port 0
7295	uint8_t in_port_num;	// reserved for CAs
7296	uint8_t out_port_num;	// reserved for CAs
7297	uint32_t resv;
7298	ib_slvl_table_t slvl_tbl;
7299} PACK_SUFFIX ib_slvl_table_record_t;
7300#include <complib/cl_packoff.h>
7301/************/
7302
7303/****f* IBA Base: Types/ib_slvl_table_set
7304* NAME
7305*	ib_slvl_table_set
7306*
7307* DESCRIPTION
7308*	Set slvl table entry.
7309*
7310* SYNOPSIS
7311*/
7312static inline void OSM_API
7313ib_slvl_table_set(IN ib_slvl_table_t * p_slvl_tbl,
7314		  IN uint8_t sl_index, IN uint8_t vl)
7315{
7316	uint8_t idx = sl_index / 2;
7317	CL_ASSERT(vl <= 15);
7318	CL_ASSERT(sl_index <= 15);
7319
7320	if (sl_index % 2)
7321		/* this is an odd sl. Need to update the ls bits */
7322		p_slvl_tbl->raw_vl_by_sl[idx] =
7323		    (p_slvl_tbl->raw_vl_by_sl[idx] & 0xF0) | vl;
7324	else
7325		/* this is an even sl. Need to update the ms bits */
7326		p_slvl_tbl->raw_vl_by_sl[idx] =
7327		    (vl << 4) | (p_slvl_tbl->raw_vl_by_sl[idx] & 0x0F);
7328}
7329
7330/*
7331* PARAMETERS
7332*	p_slvl_tbl
7333*		[in] pointer to ib_slvl_table_t object.
7334*
7335*	sl_index
7336*		[in] the sl index in the table to be updated.
7337*
7338*	vl
7339*		[in] the vl value to update for that sl.
7340*
7341* RETURN VALUES
7342*	None
7343*
7344* NOTES
7345*
7346* SEE ALSO
7347*	ib_slvl_table_t
7348*********/
7349
7350/****f* IBA Base: Types/ib_slvl_table_get
7351* NAME
7352*	ib_slvl_table_get
7353*
7354* DESCRIPTION
7355*	Get slvl table entry.
7356*
7357* SYNOPSIS
7358*/
7359static inline uint8_t OSM_API
7360ib_slvl_table_get(IN const ib_slvl_table_t * p_slvl_tbl, IN uint8_t sl_index)
7361{
7362	uint8_t idx = sl_index / 2;
7363	CL_ASSERT(sl_index <= 15);
7364
7365	if (sl_index % 2)
7366		/* this is an odd sl. Need to return the ls bits. */
7367		return (p_slvl_tbl->raw_vl_by_sl[idx] & 0x0F);
7368	else
7369		/* this is an even sl. Need to return the ms bits. */
7370		return ((p_slvl_tbl->raw_vl_by_sl[idx] & 0xF0) >> 4);
7371}
7372
7373/*
7374* PARAMETERS
7375*	p_slvl_tbl
7376*		[in] pointer to ib_slvl_table_t object.
7377*
7378*	sl_index
7379*		[in] the sl index in the table whose value should be returned.
7380*
7381* RETURN VALUES
7382*	vl for the requested sl_index.
7383*
7384* NOTES
7385*
7386* SEE ALSO
7387*	ib_slvl_table_t
7388*********/
7389
7390/****s* IBA Base: Types/ib_vl_arb_element_t
7391* NAME
7392*	ib_vl_arb_element_t
7393*
7394* DESCRIPTION
7395*	IBA defined VL Arbitration Table Element. (14.2.5.9)
7396*
7397* SYNOPSIS
7398*/
7399#include <complib/cl_packon.h>
7400typedef struct _ib_vl_arb_element {
7401	uint8_t vl;
7402	uint8_t weight;
7403} PACK_SUFFIX ib_vl_arb_element_t;
7404#include <complib/cl_packoff.h>
7405/************/
7406
7407#define IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK 32
7408
7409/****s* IBA Base: Types/ib_vl_arb_table_t
7410* NAME
7411*	ib_vl_arb_table_t
7412*
7413* DESCRIPTION
7414*	IBA defined VL Arbitration Table. (14.2.5.9)
7415*
7416* SYNOPSIS
7417*/
7418#include <complib/cl_packon.h>
7419typedef struct _ib_vl_arb_table {
7420	ib_vl_arb_element_t vl_entry[IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK];
7421} PACK_SUFFIX ib_vl_arb_table_t;
7422#include <complib/cl_packoff.h>
7423/************/
7424
7425/****s* IBA Base: Types/ib_vl_arb_table_record_t
7426* NAME
7427*	ib_vl_arb_table_record_t
7428*
7429* DESCRIPTION
7430*	IBA defined VL Arbitration Table Record for SA Query. (15.2.5.9)
7431*
7432* SYNOPSIS
7433*/
7434#include <complib/cl_packon.h>
7435typedef struct _ib_vl_arb_table_record {
7436	ib_net16_t lid;		// for CA: lid of port, for switch lid of port 0
7437	uint8_t port_num;
7438	uint8_t block_num;
7439	uint32_t reserved;
7440	ib_vl_arb_table_t vl_arb_tbl;
7441} PACK_SUFFIX ib_vl_arb_table_record_t;
7442#include <complib/cl_packoff.h>
7443/************/
7444
7445/*
7446 *	Global route header information received with unreliable datagram messages
7447 */
7448#include <complib/cl_packon.h>
7449typedef struct _ib_grh {
7450	ib_net32_t ver_class_flow;
7451	ib_net16_t resv1;
7452	uint8_t resv2;
7453	uint8_t hop_limit;
7454	ib_gid_t src_gid;
7455	ib_gid_t dest_gid;
7456} PACK_SUFFIX ib_grh_t;
7457#include <complib/cl_packoff.h>
7458
7459/****f* IBA Base: Types/ib_grh_get_ver_class_flow
7460* NAME
7461*	ib_grh_get_ver_class_flow
7462*
7463* DESCRIPTION
7464*	Get encoded version, traffic class and flow label in grh
7465*
7466* SYNOPSIS
7467*/
7468static inline void OSM_API
7469ib_grh_get_ver_class_flow(IN const ib_net32_t ver_class_flow,
7470			  OUT uint8_t * const p_ver,
7471			  OUT uint8_t * const p_tclass,
7472			  OUT uint32_t * const p_flow_lbl)
7473{
7474	ib_net32_t tmp_ver_class_flow;
7475
7476	if (p_ver)
7477		*p_ver = (uint8_t) (ver_class_flow & 0x0f);
7478
7479	tmp_ver_class_flow = ver_class_flow >> 4;
7480
7481	if (p_tclass)
7482		*p_tclass = (uint8_t) (tmp_ver_class_flow & 0xff);
7483
7484	tmp_ver_class_flow = tmp_ver_class_flow >> 8;
7485
7486	if (p_flow_lbl)
7487		*p_flow_lbl = tmp_ver_class_flow & 0xfffff;
7488}
7489
7490/*
7491* PARAMETERS
7492*	ver_class_flow
7493*		[in] the version, traffic class and flow label info.
7494*
7495* RETURN VALUES
7496*	p_ver
7497*		[out] pointer to the version info.
7498*
7499*	p_tclass
7500*		[out] pointer to the traffic class info.
7501*
7502*	p_flow_lbl
7503*		[out] pointer to the flow label info
7504*
7505* NOTES
7506*
7507* SEE ALSO
7508*	ib_grh_t
7509*********/
7510
7511/****f* IBA Base: Types/ib_grh_set_ver_class_flow
7512* NAME
7513*	ib_grh_set_ver_class_flow
7514*
7515* DESCRIPTION
7516*	Set encoded version, traffic class and flow label in grh
7517*
7518* SYNOPSIS
7519*/
7520static inline ib_net32_t OSM_API
7521ib_grh_set_ver_class_flow(IN const uint8_t ver,
7522			  IN const uint8_t tclass, IN const uint32_t flow_lbl)
7523{
7524	ib_net32_t ver_class_flow;
7525
7526	ver_class_flow = flow_lbl;
7527	ver_class_flow = ver_class_flow << 8;
7528	ver_class_flow = ver_class_flow | tclass;
7529	ver_class_flow = ver_class_flow << 4;
7530	ver_class_flow = ver_class_flow | ver;
7531	return (ver_class_flow);
7532}
7533
7534/*
7535* PARAMETERS
7536*	ver
7537*		[in] the version info.
7538*
7539*	tclass
7540*		[in] the traffic class info.
7541*
7542*	flow_lbl
7543*		[in] the flow label info
7544*
7545* RETURN VALUES
7546*	ver_class_flow
7547*		[out] the version, traffic class and flow label info.
7548*
7549* NOTES
7550*
7551* SEE ALSO
7552*	ib_grh_t
7553*********/
7554
7555/****s* IBA Base: Types/ib_member_rec_t
7556* NAME
7557*	ib_member_rec_t
7558*
7559* DESCRIPTION
7560*	Multicast member record, used to create, join, and leave multicast
7561*	groups.
7562*
7563* SYNOPSIS
7564*/
7565#include <complib/cl_packon.h>
7566typedef struct _ib_member_rec {
7567	ib_gid_t mgid;
7568	ib_gid_t port_gid;
7569	ib_net32_t qkey;
7570	ib_net16_t mlid;
7571	uint8_t mtu;
7572	uint8_t tclass;
7573	ib_net16_t pkey;
7574	uint8_t rate;
7575	uint8_t pkt_life;
7576	ib_net32_t sl_flow_hop;
7577	uint8_t scope_state;
7578	uint8_t proxy_join:1;
7579	uint8_t reserved[2];
7580	uint8_t pad[4];
7581} PACK_SUFFIX ib_member_rec_t;
7582#include <complib/cl_packoff.h>
7583/*
7584* FIELDS
7585*	mgid
7586*		Multicast GID address for this multicast group.
7587*
7588*	port_gid
7589*		Valid GID of the endpoint joining this multicast group.
7590*
7591*	qkey
7592*		Q_Key to be sued by this multicast group.
7593*
7594*	mlid
7595*		Multicast LID for this multicast group.
7596*
7597*	mtu
7598*		MTU and MTU selector fields to use on this path
7599*
7600*	tclass
7601*		Another global routing parameter.
7602*
7603*	pkey
7604*		Partition key (P_Key) to use for this member.
7605*
7606*	rate
7607*		Rate and rate selector fields to use on this path.
7608*
7609*	pkt_life
7610*		Packet lifetime
7611*
7612*	sl_flow_hop
7613*		Global routing parameters: service level, hop count, and flow label.
7614*
7615*	scope_state
7616*		MGID scope and JoinState of multicast request.
7617*
7618*	proxy_join
7619*		Enables others in the Partition to proxy add/remove from the group
7620*
7621* SEE ALSO
7622*********/
7623
7624/****f* IBA Base: Types/ib_member_get_sl_flow_hop
7625* NAME
7626*	ib_member_get_sl_flow_hop
7627*
7628* DESCRIPTION
7629*	Get encoded sl, flow label, and hop limit
7630*
7631* SYNOPSIS
7632*/
7633static inline void OSM_API
7634ib_member_get_sl_flow_hop(IN const ib_net32_t sl_flow_hop,
7635			  OUT uint8_t * const p_sl,
7636			  OUT uint32_t * const p_flow_lbl,
7637			  OUT uint8_t * const p_hop)
7638{
7639	uint32_t tmp;
7640
7641	tmp = cl_ntoh32(sl_flow_hop);
7642	if (p_hop)
7643		*p_hop = (uint8_t) tmp;
7644	tmp >>= 8;
7645
7646	if (p_flow_lbl)
7647		*p_flow_lbl = (uint32_t) (tmp & 0xfffff);
7648	tmp >>= 20;
7649
7650	if (p_sl)
7651		*p_sl = (uint8_t) tmp;
7652}
7653
7654/*
7655* PARAMETERS
7656*	sl_flow_hop
7657*		[in] the sl, flow label, and hop limit of MC Group
7658*
7659* RETURN VALUES
7660*	p_sl
7661*		[out] pointer to the service level
7662*
7663*	p_flow_lbl
7664*		[out] pointer to the flow label info
7665*
7666*	p_hop
7667*		[out] pointer to the hop count limit.
7668*
7669* NOTES
7670*
7671* SEE ALSO
7672*	ib_member_rec_t
7673*********/
7674
7675/****f* IBA Base: Types/ib_member_set_sl_flow_hop
7676* NAME
7677*	ib_member_set_sl_flow_hop
7678*
7679* DESCRIPTION
7680*	Set encoded sl, flow label, and hop limit
7681*
7682* SYNOPSIS
7683*/
7684static inline ib_net32_t OSM_API
7685ib_member_set_sl_flow_hop(IN const uint8_t sl,
7686			  IN const uint32_t flow_label,
7687			  IN const uint8_t hop_limit)
7688{
7689	uint32_t tmp;
7690
7691	tmp = (sl << 28) | ((flow_label & 0xfffff) << 8) | hop_limit;
7692	return cl_hton32(tmp);
7693}
7694
7695/*
7696* PARAMETERS
7697*	sl
7698*		[in] the service level.
7699*
7700*	flow_lbl
7701*		[in] the flow label info
7702*
7703*	hop_limit
7704*		[in] the hop limit.
7705*
7706* RETURN VALUES
7707*	sl_flow_hop
7708*		[out] the encoded sl, flow label, and hop limit
7709*
7710* NOTES
7711*
7712* SEE ALSO
7713*	ib_member_rec_t
7714*********/
7715
7716/****f* IBA Base: Types/ib_member_get_scope_state
7717* NAME
7718*	ib_member_get_scope_state
7719*
7720* DESCRIPTION
7721*	Get encoded MGID scope and JoinState
7722*
7723* SYNOPSIS
7724*/
7725static inline void OSM_API
7726ib_member_get_scope_state(IN const uint8_t scope_state,
7727			  OUT uint8_t * const p_scope,
7728			  OUT uint8_t * const p_state)
7729{
7730	uint8_t tmp_scope_state;
7731
7732	if (p_state)
7733		*p_state = (uint8_t) (scope_state & 0x0f);
7734
7735	tmp_scope_state = scope_state >> 4;
7736
7737	if (p_scope)
7738		*p_scope = (uint8_t) (tmp_scope_state & 0x0f);
7739
7740}
7741
7742/*
7743* PARAMETERS
7744*	scope_state
7745*		[in] the scope and state
7746*
7747* RETURN VALUES
7748*	p_scope
7749*		[out] pointer to the MGID scope
7750*
7751*	p_state
7752*		[out] pointer to the join state
7753*
7754* NOTES
7755*
7756* SEE ALSO
7757*	ib_member_rec_t
7758*********/
7759
7760/****f* IBA Base: Types/ib_member_set_scope_state
7761* NAME
7762*	ib_member_set_scope_state
7763*
7764* DESCRIPTION
7765*	Set encoded version, MGID scope and JoinState
7766*
7767* SYNOPSIS
7768*/
7769static inline uint8_t OSM_API
7770ib_member_set_scope_state(IN const uint8_t scope, IN const uint8_t state)
7771{
7772	uint8_t scope_state;
7773
7774	scope_state = scope;
7775	scope_state = scope_state << 4;
7776	scope_state = scope_state | state;
7777	return (scope_state);
7778}
7779
7780/*
7781* PARAMETERS
7782*	scope
7783*		[in] the MGID scope
7784*
7785*	state
7786*		[in] the JoinState
7787*
7788* RETURN VALUES
7789*	scope_state
7790*		[out] the encoded one
7791*
7792* NOTES
7793*
7794* SEE ALSO
7795*	ib_member_rec_t
7796*********/
7797
7798/****f* IBA Base: Types/ib_member_set_join_state
7799* NAME
7800*	ib_member_set_join_state
7801*
7802* DESCRIPTION
7803*	Set JoinState
7804*
7805* SYNOPSIS
7806*/
7807static inline void OSM_API
7808ib_member_set_join_state(IN OUT ib_member_rec_t * p_mc_rec,
7809			 IN const uint8_t state)
7810{
7811	/* keep the scope as it is */
7812	p_mc_rec->scope_state = (p_mc_rec->scope_state & 0xF0) | (0x0f & state);
7813}
7814
7815/*
7816* PARAMETERS
7817*	p_mc_rec
7818*		[in] pointer to the member record
7819*
7820*	state
7821*		[in] the JoinState
7822*
7823* RETURN VALUES
7824*	NONE
7825*
7826* NOTES
7827*
7828* SEE ALSO
7829*	ib_member_rec_t
7830*********/
7831
7832/*
7833 * Join State Codes:
7834 */
7835#define IB_MC_REC_STATE_FULL_MEMBER 0x01
7836#define IB_MC_REC_STATE_NON_MEMBER 0x02
7837#define IB_MC_REC_STATE_SEND_ONLY_NON_MEMBER 0x04
7838
7839/*
7840 *	Generic MAD notice types
7841 */
7842#define IB_NOTICE_TYPE_FATAL				0x00
7843#define IB_NOTICE_TYPE_URGENT				0x01
7844#define IB_NOTICE_TYPE_SECURITY				0x02
7845#define IB_NOTICE_TYPE_SUBN_MGMT			0x03
7846#define IB_NOTICE_TYPE_INFO				0x04
7847#define IB_NOTICE_TYPE_EMPTY				0x7F
7848
7849#define SM_GID_IN_SERVICE_TRAP				64
7850#define SM_GID_OUT_OF_SERVICE_TRAP			65
7851#define SM_MGID_CREATED_TRAP				66
7852#define SM_MGID_DESTROYED_TRAP				67
7853#define SM_UNPATH_TRAP					68
7854#define SM_REPATH_TRAP					69
7855#define SM_LINK_STATE_CHANGED_TRAP			128
7856#define SM_LINK_INTEGRITY_THRESHOLD_TRAP		129
7857#define SM_BUFFER_OVERRUN_THRESHOLD_TRAP		130
7858#define SM_WATCHDOG_TIMER_EXPIRED_TRAP			131
7859#define SM_LOCAL_CHANGES_TRAP				144
7860#define SM_SYS_IMG_GUID_CHANGED_TRAP			145
7861#define SM_BAD_MKEY_TRAP				256
7862#define SM_BAD_PKEY_TRAP				257
7863#define SM_BAD_QKEY_TRAP				258
7864#define SM_BAD_SWITCH_PKEY_TRAP				259
7865
7866#include <complib/cl_packon.h>
7867typedef struct _ib_mad_notice_attr	// Total Size calc  Accumulated
7868{
7869	uint8_t generic_type;	// 1                1
7870	union _notice_g_or_v {
7871		struct _notice_generic	// 5                6
7872		{
7873			uint8_t prod_type_msb;
7874			ib_net16_t prod_type_lsb;
7875			ib_net16_t trap_num;
7876		} PACK_SUFFIX generic;
7877		struct _notice_vend {
7878			uint8_t vend_id_msb;
7879			ib_net16_t vend_id_lsb;
7880			ib_net16_t dev_id;
7881		} PACK_SUFFIX vend;
7882	} g_or_v;
7883	ib_net16_t issuer_lid;	// 2                 8
7884	ib_net16_t toggle_count;	// 2                 10
7885	union _data_details	// 54                64
7886	{
7887		struct _raw_data {
7888			uint8_t details[54];
7889		} PACK_SUFFIX raw_data;
7890		struct _ntc_64_67 {
7891			uint8_t res[6];
7892			ib_gid_t gid;	// the Node or Multicast Group that came in/out
7893		} PACK_SUFFIX ntc_64_67;
7894		struct _ntc_128 {
7895			ib_net16_t sw_lid;	// the sw lid of which link state changed
7896		} PACK_SUFFIX ntc_128;
7897		struct _ntc_129_131 {
7898			ib_net16_t pad;
7899			ib_net16_t lid;	// lid and port number of the violation
7900			uint8_t port_num;
7901		} PACK_SUFFIX ntc_129_131;
7902		struct _ntc_144 {
7903			ib_net16_t pad1;
7904			ib_net16_t lid;             // lid where change occured
7905			uint8_t    pad2;            // reserved
7906			uint8_t    local_changes;   // 7b reserved 1b local changes
7907			ib_net32_t new_cap_mask;    // new capability mask
7908			ib_net16_t change_flgs;     // 10b reserved 6b change flags
7909			ib_net16_t cap_mask2;
7910		} PACK_SUFFIX ntc_144;
7911		struct _ntc_145 {
7912			ib_net16_t pad1;
7913			ib_net16_t lid;	// lid where sys guid changed
7914			ib_net16_t pad2;
7915			ib_net64_t new_sys_guid;	// new system image guid
7916		} PACK_SUFFIX ntc_145;
7917		struct _ntc_256 {	// total: 54
7918			ib_net16_t pad1;	// 2
7919			ib_net16_t lid;	// 2
7920			ib_net16_t dr_slid;	// 2
7921			uint8_t method;	// 1
7922			uint8_t pad2;	// 1
7923			ib_net16_t attr_id;	// 2
7924			ib_net32_t attr_mod;	// 4
7925			ib_net64_t mkey;	// 8
7926			uint8_t pad3;	// 1
7927			uint8_t dr_trunc_hop;	// 1
7928			uint8_t dr_rtn_path[30];	// 30
7929		} PACK_SUFFIX ntc_256;
7930		struct _ntc_257_258	// violation of p/q_key // 49
7931		{
7932			ib_net16_t pad1;	// 2
7933			ib_net16_t lid1;	// 2
7934			ib_net16_t lid2;	// 2
7935			ib_net32_t key;	// 4
7936			ib_net32_t qp1;	// 4b sl, 4b pad, 24b qp1
7937			ib_net32_t qp2;	// 8b pad, 24b qp2
7938			ib_gid_t gid1;	// 16
7939			ib_gid_t gid2;	// 16
7940		} PACK_SUFFIX ntc_257_258;
7941		struct _ntc_259	// pkey violation from switch 51
7942		{
7943			ib_net16_t data_valid;	// 2
7944			ib_net16_t lid1;	// 2
7945			ib_net16_t lid2;	// 2
7946			ib_net16_t pkey;	// 2
7947			ib_net32_t sl_qp1; // 4b sl, 4b pad, 24b qp1
7948			ib_net32_t qp2; // 8b pad, 24b qp2
7949			ib_gid_t gid1;	// 16
7950			ib_gid_t gid2;	// 16
7951			ib_net16_t sw_lid;	// 2
7952			uint8_t port_no;	// 1
7953		} PACK_SUFFIX ntc_259;
7954		struct _ntc_bkey_259	// bkey violation
7955		{
7956			ib_net16_t lidaddr;
7957			uint8_t method;
7958			uint8_t reserved;
7959			ib_net16_t attribute_id;
7960			ib_net32_t attribute_modifier;
7961			ib_net32_t qp;		// qp is low 24 bits
7962			ib_net64_t bkey;
7963			ib_gid_t gid;
7964		} PACK_SUFFIX ntc_bkey_259;
7965		struct _ntc_cckey_0	// CC key violation
7966		{
7967			ib_net16_t slid;     // source LID from offending packet LRH
7968			uint8_t method;      // method, from common MAD header
7969			uint8_t resv0;
7970			ib_net16_t attribute_id; // Attribute ID, from common MAD header
7971			ib_net16_t resv1;
7972			ib_net32_t attribute_modifier; // Attribute Modif, from common MAD header
7973			ib_net32_t qp;       // 8b pad, 24b dest QP from BTH
7974			ib_net64_t cc_key;   // CC key of the offending packet
7975			ib_gid_t source_gid; // GID from GRH of the offending packet
7976			uint8_t padding[14]; // Padding - ignored on read
7977		} PACK_SUFFIX ntc_cckey_0;
7978	} data_details;
7979	ib_gid_t issuer_gid;	// 16          80
7980} PACK_SUFFIX ib_mad_notice_attr_t;
7981#include <complib/cl_packoff.h>
7982
7983/**
7984 * Trap 259 masks
7985 */
7986#define TRAP_259_MASK_SL (CL_HTON32(0xF0000000))
7987#define TRAP_259_MASK_QP (CL_HTON32(0x00FFFFFF))
7988
7989/**
7990 * Trap 144 masks
7991 */
7992#define TRAP_144_MASK_OTHER_LOCAL_CHANGES      0x01
7993#define TRAP_144_MASK_CAPABILITY_MASK2_CHANGE  (CL_HTON16(0x0020))
7994#define TRAP_144_MASK_HIERARCHY_INFO_CHANGE    (CL_HTON16(0x0010))
7995#define TRAP_144_MASK_SM_PRIORITY_CHANGE       (CL_HTON16(0x0008))
7996#define TRAP_144_MASK_LINK_SPEED_ENABLE_CHANGE (CL_HTON16(0x0004))
7997#define TRAP_144_MASK_LINK_WIDTH_ENABLE_CHANGE (CL_HTON16(0x0002))
7998#define TRAP_144_MASK_NODE_DESCRIPTION_CHANGE  (CL_HTON16(0x0001))
7999
8000/****f* IBA Base: Types/ib_notice_is_generic
8001* NAME
8002*	ib_notice_is_generic
8003*
8004* DESCRIPTION
8005*	Check if the notice is generic
8006*
8007* SYNOPSIS
8008*/
8009static inline boolean_t OSM_API
8010ib_notice_is_generic(IN const ib_mad_notice_attr_t * p_ntc)
8011{
8012	return (p_ntc->generic_type & 0x80);
8013}
8014
8015/*
8016* PARAMETERS
8017*	p_ntc
8018*		[in] Pointer to the notice MAD attribute
8019*
8020* RETURN VALUES
8021*	TRUE if notice MAD is generic
8022*
8023* SEE ALSO
8024*	ib_mad_notice_attr_t
8025*********/
8026
8027/****f* IBA Base: Types/ib_notice_get_type
8028* NAME
8029*	ib_notice_get_type
8030*
8031* DESCRIPTION
8032*	Get the notice type
8033*
8034* SYNOPSIS
8035*/
8036static inline uint8_t OSM_API
8037ib_notice_get_type(IN const ib_mad_notice_attr_t * p_ntc)
8038{
8039	return p_ntc->generic_type & 0x7f;
8040}
8041
8042/*
8043* PARAMETERS
8044*	p_ntc
8045*		[in] Pointer to  the notice MAD attribute
8046*
8047* RETURN VALUES
8048*	TRUE if mad is generic
8049*
8050* SEE ALSO
8051*	ib_mad_notice_attr_t
8052*********/
8053
8054/****f* IBA Base: Types/ib_notice_get_prod_type
8055* NAME
8056*	ib_notice_get_prod_type
8057*
8058* DESCRIPTION
8059*	Get the notice Producer Type of Generic Notice
8060*
8061* SYNOPSIS
8062*/
8063static inline ib_net32_t OSM_API
8064ib_notice_get_prod_type(IN const ib_mad_notice_attr_t * p_ntc)
8065{
8066	uint32_t pt;
8067
8068	pt = cl_ntoh16(p_ntc->g_or_v.generic.prod_type_lsb) |
8069	    (p_ntc->g_or_v.generic.prod_type_msb << 16);
8070	return cl_hton32(pt);
8071}
8072
8073/*
8074* PARAMETERS
8075*	p_ntc
8076*		[in] Pointer to the notice MAD attribute
8077*
8078* RETURN VALUES
8079*	The producer type
8080*
8081* SEE ALSO
8082*	ib_mad_notice_attr_t
8083*********/
8084
8085/****f* IBA Base: Types/ib_notice_set_prod_type
8086* NAME
8087*	ib_notice_set_prod_type
8088*
8089* DESCRIPTION
8090*	Set the notice Producer Type of Generic Notice
8091*
8092* SYNOPSIS
8093*/
8094static inline void OSM_API
8095ib_notice_set_prod_type(IN ib_mad_notice_attr_t * p_ntc,
8096			IN ib_net32_t prod_type_val)
8097{
8098	uint32_t ptv = cl_ntoh32(prod_type_val);
8099	p_ntc->g_or_v.generic.prod_type_lsb =
8100	    cl_hton16((uint16_t) (ptv & 0x0000ffff));
8101	p_ntc->g_or_v.generic.prod_type_msb =
8102	    (uint8_t) ((ptv & 0x00ff0000) >> 16);
8103}
8104
8105/*
8106* PARAMETERS
8107*	p_ntc
8108*		[in] Pointer to the notice MAD attribute
8109*
8110*  prod_type
8111*     [in] The producer Type code
8112*
8113* RETURN VALUES
8114*	None
8115*
8116* SEE ALSO
8117*	ib_mad_notice_attr_t
8118*********/
8119
8120/****f* IBA Base: Types/ib_notice_set_prod_type_ho
8121* NAME
8122*	ib_notice_set_prod_type_ho
8123*
8124* DESCRIPTION
8125*	Set the notice Producer Type of Generic Notice given Host Order
8126*
8127* SYNOPSIS
8128*/
8129static inline void OSM_API
8130ib_notice_set_prod_type_ho(IN ib_mad_notice_attr_t * p_ntc,
8131			   IN uint32_t prod_type_val_ho)
8132{
8133	p_ntc->g_or_v.generic.prod_type_lsb =
8134	    cl_hton16((uint16_t) (prod_type_val_ho & 0x0000ffff));
8135	p_ntc->g_or_v.generic.prod_type_msb =
8136	    (uint8_t) ((prod_type_val_ho & 0x00ff0000) >> 16);
8137}
8138
8139/*
8140* PARAMETERS
8141*	p_ntc
8142*		[in] Pointer to the notice MAD attribute
8143*
8144*	prod_type
8145*		[in] The producer Type code in host order
8146*
8147* RETURN VALUES
8148*	None
8149*
8150* SEE ALSO
8151*	ib_mad_notice_attr_t
8152*********/
8153
8154/****f* IBA Base: Types/ib_notice_get_vend_id
8155* NAME
8156*	ib_notice_get_vend_id
8157*
8158* DESCRIPTION
8159*	Get the Vendor Id of Vendor type Notice
8160*
8161* SYNOPSIS
8162*/
8163static inline ib_net32_t OSM_API
8164ib_notice_get_vend_id(IN const ib_mad_notice_attr_t * p_ntc)
8165{
8166	uint32_t vi;
8167
8168	vi = cl_ntoh16(p_ntc->g_or_v.vend.vend_id_lsb) |
8169	    (p_ntc->g_or_v.vend.vend_id_msb << 16);
8170	return cl_hton32(vi);
8171}
8172
8173/*
8174* PARAMETERS
8175*	p_ntc
8176*		[in] Pointer to the notice MAD attribute
8177*
8178* RETURN VALUES
8179*	The Vendor Id of Vendor type Notice
8180*
8181* SEE ALSO
8182*	ib_mad_notice_attr_t
8183*********/
8184
8185/****f* IBA Base: Types/ib_notice_set_vend_id
8186* NAME
8187*	ib_notice_set_vend_id
8188*
8189* DESCRIPTION
8190*	Set the notice Producer Type of Generic Notice
8191*
8192* SYNOPSIS
8193*/
8194static inline void OSM_API
8195ib_notice_set_vend_id(IN ib_mad_notice_attr_t * p_ntc, IN ib_net32_t vend_id)
8196{
8197	uint32_t vi = cl_ntoh32(vend_id);
8198	p_ntc->g_or_v.vend.vend_id_lsb =
8199	    cl_hton16((uint16_t) (vi & 0x0000ffff));
8200	p_ntc->g_or_v.vend.vend_id_msb = (uint8_t) ((vi & 0x00ff0000) >> 16);
8201}
8202
8203/*
8204* PARAMETERS
8205*	p_ntc
8206*		[in] Pointer to the notice MAD attribute
8207*
8208*	vend_id
8209*		[in] The producer Type code
8210*
8211* RETURN VALUES
8212*	None
8213*
8214* SEE ALSO
8215*	ib_mad_notice_attr_t
8216*********/
8217
8218/****f* IBA Base: Types/ib_notice_set_vend_id_ho
8219* NAME
8220*	ib_notice_set_vend_id_ho
8221*
8222* DESCRIPTION
8223*	Set the notice Producer Type of Generic Notice given a host order value
8224*
8225* SYNOPSIS
8226*/
8227static inline void OSM_API
8228ib_notice_set_vend_id_ho(IN ib_mad_notice_attr_t * p_ntc,
8229			 IN uint32_t vend_id_ho)
8230{
8231	p_ntc->g_or_v.vend.vend_id_lsb =
8232	    cl_hton16((uint16_t) (vend_id_ho & 0x0000ffff));
8233	p_ntc->g_or_v.vend.vend_id_msb =
8234	    (uint8_t) ((vend_id_ho & 0x00ff0000) >> 16);
8235}
8236
8237/*
8238* PARAMETERS
8239*	p_ntc
8240*		[in] Pointer to the notice MAD attribute
8241*
8242*	vend_id_ho
8243*		[in] The producer Type code in host order
8244*
8245* RETURN VALUES
8246*	None
8247*
8248* SEE ALSO
8249*	ib_mad_notice_attr_t
8250*********/
8251
8252#include <complib/cl_packon.h>
8253typedef struct _ib_inform_info {
8254	ib_gid_t gid;
8255	ib_net16_t lid_range_begin;
8256	ib_net16_t lid_range_end;
8257	ib_net16_t reserved1;
8258	uint8_t is_generic;
8259	uint8_t subscribe;
8260	ib_net16_t trap_type;
8261	union _inform_g_or_v {
8262		struct _inform_generic {
8263			ib_net16_t trap_num;
8264			ib_net32_t qpn_resp_time_val;
8265			uint8_t reserved2;
8266			uint8_t node_type_msb;
8267			ib_net16_t node_type_lsb;
8268		} PACK_SUFFIX generic;
8269		struct _inform_vend {
8270			ib_net16_t dev_id;
8271			ib_net32_t qpn_resp_time_val;
8272			uint8_t reserved2;
8273			uint8_t vendor_id_msb;
8274			ib_net16_t vendor_id_lsb;
8275		} PACK_SUFFIX vend;
8276	} PACK_SUFFIX g_or_v;
8277} PACK_SUFFIX ib_inform_info_t;
8278#include <complib/cl_packoff.h>
8279
8280/****f* IBA Base: Types/ib_inform_info_get_qpn_resp_time
8281* NAME
8282*	ib_inform_info_get_qpn_resp_time
8283*
8284* DESCRIPTION
8285*	Get QPN of the inform info
8286*
8287* SYNOPSIS
8288*/
8289static inline void OSM_API
8290ib_inform_info_get_qpn_resp_time(IN const ib_net32_t qpn_resp_time_val,
8291				 OUT ib_net32_t * const p_qpn,
8292				 OUT uint8_t * const p_resp_time_val)
8293{
8294	uint32_t tmp = cl_ntoh32(qpn_resp_time_val);
8295
8296	if (p_qpn)
8297		*p_qpn = cl_hton32((tmp & 0xffffff00) >> 8);
8298	if (p_resp_time_val)
8299		*p_resp_time_val = (uint8_t) (tmp & 0x0000001f);
8300}
8301
8302/*
8303* PARAMETERS
8304*	qpn_resp_time_val
8305*		[in] the  qpn and resp time val from the mad
8306*
8307* RETURN VALUES
8308*	p_qpn
8309*		[out] pointer to the qpn
8310*
8311*	p_state
8312*		[out] pointer to the resp time val
8313*
8314* NOTES
8315*
8316* SEE ALSO
8317*	ib_inform_info_t
8318*********/
8319
8320/****f* IBA Base: Types/ib_inform_info_set_qpn
8321* NAME
8322*	ib_inform_info_set_qpn
8323*
8324* DESCRIPTION
8325*	Set the QPN of the inform info
8326*
8327* SYNOPSIS
8328*/
8329static inline void OSM_API
8330ib_inform_info_set_qpn(IN ib_inform_info_t * p_ii, IN ib_net32_t const qpn)
8331{
8332	uint32_t tmp = cl_ntoh32(p_ii->g_or_v.generic.qpn_resp_time_val);
8333	uint32_t qpn_h = cl_ntoh32(qpn);
8334
8335	p_ii->g_or_v.generic.qpn_resp_time_val =
8336	    cl_hton32((tmp & 0x000000ff) | ((qpn_h << 8) & 0xffffff00)
8337	    );
8338}
8339
8340/*
8341* PARAMETERS
8342*
8343* NOTES
8344*
8345* SEE ALSO
8346*	ib_inform_info_t
8347*********/
8348
8349/****f* IBA Base: Types/ib_inform_info_get_prod_type
8350* NAME
8351*	ib_inform_info_get_prod_type
8352*
8353* DESCRIPTION
8354*	Get Producer Type of the Inform Info
8355*	13.4.8.3 InformInfo
8356*
8357* SYNOPSIS
8358*/
8359static inline ib_net32_t OSM_API
8360ib_inform_info_get_prod_type(IN const ib_inform_info_t * p_inf)
8361{
8362	uint32_t nt;
8363
8364	nt = cl_ntoh16(p_inf->g_or_v.generic.node_type_lsb) |
8365	    (p_inf->g_or_v.generic.node_type_msb << 16);
8366	return cl_hton32(nt);
8367}
8368
8369/*
8370* PARAMETERS
8371*	p_inf
8372*		[in] pointer to an inform info
8373*
8374* RETURN VALUES
8375*     The producer type
8376*
8377* NOTES
8378*
8379* SEE ALSO
8380*	ib_inform_info_t
8381*********/
8382
8383/****f* IBA Base: Types/ib_inform_info_get_vend_id
8384* NAME
8385*	ib_inform_info_get_vend_id
8386*
8387* DESCRIPTION
8388*	Get Node Type of the Inform Info
8389*
8390* SYNOPSIS
8391*/
8392static inline ib_net32_t OSM_API
8393ib_inform_info_get_vend_id(IN const ib_inform_info_t * p_inf)
8394{
8395	uint32_t vi;
8396
8397	vi = cl_ntoh16(p_inf->g_or_v.vend.vendor_id_lsb) |
8398	    (p_inf->g_or_v.vend.vendor_id_msb << 16);
8399	return cl_hton32(vi);
8400}
8401
8402/*
8403* PARAMETERS
8404*	p_inf
8405*		[in] pointer to an inform info
8406*
8407* RETURN VALUES
8408*     The node type
8409*
8410* NOTES
8411*
8412* SEE ALSO
8413*	ib_inform_info_t
8414*********/
8415
8416/****s* IBA Base: Types/ib_inform_info_record_t
8417* NAME
8418*	ib_inform_info_record_t
8419*
8420* DESCRIPTION
8421*	IBA defined InformInfo Record. (15.2.5.12)
8422*
8423* SYNOPSIS
8424*/
8425#include <complib/cl_packon.h>
8426typedef struct _ib_inform_info_record {
8427	ib_gid_t subscriber_gid;
8428	ib_net16_t subscriber_enum;
8429	uint8_t reserved[6];
8430	ib_inform_info_t inform_info;
8431	uint8_t pad[4];
8432} PACK_SUFFIX ib_inform_info_record_t;
8433#include <complib/cl_packoff.h>
8434
8435/****s* IBA Base: Types/ib_perfmgt_mad_t
8436* NAME
8437*	ib_perfmgt_mad_t
8438*
8439* DESCRIPTION
8440*	IBA defined Perf Management MAD (16.3.1)
8441*
8442* SYNOPSIS
8443*/
8444#include <complib/cl_packon.h>
8445typedef struct _ib_perfmgt_mad {
8446	ib_mad_t header;
8447	uint8_t resv[40];
8448#define	IB_PM_DATA_SIZE		192
8449	uint8_t data[IB_PM_DATA_SIZE];
8450} PACK_SUFFIX ib_perfmgt_mad_t;
8451#include <complib/cl_packoff.h>
8452/*
8453* FIELDS
8454*	header
8455*		Common MAD header.
8456*
8457*	resv
8458*		Reserved.
8459*
8460*	data
8461*		Performance Management payload.  The structure and content of this field
8462*		depends upon the method, attr_id, and attr_mod fields in the header.
8463*
8464* SEE ALSO
8465* ib_mad_t
8466*********/
8467
8468/****s* IBA Base: Types/ib_port_counters
8469* NAME
8470*	ib_port_counters_t
8471*
8472* DESCRIPTION
8473*	IBA defined PortCounters Attribute. (16.1.3.5)
8474*
8475* SYNOPSIS
8476*/
8477#include <complib/cl_packon.h>
8478typedef struct _ib_port_counters {
8479	uint8_t reserved;
8480	uint8_t port_select;
8481	ib_net16_t counter_select;
8482	ib_net16_t symbol_err_cnt;
8483	uint8_t link_err_recover;
8484	uint8_t link_downed;
8485	ib_net16_t rcv_err;
8486	ib_net16_t rcv_rem_phys_err;
8487	ib_net16_t rcv_switch_relay_err;
8488	ib_net16_t xmit_discards;
8489	uint8_t xmit_constraint_err;
8490	uint8_t rcv_constraint_err;
8491	uint8_t counter_select2;
8492	uint8_t link_int_buffer_overrun;
8493	ib_net16_t qp1_dropped;
8494	ib_net16_t vl15_dropped;
8495	ib_net32_t xmit_data;
8496	ib_net32_t rcv_data;
8497	ib_net32_t xmit_pkts;
8498	ib_net32_t rcv_pkts;
8499	ib_net32_t xmit_wait;
8500} PACK_SUFFIX ib_port_counters_t;
8501#include <complib/cl_packoff.h>
8502
8503#define PC_LINK_INT(integ_buf_over) ((integ_buf_over & 0xF0) >> 4)
8504#define PC_BUF_OVERRUN(integ_buf_over) (integ_buf_over & 0x0F)
8505
8506/****s* IBA Base: Types/ib_port_counters_ext
8507* NAME
8508*	ib_port_counters_ext_t
8509*
8510* DESCRIPTION
8511*	IBA defined PortCounters Extended Attribute. (16.1.4.11)
8512*
8513* SYNOPSIS
8514*/
8515#include <complib/cl_packon.h>
8516typedef struct _ib_port_counters_ext {
8517	uint8_t reserved;
8518	uint8_t port_select;
8519	ib_net16_t counter_select;
8520	ib_net32_t counter_select2;
8521	ib_net64_t xmit_data;
8522	ib_net64_t rcv_data;
8523	ib_net64_t xmit_pkts;
8524	ib_net64_t rcv_pkts;
8525	ib_net64_t unicast_xmit_pkts;
8526	ib_net64_t unicast_rcv_pkts;
8527	ib_net64_t multicast_xmit_pkts;
8528	ib_net64_t multicast_rcv_pkts;
8529	ib_net64_t symbol_err_cnt;
8530	ib_net64_t link_err_recover;
8531	ib_net64_t link_downed;
8532	ib_net64_t rcv_err;
8533	ib_net64_t rcv_rem_phys_err;
8534	ib_net64_t rcv_switch_relay_err;
8535	ib_net64_t xmit_discards;
8536	ib_net64_t xmit_constraint_err;
8537	ib_net64_t rcv_constraint_err;
8538	ib_net64_t link_integrity_err;
8539	ib_net64_t buffer_overrun;
8540	ib_net64_t vl15_dropped;
8541	ib_net64_t xmit_wait;
8542	ib_net64_t qp1_dropped;
8543} PACK_SUFFIX ib_port_counters_ext_t;
8544#include <complib/cl_packoff.h>
8545
8546/****s* IBA Base: Types/ib_port_samples_control
8547* NAME
8548*	ib_port_samples_control_t
8549*
8550* DESCRIPTION
8551*	IBA defined PortSamplesControl Attribute. (16.1.3.2)
8552*
8553* SYNOPSIS
8554*/
8555#include <complib/cl_packon.h>
8556typedef struct _ib_port_samples_control {
8557	uint8_t op_code;
8558	uint8_t port_select;
8559	uint8_t tick;
8560	uint8_t counter_width;	/* 5 bits res : 3bits counter_width */
8561	ib_net32_t counter_mask;	/* 2 bits res : 3 bits counter_mask : 27 bits counter_masks_1to9 */
8562	ib_net16_t counter_mask_10to14;	/* 1 bits res : 15 bits counter_masks_10to14 */
8563	uint8_t sample_mech;
8564	uint8_t sample_status;	/* 6 bits res : 2 bits sample_status */
8565	ib_net64_t option_mask;
8566	ib_net64_t vendor_mask;
8567	ib_net32_t sample_start;
8568	ib_net32_t sample_interval;
8569	ib_net16_t tag;
8570	ib_net16_t counter_select0;
8571	ib_net16_t counter_select1;
8572	ib_net16_t counter_select2;
8573	ib_net16_t counter_select3;
8574	ib_net16_t counter_select4;
8575	ib_net16_t counter_select5;
8576	ib_net16_t counter_select6;
8577	ib_net16_t counter_select7;
8578	ib_net16_t counter_select8;
8579	ib_net16_t counter_select9;
8580	ib_net16_t counter_select10;
8581	ib_net16_t counter_select11;
8582	ib_net16_t counter_select12;
8583	ib_net16_t counter_select13;
8584	ib_net16_t counter_select14;
8585} PACK_SUFFIX ib_port_samples_control_t;
8586#include <complib/cl_packoff.h>
8587
8588/****d* IBA Base: Types/CounterSelect values
8589* NAME
8590*       Counter select values
8591*
8592* DESCRIPTION
8593*	Mandatory counter select values (16.1.3.3)
8594*
8595* SYNOPSIS
8596*/
8597#define IB_CS_PORT_XMIT_DATA (CL_HTON16(0x0001))
8598#define IB_CS_PORT_RCV_DATA  (CL_HTON16(0x0002))
8599#define IB_CS_PORT_XMIT_PKTS (CL_HTON16(0x0003))
8600#define IB_CS_PORT_RCV_PKTS  (CL_HTON16(0x0004))
8601#define IB_CS_PORT_XMIT_WAIT (CL_HTON16(0x0005))
8602
8603/****s* IBA Base: Types/ib_port_samples_result
8604* NAME
8605*	ib_port_samples_result_t
8606*
8607* DESCRIPTION
8608*	IBA defined PortSamplesControl Attribute. (16.1.3.2)
8609*
8610* SYNOPSIS
8611*/
8612#include <complib/cl_packon.h>
8613typedef struct _ib_port_samples_result {
8614	ib_net16_t tag;
8615	ib_net16_t sample_status;	/* 14 bits res : 2 bits sample_status */
8616	ib_net32_t counter0;
8617	ib_net32_t counter1;
8618	ib_net32_t counter2;
8619	ib_net32_t counter3;
8620	ib_net32_t counter4;
8621	ib_net32_t counter5;
8622	ib_net32_t counter6;
8623	ib_net32_t counter7;
8624	ib_net32_t counter8;
8625	ib_net32_t counter9;
8626	ib_net32_t counter10;
8627	ib_net32_t counter11;
8628	ib_net32_t counter12;
8629	ib_net32_t counter13;
8630	ib_net32_t counter14;
8631} PACK_SUFFIX ib_port_samples_result_t;
8632#include <complib/cl_packoff.h>
8633
8634/****s* IBA Base: Types/ib_port_xmit_data_sl
8635* NAME
8636*	ib_port_xmit_data_sl_t
8637*
8638* DESCRIPTION
8639*       IBA defined PortXmitDataSL Attribute. (A13.6.4)
8640*
8641* SYNOPSIS
8642*/
8643#include <complib/cl_packon.h>
8644typedef struct _ib_port_xmit_data_sl {
8645	uint8_t reserved;
8646	uint8_t port_select;
8647	ib_net16_t counter_select;
8648	ib_net32_t port_xmit_data_sl[16];
8649	uint8_t resv[124];
8650} PACK_SUFFIX ib_port_xmit_data_sl_t;
8651#include <complib/cl_packoff.h>
8652
8653/****s* IBA Base: Types/ib_port_rcv_data_sl
8654* NAME
8655*	ib_port_rcv_data_sl_t
8656*
8657* DESCRIPTION
8658*	IBA defined PortRcvDataSL Attribute. (A13.6.4)
8659*
8660* SYNOPSIS
8661*/
8662#include <complib/cl_packon.h>
8663typedef struct _ib_port_rcv_data_sl {
8664	uint8_t reserved;
8665	uint8_t port_select;
8666	ib_net16_t counter_select;
8667	ib_net32_t port_rcv_data_sl[16];
8668	uint8_t resv[124];
8669} PACK_SUFFIX ib_port_rcv_data_sl_t;
8670#include <complib/cl_packoff.h>
8671
8672/****d* IBA Base: Types/DM_SVC_NAME
8673* NAME
8674*	DM_SVC_NAME
8675*
8676* DESCRIPTION
8677*	IBA defined Device Management service name (16.3)
8678*
8679* SYNOPSIS
8680*/
8681#define	DM_SVC_NAME				"DeviceManager.IBTA"
8682/*
8683* SEE ALSO
8684*********/
8685
8686/****s* IBA Base: Types/ib_dm_mad_t
8687* NAME
8688*	ib_dm_mad_t
8689*
8690* DESCRIPTION
8691*	IBA defined Device Management MAD (16.3.1)
8692*
8693* SYNOPSIS
8694*/
8695#include <complib/cl_packon.h>
8696typedef struct _ib_dm_mad {
8697	ib_mad_t header;
8698	uint8_t resv[40];
8699#define	IB_DM_DATA_SIZE		192
8700	uint8_t data[IB_DM_DATA_SIZE];
8701} PACK_SUFFIX ib_dm_mad_t;
8702#include <complib/cl_packoff.h>
8703/*
8704* FIELDS
8705*	header
8706*		Common MAD header.
8707*
8708*	resv
8709*		Reserved.
8710*
8711*	data
8712*		Device Management payload.  The structure and content of this field
8713*		depend upon the method, attr_id, and attr_mod fields in the header.
8714*
8715* SEE ALSO
8716* ib_mad_t
8717*********/
8718
8719/****s* IBA Base: Types/ib_iou_info_t
8720* NAME
8721*	ib_iou_info_t
8722*
8723* DESCRIPTION
8724*	IBA defined IO Unit information structure (16.3.3.3)
8725*
8726* SYNOPSIS
8727*/
8728#include <complib/cl_packon.h>
8729typedef struct _ib_iou_info {
8730	ib_net16_t change_id;
8731	uint8_t max_controllers;
8732	uint8_t diag_rom;
8733#define	IB_DM_CTRL_LIST_SIZE	128
8734	uint8_t controller_list[IB_DM_CTRL_LIST_SIZE];
8735#define	IOC_NOT_INSTALLED		0x0
8736#define	IOC_INSTALLED			0x1
8737//              Reserved values                         0x02-0xE
8738#define	SLOT_DOES_NOT_EXIST		0xF
8739} PACK_SUFFIX ib_iou_info_t;
8740#include <complib/cl_packoff.h>
8741/*
8742* FIELDS
8743*	change_id
8744*		Value incremented, with rollover, by any change to the controller_list.
8745*
8746*	max_controllers
8747*		Number of slots in controller_list.
8748*
8749*	diag_rom
8750*		A byte containing two fields: DiagDeviceID and OptionROM.
8751*		These fields may be read using the ib_iou_info_diag_dev_id
8752*		and ib_iou_info_option_rom functions.
8753*
8754*	controller_list
8755*		A series of 4-bit nibbles, with each nibble representing a slot
8756*		in the IO Unit.  Individual nibbles may be read using the
8757*		ioc_at_slot function.
8758*
8759* SEE ALSO
8760* ib_dm_mad_t, ib_iou_info_diag_dev_id, ib_iou_info_option_rom, ioc_at_slot
8761*********/
8762
8763/****f* IBA Base: Types/ib_iou_info_diag_dev_id
8764* NAME
8765*	ib_iou_info_diag_dev_id
8766*
8767* DESCRIPTION
8768*	Returns the DiagDeviceID.
8769*
8770* SYNOPSIS
8771*/
8772static inline uint8_t OSM_API
8773ib_iou_info_diag_dev_id(IN const ib_iou_info_t * const p_iou_info)
8774{
8775	return ((uint8_t) (p_iou_info->diag_rom >> 6 & 1));
8776}
8777
8778/*
8779* PARAMETERS
8780*	p_iou_info
8781*		[in] Pointer to the IO Unit information structure.
8782*
8783* RETURN VALUES
8784*	DiagDeviceID field of the IO Unit information.
8785*
8786* NOTES
8787*
8788* SEE ALSO
8789*	ib_iou_info_t
8790*********/
8791
8792/****f* IBA Base: Types/ib_iou_info_option_rom
8793* NAME
8794*	ib_iou_info_option_rom
8795*
8796* DESCRIPTION
8797*	Returns the OptionROM.
8798*
8799* SYNOPSIS
8800*/
8801static inline uint8_t OSM_API
8802ib_iou_info_option_rom(IN const ib_iou_info_t * const p_iou_info)
8803{
8804	return ((uint8_t) (p_iou_info->diag_rom >> 7));
8805}
8806
8807/*
8808* PARAMETERS
8809*	p_iou_info
8810*		[in] Pointer to the IO Unit information structure.
8811*
8812* RETURN VALUES
8813*	OptionROM field of the IO Unit information.
8814*
8815* NOTES
8816*
8817* SEE ALSO
8818*	ib_iou_info_t
8819*********/
8820
8821/****f* IBA Base: Types/ioc_at_slot
8822* NAME
8823*	ioc_at_slot
8824*
8825* DESCRIPTION
8826*	Returns the IOC value at the specified slot.
8827*
8828* SYNOPSIS
8829*/
8830static inline uint8_t OSM_API
8831ioc_at_slot(IN const ib_iou_info_t * const p_iou_info, IN uint8_t slot)
8832{
8833	if (slot >= IB_DM_CTRL_LIST_SIZE)
8834		return SLOT_DOES_NOT_EXIST;
8835	else
8836		return (int8_t)
8837		    ((slot % 2) ?
8838		     ((p_iou_info->controller_list[slot / 2] & 0xf0) >> 4) :
8839		     (p_iou_info->controller_list[slot / 2] & 0x0f));
8840}
8841
8842/*
8843* PARAMETERS
8844*	p_iou_info
8845*		[in] Pointer to the IO Unit information structure.
8846*
8847*	slot
8848*		[in] Pointer to the IO Unit information structure.
8849*
8850* RETURN VALUES
8851*	OptionROM field of the IO Unit information.
8852*
8853* NOTES
8854*
8855* SEE ALSO
8856*	ib_iou_info_t
8857*********/
8858
8859/****s* IBA Base: Types/ib_ioc_profile_t
8860* NAME
8861*	ib_ioc_profile_t
8862*
8863* DESCRIPTION
8864*	IBA defined IO Controller profile structure (16.3.3.4)
8865*
8866* SYNOPSIS
8867*/
8868#include <complib/cl_packon.h>
8869typedef struct _ib_ioc_profile {
8870	ib_net64_t ioc_guid;
8871	ib_net32_t vend_id;
8872	ib_net32_t dev_id;
8873	ib_net16_t dev_ver;
8874	ib_net16_t resv2;
8875	ib_net32_t subsys_vend_id;
8876	ib_net32_t subsys_id;
8877	ib_net16_t io_class;
8878	ib_net16_t io_subclass;
8879	ib_net16_t protocol;
8880	ib_net16_t protocol_ver;
8881	ib_net32_t resv3;
8882	ib_net16_t send_msg_depth;
8883	uint8_t resv4;
8884	uint8_t rdma_read_depth;
8885	ib_net32_t send_msg_size;
8886	ib_net32_t rdma_size;
8887	uint8_t ctrl_ops_cap;
8888#define	CTRL_OPS_CAP_ST		0x01
8889#define	CTRL_OPS_CAP_SF		0x02
8890#define	CTRL_OPS_CAP_RT		0x04
8891#define	CTRL_OPS_CAP_RF		0x08
8892#define	CTRL_OPS_CAP_WT		0x10
8893#define	CTRL_OPS_CAP_WF		0x20
8894#define	CTRL_OPS_CAP_AT		0x40
8895#define	CTRL_OPS_CAP_AF		0x80
8896	uint8_t resv5;
8897	uint8_t num_svc_entries;
8898#define	MAX_NUM_SVC_ENTRIES	0xff
8899	uint8_t resv6[9];
8900#define	CTRL_ID_STRING_LEN	64
8901	char id_string[CTRL_ID_STRING_LEN];
8902} PACK_SUFFIX ib_ioc_profile_t;
8903#include <complib/cl_packoff.h>
8904/*
8905* FIELDS
8906*	ioc_guid
8907*		An EUI-64 GUID used to uniquely identify the IO controller.
8908*
8909*	vend_id
8910*		IO controller vendor ID, IEEE format.
8911*
8912*	dev_id
8913*		A number assigned by the vendor to identify the type of controller.
8914*
8915*	dev_ver
8916*		A number assigned by the vendor to identify the divice version.
8917*
8918*	subsys_vend_id
8919*		ID of the vendor of the enclosure, if any, in which the IO controller
8920*		resides in IEEE format; otherwise zero.
8921*
8922*	subsys_id
8923*		A number identifying the subsystem where the controller resides.
8924*
8925*	io_class
8926*		0x0000 - 0xfffe = reserved for IO classes encompased by InfiniBand
8927*		Architecture.  0xffff = Vendor specific.
8928*
8929*	io_subclass
8930*		0x0000 - 0xfffe = reserved for IO subclasses encompased by InfiniBand
8931*		Architecture.  0xffff = Vendor specific.  This shall be set to 0xfff
8932*		if the io_class component is 0xffff.
8933*
8934*	protocol
8935*		0x0000 - 0xfffe = reserved for IO subclasses encompased by InfiniBand
8936*		Architecture.  0xffff = Vendor specific.  This shall be set to 0xfff
8937*		if the io_class component is 0xffff.
8938*
8939*	protocol_ver
8940*		Protocol specific.
8941*
8942*	send_msg_depth
8943*		Maximum depth of the send message queue.
8944*
8945*	rdma_read_depth
8946*		Maximum depth of the per-channel RDMA read queue.
8947*
8948*	send_msg_size
8949*		Maximum size of send messages.
8950*
8951*	ctrl_ops_cap
8952*		Supported operation types of this IO controller.  A bit set to one
8953*		for affirmation of supported capability.
8954*
8955*	num_svc_entries
8956*		Number of entries in the service entries table.
8957*
8958*	id_string
8959*		UTF-8 encoded string for identifying the controller to an operator.
8960*
8961* SEE ALSO
8962* ib_dm_mad_t
8963*********/
8964
8965static inline uint32_t OSM_API
8966ib_ioc_profile_get_vend_id(IN const ib_ioc_profile_t * const p_ioc_profile)
8967{
8968	return (cl_ntoh32(p_ioc_profile->vend_id) >> 8);
8969}
8970
8971static inline void OSM_API
8972ib_ioc_profile_set_vend_id(IN ib_ioc_profile_t * const p_ioc_profile,
8973			   IN const uint32_t vend_id)
8974{
8975	p_ioc_profile->vend_id = (cl_hton32(vend_id) << 8);
8976}
8977
8978/****s* IBA Base: Types/ib_svc_entry_t
8979* NAME
8980*	ib_svc_entry_t
8981*
8982* DESCRIPTION
8983*	IBA defined IO Controller service entry structure (16.3.3.5)
8984*
8985* SYNOPSIS
8986*/
8987#include <complib/cl_packon.h>
8988typedef struct _ib_svc_entry {
8989#define	MAX_SVC_ENTRY_NAME_LEN		40
8990	char name[MAX_SVC_ENTRY_NAME_LEN];
8991	ib_net64_t id;
8992} PACK_SUFFIX ib_svc_entry_t;
8993#include <complib/cl_packoff.h>
8994/*
8995* FIELDS
8996*	name
8997*		UTF-8 encoded, null-terminated name of the service.
8998*
8999*	id
9000*		An identifier of the associated Service.
9001*
9002* SEE ALSO
9003* ib_svc_entries_t
9004*********/
9005
9006/****s* IBA Base: Types/ib_svc_entries_t
9007* NAME
9008*	ib_svc_entries_t
9009*
9010* DESCRIPTION
9011*	IBA defined IO Controller service entry array (16.3.3.5)
9012*
9013* SYNOPSIS
9014*/
9015#include <complib/cl_packon.h>
9016typedef struct _ib_svc_entries {
9017#define	SVC_ENTRY_COUNT			4
9018	ib_svc_entry_t service_entry[SVC_ENTRY_COUNT];
9019} PACK_SUFFIX ib_svc_entries_t;
9020#include <complib/cl_packoff.h>
9021/*
9022* FIELDS
9023*	service_entry
9024*		An array of IO controller service entries.
9025*
9026* SEE ALSO
9027* ib_dm_mad_t, ib_svc_entry_t
9028*********/
9029
9030static inline void OSM_API
9031ib_dm_get_slot_lo_hi(IN const ib_net32_t slot_lo_hi,
9032		     OUT uint8_t * const p_slot,
9033		     OUT uint8_t * const p_lo, OUT uint8_t * const p_hi)
9034{
9035	ib_net32_t tmp_slot_lo_hi = CL_NTOH32(slot_lo_hi);
9036
9037	if (p_slot)
9038		*p_slot = (uint8_t) ((tmp_slot_lo_hi >> 16) & 0x0f);
9039	if (p_hi)
9040		*p_hi = (uint8_t) ((tmp_slot_lo_hi >> 8) & 0xff);
9041	if (p_lo)
9042		*p_lo = (uint8_t) ((tmp_slot_lo_hi >> 0) & 0xff);
9043}
9044
9045/*
9046 *	IBA defined information describing an I/O controller
9047 */
9048#include <complib/cl_packon.h>
9049typedef struct _ib_ioc_info {
9050	ib_net64_t module_guid;
9051	ib_net64_t iou_guid;
9052	ib_ioc_profile_t ioc_profile;
9053	ib_net64_t access_key;
9054	uint16_t initiators_conf;
9055	uint8_t resv[38];
9056} PACK_SUFFIX ib_ioc_info_t;
9057#include <complib/cl_packoff.h>
9058
9059/*
9060 *	The following definitions are shared between the Access Layer and VPD
9061 */
9062typedef struct _ib_ca *__ptr64 ib_ca_handle_t;
9063typedef struct _ib_pd *__ptr64 ib_pd_handle_t;
9064typedef struct _ib_rdd *__ptr64 ib_rdd_handle_t;
9065typedef struct _ib_mr *__ptr64 ib_mr_handle_t;
9066typedef struct _ib_mw *__ptr64 ib_mw_handle_t;
9067typedef struct _ib_qp *__ptr64 ib_qp_handle_t;
9068typedef struct _ib_eec *__ptr64 ib_eec_handle_t;
9069typedef struct _ib_cq *__ptr64 ib_cq_handle_t;
9070typedef struct _ib_av *__ptr64 ib_av_handle_t;
9071typedef struct _ib_mcast *__ptr64 ib_mcast_handle_t;
9072
9073/* Currently for windows branch, use the extended version of ib special verbs struct
9074	in order to be compliant with Infinicon ib_types; later we'll change it to support
9075	OpenSM ib_types.h */
9076
9077#ifndef __WIN__
9078/****d* Access Layer/ib_api_status_t
9079* NAME
9080*	ib_api_status_t
9081*
9082* DESCRIPTION
9083*	Function return codes indicating the success or failure of an API call.
9084*	Note that success is indicated by the return value IB_SUCCESS, which
9085*	is always zero.
9086*
9087* NOTES
9088*	IB_VERBS_PROCESSING_DONE is used by UVP library to terminate a verbs call
9089*	in the pre-ioctl step itself.
9090*
9091* SYNOPSIS
9092*/
9093typedef enum _ib_api_status_t {
9094	IB_SUCCESS,
9095	IB_INSUFFICIENT_RESOURCES,
9096	IB_INSUFFICIENT_MEMORY,
9097	IB_INVALID_PARAMETER,
9098	IB_INVALID_SETTING,
9099	IB_NOT_FOUND,
9100	IB_TIMEOUT,
9101	IB_CANCELED,
9102	IB_INTERRUPTED,
9103	IB_INVALID_PERMISSION,
9104	IB_UNSUPPORTED,
9105	IB_OVERFLOW,
9106	IB_MAX_MCAST_QPS_REACHED,
9107	IB_INVALID_QP_STATE,
9108	IB_INVALID_EEC_STATE,
9109	IB_INVALID_APM_STATE,
9110	IB_INVALID_PORT_STATE,
9111	IB_INVALID_STATE,
9112	IB_RESOURCE_BUSY,
9113	IB_INVALID_PKEY,
9114	IB_INVALID_LKEY,
9115	IB_INVALID_RKEY,
9116	IB_INVALID_MAX_WRS,
9117	IB_INVALID_MAX_SGE,
9118	IB_INVALID_CQ_SIZE,
9119	IB_INVALID_SERVICE_TYPE,
9120	IB_INVALID_GID,
9121	IB_INVALID_LID,
9122	IB_INVALID_GUID,
9123	IB_INVALID_CA_HANDLE,
9124	IB_INVALID_AV_HANDLE,
9125	IB_INVALID_CQ_HANDLE,
9126	IB_INVALID_EEC_HANDLE,
9127	IB_INVALID_QP_HANDLE,
9128	IB_INVALID_PD_HANDLE,
9129	IB_INVALID_MR_HANDLE,
9130	IB_INVALID_MW_HANDLE,
9131	IB_INVALID_RDD_HANDLE,
9132	IB_INVALID_MCAST_HANDLE,
9133	IB_INVALID_CALLBACK,
9134	IB_INVALID_AL_HANDLE,	/* InfiniBand Access Layer */
9135	IB_INVALID_HANDLE,	/* InfiniBand Access Layer */
9136	IB_ERROR,		/* InfiniBand Access Layer */
9137	IB_REMOTE_ERROR,	/* Infiniband Access Layer */
9138	IB_VERBS_PROCESSING_DONE,	/* See Notes above         */
9139	IB_INVALID_WR_TYPE,
9140	IB_QP_IN_TIMEWAIT,
9141	IB_EE_IN_TIMEWAIT,
9142	IB_INVALID_PORT,
9143	IB_NOT_DONE,
9144	IB_UNKNOWN_ERROR	/* ALWAYS LAST ENUM VALUE! */
9145} ib_api_status_t;
9146/*****/
9147
9148OSM_EXPORT const char *ib_error_str[];
9149
9150/****f* IBA Base: Types/ib_get_err_str
9151* NAME
9152*	ib_get_err_str
9153*
9154* DESCRIPTION
9155*	Returns a string for the specified status value.
9156*
9157* SYNOPSIS
9158*/
9159static inline const char *OSM_API ib_get_err_str(IN ib_api_status_t status)
9160{
9161	if (status > IB_UNKNOWN_ERROR)
9162		status = IB_UNKNOWN_ERROR;
9163	return (ib_error_str[status]);
9164}
9165
9166/*
9167* PARAMETERS
9168*	status
9169*		[in] status value
9170*
9171* RETURN VALUES
9172*	Pointer to the status description string.
9173*
9174* NOTES
9175*
9176* SEE ALSO
9177*********/
9178
9179/****d* Verbs/ib_async_event_t
9180* NAME
9181*	ib_async_event_t -- Async event types
9182*
9183* DESCRIPTION
9184*	This type indicates the reason the async callback was called.
9185*	The context in the ib_event_rec_t indicates the resource context
9186*	that associated with the callback.  For example, for IB_AE_CQ_ERROR
9187*	the context provided during the ib_create_cq is returned in the event.
9188*
9189* SYNOPSIS
9190*/
9191typedef enum _ib_async_event_t {
9192	IB_AE_SQ_ERROR = 1,
9193	IB_AE_SQ_DRAINED,
9194	IB_AE_RQ_ERROR,
9195	IB_AE_CQ_ERROR,
9196	IB_AE_QP_FATAL,
9197	IB_AE_QP_COMM,
9198	IB_AE_QP_APM,
9199	IB_AE_EEC_FATAL,
9200	IB_AE_EEC_COMM,
9201	IB_AE_EEC_APM,
9202	IB_AE_LOCAL_FATAL,
9203	IB_AE_PKEY_TRAP,
9204	IB_AE_QKEY_TRAP,
9205	IB_AE_MKEY_TRAP,
9206	IB_AE_PORT_TRAP,
9207	IB_AE_SYSIMG_GUID_TRAP,
9208	IB_AE_BUF_OVERRUN,
9209	IB_AE_LINK_INTEGRITY,
9210	IB_AE_FLOW_CTRL_ERROR,
9211	IB_AE_BKEY_TRAP,
9212	IB_AE_QP_APM_ERROR,
9213	IB_AE_EEC_APM_ERROR,
9214	IB_AE_WQ_REQ_ERROR,
9215	IB_AE_WQ_ACCESS_ERROR,
9216	IB_AE_PORT_ACTIVE,
9217	IB_AE_PORT_DOWN,
9218	IB_AE_UNKNOWN		/* ALWAYS LAST ENUM VALUE */
9219} ib_async_event_t;
9220/*
9221* VALUES
9222*	IB_AE_SQ_ERROR
9223*		An error occurred when accessing the send queue of the QP or EEC.
9224*		This event is optional.
9225*
9226*	IB_AE_SQ_DRAINED
9227*		The send queue of the specified QP has completed the outstanding
9228*		messages in progress when the state change was requested and, if
9229*		applicable, has received all acknowledgements for those messages.
9230*
9231*	IB_AE_RQ_ERROR
9232*		An error occurred when accessing the receive queue of the QP or EEC.
9233*		This event is optional.
9234*
9235*	IB_AE_CQ_ERROR
9236*		An error occurred when writing an entry to the CQ.
9237*
9238*	IB_AE_QP_FATAL
9239*		A catastrophic error occurred while accessing or processing the
9240*		work queue that prevents reporting of completions.
9241*
9242*	IB_AE_QP_COMM
9243*		The first packet has arrived for the receive work queue where the
9244*		QP is still in the RTR state.
9245*
9246*	IB_AE_QP_APM
9247*		If alternate path migration is supported, this event indicates that
9248*		the QP connection has migrated to the alternate path.
9249*
9250*	IB_AE_EEC_FATAL
9251*		If reliable datagram service is supported, this event indicates that
9252*		a catastrophic error occurred while accessing or processing the EEC
9253*		that prevents reporting of completions.
9254*
9255*	IB_AE_EEC_COMM
9256*		If reliable datagram service is supported, this event indicates that
9257*		the first packet has arrived for the receive work queue where the
9258*		EEC is still in the RTR state.
9259*
9260*	IB_AE_EEC_APM
9261*		If reliable datagram service and alternate path migration is supported,
9262*		this event indicates that the EEC connection has migrated to the
9263*		alternate path.
9264*
9265*	IB_AE_LOCAL_FATAL
9266*		A catastrophic HCA error occurred which cannot be attributed to
9267*		any resource; behavior is indeterminate.
9268*
9269*	IB_AE_PKEY_TRAP
9270*		A PKEY violation was detected.  This event is optional.
9271*
9272*	IB_AE_QKEY_TRAP
9273*		A QKEY violation was detected.  This event is optional.
9274*
9275*	IB_AE_MKEY_TRAP
9276*		A MKEY violation was detected.  This event is optional.
9277*
9278*	IB_AE_PORT_TRAP
9279*		A port capability change was detected.  This event is optional.
9280*
9281*	IB_AE_SYSIMG_GUID_TRAP
9282*		If the system image GUID is supported, this event indicates that
9283*		the system image GUID of this HCA has been changed.  This event
9284*		is optional.
9285*
9286*	IB_AE_BUF_OVERRUN
9287*		The number of consecutive flow control update periods with at least
9288*		one overrun error in each period has exceeded the threshold specified
9289*		in the port info attributes.  This event is optional.
9290*
9291*	IB_AE_LINK_INTEGRITY
9292*		The detection of excessively frequent local physical errors has
9293*		exceeded the threshold specified in the port info attributes.  This
9294*		event is optional.
9295*
9296*	IB_AE_FLOW_CTRL_ERROR
9297*		An HCA watchdog timer monitoring the arrival of flow control updates
9298*		has expired without receiving an update.  This event is optional.
9299*
9300*	IB_AE_BKEY_TRAP
9301*		An BKEY violation was detected.  This event is optional.
9302*
9303*	IB_AE_QP_APM_ERROR
9304*		If alternate path migration is supported, this event indicates that
9305*		an incoming path migration request to this QP was not accepted.
9306*
9307*	IB_AE_EEC_APM_ERROR
9308*		If reliable datagram service and alternate path migration is supported,
9309*		this event indicates that an incoming path migration request to this
9310*		EEC was not accepted.
9311*
9312*	IB_AE_WQ_REQ_ERROR
9313*		An OpCode violation was detected at the responder.
9314*
9315*	IB_AE_WQ_ACCESS_ERROR
9316*		An access violation was detected at the responder.
9317*
9318*	IB_AE_PORT_ACTIVE
9319*		If the port active event is supported, this event is generated
9320*		when the link becomes active: IB_LINK_ACTIVE.
9321*
9322*	IB_AE_PORT_DOWN
9323*		The link is declared unavailable: IB_LINK_INIT, IB_LINK_ARMED,
9324*		IB_LINK_DOWN.
9325*
9326*	IB_AE_UNKNOWN
9327*		An unknown error occurred which cannot be attributed to any
9328*		resource; behavior is indeterminate.
9329*
9330*****/
9331
9332OSM_EXPORT const char *ib_async_event_str[];
9333
9334/****f* IBA Base: Types/ib_get_async_event_str
9335* NAME
9336*	ib_get_async_event_str
9337*
9338* DESCRIPTION
9339*	Returns a string for the specified asynchronous event.
9340*
9341* SYNOPSIS
9342*/
9343static inline const char *OSM_API
9344ib_get_async_event_str(IN ib_async_event_t event)
9345{
9346	if (event > IB_AE_UNKNOWN)
9347		event = IB_AE_UNKNOWN;
9348	return (ib_async_event_str[event]);
9349}
9350
9351/*
9352* PARAMETERS
9353*	event
9354*		[in] event value
9355*
9356* RETURN VALUES
9357*	Pointer to the asynchronous event description string.
9358*
9359* NOTES
9360*
9361* SEE ALSO
9362*********/
9363
9364/****s* Verbs/ib_event_rec_t
9365* NAME
9366*	ib_event_rec_t -- Async event notification record
9367*
9368* DESCRIPTION
9369*	When an async event callback is made, this structure is passed to indicate
9370*	the type of event, the source of event that caused it, and the context
9371*	associated with this event.
9372*
9373*	context -- Context of the resource that caused the event.
9374*		-- ca_context if this is a port/adapter event.
9375*		-- qp_context if the source is a QP event
9376*		-- cq_context if the source is a CQ event.
9377*		-- ee_context if the source is an EE event.
9378*
9379* SYNOPSIS
9380*/
9381typedef struct _ib_event_rec {
9382	void *context;
9383	ib_async_event_t type;
9384	/* HCA vendor specific event information. */
9385	uint64_t vendor_specific;
9386	/* The following structures are valid only for trap types. */
9387	union _trap {
9388		struct {
9389			uint16_t lid;
9390			ib_net64_t port_guid;
9391			uint8_t port_num;
9392			/*
9393			 * The following structure is valid only for
9394			 * P_KEY, Q_KEY, and M_KEY violation traps.
9395			 */
9396			struct {
9397				uint8_t sl;
9398				uint16_t src_lid;
9399				uint16_t dest_lid;
9400				union _key {
9401					uint16_t pkey;
9402					uint32_t qkey;
9403					uint64_t mkey;
9404				} key;
9405				uint32_t src_qp;
9406				uint32_t dest_qp;
9407				ib_gid_t src_gid;
9408				ib_gid_t dest_gid;
9409			} violation;
9410		} info;
9411		ib_net64_t sysimg_guid;
9412	} trap;
9413} ib_event_rec_t;
9414/*******/
9415
9416/****d* Access Layer/ib_atomic_t
9417* NAME
9418*	ib_atomic_t
9419*
9420* DESCRIPTION
9421*	Indicates atomicity levels supported by an adapter.
9422*
9423* SYNOPSIS
9424*/
9425typedef enum _ib_atomic_t {
9426	IB_ATOMIC_NONE,
9427	IB_ATOMIC_LOCAL,
9428	IB_ATOMIC_GLOBAL
9429} ib_atomic_t;
9430/*
9431* VALUES
9432*	IB_ATOMIC_NONE
9433*		Atomic operations not supported.
9434*
9435*	IB_ATOMIC_LOCAL
9436*		Atomic operations guaranteed between QPs of a single CA.
9437*
9438*	IB_ATOMIC_GLOBAL
9439*		Atomic operations are guaranteed between CA and any other entity
9440*		in the system.
9441*****/
9442
9443/****s* Access Layer/ib_port_cap_t
9444* NAME
9445*	ib_port_cap_t
9446*
9447* DESCRIPTION
9448*	Indicates which management agents are currently available on the specified
9449*	port.
9450*
9451* SYNOPSIS
9452*/
9453typedef struct _ib_port_cap {
9454	boolean_t cm;
9455	boolean_t snmp;
9456	boolean_t dev_mgmt;
9457	boolean_t vend;
9458	boolean_t sm;
9459	boolean_t sm_disable;
9460	boolean_t qkey_ctr;
9461	boolean_t pkey_ctr;
9462	boolean_t notice;
9463	boolean_t trap;
9464	boolean_t apm;
9465	boolean_t slmap;
9466	boolean_t pkey_nvram;
9467	boolean_t mkey_nvram;
9468	boolean_t sysguid;
9469	boolean_t dr_notice;
9470	boolean_t boot_mgmt;
9471	boolean_t capm_notice;
9472	boolean_t reinit;
9473	boolean_t ledinfo;
9474	boolean_t port_active;
9475} ib_port_cap_t;
9476/*****/
9477
9478/****d* Access Layer/ib_init_type_t
9479* NAME
9480*	ib_init_type_t
9481*
9482* DESCRIPTION
9483*	If supported by the HCA, the type of initialization requested by
9484*	this port before SM moves it to the active or armed state.  If the
9485*	SM implements reinitialization, it shall set these bits to indicate
9486*	the type of initialization performed prior to activating the port.
9487*	Otherwise, these bits shall be set to 0.
9488*
9489* SYNOPSIS
9490*/
9491typedef uint8_t ib_init_type_t;
9492#define IB_INIT_TYPE_NO_LOAD			0x01
9493#define IB_INIT_TYPE_PRESERVE_CONTENT		0x02
9494#define IB_INIT_TYPE_PRESERVE_PRESENCE		0x04
9495#define IB_INIT_TYPE_DO_NOT_RESUSCITATE		0x08
9496/*****/
9497
9498/****s* Access Layer/ib_port_attr_mod_t
9499* NAME
9500*	ib_port_attr_mod_t
9501*
9502* DESCRIPTION
9503*	Port attributes that may be modified.
9504*
9505* SYNOPSIS
9506*/
9507typedef struct _ib_port_attr_mod {
9508	ib_port_cap_t cap;
9509	uint16_t pkey_ctr;
9510	uint16_t qkey_ctr;
9511	ib_init_type_t init_type;
9512	ib_net64_t system_image_guid;
9513} ib_port_attr_mod_t;
9514/*
9515* SEE ALSO
9516*	ib_port_cap_t
9517*****/
9518
9519/****s* Access Layer/ib_port_attr_t
9520* NAME
9521*	ib_port_attr_t
9522*
9523* DESCRIPTION
9524*	Information about a port on a given channel adapter.
9525*
9526* SYNOPSIS
9527*/
9528typedef struct _ib_port_attr {
9529	ib_net64_t port_guid;
9530	uint8_t port_num;
9531	uint8_t mtu;
9532	uint64_t max_msg_size;
9533	ib_net16_t lid;
9534	uint8_t lmc;
9535	/*
9536	 * LinkWidthSupported as defined in PortInfo.  Required to calculate
9537	 * inter-packet delay (a.k.a. static rate).
9538	 */
9539	uint8_t link_width_supported;
9540	uint16_t max_vls;
9541	ib_net16_t sm_lid;
9542	uint8_t sm_sl;
9543	uint8_t link_state;
9544	ib_init_type_t init_type_reply;	/* Optional */
9545	/*
9546	 * subnet_timeout:
9547	 * The maximum expected subnet propagation delay to reach any port on
9548	 * the subnet.  This value also determines the rate at which traps can
9549	 * be generated from this node.
9550	 *
9551	 * timeout = 4.096 microseconds * 2^subnet_timeout
9552	 */
9553	uint8_t subnet_timeout;
9554	ib_port_cap_t cap;
9555	uint16_t pkey_ctr;
9556	uint16_t qkey_ctr;
9557	uint16_t num_gids;
9558	uint16_t num_pkeys;
9559	/*
9560	 * Pointers at the end of the structure to allow doing a simple
9561	 * memory comparison of contents up to the first pointer.
9562	 */
9563	ib_gid_t *p_gid_table;
9564	ib_net16_t *p_pkey_table;
9565} ib_port_attr_t;
9566/*
9567* SEE ALSO
9568*	uint8_t, ib_port_cap_t, ib_link_states_t
9569*****/
9570
9571/****s* Access Layer/ib_ca_attr_t
9572* NAME
9573*	ib_ca_attr_t
9574*
9575* DESCRIPTION
9576*	Information about a channel adapter.
9577*
9578* SYNOPSIS
9579*/
9580typedef struct _ib_ca_attr {
9581	ib_net64_t ca_guid;
9582	uint32_t vend_id;
9583	uint16_t dev_id;
9584	uint16_t revision;
9585	uint64_t fw_ver;
9586	/*
9587	 * Total size of the ca attributes in bytes
9588	 */
9589	uint32_t size;
9590	uint32_t max_qps;
9591	uint32_t max_wrs;
9592	uint32_t max_sges;
9593	uint32_t max_rd_sges;
9594	uint32_t max_cqs;
9595	uint32_t max_cqes;
9596	uint32_t max_pds;
9597	uint32_t init_regions;
9598	uint64_t init_region_size;
9599	uint32_t init_windows;
9600	uint32_t max_addr_handles;
9601	uint32_t max_partitions;
9602	ib_atomic_t atomicity;
9603	uint8_t max_qp_resp_res;
9604	uint8_t max_eec_resp_res;
9605	uint8_t max_resp_res;
9606	uint8_t max_qp_init_depth;
9607	uint8_t max_eec_init_depth;
9608	uint32_t max_eecs;
9609	uint32_t max_rdds;
9610	uint32_t max_ipv6_qps;
9611	uint32_t max_ether_qps;
9612	uint32_t max_mcast_grps;
9613	uint32_t max_mcast_qps;
9614	uint32_t max_qps_per_mcast_grp;
9615	uint32_t max_fmr;
9616	uint32_t max_map_per_fmr;
9617	/*
9618	 * local_ack_delay:
9619	 * Specifies the maximum time interval between the local CA receiving
9620	 * a message and the transmission of the associated ACK or NAK.
9621	 *
9622	 * timeout = 4.096 microseconds * 2^local_ack_delay
9623	 */
9624	uint8_t local_ack_delay;
9625	boolean_t bad_pkey_ctr_support;
9626	boolean_t bad_qkey_ctr_support;
9627	boolean_t raw_mcast_support;
9628	boolean_t apm_support;
9629	boolean_t av_port_check;
9630	boolean_t change_primary_port;
9631	boolean_t modify_wr_depth;
9632	boolean_t current_qp_state_support;
9633	boolean_t shutdown_port_capability;
9634	boolean_t init_type_support;
9635	boolean_t port_active_event_support;
9636	boolean_t system_image_guid_support;
9637	boolean_t hw_agents;
9638	ib_net64_t system_image_guid;
9639	uint32_t num_page_sizes;
9640	uint8_t num_ports;
9641	uint32_t *p_page_size;
9642	ib_port_attr_t *p_port_attr;
9643} ib_ca_attr_t;
9644/*
9645* FIELDS
9646*	ca_guid
9647*		GUID for this adapter.
9648*
9649*	vend_id
9650*		IEEE vendor ID for this adapter
9651*
9652*	dev_id
9653*		Device ID of this adapter. (typically from PCI device ID)
9654*
9655*	revision
9656*		Revision ID of this adapter
9657*
9658*	fw_ver
9659*		Device Firmware version.
9660*
9661*	size
9662*		Total size in bytes for the HCA attributes.  This size includes total
9663*		size required for all the variable members of the structure.  If a
9664*		vendor requires to pass vendor specific fields beyond this structure,
9665*		the HCA vendor can choose to report a larger size.  If a vendor is
9666*		reporting extended vendor specific features, they should also provide
9667*		appropriate access functions to aid with the required interpretation.
9668*
9669*	max_qps
9670*		Maximum number of QP's supported by this HCA.
9671*
9672*	max_wrs
9673*		Maximum number of work requests supported by this HCA.
9674*
9675*	max_sges
9676*		Maximum number of scatter gather elements supported per work request.
9677*
9678*	max_rd_sges
9679*		Maximum number of scatter gather elements supported for READ work
9680*		requests for a Reliable Datagram QP.  This value must be zero if RD
9681*		service is not supported.
9682*
9683*	max_cqs
9684*		Maximum number of Completion Queues supported.
9685*
9686*	max_cqes
9687*		Maximum number of CQ elements supported per CQ.
9688*
9689*	max_pds
9690*		Maximum number of protection domains supported.
9691*
9692*	init_regions
9693*		Initial number of memory regions supported.  These are only informative
9694*		values.  HCA vendors can extended and grow these limits on demand.
9695*
9696*	init_region_size
9697*		Initial limit on the size of the registered memory region.
9698*
9699*	init_windows
9700*		Initial number of window entries supported.
9701*
9702*	max_addr_handles
9703*		Maximum number of address handles supported.
9704*
9705*	max_partitions
9706*		Maximum number of partitions supported.
9707*
9708*	atomicity
9709*		Indicates level of atomic operations supported by this HCA.
9710*
9711*	max_qp_resp_res
9712*	max_eec_resp_res
9713*		Maximum limit on number of responder resources for incoming RDMA
9714*		operations, on QPs and EEC's respectively.
9715*
9716*	max_resp_res
9717*		Maximum number of responder resources per HCA, with this HCA used as
9718*		the target.
9719*
9720*	max_qp_init_depth
9721*	max_eec_init_depth
9722*		Maximimum initiator depth per QP or EEC for initiating RDMA reads and
9723*		atomic operations.
9724*
9725*	max_eecs
9726*		Maximimum number of EEC's supported by the HCA.
9727*
9728*	max_rdds
9729*		Maximum number of Reliable datagram domains supported.
9730*
9731*	max_ipv6_qps
9732*	max_ether_qps
9733*		Maximum number of IPV6 and raw ether QP's supported by this HCA.
9734*
9735*	max_mcast_grps
9736*		Maximum number of multicast groups supported.
9737*
9738*	max_mcast_qps
9739*		Maximum number of QP's that can support multicast operations.
9740*
9741*	max_qps_per_mcast_grp
9742*		Maximum number of multicast QP's per multicast group.
9743*
9744*	local_ack_delay
9745*		Specifies the maximum time interval between the local CA receiving
9746*		a message and the transmission of the associated ACK or NAK.
9747*		timeout = 4.096 microseconds * 2^local_ack_delay
9748*
9749*	bad_pkey_ctr_support
9750*	bad_qkey_ctr_support
9751*		Indicates support for the bad pkey and qkey counters.
9752*
9753*	raw_mcast_support
9754*		Indicates support for raw packet multicast.
9755*
9756*	apm_support
9757*		Indicates support for Automatic Path Migration.
9758*
9759*	av_port_check
9760*		Indicates ability to check port number in address handles.
9761*
9762*	change_primary_port
9763*		Indicates ability to change primary port for a QP or EEC during a
9764*		SQD->RTS transition.
9765*
9766*	modify_wr_depth
9767*		Indicates ability to modify QP depth during a modify QP operation.
9768*		Check the verb specification for permitted states.
9769*
9770*	current_qp_state_support
9771*		Indicates ability of the HCA to support the current QP state modifier
9772*		during a modify QP operation.
9773*
9774*	shutdown_port_capability
9775*		Shutdown port capability support indicator.
9776*
9777*	init_type_support
9778*		Indicates init_type_reply and ability to set init_type is supported.
9779*
9780*	port_active_event_support
9781*		Port active event support indicator.
9782*
9783*	system_image_guid_support
9784*		System image GUID support indicator.
9785*
9786*	hw_agents
9787*		Indicates SMA is implemented in HW.
9788*
9789*	system_image_guid
9790*		Optional system image GUID.  This field is valid only if the
9791*		system_image_guid_support flag is set.
9792*
9793*	num_page_sizes
9794*		Indicates support for different page sizes supported by the HCA.
9795*		The variable size array can be obtained from p_page_size.
9796*
9797*	num_ports
9798*		Number of physical ports supported on this HCA.
9799*
9800*	p_page_size
9801*		Array holding different page size supported.
9802*
9803*	p_port_attr
9804*		Array holding port attributes.
9805*
9806* NOTES
9807*	This structure contains the attributes of a channel adapter.  Users must
9808*	call ib_copy_ca_attr to copy the contents of this structure to a new
9809*	memory region.
9810*
9811* SEE ALSO
9812*	ib_port_attr_t, ib_atomic_t, ib_copy_ca_attr
9813*****/
9814
9815/****f* Access layer/ib_copy_ca_attr
9816* NAME
9817*	ib_copy_ca_attr
9818*
9819* DESCRIPTION
9820*	Copies CA attributes.
9821*
9822* SYNOPSIS
9823*/
9824ib_ca_attr_t *ib_copy_ca_attr(IN ib_ca_attr_t * const p_dest,
9825			      IN const ib_ca_attr_t * const p_src);
9826/*
9827* PARAMETERS
9828*	p_dest
9829*		Pointer to the buffer that is the destination of the copy.
9830*
9831*	p_src
9832*		Pointer to the CA attributes to copy.
9833*
9834* RETURN VALUE
9835*	Pointer to the copied CA attributes.
9836*
9837* NOTES
9838*	The buffer pointed to by the p_dest parameter must be at least the size
9839*	specified in the size field of the buffer pointed to by p_src.
9840*
9841* SEE ALSO
9842*	ib_ca_attr_t, ib_dup_ca_attr, ib_free_ca_attr
9843*****/
9844
9845/****s* Access Layer/ib_av_attr_t
9846* NAME
9847*	ib_av_attr_t
9848*
9849* DESCRIPTION
9850*	IBA address vector.
9851*
9852* SYNOPSIS
9853*/
9854typedef struct _ib_av_attr {
9855	uint8_t port_num;
9856	uint8_t sl;
9857	ib_net16_t dlid;
9858	boolean_t grh_valid;
9859	ib_grh_t grh;
9860	uint8_t static_rate;
9861	uint8_t path_bits;
9862	struct _av_conn {
9863		uint8_t path_mtu;
9864		uint8_t local_ack_timeout;
9865		uint8_t seq_err_retry_cnt;
9866		uint8_t rnr_retry_cnt;
9867	} conn;
9868} ib_av_attr_t;
9869/*
9870* SEE ALSO
9871*	ib_gid_t
9872*****/
9873
9874/****d* Access Layer/ib_qp_type_t
9875* NAME
9876*	ib_qp_type_t
9877*
9878* DESCRIPTION
9879*	Indicates the type of queue pair being created.
9880*
9881* SYNOPSIS
9882*/
9883typedef enum _ib_qp_type {
9884	IB_QPT_RELIABLE_CONN = 0,	/* Matches CM REQ transport type */
9885	IB_QPT_UNRELIABLE_CONN = 1,	/* Matches CM REQ transport type */
9886	IB_QPT_RELIABLE_DGRM = 2,	/* Matches CM REQ transport type */
9887	IB_QPT_UNRELIABLE_DGRM,
9888	IB_QPT_QP0,
9889	IB_QPT_QP1,
9890	IB_QPT_RAW_IPV6,
9891	IB_QPT_RAW_ETHER,
9892	IB_QPT_MAD,		/* InfiniBand Access Layer */
9893	IB_QPT_QP0_ALIAS,	/* InfiniBand Access Layer */
9894	IB_QPT_QP1_ALIAS	/* InfiniBand Access Layer */
9895} ib_qp_type_t;
9896/*
9897* VALUES
9898*	IB_QPT_RELIABLE_CONN
9899*		Reliable, connected queue pair.
9900*
9901*	IB_QPT_UNRELIABLE_CONN
9902*		Unreliable, connected queue pair.
9903*
9904*	IB_QPT_RELIABLE_DGRM
9905*		Reliable, datagram queue pair.
9906*
9907*	IB_QPT_UNRELIABLE_DGRM
9908*		Unreliable, datagram queue pair.
9909*
9910*	IB_QPT_QP0
9911*		Queue pair 0.
9912*
9913*	IB_QPT_QP1
9914*		Queue pair 1.
9915*
9916*	IB_QPT_RAW_DGRM
9917*		Raw datagram queue pair.
9918*
9919*	IB_QPT_RAW_IPV6
9920*		Raw IP version 6 queue pair.
9921*
9922*	IB_QPT_RAW_ETHER
9923*		Raw Ethernet queue pair.
9924*
9925*	IB_QPT_MAD
9926*		Unreliable, datagram queue pair that will send and receive management
9927*		datagrams with assistance from the access layer.
9928*
9929*	IB_QPT_QP0_ALIAS
9930*		Alias to queue pair 0.  Aliased QPs can only be created on an aliased
9931*		protection domain.
9932*
9933*	IB_QPT_QP1_ALIAS
9934*		Alias to queue pair 1.  Aliased QPs can only be created on an aliased
9935*		protection domain.
9936*****/
9937
9938/****d* Access Layer/ib_access_t
9939* NAME
9940*	ib_access_t
9941*
9942* DESCRIPTION
9943*	Indicates the type of access is permitted on resources such as QPs,
9944*	memory regions and memory windows.
9945*
9946* SYNOPSIS
9947*/
9948typedef uint32_t ib_access_t;
9949#define IB_AC_RDMA_READ				0x00000001
9950#define IB_AC_RDMA_WRITE			0x00000002
9951#define IB_AC_ATOMIC				0x00000004
9952#define IB_AC_LOCAL_WRITE			0x00000008
9953#define IB_AC_MW_BIND				0x00000010
9954/*
9955* NOTES
9956*	Users may combine access rights using a bit-wise or operation to specify
9957*	additional access.  For example: IB_AC_RDMA_READ | IB_AC_RDMA_WRITE grants
9958*	RDMA read and write access.
9959*****/
9960
9961/****d* Access Layer/ib_qp_state_t
9962* NAME
9963*	ib_qp_state_t
9964*
9965* DESCRIPTION
9966*	Indicates or sets the state of a queue pair.  The current state of a queue
9967*	pair is returned through the ib_qp_query call and set via the
9968*	ib_qp_modify call.
9969*
9970* SYNOPSIS
9971*/
9972typedef uint32_t ib_qp_state_t;
9973#define IB_QPS_RESET				0x00000001
9974#define IB_QPS_INIT				0x00000002
9975#define IB_QPS_RTR				0x00000004
9976#define IB_QPS_RTS				0x00000008
9977#define IB_QPS_SQD				0x00000010
9978#define IB_QPS_SQD_DRAINING			0x00000030
9979#define IB_QPS_SQD_DRAINED			0x00000050
9980#define IB_QPS_SQERR				0x00000080
9981#define IB_QPS_ERROR				0x00000100
9982#define IB_QPS_TIME_WAIT			0xDEAD0000	/* InfiniBand Access Layer */
9983/*****/
9984
9985/****d* Access Layer/ib_apm_state_t
9986* NAME
9987*	ib_apm_state_t
9988*
9989* DESCRIPTION
9990*	The current automatic path migration state of a queue pair
9991*
9992* SYNOPSIS
9993*/
9994typedef enum _ib_apm_state {
9995	IB_APM_MIGRATED = 1,
9996	IB_APM_REARM,
9997	IB_APM_ARMED
9998} ib_apm_state_t;
9999/*****/
10000
10001/****s* Access Layer/ib_qp_create_t
10002* NAME
10003*	ib_qp_create_t
10004*
10005* DESCRIPTION
10006*	Attributes used to initialize a queue pair at creation time.
10007*
10008* SYNOPSIS
10009*/
10010typedef struct _ib_qp_create {
10011	ib_qp_type_t qp_type;
10012	ib_rdd_handle_t h_rdd;
10013	uint32_t sq_depth;
10014	uint32_t rq_depth;
10015	uint32_t sq_sge;
10016	uint32_t rq_sge;
10017	ib_cq_handle_t h_sq_cq;
10018	ib_cq_handle_t h_rq_cq;
10019	boolean_t sq_signaled;
10020} ib_qp_create_t;
10021/*
10022* FIELDS
10023*	type
10024*		Specifies the type of queue pair to create.
10025*
10026*	h_rdd
10027*		A handle to a reliable datagram domain to associate with the queue
10028*		pair.  This field is ignored if the queue pair is not a reliable
10029*		datagram type queue pair.
10030*
10031*	sq_depth
10032*		Indicates the requested maximum number of work requests that may be
10033*		outstanding on the queue pair's send queue.  This value must be less
10034*		than or equal to the maximum reported by the channel adapter associated
10035*		with the queue pair.
10036*
10037*	rq_depth
10038*		Indicates the requested maximum number of work requests that may be
10039*		outstanding on the queue pair's receive queue.  This value must be less
10040*		than or equal to the maximum reported by the channel adapter associated
10041*		with the queue pair.
10042*
10043*	sq_sge
10044*		Indicates the maximum number scatter-gather elements that may be
10045*		given in a send work request.  This value must be less
10046*		than or equal to the maximum reported by the channel adapter associated
10047*		with the queue pair.
10048*
10049*	rq_sge
10050*		Indicates the maximum number scatter-gather elements that may be
10051*		given in a receive work request.  This value must be less
10052*		than or equal to the maximum reported by the channel adapter associated
10053*		with the queue pair.
10054*
10055*	h_sq_cq
10056*		A handle to the completion queue that will be used to report send work
10057*		request completions.  This handle must be NULL if the type is
10058*		IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.
10059*
10060*	h_rq_cq
10061*		A handle to the completion queue that will be used to report receive
10062*		work request completions.  This handle must be NULL if the type is
10063*		IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.
10064*
10065*	sq_signaled
10066*		A flag that is used to indicate whether the queue pair will signal
10067*		an event upon completion of a send work request.  If set to
10068*		TRUE, send work requests will always generate a completion
10069*		event.  If set to FALSE, a completion event will only be
10070*		generated if the send_opt field of the send work request has the
10071*		IB_SEND_OPT_SIGNALED flag set.
10072*
10073* SEE ALSO
10074*	ib_qp_type_t, ib_qp_attr_t
10075*****/
10076
10077/****s* Access Layer/ib_qp_attr_t
10078* NAME
10079*	ib_qp_attr_t
10080*
10081* DESCRIPTION
10082*	Queue pair attributes returned through ib_query_qp.
10083*
10084* SYNOPSIS
10085*/
10086typedef struct _ib_qp_attr {
10087	ib_pd_handle_t h_pd;
10088	ib_qp_type_t qp_type;
10089	ib_access_t access_ctrl;
10090	uint16_t pkey_index;
10091	uint32_t sq_depth;
10092	uint32_t rq_depth;
10093	uint32_t sq_sge;
10094	uint32_t rq_sge;
10095	uint8_t init_depth;
10096	uint8_t resp_res;
10097	ib_cq_handle_t h_sq_cq;
10098	ib_cq_handle_t h_rq_cq;
10099	ib_rdd_handle_t h_rdd;
10100	boolean_t sq_signaled;
10101	ib_qp_state_t state;
10102	ib_net32_t num;
10103	ib_net32_t dest_num;
10104	ib_net32_t qkey;
10105	ib_net32_t sq_psn;
10106	ib_net32_t rq_psn;
10107	uint8_t primary_port;
10108	uint8_t alternate_port;
10109	ib_av_attr_t primary_av;
10110	ib_av_attr_t alternate_av;
10111	ib_apm_state_t apm_state;
10112} ib_qp_attr_t;
10113/*
10114* FIELDS
10115*	h_pd
10116*		This is a handle to a protection domain associated with the queue
10117*		pair, or NULL if the queue pair is type IB_QPT_RELIABLE_DGRM.
10118*
10119* NOTES
10120*	Other fields are defined by the Infiniband specification.
10121*
10122* SEE ALSO
10123*	ib_qp_type_t, ib_access_t, ib_qp_state_t, ib_av_attr_t, ib_apm_state_t
10124*****/
10125
10126/****d* Access Layer/ib_qp_opts_t
10127* NAME
10128*	ib_qp_opts_t
10129*
10130* DESCRIPTION
10131*	Optional fields supplied in the modify QP operation.
10132*
10133* SYNOPSIS
10134*/
10135typedef uint32_t ib_qp_opts_t;
10136#define IB_MOD_QP_ALTERNATE_AV			0x00000001
10137#define IB_MOD_QP_PKEY				0x00000002
10138#define IB_MOD_QP_APM_STATE			0x00000004
10139#define IB_MOD_QP_PRIMARY_AV			0x00000008
10140#define IB_MOD_QP_RNR_NAK_TIMEOUT		0x00000010
10141#define IB_MOD_QP_RESP_RES			0x00000020
10142#define IB_MOD_QP_INIT_DEPTH			0x00000040
10143#define IB_MOD_QP_PRIMARY_PORT			0x00000080
10144#define IB_MOD_QP_ACCESS_CTRL			0x00000100
10145#define IB_MOD_QP_QKEY				0x00000200
10146#define IB_MOD_QP_SQ_DEPTH			0x00000400
10147#define IB_MOD_QP_RQ_DEPTH			0x00000800
10148#define IB_MOD_QP_CURRENT_STATE			0x00001000
10149#define IB_MOD_QP_RETRY_CNT			0x00002000
10150#define IB_MOD_QP_LOCAL_ACK_TIMEOUT		0x00004000
10151#define IB_MOD_QP_RNR_RETRY_CNT			0x00008000
10152/*
10153* SEE ALSO
10154*	ib_qp_mod_t
10155*****/
10156
10157/****s* Access Layer/ib_qp_mod_t
10158* NAME
10159*	ib_qp_mod_t
10160*
10161* DESCRIPTION
10162*	Information needed to change the state of a queue pair through the
10163*	ib_modify_qp call.
10164*
10165* SYNOPSIS
10166*/
10167typedef struct _ib_qp_mod {
10168	ib_qp_state_t req_state;
10169	union _qp_state {
10170		struct _qp_reset {
10171			/*
10172			 * Time, in milliseconds, that the QP needs to spend in
10173			 * the time wait state before being reused.
10174			 */
10175			uint32_t timewait;
10176		} reset;
10177		struct _qp_init {
10178			ib_qp_opts_t opts;
10179			uint8_t primary_port;
10180			ib_net32_t qkey;
10181			uint16_t pkey_index;
10182			ib_access_t access_ctrl;
10183		} init;
10184		struct _qp_rtr {
10185			ib_net32_t rq_psn;
10186			ib_net32_t dest_qp;
10187			ib_av_attr_t primary_av;
10188			uint8_t resp_res;
10189			ib_qp_opts_t opts;
10190			ib_av_attr_t alternate_av;
10191			ib_net32_t qkey;
10192			uint16_t pkey_index;
10193			ib_access_t access_ctrl;
10194			uint32_t sq_depth;
10195			uint32_t rq_depth;
10196			uint8_t rnr_nak_timeout;
10197		} rtr;
10198		struct _qp_rts {
10199			ib_net32_t sq_psn;
10200			uint8_t retry_cnt;
10201			uint8_t rnr_retry_cnt;
10202			uint8_t rnr_nak_timeout;
10203			uint8_t local_ack_timeout;
10204			uint8_t init_depth;
10205			ib_qp_opts_t opts;
10206			ib_qp_state_t current_state;
10207			ib_net32_t qkey;
10208			ib_access_t access_ctrl;
10209			uint8_t resp_res;
10210			ib_av_attr_t primary_av;
10211			ib_av_attr_t alternate_av;
10212			uint32_t sq_depth;
10213			uint32_t rq_depth;
10214			ib_apm_state_t apm_state;
10215			uint8_t primary_port;
10216			uint16_t pkey_index;
10217		} rts;
10218		struct _qp_sqd {
10219			boolean_t sqd_event;
10220		} sqd;
10221	} state;
10222} ib_qp_mod_t;
10223/*
10224* SEE ALSO
10225*	ib_qp_state_t, ib_access_t, ib_av_attr_t, ib_apm_state_t
10226*****/
10227
10228/****s* Access Layer/ib_eec_attr_t
10229* NAME
10230*	ib_eec_attr_t
10231*
10232* DESCRIPTION
10233*	Information about an end-to-end context.
10234*
10235* SYNOPSIS
10236*/
10237typedef struct _ib_eec_attr {
10238	ib_qp_state_t state;
10239	ib_rdd_handle_t h_rdd;
10240	ib_net32_t local_eecn;
10241	ib_net32_t sq_psn;
10242	ib_net32_t rq_psn;
10243	uint8_t primary_port;
10244	uint16_t pkey_index;
10245	uint32_t resp_res;
10246	ib_net32_t remote_eecn;
10247	uint32_t init_depth;
10248	uint32_t dest_num;	// ??? What is this?
10249	ib_av_attr_t primary_av;
10250	ib_av_attr_t alternate_av;
10251	ib_apm_state_t apm_state;
10252} ib_eec_attr_t;
10253/*
10254* SEE ALSO
10255*	ib_qp_state_t, ib_av_attr_t, ib_apm_state_t
10256*****/
10257
10258/****d* Access Layer/ib_eec_opts_t
10259* NAME
10260*	ib_eec_opts_t
10261*
10262* DESCRIPTION
10263*	Optional fields supplied in the modify EEC operation.
10264*
10265* SYNOPSIS
10266*/
10267typedef uint32_t ib_eec_opts_t;
10268#define IB_MOD_EEC_ALTERNATE_AV			0x00000001
10269#define IB_MOD_EEC_PKEY				0x00000002
10270#define IB_MOD_EEC_APM_STATE			0x00000004
10271#define IB_MOD_EEC_PRIMARY_AV			0x00000008
10272#define IB_MOD_EEC_RNR				0x00000010
10273#define IB_MOD_EEC_RESP_RES			0x00000020
10274#define IB_MOD_EEC_OUTSTANDING			0x00000040
10275#define IB_MOD_EEC_PRIMARY_PORT			0x00000080
10276/*
10277* NOTES
10278*
10279*
10280*****/
10281
10282/****s* Access Layer/ib_eec_mod_t
10283* NAME
10284*	ib_eec_mod_t
10285*
10286* DESCRIPTION
10287*	Information needed to change the state of an end-to-end context through
10288*	the ib_modify_eec function.
10289*
10290* SYNOPSIS
10291*/
10292typedef struct _ib_eec_mod {
10293	ib_qp_state_t req_state;
10294	union _eec_state {
10295		struct _eec_init {
10296			uint8_t primary_port;
10297			uint16_t pkey_index;
10298		} init;
10299		struct _eec_rtr {
10300			ib_net32_t rq_psn;
10301			ib_net32_t remote_eecn;
10302			ib_av_attr_t primary_av;
10303			uint8_t resp_res;
10304			ib_eec_opts_t opts;
10305			ib_av_attr_t alternate_av;
10306			uint16_t pkey_index;
10307		} rtr;
10308		struct _eec_rts {
10309			ib_net32_t sq_psn;
10310			uint8_t retry_cnt;
10311			uint8_t rnr_retry_cnt;
10312			uint8_t local_ack_timeout;
10313			uint8_t init_depth;
10314			ib_eec_opts_t opts;
10315			ib_av_attr_t alternate_av;
10316			ib_apm_state_t apm_state;
10317			ib_av_attr_t primary_av;
10318			uint16_t pkey_index;
10319			uint8_t primary_port;
10320		} rts;
10321		struct _eec_sqd {
10322			boolean_t sqd_event;
10323		} sqd;
10324	} state;
10325} ib_eec_mod_t;
10326/*
10327* SEE ALSO
10328*	ib_qp_state_t, ib_av_attr_t, ib_apm_state_t
10329*****/
10330
10331/****d* Access Layer/ib_wr_type_t
10332* NAME
10333*	ib_wr_type_t
10334*
10335* DESCRIPTION
10336*	Identifies the type of work request posted to a queue pair.
10337*
10338* SYNOPSIS
10339*/
10340typedef enum _ib_wr_type_t {
10341	WR_SEND = 1,
10342	WR_RDMA_WRITE,
10343	WR_RDMA_READ,
10344	WR_COMPARE_SWAP,
10345	WR_FETCH_ADD
10346} ib_wr_type_t;
10347/*****/
10348
10349/****s* Access Layer/ib_local_ds_t
10350* NAME
10351*	ib_local_ds_t
10352*
10353* DESCRIPTION
10354*	Local data segment information referenced by send and receive work
10355*	requests.  This is used to specify local data buffers used as part of a
10356*	work request.
10357*
10358* SYNOPSIS
10359*/
10360typedef struct _ib_local_ds {
10361	void *vaddr;
10362	uint32_t length;
10363	uint32_t lkey;
10364} ib_local_ds_t;
10365/*****/
10366
10367/****d* Access Layer/ib_send_opt_t
10368* NAME
10369*	ib_send_opt_t
10370*
10371* DESCRIPTION
10372*	Optional flags used when posting send work requests.  These flags
10373*	indicate specific processing for the send operation.
10374*
10375* SYNOPSIS
10376*/
10377typedef uint32_t ib_send_opt_t;
10378#define IB_SEND_OPT_IMMEDIATE		0x00000001
10379#define IB_SEND_OPT_FENCE		0x00000002
10380#define IB_SEND_OPT_SIGNALED		0x00000004
10381#define IB_SEND_OPT_SOLICITED		0x00000008
10382#define IB_SEND_OPT_INLINE		0x00000010
10383#define IB_SEND_OPT_LOCAL		0x00000020
10384#define IB_SEND_OPT_VEND_MASK		0xFFFF0000
10385/*
10386* VALUES
10387*	The following flags determine the behavior of a work request when
10388*	posted to the send side.
10389*
10390*	IB_SEND_OPT_IMMEDIATE
10391*		Send immediate data with the given request.
10392*
10393*	IB_SEND_OPT_FENCE
10394*		The operation is fenced.  Complete all pending send operations
10395*		before processing this request.
10396*
10397*	IB_SEND_OPT_SIGNALED
10398*		If the queue pair is configured for signaled completion, then
10399*		generate a completion queue entry when this request completes.
10400*
10401*	IB_SEND_OPT_SOLICITED
10402*		Set the solicited bit on the last packet of this request.
10403*
10404*	IB_SEND_OPT_INLINE
10405*		Indicates that the requested send data should be copied into a VPD
10406*		owned data buffer.  This flag permits the user to issue send operations
10407*		without first needing to register the buffer(s) associated with the
10408*		send operation.  Verb providers that support this operation may place
10409*		vendor specific restrictions on the size of send operation that may
10410*		be performed as inline.
10411*
10412*
10413*  IB_SEND_OPT_LOCAL
10414*     Indicates that a sent MAD request should be given to the local VPD for
10415*     processing.  MADs sent using this option are not placed on the wire.
10416*     This send option is only valid for MAD send operations.
10417*
10418*
10419*	IB_SEND_OPT_VEND_MASK
10420*		This mask indicates bits reserved in the send options that may be used
10421*		by the verbs provider to indicate vendor specific options.  Bits set
10422*		in this area of the send options are ignored by the Access Layer, but
10423*		may have specific meaning to the underlying VPD.
10424*
10425*****/
10426
10427/****s* Access Layer/ib_send_wr_t
10428* NAME
10429*	ib_send_wr_t
10430*
10431* DESCRIPTION
10432*	Information used to submit a work request to the send queue of a queue
10433*	pair.
10434*
10435* SYNOPSIS
10436*/
10437typedef struct _ib_send_wr {
10438	struct _ib_send_wr *p_next;
10439	uint64_t wr_id;
10440	ib_wr_type_t wr_type;
10441	ib_send_opt_t send_opt;
10442	uint32_t num_ds;
10443	ib_local_ds_t *ds_array;
10444	ib_net32_t immediate_data;
10445	union _send_dgrm {
10446		struct _send_ud {
10447			ib_net32_t remote_qp;
10448			ib_net32_t remote_qkey;
10449			ib_av_handle_t h_av;
10450		} ud;
10451		struct _send_rd {
10452			ib_net32_t remote_qp;
10453			ib_net32_t remote_qkey;
10454			ib_net32_t eecn;
10455		} rd;
10456		struct _send_raw_ether {
10457			ib_net16_t dest_lid;
10458			uint8_t path_bits;
10459			uint8_t sl;
10460			uint8_t max_static_rate;
10461			ib_net16_t ether_type;
10462		} raw_ether;
10463		struct _send_raw_ipv6 {
10464			ib_net16_t dest_lid;
10465			uint8_t path_bits;
10466			uint8_t sl;
10467			uint8_t max_static_rate;
10468		} raw_ipv6;
10469	} dgrm;
10470	struct _send_remote_ops {
10471		uint64_t vaddr;
10472		uint32_t rkey;
10473		ib_net64_t atomic1;
10474		ib_net64_t atomic2;
10475	} remote_ops;
10476} ib_send_wr_t;
10477/*
10478* FIELDS
10479*	p_next
10480*		A pointer used to chain work requests together.  This permits multiple
10481*		work requests to be posted to a queue pair through a single function
10482*		call.  This value is set to NULL to mark the end of the chain.
10483*
10484*	wr_id
10485*		A 64-bit work request identifier that is returned to the consumer
10486*		as part of the work completion.
10487*
10488*	wr_type
10489*		The type of work request being submitted to the send queue.
10490*
10491*	send_opt
10492*		Optional send control parameters.
10493*
10494*	num_ds
10495*		Number of local data segments specified by this work request.
10496*
10497*	ds_array
10498*		A reference to an array of local data segments used by the send
10499*		operation.
10500*
10501*	immediate_data
10502*		32-bit field sent as part of a message send or RDMA write operation.
10503*		This field is only valid if the send_opt flag IB_SEND_OPT_IMMEDIATE
10504*		has been set.
10505*
10506*	dgrm.ud.remote_qp
10507*		Identifies the destination queue pair of an unreliable datagram send
10508*		operation.
10509*
10510*	dgrm.ud.remote_qkey
10511*		The qkey for the destination queue pair.
10512*
10513*	dgrm.ud.h_av
10514*		An address vector that specifies the path information used to route
10515*		the outbound datagram to the destination queue pair.
10516*
10517*	dgrm.rd.remote_qp
10518*		Identifies the destination queue pair of a reliable datagram send
10519*		operation.
10520*
10521*	dgrm.rd.remote_qkey
10522*		The qkey for the destination queue pair.
10523*
10524*	dgrm.rd.eecn
10525*		The local end-to-end context number to use with the reliable datagram
10526*		send operation.
10527*
10528*	dgrm.raw_ether.dest_lid
10529*		The destination LID that will receive this raw ether send.
10530*
10531*	dgrm.raw_ether.path_bits
10532*		path bits...
10533*
10534*	dgrm.raw_ether.sl
10535*		service level...
10536*
10537*	dgrm.raw_ether.max_static_rate
10538*		static rate...
10539*
10540*	dgrm.raw_ether.ether_type
10541*		ether type...
10542*
10543*	dgrm.raw_ipv6.dest_lid
10544*		The destination LID that will receive this raw ether send.
10545*
10546*	dgrm.raw_ipv6.path_bits
10547*		path bits...
10548*
10549*	dgrm.raw_ipv6.sl
10550*		service level...
10551*
10552*	dgrm.raw_ipv6.max_static_rate
10553*		static rate...
10554*
10555*	remote_ops.vaddr
10556*		The registered virtual memory address of the remote memory to access
10557*		with an RDMA or atomic operation.
10558*
10559*	remote_ops.rkey
10560*		The rkey associated with the specified remote vaddr. This data must
10561*		be presented exactly as obtained from the remote node. No swapping
10562*		of data must be performed.
10563*
10564*	atomic1
10565*		The first operand for an atomic operation.
10566*
10567*	atomic2
10568*		The second operand for an atomic operation.
10569*
10570* NOTES
10571*	The format of data sent over the fabric is user-defined and is considered
10572*	opaque to the access layer.  The sole exception to this are MADs posted
10573*	to a MAD QP service.  MADs are expected to match the format defined by
10574*	the Infiniband specification and must be in network-byte order when posted
10575*	to the MAD QP service.
10576*
10577* SEE ALSO
10578*	ib_wr_type_t, ib_local_ds_t, ib_send_opt_t
10579*****/
10580
10581/****s* Access Layer/ib_recv_wr_t
10582* NAME
10583*	ib_recv_wr_t
10584*
10585* DESCRIPTION
10586*	Information used to submit a work request to the receive queue of a queue
10587*	pair.
10588*
10589* SYNOPSIS
10590*/
10591typedef struct _ib_recv_wr {
10592	struct _ib_recv_wr *p_next;
10593	uint64_t wr_id;
10594	uint32_t num_ds;
10595	ib_local_ds_t *ds_array;
10596} ib_recv_wr_t;
10597/*
10598* FIELDS
10599*	p_next
10600*		A pointer used to chain work requests together.  This permits multiple
10601*		work requests to be posted to a queue pair through a single function
10602*		call.  This value is set to NULL to mark the end of the chain.
10603*
10604*	wr_id
10605*		A 64-bit work request identifier that is returned to the consumer
10606*		as part of the work completion.
10607*
10608*	num_ds
10609*		Number of local data segments specified by this work request.
10610*
10611*	ds_array
10612*		A reference to an array of local data segments used by the send
10613*		operation.
10614*
10615* SEE ALSO
10616*	ib_local_ds_t
10617*****/
10618
10619/****s* Access Layer/ib_bind_wr_t
10620* NAME
10621*	ib_bind_wr_t
10622*
10623* DESCRIPTION
10624*	Information used to submit a memory window bind work request to the send
10625*	queue of a queue pair.
10626*
10627* SYNOPSIS
10628*/
10629typedef struct _ib_bind_wr {
10630	uint64_t wr_id;
10631	ib_send_opt_t send_opt;
10632	ib_mr_handle_t h_mr;
10633	ib_access_t access_ctrl;
10634	uint32_t current_rkey;
10635	ib_local_ds_t local_ds;
10636} ib_bind_wr_t;
10637/*
10638* FIELDS
10639*	wr_id
10640*		A 64-bit work request identifier that is returned to the consumer
10641*		as part of the work completion.
10642*
10643*	send_opt
10644*		Optional send control parameters.
10645*
10646*	h_mr
10647*		Handle to the memory region to which this window is being bound.
10648*
10649*	access_ctrl
10650*		Access rights for this memory window.
10651*
10652*	current_rkey
10653*		The current rkey assigned to this window for remote access.
10654*
10655*	local_ds
10656*		A reference to a local data segment used by the bind operation.
10657*
10658* SEE ALSO
10659*	ib_send_opt_t, ib_access_t, ib_local_ds_t
10660*****/
10661
10662/****d* Access Layer/ib_wc_status_t
10663* NAME
10664*	ib_wc_status_t
10665*
10666* DESCRIPTION
10667*	Indicates the status of a completed work request.  These VALUES are
10668*	returned to the user when retrieving completions.  Note that success is
10669*	identified as IB_WCS_SUCCESS, which is always zero.
10670*
10671* SYNOPSIS
10672*/
10673typedef enum _ib_wc_status_t {
10674	IB_WCS_SUCCESS,
10675	IB_WCS_LOCAL_LEN_ERR,
10676	IB_WCS_LOCAL_OP_ERR,
10677	IB_WCS_LOCAL_EEC_OP_ERR,
10678	IB_WCS_LOCAL_PROTECTION_ERR,
10679	IB_WCS_WR_FLUSHED_ERR,
10680	IB_WCS_MEM_WINDOW_BIND_ERR,
10681	IB_WCS_REM_ACCESS_ERR,
10682	IB_WCS_REM_OP_ERR,
10683	IB_WCS_RNR_RETRY_ERR,
10684	IB_WCS_TIMEOUT_RETRY_ERR,
10685	IB_WCS_REM_INVALID_REQ_ERR,
10686	IB_WCS_REM_INVALID_RD_REQ_ERR,
10687	IB_WCS_INVALID_EECN,
10688	IB_WCS_INVALID_EEC_STATE,
10689	IB_WCS_UNMATCHED_RESPONSE,	/* InfiniBand Access Layer */
10690	IB_WCS_CANCELED,	/* InfiniBand Access Layer */
10691	IB_WCS_UNKNOWN		/* Must be last. */
10692} ib_wc_status_t;
10693/*
10694* VALUES
10695*	IB_WCS_SUCCESS
10696*		Work request completed successfully.
10697*
10698*	IB_WCS_MAD
10699*		The completed work request was associated with a managmenet datagram
10700*		that requires post processing.  The MAD will be returned to the user
10701*		through a callback once all post processing has completed.
10702*
10703*	IB_WCS_LOCAL_LEN_ERR
10704*		Generated for a work request posted to the send queue when the
10705*		total of the data segment lengths exceeds the message length of the
10706*		channel.  Generated for a work request posted to the receive queue when
10707*		the total of the data segment lengths is too small for a
10708*		valid incoming message.
10709*
10710*	IB_WCS_LOCAL_OP_ERR
10711*		An internal QP consistency error was generated while processing this
10712*		work request.  This may indicate that the QP was in an incorrect state
10713*		for the requested operation.
10714*
10715*	IB_WCS_LOCAL_EEC_OP_ERR
10716*		An internal EEC consistency error was generated while processing
10717*		this work request.  This may indicate that the EEC was in an incorrect
10718*		state for the requested operation.
10719*
10720*	IB_WCS_LOCAL_PROTECTION_ERR
10721*		The data segments of the locally posted work request did not refer to
10722*		a valid memory region.  The memory may not have been properly
10723*		registered for the requested operation.
10724*
10725*	IB_WCS_WR_FLUSHED_ERR
10726*		The work request was flushed from the QP before being completed.
10727*
10728*	IB_WCS_MEM_WINDOW_BIND_ERR
10729*		A memory window bind operation failed due to insufficient access
10730*		rights.
10731*
10732*	IB_WCS_REM_ACCESS_ERR,
10733*		A protection error was detected at the remote node for a RDMA or atomic
10734*		operation.
10735*
10736*	IB_WCS_REM_OP_ERR,
10737*		The operation could not be successfully completed at the remote node.
10738*		This may indicate that the remote QP was in an invalid state or
10739*		contained an invalid work request.
10740*
10741*	IB_WCS_RNR_RETRY_ERR,
10742*		The RNR retry count was exceeded while trying to send this message.
10743*
10744*	IB_WCS_TIMEOUT_RETRY_ERR
10745*		The local transport timeout counter expired while trying to send this
10746*		message.
10747*
10748*	IB_WCS_REM_INVALID_REQ_ERR,
10749*		The remote node detected an invalid message on the channel.  This error
10750*		is usually a result of one of the following:
10751*			- The operation was not supported on receive queue.
10752*			- There was insufficient buffers to receive a new RDMA request.
10753*			- There was insufficient buffers to receive a new atomic operation.
10754*			- An RDMA request was larger than 2^31 bytes.
10755*
10756*	IB_WCS_REM_INVALID_RD_REQ_ERR,
10757*		Responder detected an invalid RD message.  This may be the result of an
10758*		invalid qkey or an RDD mismatch.
10759*
10760*	IB_WCS_INVALID_EECN
10761*		An invalid EE context number was detected.
10762*
10763*	IB_WCS_INVALID_EEC_STATE
10764*		The EEC was in an invalid state for the specified request.
10765*
10766*	IB_WCS_UNMATCHED_RESPONSE
10767*		A response MAD was received for which there was no matching send.  The
10768*		send operation may have been canceled by the user or may have timed
10769*		out.
10770*
10771*	IB_WCS_CANCELED
10772*		The completed work request was canceled by the user.
10773*****/
10774
10775OSM_EXPORT const char *ib_wc_status_str[];
10776
10777/****f* IBA Base: Types/ib_get_wc_status_str
10778* NAME
10779*	ib_get_wc_status_str
10780*
10781* DESCRIPTION
10782*	Returns a string for the specified work completion status.
10783*
10784* SYNOPSIS
10785*/
10786static inline const char *OSM_API
10787ib_get_wc_status_str(IN ib_wc_status_t wc_status)
10788{
10789	if (wc_status > IB_WCS_UNKNOWN)
10790		wc_status = IB_WCS_UNKNOWN;
10791	return (ib_wc_status_str[wc_status]);
10792}
10793
10794/*
10795* PARAMETERS
10796*	wc_status
10797*		[in] work completion status value
10798*
10799* RETURN VALUES
10800*	Pointer to the work completion status description string.
10801*
10802* NOTES
10803*
10804* SEE ALSO
10805*********/
10806
10807/****d* Access Layer/ib_wc_type_t
10808* NAME
10809*	ib_wc_type_t
10810*
10811* DESCRIPTION
10812*	Indicates the type of work completion.
10813*
10814* SYNOPSIS
10815*/
10816typedef enum _ib_wc_type_t {
10817	IB_WC_SEND,
10818	IB_WC_RDMA_WRITE,
10819	IB_WC_RECV,
10820	IB_WC_RDMA_READ,
10821	IB_WC_MW_BIND,
10822	IB_WC_FETCH_ADD,
10823	IB_WC_COMPARE_SWAP,
10824	IB_WC_RECV_RDMA_WRITE
10825} ib_wc_type_t;
10826/*****/
10827
10828/****d* Access Layer/ib_recv_opt_t
10829* NAME
10830*	ib_recv_opt_t
10831*
10832* DESCRIPTION
10833*	Indicates optional fields valid in a receive work completion.
10834*
10835* SYNOPSIS
10836*/
10837typedef uint32_t ib_recv_opt_t;
10838#define	IB_RECV_OPT_IMMEDIATE		0x00000001
10839#define IB_RECV_OPT_FORWARD		0x00000002
10840#define IB_RECV_OPT_GRH_VALID		0x00000004
10841#define IB_RECV_OPT_VEND_MASK		0xFFFF0000
10842/*
10843* VALUES
10844*	IB_RECV_OPT_IMMEDIATE
10845*		Indicates that immediate data is valid for this work completion.
10846*
10847*	IB_RECV_OPT_FORWARD
10848*		Indicates that the received trap should be forwarded to the SM.
10849*
10850*	IB_RECV_OPT_GRH_VALID
10851*		Indicates presence of the global route header. When set, the
10852*		first 40 bytes received are the GRH.
10853*
10854*	IB_RECV_OPT_VEND_MASK
10855*		This mask indicates bits reserved in the receive options that may be
10856*		used by the verbs provider to indicate vendor specific options.  Bits
10857*		set in this area of the receive options are ignored by the Access Layer,
10858*		but may have specific meaning to the underlying VPD.
10859*****/
10860
10861/****s* Access Layer/ib_wc_t
10862* NAME
10863*	ib_wc_t
10864*
10865* DESCRIPTION
10866*	Work completion information.
10867*
10868* SYNOPSIS
10869*/
10870typedef struct _ib_wc {
10871	struct _ib_wc *p_next;
10872	uint64_t wr_id;
10873	ib_wc_type_t wc_type;
10874	uint32_t length;
10875	ib_wc_status_t status;
10876	uint64_t vendor_specific;
10877	union _wc_recv {
10878		struct _wc_conn {
10879			ib_recv_opt_t recv_opt;
10880			ib_net32_t immediate_data;
10881		} conn;
10882		struct _wc_ud {
10883			ib_recv_opt_t recv_opt;
10884			ib_net32_t immediate_data;
10885			ib_net32_t remote_qp;
10886			uint16_t pkey_index;
10887			ib_net16_t remote_lid;
10888			uint8_t remote_sl;
10889			uint8_t path_bits;
10890		} ud;
10891		struct _wc_rd {
10892			ib_net32_t remote_eecn;
10893			ib_net32_t remote_qp;
10894			ib_net16_t remote_lid;
10895			uint8_t remote_sl;
10896			uint32_t free_cnt;
10897
10898		} rd;
10899		struct _wc_raw_ipv6 {
10900			ib_net16_t remote_lid;
10901			uint8_t remote_sl;
10902			uint8_t path_bits;
10903		} raw_ipv6;
10904		struct _wc_raw_ether {
10905			ib_net16_t remote_lid;
10906			uint8_t remote_sl;
10907			uint8_t path_bits;
10908			ib_net16_t ether_type;
10909		} raw_ether;
10910	} recv;
10911} ib_wc_t;
10912/*
10913* FIELDS
10914*	p_next
10915*		A pointer used to chain work completions.  This permits multiple
10916*		work completions to be retrieved from a completion queue through a
10917*		single function call.  This value is set to NULL to mark the end of
10918*		the chain.
10919*
10920*	wr_id
10921*		The 64-bit work request identifier that was specified when posting the
10922*		work request.
10923*
10924*	wc_type
10925*		Indicates the type of work completion.
10926*
10927*
10928*	length
10929*		The total length of the data sent or received with the work request.
10930*
10931*	status
10932*		The result of the work request.
10933*
10934*	vendor_specific
10935*		HCA vendor specific information returned as part of the completion.
10936*
10937*	recv.conn.recv_opt
10938*		Indicates optional fields valid as part of a work request that
10939*		completed on a connected (reliable or unreliable) queue pair.
10940*
10941*	recv.conn.immediate_data
10942*		32-bit field received as part of an inbound message on a connected
10943*		queue pair.  This field is only valid if the recv_opt flag
10944*		IB_RECV_OPT_IMMEDIATE has been set.
10945*
10946*	recv.ud.recv_opt
10947*		Indicates optional fields valid as part of a work request that
10948*		completed on an unreliable datagram queue pair.
10949*
10950*	recv.ud.immediate_data
10951*		32-bit field received as part of an inbound message on a unreliable
10952*		datagram queue pair.  This field is only valid if the recv_opt flag
10953*		IB_RECV_OPT_IMMEDIATE has been set.
10954*
10955*	recv.ud.remote_qp
10956*		Identifies the source queue pair of a received datagram.
10957*
10958*	recv.ud.pkey_index
10959*		The pkey index for the source queue pair. This is valid only for
10960*		GSI type QP's.
10961*
10962*	recv.ud.remote_lid
10963*		The source LID of the received datagram.
10964*
10965*	recv.ud.remote_sl
10966*		The service level used by the source of the received datagram.
10967*
10968*	recv.ud.path_bits
10969*		path bits...
10970*
10971*	recv.rd.remote_eecn
10972*		The remote end-to-end context number that sent the received message.
10973*
10974*	recv.rd.remote_qp
10975*		Identifies the source queue pair of a received message.
10976*
10977*	recv.rd.remote_lid
10978*		The source LID of the received message.
10979*
10980*	recv.rd.remote_sl
10981*		The service level used by the source of the received message.
10982*
10983*	recv.rd.free_cnt
10984*		The number of available entries in the completion queue.  Reliable
10985*		datagrams may complete out of order, so this field may be used to
10986*		determine the number of additional completions that may occur.
10987*
10988*	recv.raw_ipv6.remote_lid
10989*		The source LID of the received message.
10990*
10991*	recv.raw_ipv6.remote_sl
10992*		The service level used by the source of the received message.
10993*
10994*	recv.raw_ipv6.path_bits
10995*		path bits...
10996*
10997*	recv.raw_ether.remote_lid
10998*		The source LID of the received message.
10999*
11000*	recv.raw_ether.remote_sl
11001*		The service level used by the source of the received message.
11002*
11003*	recv.raw_ether.path_bits
11004*		path bits...
11005*
11006*	recv.raw_ether.ether_type
11007*		ether type...
11008* NOTES
11009*	When the work request completes with error, the only values that the
11010*	consumer can depend on are the wr_id field, and the status of the
11011*	operation.
11012*
11013*	If the consumer is using the same CQ for completions from more than
11014*	one type of QP (i.e Reliable Connected, Datagram etc), then the consumer
11015*	must have additional information to decide what fields of the union are
11016*	valid.
11017* SEE ALSO
11018*	ib_wc_type_t, ib_qp_type_t, ib_wc_status_t, ib_recv_opt_t
11019*****/
11020
11021/****s* Access Layer/ib_mr_create_t
11022* NAME
11023*	ib_mr_create_t
11024*
11025* DESCRIPTION
11026*	Information required to create a registered memory region.
11027*
11028* SYNOPSIS
11029*/
11030typedef struct _ib_mr_create {
11031	void *vaddr;
11032	uint64_t length;
11033	ib_access_t access_ctrl;
11034} ib_mr_create_t;
11035/*
11036* FIELDS
11037*	vaddr
11038*		Starting virtual address of the region being registered.
11039*
11040*	length
11041*		Length of the buffer to register.
11042*
11043*	access_ctrl
11044*		Access rights of the registered region.
11045*
11046* SEE ALSO
11047*	ib_access_t
11048*****/
11049
11050/****s* Access Layer/ib_phys_create_t
11051* NAME
11052*	ib_phys_create_t
11053*
11054* DESCRIPTION
11055*	Information required to create a physical memory region.
11056*
11057* SYNOPSIS
11058*/
11059typedef struct _ib_phys_create {
11060	uint64_t length;
11061	uint32_t num_bufs;
11062	uint64_t *buf_array;
11063	uint32_t buf_offset;
11064	uint32_t page_size;
11065	ib_access_t access_ctrl;
11066} ib_phys_create_t;
11067/*
11068*	length
11069*		The length of the memory region in bytes.
11070*
11071*	num_bufs
11072*		Number of buffers listed in the specified buffer array.
11073*
11074*	buf_array
11075*		An array of physical buffers to be registered as a single memory
11076*		region.
11077*
11078*	buf_offset
11079*		The offset into the first physical page of the specified memory
11080*		region to start the virtual address.
11081*
11082*	page_size
11083*		The physical page size of the memory being registered.
11084*
11085*	access_ctrl
11086*		Access rights of the registered region.
11087*
11088* SEE ALSO
11089*	ib_access_t
11090*****/
11091
11092/****s* Access Layer/ib_mr_attr_t
11093* NAME
11094*	ib_mr_attr_t
11095*
11096* DESCRIPTION
11097*	Attributes of a registered memory region.
11098*
11099* SYNOPSIS
11100*/
11101typedef struct _ib_mr_attr {
11102	ib_pd_handle_t h_pd;
11103	void *local_lb;
11104	void *local_ub;
11105	void *remote_lb;
11106	void *remote_ub;
11107	ib_access_t access_ctrl;
11108	uint32_t lkey;
11109	uint32_t rkey;
11110} ib_mr_attr_t;
11111/*
11112* DESCRIPTION
11113*	h_pd
11114*		Handle to the protection domain for this memory region.
11115*
11116*	local_lb
11117*		The virtual address of the lower bound of protection for local
11118*		memory access.
11119*
11120*	local_ub
11121*		The virtual address of the upper bound of protection for local
11122*		memory access.
11123*
11124*	remote_lb
11125*		The virtual address of the lower bound of protection for remote
11126*		memory access.
11127*
11128*	remote_ub
11129*		The virtual address of the upper bound of protection for remote
11130*		memory access.
11131*
11132*	access_ctrl
11133*		Access rights for the specified memory region.
11134*
11135*	lkey
11136*		The lkey associated with this memory region.
11137*
11138*	rkey
11139*		The rkey associated with this memory region.
11140*
11141* NOTES
11142*	The remote_lb, remote_ub, and rkey are only valid if remote memory access
11143*	is enabled for this memory region.
11144*
11145* SEE ALSO
11146*	ib_access_t
11147*****/
11148
11149/****d* Access Layer/ib_ca_mod_t
11150* NAME
11151*	ib_ca_mod_t -- Modify port attributes and error counters
11152*
11153* DESCRIPTION
11154*	Specifies modifications to the port attributes of a channel adapter.
11155*
11156* SYNOPSIS
11157*/
11158typedef uint32_t ib_ca_mod_t;
11159#define IB_CA_MOD_IS_CM_SUPPORTED		0x00000001
11160#define IB_CA_MOD_IS_SNMP_SUPPORTED		0x00000002
11161#define	IB_CA_MOD_IS_DEV_MGMT_SUPPORTED		0x00000004
11162#define	IB_CA_MOD_IS_VEND_SUPPORTED		0x00000008
11163#define	IB_CA_MOD_IS_SM				0x00000010
11164#define IB_CA_MOD_IS_SM_DISABLED		0x00000020
11165#define IB_CA_MOD_QKEY_CTR			0x00000040
11166#define IB_CA_MOD_PKEY_CTR			0x00000080
11167#define IB_CA_MOD_IS_NOTICE_SUPPORTED		0x00000100
11168#define IB_CA_MOD_IS_TRAP_SUPPORTED		0x00000200
11169#define IB_CA_MOD_IS_APM_SUPPORTED		0x00000400
11170#define IB_CA_MOD_IS_SLMAP_SUPPORTED		0x00000800
11171#define IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED	0x00001000
11172#define IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED	0x00002000
11173#define IB_CA_MOD_IS_SYSGUID_SUPPORTED		0x00004000
11174#define IB_CA_MOD_IS_DR_NOTICE_SUPPORTED	0x00008000
11175#define IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED	0x00010000
11176#define IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED	0x00020000
11177#define IB_CA_MOD_IS_REINIT_SUPORTED		0x00040000
11178#define IB_CA_MOD_IS_LEDINFO_SUPPORTED		0x00080000
11179#define IB_CA_MOD_SHUTDOWN_PORT			0x00100000
11180#define IB_CA_MOD_INIT_TYPE_VALUE		0x00200000
11181#define IB_CA_MOD_SYSTEM_IMAGE_GUID		0x00400000
11182/*
11183* VALUES
11184*	IB_CA_MOD_IS_CM_SUPPORTED
11185*		Indicates if there is a communication manager accessible through
11186*		the port.
11187*
11188*	IB_CA_MOD_IS_SNMP_SUPPORTED
11189*		Indicates if there is an SNMP agent accessible through the port.
11190*
11191*	IB_CA_MOD_IS_DEV_MGMT_SUPPORTED
11192*		Indicates if there is a device management agent accessible
11193*		through the port.
11194*
11195*	IB_CA_MOD_IS_VEND_SUPPORTED
11196*		Indicates if there is a vendor supported agent accessible
11197*		through the port.
11198*
11199*	IB_CA_MOD_IS_SM
11200*		Indicates if there is a subnet manager accessible through
11201*		the port.
11202*
11203*	IB_CA_MOD_IS_SM_DISABLED
11204*		Indicates if the port has been disabled for configuration by the
11205*		subnet manager.
11206*
11207*	IB_CA_MOD_QKEY_CTR
11208*		Used to reset the qkey violation counter associated with the
11209*		port.
11210*
11211*	IB_CA_MOD_PKEY_CTR
11212*		Used to reset the pkey violation counter associated with the
11213*		port.
11214*
11215*	IB_CA_MOD_IS_NOTICE_SUPPORTED
11216*		Indicates that this CA supports ability to generate Notices for
11217*		Port State changes. (only applicable to switches)
11218*
11219*	IB_CA_MOD_IS_TRAP_SUPPORTED
11220*		Indicates that this management port supports ability to generate
11221*		trap messages. (only applicable to switches)
11222*
11223*	IB_CA_MOD_IS_APM_SUPPORTED
11224*		Indicates that this port is capable of performing Automatic
11225*		Path Migration.
11226*
11227*	IB_CA_MOD_IS_SLMAP_SUPPORTED
11228*		Indicates this port supports SLMAP capability.
11229*
11230*	IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED
11231*		Indicates that PKEY is supported in NVRAM
11232*
11233*	IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED
11234*		Indicates that MKEY is supported in NVRAM
11235*
11236*	IB_CA_MOD_IS_SYSGUID_SUPPORTED
11237*		Indicates System Image GUID support.
11238*
11239*	IB_CA_MOD_IS_DR_NOTICE_SUPPORTED
11240*		Indicate support for generating Direct Routed Notices
11241*
11242*	IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED
11243*		Indicates support for Boot Management
11244*
11245*	IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED
11246*		Indicates capability to generate notices for changes to CAPMASK
11247*
11248*	IB_CA_MOD_IS_REINIT_SUPORTED
11249*		Indicates type of node init supported. Refer to Chapter 14 for
11250*		Initialization actions.
11251*
11252*	IB_CA_MOD_IS_LEDINFO_SUPPORTED
11253*		Indicates support for LED info.
11254*
11255*	IB_CA_MOD_SHUTDOWN_PORT
11256*		Used to modify the port active indicator.
11257*
11258*	IB_CA_MOD_INIT_TYPE_VALUE
11259*		Used to modify the init_type value for the port.
11260*
11261*	IB_CA_MOD_SYSTEM_IMAGE_GUID
11262*		Used to modify the system image GUID for the port.
11263*****/
11264
11265/****d* Access Layer/ib_mr_mod_t
11266* NAME
11267*	ib_mr_mod_t
11268*
11269* DESCRIPTION
11270*	Mask used to specify which attributes of a registered memory region are
11271*	being modified.
11272*
11273* SYNOPSIS
11274*/
11275typedef uint32_t ib_mr_mod_t;
11276#define IB_MR_MOD_ADDR					0x00000001
11277#define IB_MR_MOD_PD					0x00000002
11278#define IB_MR_MOD_ACCESS				0x00000004
11279/*
11280* PARAMETERS
11281*	IB_MEM_MOD_ADDR
11282*		The address of the memory region is being modified.
11283*
11284*	IB_MEM_MOD_PD
11285*		The protection domain associated with the memory region is being
11286*		modified.
11287*
11288*	IB_MEM_MOD_ACCESS
11289*		The access rights the memory region are being modified.
11290*****/
11291
11292/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_HANDOVER
11293* NAME
11294*	IB_SMINFO_ATTR_MOD_HANDOVER
11295*
11296* DESCRIPTION
11297*	Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
11298*
11299* SOURCE
11300*/
11301#define IB_SMINFO_ATTR_MOD_HANDOVER		(CL_HTON32(0x000001))
11302/**********/
11303
11304/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_ACKNOWLEDGE
11305* NAME
11306*	IB_SMINFO_ATTR_MOD_ACKNOWLEDGE
11307*
11308* DESCRIPTION
11309*	Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
11310*
11311* SOURCE
11312*/
11313#define IB_SMINFO_ATTR_MOD_ACKNOWLEDGE		(CL_HTON32(0x000002))
11314/**********/
11315
11316/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISABLE
11317* NAME
11318*	IB_SMINFO_ATTR_MOD_DISABLE
11319*
11320* DESCRIPTION
11321*	Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
11322*
11323* SOURCE
11324*/
11325#define IB_SMINFO_ATTR_MOD_DISABLE			(CL_HTON32(0x000003))
11326/**********/
11327
11328/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_STANDBY
11329* NAME
11330*	IB_SMINFO_ATTR_MOD_STANDBY
11331*
11332* DESCRIPTION
11333*	Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
11334*
11335* SOURCE
11336*/
11337#define IB_SMINFO_ATTR_MOD_STANDBY			(CL_HTON32(0x000004))
11338/**********/
11339
11340/****d* IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISCOVER
11341* NAME
11342*	IB_SMINFO_ATTR_MOD_DISCOVER
11343*
11344* DESCRIPTION
11345*	Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.
11346*
11347* SOURCE
11348*/
11349#define IB_SMINFO_ATTR_MOD_DISCOVER			(CL_HTON32(0x000005))
11350/**********/
11351
11352/****s* Access Layer/ib_ci_op_t
11353* NAME
11354*	ib_ci_op_t
11355*
11356* DESCRIPTION
11357*	A structure used for vendor specific CA interface communication.
11358*
11359* SYNOPSIS
11360*/
11361typedef struct _ib_ci_op {
11362	IN uint32_t command;
11363	IN OUT void *p_buf OPTIONAL;
11364	IN uint32_t buf_size;
11365	IN OUT uint32_t num_bytes_ret;
11366	IN OUT int32_t status;
11367} ib_ci_op_t;
11368/*
11369* FIELDS
11370*	command
11371*		A command code that is understood by the verbs provider.
11372*
11373*	p_buf
11374*		A reference to a buffer containing vendor specific data.  The verbs
11375*		provider must not access pointers in the p_buf between user-mode and
11376*		kernel-mode.  Any pointers embedded in the p_buf are invalidated by
11377*		the user-mode/kernel-mode transition.
11378*
11379*	buf_size
11380*		The size of the buffer in bytes.
11381*
11382*	num_bytes_ret
11383*		The size in bytes of the vendor specific data returned in the buffer.
11384*		This field is set by the verbs provider.  The verbs provider should
11385*		verify that the buffer size is sufficient to hold the data being
11386*		returned.
11387*
11388*	status
11389*		The completion status from the verbs provider.  This field should be
11390*		initialize to indicate an error to allow detection and cleanup in
11391*		case a communication error occurs between user-mode and kernel-mode.
11392*
11393* NOTES
11394*	This structure is provided to allow the exchange of vendor specific
11395*	data between the originator and the verbs provider.  Users of this
11396*	structure are expected to know the format of data in the p_buf based
11397*	on the structure command field or the usage context.
11398*****/
11399
11400/****s* IBA Base: Types/ib_cc_mad_t
11401* NAME
11402*	ib_cc_mad_t
11403*
11404* DESCRIPTION
11405*	IBA defined Congestion Control MAD format. (A10.4.1)
11406*
11407* SYNOPSIS
11408*/
11409#define IB_CC_LOG_DATA_SIZE 32
11410#define IB_CC_MGT_DATA_SIZE 192
11411#define IB_CC_MAD_HDR_SIZE (sizeof(ib_sa_mad_t) - IB_CC_LOG_DATA_SIZE \
11412						- IB_CC_MGT_DATA_SIZE)
11413
11414#include <complib/cl_packon.h>
11415typedef struct _ib_cc_mad {
11416	ib_mad_t header;
11417	ib_net64_t cc_key;
11418	uint8_t log_data[IB_CC_LOG_DATA_SIZE];
11419	uint8_t mgt_data[IB_CC_MGT_DATA_SIZE];
11420} PACK_SUFFIX ib_cc_mad_t;
11421#include <complib/cl_packoff.h>
11422/*
11423* FIELDS
11424*	header
11425*		Common MAD header.
11426*
11427*	cc_key
11428*		CC_Key of the Congestion Control MAD.
11429*
11430*	log_data
11431*		Congestion Control log data of the CC MAD.
11432*
11433*	mgt_data
11434*		Congestion Control management data of the CC MAD.
11435*
11436* SEE ALSO
11437* ib_mad_t
11438*********/
11439
11440/****f* IBA Base: Types/ib_cc_mad_get_cc_key
11441* NAME
11442*	ib_cc_mad_get_cc_key
11443*
11444* DESCRIPTION
11445*	Gets a CC_Key of the CC MAD.
11446*
11447* SYNOPSIS
11448*/
11449static inline ib_net64_t OSM_API
11450ib_cc_mad_get_cc_key(IN const ib_cc_mad_t * const p_cc_mad)
11451{
11452	return p_cc_mad->cc_key;
11453}
11454/*
11455* PARAMETERS
11456*	p_cc_mad
11457*		[in] Pointer to the CC MAD packet.
11458*
11459* RETURN VALUES
11460*	CC_Key of the provided CC MAD packet.
11461*
11462* NOTES
11463*
11464* SEE ALSO
11465*	ib_cc_mad_t
11466*********/
11467
11468/****f* IBA Base: Types/ib_cc_mad_get_log_data_ptr
11469* NAME
11470*	ib_cc_mad_get_log_data_ptr
11471*
11472* DESCRIPTION
11473*	Gets a pointer to the CC MAD's log data area.
11474*
11475* SYNOPSIS
11476*/
11477static inline void * OSM_API
11478ib_cc_mad_get_log_data_ptr(IN const ib_cc_mad_t * const p_cc_mad)
11479{
11480	return ((void *)p_cc_mad->log_data);
11481}
11482/*
11483* PARAMETERS
11484*	p_cc_mad
11485*		[in] Pointer to the CC MAD packet.
11486*
11487* RETURN VALUES
11488*	Pointer to CC MAD log data area.
11489*
11490* NOTES
11491*
11492* SEE ALSO
11493*	ib_cc_mad_t
11494*********/
11495
11496/****f* IBA Base: Types/ib_cc_mad_get_mgt_data_ptr
11497* NAME
11498*	ib_cc_mad_get_mgt_data_ptr
11499*
11500* DESCRIPTION
11501*	Gets a pointer to the CC MAD's management data area.
11502*
11503* SYNOPSIS
11504*/
11505static inline void * OSM_API
11506ib_cc_mad_get_mgt_data_ptr(IN const ib_cc_mad_t * const p_cc_mad)
11507{
11508	return ((void *)p_cc_mad->mgt_data);
11509}
11510/*
11511* PARAMETERS
11512*	p_cc_mad
11513*		[in] Pointer to the CC MAD packet.
11514*
11515* RETURN VALUES
11516*	Pointer to CC MAD management data area.
11517*
11518* NOTES
11519*
11520* SEE ALSO
11521*	ib_cc_mad_t
11522*********/
11523
11524/****s* IBA Base: Types/ib_cong_info_t
11525* NAME
11526*	ib_cong_info_t
11527*
11528* DESCRIPTION
11529*	IBA defined CongestionInfo attribute (A10.4.3.3)
11530*
11531* SYNOPSIS
11532*/
11533#include <complib/cl_packon.h>
11534typedef struct _ib_cong_info {
11535	uint8_t cong_info;
11536	uint8_t resv;
11537	uint8_t ctrl_table_cap;
11538} PACK_SUFFIX ib_cong_info_t;
11539#include <complib/cl_packoff.h>
11540/*
11541* FIELDS
11542*	cong_info
11543*		Congestion control capabilities of the node.
11544*
11545*	ctrl_table_cap
11546*		Number of 64 entry blocks in the CongestionControlTable.
11547*
11548* SEE ALSO
11549*	ib_cc_mad_t
11550*********/
11551
11552/****s* IBA Base: Types/ib_cong_key_info_t
11553* NAME
11554*	ib_cong_key_info_t
11555*
11556* DESCRIPTION
11557*	IBA defined CongestionKeyInfo attribute (A10.4.3.4)
11558*
11559* SYNOPSIS
11560*/
11561#include <complib/cl_packon.h>
11562typedef struct _ib_cong_key_info {
11563	ib_net64_t cc_key;
11564	ib_net16_t protect_bit;
11565	ib_net16_t lease_period;
11566	ib_net16_t violations;
11567} PACK_SUFFIX ib_cong_key_info_t;
11568#include <complib/cl_packoff.h>
11569/*
11570* FIELDS
11571*	cc_key
11572*		8-byte CC Key.
11573*
11574*	protect_bit
11575*		Bit 0 is a CC Key Protect Bit, other 15 bits are reserved.
11576*
11577*	lease_period
11578*		How long the CC Key protect bit is to remain non-zero.
11579*
11580*	violations
11581*		Number of received MADs that violated CC Key.
11582*
11583* SEE ALSO
11584*	ib_cc_mad_t
11585*********/
11586
11587/****s* IBA Base: Types/ib_cong_log_event_sw_t
11588* NAME
11589*	ib_cong_log_event_sw_t
11590*
11591* DESCRIPTION
11592*	IBA defined CongestionLogEvent (SW) entry (A10.4.3.5)
11593*
11594* SYNOPSIS
11595*/
11596#include <complib/cl_packon.h>
11597typedef struct _ib_cong_log_event_sw {
11598	ib_net16_t slid;
11599	ib_net16_t dlid;
11600	ib_net32_t sl;
11601	ib_net32_t time_stamp;
11602} PACK_SUFFIX ib_cong_log_event_sw_t;
11603#include <complib/cl_packoff.h>
11604/*
11605* FIELDS
11606*	slid
11607*		Source LID of congestion event.
11608*
11609*	dlid
11610*		Destination LID of congestion event.
11611*
11612*	sl
11613*		4 bits - SL of congestion event.
11614*		rest of the bits are reserved.
11615*
11616*	time_stamp
11617*		Timestamp of congestion event.
11618*
11619* SEE ALSO
11620*	ib_cc_mad_t, ib_cong_log_t
11621*********/
11622
11623/****s* IBA Base: Types/ib_cong_log_event_ca_t
11624* NAME
11625*	ib_cong_log_event_ca_t
11626*
11627* DESCRIPTION
11628*	IBA defined CongestionLogEvent (CA) entry (A10.4.3.5)
11629*
11630* SYNOPSIS
11631*/
11632#include <complib/cl_packon.h>
11633typedef struct _ib_cong_log_event_ca {
11634	ib_net32_t local_qp_resv0;
11635	ib_net32_t remote_qp_sl_service_type;
11636	ib_net16_t remote_lid;
11637	ib_net16_t resv1;
11638	ib_net32_t time_stamp;
11639} PACK_SUFFIX ib_cong_log_event_ca_t;
11640#include <complib/cl_packoff.h>
11641/*
11642* FIELDS
11643*	resv0_local_qp
11644*		bits [31:8] local QP that reached CN threshold.
11645*		bits [7:0] reserved.
11646*
11647*	remote_qp_sl_service_type
11648*		bits [31:8] remote QP that is connected to local QP.
11649*		bits [7:4] SL of the local QP.
11650*		bits [3:0] Service Type of the local QP.
11651*
11652*	remote_lid
11653*		LID of the remote port that is connected to local QP.
11654*
11655*	time_stamp
11656*		Timestamp when threshold reached.
11657*
11658* SEE ALSO
11659*	ib_cc_mad_t, ib_cong_log_t
11660*********/
11661
11662/****s* IBA Base: Types/ib_cong_log_t
11663* NAME
11664*	ib_cong_log_t
11665*
11666* DESCRIPTION
11667*	IBA defined CongestionLog attribute (A10.4.3.5)
11668*
11669* SYNOPSIS
11670*/
11671#include <complib/cl_packon.h>
11672typedef struct _ib_cong_log {
11673	uint8_t log_type;
11674	union _log_details
11675	{
11676		struct _log_sw {
11677			uint8_t cong_flags;
11678			ib_net16_t event_counter;
11679			ib_net32_t time_stamp;
11680			uint8_t port_map[32];
11681			ib_cong_log_event_sw_t entry_list[15];
11682		} PACK_SUFFIX log_sw;
11683
11684		struct _log_ca {
11685			uint8_t cong_flags;
11686			ib_net16_t event_counter;
11687			ib_net16_t event_map;
11688			ib_net16_t resv;
11689			ib_net32_t time_stamp;
11690			ib_cong_log_event_ca_t log_event[13];
11691		} PACK_SUFFIX log_ca;
11692
11693	} log_details;
11694} PACK_SUFFIX ib_cong_log_t;
11695#include <complib/cl_packoff.h>
11696/*
11697* FIELDS
11698*
11699*	log_{sw,ca}.log_type
11700*		Log type: 0x1 is for Switch, 0x2 is for CA
11701*
11702*	log_{sw,ca}.cong_flags
11703*		Congestion Flags.
11704*
11705*	log_{sw,ca}.event_counter
11706*		Number of events since log last sent.
11707*
11708*	log_{sw,ca}.time_stamp
11709*		Timestamp when log sent.
11710*
11711*	log_sw.port_map
11712*		If a bit set to 1, then the corresponding port
11713*		has marked packets with a FECN.
11714*		bits 0 and 255 - reserved
11715*		bits [254..1] - ports [254..1].
11716*
11717*	log_sw.entry_list
11718*		Array of 13 most recent congestion log events.
11719*
11720*	log_ca.event_map
11721*		array 16 bits, one for each SL.
11722*
11723*	log_ca.log_event
11724*		Array of 13 most recent congestion log events.
11725*
11726* SEE ALSO
11727*	ib_cc_mad_t, ib_cong_log_event_sw_t, ib_cong_log_event_ca_t
11728*********/
11729
11730/****s* IBA Base: Types/ib_sw_cong_setting_t
11731* NAME
11732*	ib_sw_cong_setting_t
11733*
11734* DESCRIPTION
11735*	IBA defined SwitchCongestionSetting attribute (A10.4.3.6)
11736*
11737* SYNOPSIS
11738*/
11739#define IB_CC_PORT_MASK_DATA_SIZE 32
11740#include <complib/cl_packon.h>
11741typedef struct _ib_sw_cong_setting {
11742	ib_net32_t control_map;
11743	uint8_t victim_mask[IB_CC_PORT_MASK_DATA_SIZE];
11744	uint8_t credit_mask[IB_CC_PORT_MASK_DATA_SIZE];
11745	uint8_t threshold_resv;
11746	uint8_t packet_size;
11747	ib_net16_t cs_threshold_resv;
11748	ib_net16_t cs_return_delay;
11749	ib_net16_t marking_rate;
11750} PACK_SUFFIX ib_sw_cong_setting_t;
11751#include <complib/cl_packoff.h>
11752/*
11753* FIELDS
11754*
11755*	control_map
11756*		Indicates which components of this attribute are valid
11757*
11758*	victim_mask
11759*		If the bit set to 1, then the port corresponding to
11760*		that bit shall mark packets that encounter congestion
11761*		with a FECN, whether they are the source or victim
11762*		of congestion. (See A10.2.1.1.1)
11763*		  bit 0: port 0 (enhanced port 0 only)
11764*		  bits [254..1]: ports [254..1]
11765*		  bit 255: reserved
11766*
11767*	credit_mask
11768*		If the bit set to 1, then the port corresponding
11769*		to that bit shall apply Credit Starvation.
11770*		  bit 0: port 0 (enhanced port 0 only)
11771*		  bits [254..1]: ports [254..1]
11772*		  bit 255: reserved
11773*
11774*	threshold_resv
11775*		bits [7..4] Indicates how aggressive cong. marking should be
11776*		bits [3..0] Reserved
11777*
11778*	packet_size
11779*		Any packet less than this size won't be marked with FECN
11780*
11781*	cs_threshold_resv
11782*		bits [15..12] How aggressive Credit Starvation should be
11783*		bits [11..0] Reserved
11784*
11785*	cs_return_delay
11786*		Value that controls credit return rate.
11787*
11788*	marking_rate
11789*		The value that provides the mean number of packets
11790*		between marking eligible packets with FECN.
11791*
11792* SEE ALSO
11793*	ib_cc_mad_t
11794*********/
11795
11796/****s* IBA Base: Types/ib_sw_port_cong_setting_element_t
11797* NAME
11798*	ib_sw_port_cong_setting_element_t
11799*
11800* DESCRIPTION
11801*	IBA defined SwitchPortCongestionSettingElement (A10.4.3.7)
11802*
11803* SYNOPSIS
11804*/
11805#include <complib/cl_packon.h>
11806typedef struct _ib_sw_port_cong_setting_element {
11807	uint8_t valid_ctrl_type_res_threshold;
11808	uint8_t packet_size;
11809	ib_net16_t cong_param;
11810} PACK_SUFFIX ib_sw_port_cong_setting_element_t;
11811#include <complib/cl_packoff.h>
11812/*
11813* FIELDS
11814*
11815*	valid_ctrl_type_res_threshold
11816*		bit 7: "Valid"
11817*			when set to 1, indicates this switch
11818*			port congestion setting element is valid.
11819*		bit 6: "Control Type"
11820*			Indicates which type of attribute is being set:
11821*			0b = Congestion Control parameters are being set.
11822*			1b = Credit Starvation parameters are being set.
11823*		bits [5..4]: reserved
11824*		bits [3..0]: "Threshold"
11825*			When Control Type is 0, contains the congestion
11826*			threshold value (Threshold) for this port.
11827*			When Control Type is 1, contains the credit
11828*			starvation threshold (CS_Threshold) value for
11829*			this port.
11830*
11831*	packet_size
11832*		When Control Type is 0, this field contains the minimum
11833*		size of packets that may be marked with a FECN.
11834*		When Control Type is 1, this field is reserved.
11835*
11836*	cong_parm
11837*		When Control Type is 0, this field contains the port
11838*		marking_rate.
11839*		When Control Type is 1, this field is reserved.
11840*
11841* SEE ALSO
11842*	ib_cc_mad_t, ib_sw_port_cong_setting_t
11843*********/
11844
11845/****d* IBA Base: Types/ib_sw_port_cong_setting_block_t
11846* NAME
11847*	ib_sw_port_cong_setting_block_t
11848*
11849* DESCRIPTION
11850*	Defines the SwitchPortCongestionSetting Block (A10.4.3.7).
11851*
11852* SOURCE
11853*/
11854#define IB_CC_SW_PORT_SETTING_ELEMENTS 32
11855typedef ib_sw_port_cong_setting_element_t ib_sw_port_cong_setting_block_t[IB_CC_SW_PORT_SETTING_ELEMENTS];
11856/**********/
11857
11858/****s* IBA Base: Types/ib_sw_port_cong_setting_t
11859* NAME
11860*	ib_sw_port_cong_setting_t
11861*
11862* DESCRIPTION
11863*	IBA defined SwitchPortCongestionSetting attribute (A10.4.3.7)
11864*
11865* SYNOPSIS
11866*/
11867
11868#include <complib/cl_packon.h>
11869typedef struct _ib_sw_port_cong_setting {
11870	ib_sw_port_cong_setting_block_t block;
11871} PACK_SUFFIX ib_sw_port_cong_setting_t;
11872#include <complib/cl_packoff.h>
11873/*
11874* FIELDS
11875*
11876*	block
11877*		SwitchPortCongestionSetting block.
11878*
11879* SEE ALSO
11880*	ib_cc_mad_t, ib_sw_port_cong_setting_element_t
11881*********/
11882
11883/****s* IBA Base: Types/ib_ca_cong_entry_t
11884* NAME
11885*	ib_ca_cong_entry_t
11886*
11887* DESCRIPTION
11888*	IBA defined CACongestionEntry (A10.4.3.8)
11889*
11890* SYNOPSIS
11891*/
11892#include <complib/cl_packon.h>
11893typedef struct _ib_ca_cong_entry {
11894	ib_net16_t ccti_timer;
11895	uint8_t ccti_increase;
11896	uint8_t trigger_threshold;
11897	uint8_t ccti_min;
11898	uint8_t resv0;
11899	ib_net16_t resv1;
11900} PACK_SUFFIX ib_ca_cong_entry_t;
11901#include <complib/cl_packoff.h>
11902/*
11903* FIELDS
11904*
11905*	ccti_timer
11906*		When the timer expires it will be reset to its specified
11907*		value, and 1 will be decremented from the CCTI.
11908*
11909*	ccti_increase
11910*		The number to be added to the table Index (CCTI)
11911*		on the receipt of a BECN.
11912*
11913*	trigger_threshold
11914*		When the CCTI is equal to this value, an event
11915*		is logged in the CAs cyclic event log.
11916*
11917*	ccti_min
11918*		The minimum value permitted for the CCTI.
11919*
11920* SEE ALSO
11921*	ib_cc_mad_t
11922*********/
11923
11924/****s* IBA Base: Types/ib_ca_cong_setting_t
11925* NAME
11926*	ib_ca_cong_setting_t
11927*
11928* DESCRIPTION
11929*	IBA defined CACongestionSetting attribute (A10.4.3.8)
11930*
11931* SYNOPSIS
11932*/
11933#define IB_CA_CONG_ENTRY_DATA_SIZE 16
11934#include <complib/cl_packon.h>
11935typedef struct _ib_ca_cong_setting {
11936	ib_net16_t port_control;
11937	ib_net16_t control_map;
11938	ib_ca_cong_entry_t entry_list[IB_CA_CONG_ENTRY_DATA_SIZE];
11939} PACK_SUFFIX ib_ca_cong_setting_t;
11940#include <complib/cl_packoff.h>
11941/*
11942* FIELDS
11943*
11944*	port_control
11945*		Congestion attributes for this port:
11946*		  bit0 = 0: QP based CC
11947*		  bit0 = 1: SL/Port based CC
11948*		All other bits are reserved
11949*
11950*	control_map
11951*		An array of sixteen bits, one for each SL. Each bit indicates
11952*		whether or not the corresponding entry is to be modified.
11953*
11954*	entry_list
11955*		List of 16 CACongestionEntries, one per SL.
11956*
11957* SEE ALSO
11958*	ib_cc_mad_t
11959*********/
11960
11961/****s* IBA Base: Types/ib_cc_tbl_entry_t
11962* NAME
11963*	ib_cc_tbl_entry_t
11964*
11965* DESCRIPTION
11966*	IBA defined CongestionControlTableEntry (A10.4.3.9)
11967*
11968* SYNOPSIS
11969*/
11970#include <complib/cl_packon.h>
11971typedef struct _ib_cc_tbl_entry {
11972	ib_net16_t shift_multiplier;
11973} PACK_SUFFIX ib_cc_tbl_entry_t;
11974#include <complib/cl_packoff.h>
11975/*
11976* FIELDS
11977*
11978*	shift_multiplier
11979*		bits [15..14] - CCT Shift
11980*		  used when calculating the injection rate delay
11981*		bits [13..0] - CCT Multiplier
11982*		  used when calculating the injection rate delay
11983*
11984* SEE ALSO
11985*	ib_cc_mad_t
11986*********/
11987
11988/****s* IBA Base: Types/ib_cc_tbl_t
11989* NAME
11990*	ib_cc_tbl_t
11991*
11992* DESCRIPTION
11993*	IBA defined CongestionControlTable attribute (A10.4.3.9)
11994*
11995* SYNOPSIS
11996*/
11997#define IB_CC_TBL_ENTRY_LIST_MAX 64
11998#include <complib/cl_packon.h>
11999typedef struct _ib_cc_tbl {
12000	ib_net16_t ccti_limit;
12001	ib_net16_t resv;
12002	ib_cc_tbl_entry_t entry_list[IB_CC_TBL_ENTRY_LIST_MAX];
12003} PACK_SUFFIX ib_cc_tbl_t;
12004#include <complib/cl_packoff.h>
12005/*
12006* FIELDS
12007*
12008*	ccti_limit
12009*		Maximum valid CCTI for this table.
12010*
12011*	entry_list
12012*		List of up to 64 CongestionControlTableEntries.
12013*
12014* SEE ALSO
12015*	ib_cc_mad_t
12016*********/
12017
12018/****s* IBA Base: Types/ib_time_stamp_t
12019* NAME
12020*	ib_time_stamp_t
12021*
12022* DESCRIPTION
12023*	IBA defined TimeStamp attribute (A10.4.3.10)
12024*
12025* SOURCE
12026*/
12027#include <complib/cl_packon.h>
12028typedef struct _ib_time_stamp {
12029	ib_net32_t value;
12030} PACK_SUFFIX ib_time_stamp_t;
12031#include <complib/cl_packoff.h>
12032/*
12033* FIELDS
12034*
12035*	value
12036*		Free running clock that provides relative time info
12037*		for a device. Time is kept in 1.024 usec units.
12038*
12039* SEE ALSO
12040*	ib_cc_mad_t
12041*********/
12042
12043END_C_DECLS
12044#else				/* ndef __WIN__ */
12045#include <iba/ib_types_extended.h>
12046#endif
12047#endif				/* __IB_TYPES_H__ */
12048