xref: /onnv-gate/usr/src/uts/common/sys/ib/mgt/sa_recs.h (revision 0:68f95e015346)
1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate  * CDDL HEADER START
3*0Sstevel@tonic-gate  *
4*0Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*0Sstevel@tonic-gate  * with the License.
8*0Sstevel@tonic-gate  *
9*0Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate  * and limitations under the License.
13*0Sstevel@tonic-gate  *
14*0Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate  *
20*0Sstevel@tonic-gate  * CDDL HEADER END
21*0Sstevel@tonic-gate  */
22*0Sstevel@tonic-gate /*
23*0Sstevel@tonic-gate  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24*0Sstevel@tonic-gate  * Use is subject to license terms.
25*0Sstevel@tonic-gate  */
26*0Sstevel@tonic-gate 
27*0Sstevel@tonic-gate #ifndef	_SYS_IB_MGT_SA_RECS_H
28*0Sstevel@tonic-gate #define	_SYS_IB_MGT_SA_RECS_H
29*0Sstevel@tonic-gate 
30*0Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*0Sstevel@tonic-gate 
32*0Sstevel@tonic-gate /*
33*0Sstevel@tonic-gate  * This file contains the definitions of the SA-specific records in IB spec
34*0Sstevel@tonic-gate  * volume 1, release 1.1, chapter 15.
35*0Sstevel@tonic-gate  */
36*0Sstevel@tonic-gate 
37*0Sstevel@tonic-gate #ifdef	__cplusplus
38*0Sstevel@tonic-gate extern "C" {
39*0Sstevel@tonic-gate #endif
40*0Sstevel@tonic-gate 
41*0Sstevel@tonic-gate #include <sys/ib/ib_types.h>
42*0Sstevel@tonic-gate #include <sys/ib/mgt/sm_attr.h>
43*0Sstevel@tonic-gate 
44*0Sstevel@tonic-gate /* class header for SA MADs */
45*0Sstevel@tonic-gate typedef struct _ib_sa_hdr_t {
46*0Sstevel@tonic-gate 	uint64_t	SM_KEY;
47*0Sstevel@tonic-gate 	uint16_t	AttributeOffset;
48*0Sstevel@tonic-gate 	uint16_t	Reserved;
49*0Sstevel@tonic-gate 	uint64_t	ComponentMask;
50*0Sstevel@tonic-gate } ib_sa_hdr_t;
51*0Sstevel@tonic-gate 
52*0Sstevel@tonic-gate /* subnet administration methods */
53*0Sstevel@tonic-gate #define	SA_SUBN_ADM_GET			0x01
54*0Sstevel@tonic-gate #define	SA_SUBN_ADM_GET_RESP		0x81
55*0Sstevel@tonic-gate #define	SA_SUBN_ADM_SET			0x02
56*0Sstevel@tonic-gate #define	SA_SUBN_ADM_REPORT		0x06
57*0Sstevel@tonic-gate #define	SA_SUBN_ADM_REPORT_RESP		0x86
58*0Sstevel@tonic-gate #define	SA_SUBN_ADM_GET_TABLE		0x12
59*0Sstevel@tonic-gate #define	SA_SUBN_ADM_GET_TABLE_RESP	0x92
60*0Sstevel@tonic-gate #define	SA_SUBN_ADM_GET_TRACE_TABLE	0x13
61*0Sstevel@tonic-gate #define	SA_SUBN_ADM_GET_MULTI		0x14
62*0Sstevel@tonic-gate #define	SA_SUBN_ADM_GET_MULTI_RESP	0x94
63*0Sstevel@tonic-gate #define	SA_SUBN_ADM_DELETE		0x15
64*0Sstevel@tonic-gate #define	SA_SUBN_ADM_DELETE_RESP		0x95
65*0Sstevel@tonic-gate 
66*0Sstevel@tonic-gate /* sa MAD status field bit value */
67*0Sstevel@tonic-gate #define	SA_STATUS_NO_ERROR				0x0000
68*0Sstevel@tonic-gate #define	SA_STATUS_ERR_NO_RESOURCES			0x0100
69*0Sstevel@tonic-gate #define	SA_STATUS_ERR_REQ_INVALID			0x0200
70*0Sstevel@tonic-gate #define	SA_STATUS_ERR_NO_RECORDS			0x0300
71*0Sstevel@tonic-gate #define	SA_STATUS_ERR_TOO_MANY_RECORDS			0x0400
72*0Sstevel@tonic-gate #define	SA_STATUS_ERR_REQ_INVALID_GID			0x0500
73*0Sstevel@tonic-gate #define	SA_STATUS_ERR_REQ_INSUFFICIENT_COMPONENTS	0x0600
74*0Sstevel@tonic-gate #define	SA_STATUS_ERROR_MASK				0xFF00
75*0Sstevel@tonic-gate 
76*0Sstevel@tonic-gate 
77*0Sstevel@tonic-gate /* SA-Specific ClassPortinfo::CapabilityMask Bits: Table 152 */
78*0Sstevel@tonic-gate #define	SA_CAPMASK_OPT_RECORDS_SUPPORTED	0x100
79*0Sstevel@tonic-gate #define	SA_CAPMASK_UD_MCAST_SUPPORTED		0x200
80*0Sstevel@tonic-gate #define	SA_CAPMASK_MULTIPATH_SUPPORTED		0x400
81*0Sstevel@tonic-gate #define	SA_CAPMASK_REINIT_SUPPORTED		0x800
82*0Sstevel@tonic-gate 
83*0Sstevel@tonic-gate /* SA attribute IDs: Table 155 */
84*0Sstevel@tonic-gate #define	SA_CLASSPORTINFO_ATTRID		0x01
85*0Sstevel@tonic-gate #define	SA_NOTICE_ATTRID		0x02
86*0Sstevel@tonic-gate #define	SA_INFORMINFO_ATTRID		0x03
87*0Sstevel@tonic-gate #define	SA_NODERECORD_ATTRID		0x11
88*0Sstevel@tonic-gate #define	SA_PORTINFORECORD_ATTRID	0x12
89*0Sstevel@tonic-gate #define	SA_SLTOVLRECORD_ATTRID		0x13
90*0Sstevel@tonic-gate #define	SA_SWITCHINFORECORD_ATTRID	0x14
91*0Sstevel@tonic-gate #define	SA_LINEARFDBRECORD_ATTRID	0x15
92*0Sstevel@tonic-gate #define	SA_RANDOMFDBRECORD_ATTRID	0x16
93*0Sstevel@tonic-gate #define	SA_MULTICASTFDBRECORD_ATTRID	0x17
94*0Sstevel@tonic-gate #define	SA_SMINFORECORD_ATTRID		0x18
95*0Sstevel@tonic-gate #define	SA_INFORMINFORECORD_ATTRID	0xF3
96*0Sstevel@tonic-gate #define	SA_LINKRECORD_ATTRID		0x20
97*0Sstevel@tonic-gate #define	SA_GUIDINFORECORD_ATTRID	0x30
98*0Sstevel@tonic-gate #define	SA_SERVICERECORD_ATTRID		0x31
99*0Sstevel@tonic-gate #define	SA_PARTITIONRECORD_ATTRID	0x33
100*0Sstevel@tonic-gate #define	SA_PATHRECORD_ATTRID		0x35
101*0Sstevel@tonic-gate #define	SA_VLARBRECORD_ATTRID		0x36
102*0Sstevel@tonic-gate #define	SA_MCMEMBERRECORD_ATTRID	0x38
103*0Sstevel@tonic-gate #define	SA_TRACERECORD_ATTRID		0x39
104*0Sstevel@tonic-gate #define	SA_MULTIPATHRECORD_ATTRID	0x3A
105*0Sstevel@tonic-gate #define	SA_SERVICEASSNRECORD_ATTRID	0x3B
106*0Sstevel@tonic-gate 
107*0Sstevel@tonic-gate /* Node Record: Table 157 */
108*0Sstevel@tonic-gate typedef	struct sa_node_record_s {
109*0Sstevel@tonic-gate 	ib_lid_t	LID;			/* LID of a port of the node */
110*0Sstevel@tonic-gate 	uint16_t	Reserved;
111*0Sstevel@tonic-gate 	sm_nodeinfo_t	NodeInfo;		/* NodeInfo attr. contents */
112*0Sstevel@tonic-gate 	sm_nodedesc_t	NodeDescription;	/* NodeDesc attr. contents */
113*0Sstevel@tonic-gate } sa_node_record_t;
114*0Sstevel@tonic-gate 
115*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_NODELID		0x1
116*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_RESERVED		0x2
117*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_BASEVERSION	0x4
118*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_CLASSVERSION	0x8
119*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_NODETYPE		0x10
120*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_NUMPORTS		0x20
121*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_SYSIMAGEGUID	0x40
122*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_NODEGUID		0x80
123*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_PORTGUID		0x100
124*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_PARTITIONCAP	0x200
125*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_DEVICEID		0x400
126*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_REVISION		0x800
127*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_LOCALPORTNUM	0x1000
128*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_VENDORID		0x2000
129*0Sstevel@tonic-gate #define	SA_NODEINFO_COMPMASK_NODEDESCRIPTION	0x4000
130*0Sstevel@tonic-gate 
131*0Sstevel@tonic-gate /* Portinfo Record: Table 158 */
132*0Sstevel@tonic-gate typedef struct sa_portinfo_record_s {
133*0Sstevel@tonic-gate 	ib_lid_t	EndportLID;		/* LID of the port */
134*0Sstevel@tonic-gate 	uint8_t		PortNum;		/* port number (for switch) */
135*0Sstevel@tonic-gate 	uint8_t		Reserved;
136*0Sstevel@tonic-gate 	sm_portinfo_t	PortInfo;		/* PortInfo attr. contents */
137*0Sstevel@tonic-gate } sa_portinfo_record_t;
138*0Sstevel@tonic-gate 
139*0Sstevel@tonic-gate /* first 3 components are atomic */
140*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_PORTLID		0x1
141*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_PORTNUM		0x2
142*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_RESERVED		0x4
143*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_MKEY		0x8
144*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_GIDPREFIX		0x10
145*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LID		0x20
146*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_MASTERSMLID	0x40
147*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_CAPMASK		0x80
148*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_DIAGCODE		0x100
149*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_MKEYLEASE		0x200
150*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LOCALPORTNUM	0x400
151*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LINKWIDTHEN	0x800
152*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LINKWIDTHSUPP	0x1000
153*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LINKWIDTHACT	0x2000
154*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LINKSPEEDSUPP	0x4000
155*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_PORTSTATE		0x8000
156*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_PORTPHYSICALSTATE	0x10000
157*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LINKDOWNDEFSTATE	0x20000
158*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_MKEYPROTBITS	0x40000
159*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_RESERVED2		0x80000
160*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LMC		0x100000
161*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LINKSPEEDACT	0x200000
162*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LINKSPEEDEN	0x400000
163*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_NEIGHBORMTU	0x800000
164*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_MASTERSMSL		0x1000000
165*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_VLCAP		0x2000000
166*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_INITTYPE		0x4000000
167*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_VLHIGHLIMIT	0x8000000
168*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_VLARBHIGHCAP	0x10000000
169*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_VLARBLOWCAP	0x20000000
170*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_INITTYPEREPLY	0x40000000
171*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_MTUCAP		0x80000000
172*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_VLSTALLCOUNT	0x100000000
173*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_HOQLIFE		0x200000000
174*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_OPERATIONALVLS	0x400000000
175*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_PARTENFINBOUND	0x800000000
176*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_PARTENFOUTBOUND	0x1000000000
177*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_FILTERRAWPKTIN	0x2000000000
178*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_FILTERRAWPKTOUT	0x4000000000
179*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_MKEYVIOLATIONS	0x8000000000
180*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_PKEYVIOLATIONS	0x10000000000
181*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_QKEYVIOLATIONS	0x20000000000
182*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_GUIDCAP		0x40000000000
183*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_RESERVED5		0x80000000000
184*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_SUBNETTIMEOUT	0x100000000000
185*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_RESERVED6		0x200000000000
186*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_RESPTIMEVALUE	0x400000000000
187*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_LOCALPHYERRORS	0x800000000000
188*0Sstevel@tonic-gate #define	SA_PORTINFO_COMPMASK_OVERRUNERRORS	0x1000000000000
189*0Sstevel@tonic-gate 
190*0Sstevel@tonic-gate /* SLtoVL Mapping Table Record: Table 159 */
191*0Sstevel@tonic-gate typedef struct sa_SLtoVLmapping_record_s {
192*0Sstevel@tonic-gate 	ib_lid_t			LID;
193*0Sstevel@tonic-gate 	uint8_t				InputPortNum;
194*0Sstevel@tonic-gate 	uint8_t				OutputPortNum;
195*0Sstevel@tonic-gate 	uint32_t			Reserved;
196*0Sstevel@tonic-gate 	sm_SLtoVL_mapping_table_t	SLtoVLMappingTable;
197*0Sstevel@tonic-gate } sa_SLtoVLmapping_record_t;
198*0Sstevel@tonic-gate 
199*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_PORTLID		0x1
200*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_INPUTPORTNUM		0x2
201*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_OUTPUTPORTNUM	0x4
202*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_RESERVED		0x8
203*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL0TOVL		0x10
204*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL1TOVL		0x20
205*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL2TOVL		0x40
206*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL3TOVL		0x80
207*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL4TOVL		0x100
208*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL5TOVL		0x200
209*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL6TOVL		0x400
210*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL7TOVL		0x800
211*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL8TOVL		0x1000
212*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL9TOVL		0x2000
213*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL10TOVL		0x4000
214*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL11TOVL		0x8000
215*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL12TOVL		0x10000
216*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL13TOVL		0x20000
217*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL14TOVL		0x40000
218*0Sstevel@tonic-gate #define	SA_SLTOVL_COMPMASK_SL15TOVL		0x80000
219*0Sstevel@tonic-gate 
220*0Sstevel@tonic-gate /* Switchinfo Record: Table 160 */
221*0Sstevel@tonic-gate typedef struct sa_switchinfo_record_s {
222*0Sstevel@tonic-gate 	ib_lid_t	LID;			/* LID of switch port 0 */
223*0Sstevel@tonic-gate 	uint16_t	Reserved;
224*0Sstevel@tonic-gate 	sm_switchinfo_t	SwitchInfo;		/* SwitchInfo attr. contents */
225*0Sstevel@tonic-gate } sa_switchinfo_record_t;
226*0Sstevel@tonic-gate 
227*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_SWITCHLID		0x1
228*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_RESERVED			0x2
229*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_LINEARFDBCAP		0x4
230*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_RANDOMFDBCAP		0x8
231*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_MCASTFDBCAP		0x10
232*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_LINEARFDBTOP		0x20
233*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_DEFAULTPORT		0x40
234*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_DEFAULTMCASTPPORT	0x80
235*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_DEFAULTMCASTNPPORT 	0x100
236*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_LIFETIMEVALUE		0x200
237*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_PORTSTATECHANGE		0x400
238*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_RESERVED2		0x800
239*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_LIDSPERPORT		0x1000
240*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_PARTENFCAP		0x2000
241*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_INBOUNDENFCAP		0x4000
242*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_OUTBOUNDENFCAP		0x8000
243*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_FILTERRAWPKTINCAP	0x10000
244*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_FILTERRAWPKTOUTCAP	0x20000
245*0Sstevel@tonic-gate #define	SA_SWITCHINFO_COMPMASK_ENHANCED_PORT_0		0x40000
246*0Sstevel@tonic-gate 
247*0Sstevel@tonic-gate /* Linear Forwarding Table Record: Table 161 */
248*0Sstevel@tonic-gate typedef struct sa_linearft_record_s {
249*0Sstevel@tonic-gate 	ib_lid_t	LID;
250*0Sstevel@tonic-gate 	uint16_t	BlockNum;
251*0Sstevel@tonic-gate 	uint32_t	Reserved;
252*0Sstevel@tonic-gate 	sm_linear_forwarding_table_t	LinearFT;
253*0Sstevel@tonic-gate } sa_linearft_record_t;
254*0Sstevel@tonic-gate 
255*0Sstevel@tonic-gate #define	SA_LFT_COMPMASK_LFTLID			0x1
256*0Sstevel@tonic-gate #define	SA_LFT_COMPMASK_BLOCKNUM		0x2
257*0Sstevel@tonic-gate #define	SA_LFT_COMPMASK_RESERVED		0x4
258*0Sstevel@tonic-gate #define	SA_LFT_COMPMASK_LINEARFORWARDINGTABLE	0x8
259*0Sstevel@tonic-gate 
260*0Sstevel@tonic-gate /* Random Forwarding Table Record: Table 162 */
261*0Sstevel@tonic-gate typedef struct sa_randomft_record_s {
262*0Sstevel@tonic-gate 	ib_lid_t	LID;
263*0Sstevel@tonic-gate 	uint16_t	BlockNum;
264*0Sstevel@tonic-gate 	uint32_t	Reserved;
265*0Sstevel@tonic-gate 	sm_random_forwarding_table_t	RandomFT;
266*0Sstevel@tonic-gate } sa_randomft_record_t;
267*0Sstevel@tonic-gate 
268*0Sstevel@tonic-gate #define	SA_RFT_COMPMASK_RFTLID			0x1
269*0Sstevel@tonic-gate #define	SA_RFT_COMPMASK_BLOCKNUM		0x2
270*0Sstevel@tonic-gate #define	SA_RFT_COMPMASK_RESERVED		0x4
271*0Sstevel@tonic-gate #define	SA_RFT_COMPMASK_RANDOMFORWARDINGTABLE	0x8
272*0Sstevel@tonic-gate 
273*0Sstevel@tonic-gate /* Multicast Forwarding Table Record: Table 163 */
274*0Sstevel@tonic-gate 
275*0Sstevel@tonic-gate #if defined(_BIT_FIELDS_HTOL)
276*0Sstevel@tonic-gate typedef struct sa_multicastft_record_s {
277*0Sstevel@tonic-gate 	ib_lid_t	LID;
278*0Sstevel@tonic-gate 	uint16_t	Position	:4;	/* position field of attr */
279*0Sstevel@tonic-gate 	uint16_t	Reserved	:3;
280*0Sstevel@tonic-gate 	uint16_t	BlockNum	:9;
281*0Sstevel@tonic-gate 	uint32_t	Reserved2;
282*0Sstevel@tonic-gate 	sm_multicast_forwarding_table_t	MulticastFT;
283*0Sstevel@tonic-gate } sa_multicastft_record_t;
284*0Sstevel@tonic-gate 
285*0Sstevel@tonic-gate #elif defined(_BIT_FIELDS_LTOH)
286*0Sstevel@tonic-gate 
287*0Sstevel@tonic-gate typedef struct sa_multicastft_record_s {
288*0Sstevel@tonic-gate 	ib_lid_t	LID;
289*0Sstevel@tonic-gate 	uint16_t	BlockNum	:9;
290*0Sstevel@tonic-gate 	uint16_t	Reserved	:3;
291*0Sstevel@tonic-gate 	uint16_t	Position	:4;	/* position field of attr */
292*0Sstevel@tonic-gate 	uint32_t	Reserved2;
293*0Sstevel@tonic-gate 	sm_multicast_forwarding_table_t	MulticastFT;
294*0Sstevel@tonic-gate } sa_multicastft_record_t;
295*0Sstevel@tonic-gate 
296*0Sstevel@tonic-gate #else
297*0Sstevel@tonic-gate #error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
298*0Sstevel@tonic-gate #endif /* _BIT_FIELDS_HTOL */
299*0Sstevel@tonic-gate 
300*0Sstevel@tonic-gate #define	SA_MFT_COMPMASK_MFTLID				0x1
301*0Sstevel@tonic-gate #define	SA_MFT_COMPMASK_POSITION			0x2
302*0Sstevel@tonic-gate #define	SA_MFT_COMPMASK_RESERVED			0x4
303*0Sstevel@tonic-gate #define	SA_MFT_COMPMASK_BLOCKNUM			0x8
304*0Sstevel@tonic-gate #define	SA_MFT_COMPMASK_RESERVED2			0x10
305*0Sstevel@tonic-gate #define	SA_MFT_COMPMASK_MULTICASTFORWARDINGTABLE	0x20
306*0Sstevel@tonic-gate 
307*0Sstevel@tonic-gate /* VLArbitration Table Record: Table 164 */
308*0Sstevel@tonic-gate typedef struct sa_VLarb_table_record_s {
309*0Sstevel@tonic-gate 	ib_lid_t	LID;
310*0Sstevel@tonic-gate 	uint8_t		OutputPortNum;
311*0Sstevel@tonic-gate 	uint8_t		BlockNum;
312*0Sstevel@tonic-gate 	uint32_t	Reserved;
313*0Sstevel@tonic-gate 	sm_VLarb_table_t VLArbTable;
314*0Sstevel@tonic-gate } sa_VLarb_table_record_t;
315*0Sstevel@tonic-gate 
316*0Sstevel@tonic-gate #define	SA_VLARB_COMPMASK_NODELID		0x1
317*0Sstevel@tonic-gate #define	SA_VLARB_COMPMASK_OUTPUTPORTNUM		0x2
318*0Sstevel@tonic-gate #define	SA_VLARB_COMPMASK_BLOCKNUM		0x4
319*0Sstevel@tonic-gate #define	SA_VLARB_COMPMASK_RESERVED		0x8
320*0Sstevel@tonic-gate #define	SA_VLARB_COMPMASK_VLARBTABLE		0x10
321*0Sstevel@tonic-gate 
322*0Sstevel@tonic-gate /* SMInfo Record: Table 165 */
323*0Sstevel@tonic-gate typedef struct _sminfo_record_s {
324*0Sstevel@tonic-gate 	ib_lid_t	LID;
325*0Sstevel@tonic-gate 	uint16_t	Reserved;
326*0Sstevel@tonic-gate 	sm_sminfo_t	SMInfo;
327*0Sstevel@tonic-gate } sa_sminfo_record_t;
328*0Sstevel@tonic-gate 
329*0Sstevel@tonic-gate #define	SA_SMINFO_COMPMASK_NODELID		0x1
330*0Sstevel@tonic-gate #define	SA_SMINFO_COMPMASK_RESERVED		0x2
331*0Sstevel@tonic-gate #define	SA_SMINFO_COMPMASK_GUID			0x4
332*0Sstevel@tonic-gate #define	SA_SMINFO_COMPMASK_SMKEY		0x8
333*0Sstevel@tonic-gate #define	SA_SMINFO_COMPMASK_ACTCOUNT		0x10
334*0Sstevel@tonic-gate #define	SA_SMINFO_COMPMASK_PRIORITY		0x20
335*0Sstevel@tonic-gate #define	SA_SMINFO_COMPMASK_SMSTATE		0x40
336*0Sstevel@tonic-gate 
337*0Sstevel@tonic-gate /* P_Key Table Record: Table 166 */
338*0Sstevel@tonic-gate typedef struct sa_pkey_table_record_s {
339*0Sstevel@tonic-gate 	ib_lid_t	LID;
340*0Sstevel@tonic-gate 	uint16_t 	BlockNum;
341*0Sstevel@tonic-gate 	uint8_t		PortNum;
342*0Sstevel@tonic-gate 	uint8_t		Reserved[3];
343*0Sstevel@tonic-gate 	sm_pkey_table_t	P_KeyTable;
344*0Sstevel@tonic-gate } sa_pkey_table_record_t;
345*0Sstevel@tonic-gate 
346*0Sstevel@tonic-gate #define	SA_PKEY_COMPMASK_PORTLID		0x1
347*0Sstevel@tonic-gate #define	SA_PKEY_COMPMASK_BLOCKNUM		0x2
348*0Sstevel@tonic-gate #define	SA_PKEY_COMPMASK_PORTNUM 		0x4
349*0Sstevel@tonic-gate #define	SA_PKEY_COMPMASK_RESERVED		0x8
350*0Sstevel@tonic-gate #define	SA_PKEY_COMPMASK_PKEYTABLE		0x10
351*0Sstevel@tonic-gate 
352*0Sstevel@tonic-gate /* InformInfo Record: Table 167 */
353*0Sstevel@tonic-gate typedef struct sa_informinfo_record_s {
354*0Sstevel@tonic-gate 	ib_gid_t		SubscriberGID;
355*0Sstevel@tonic-gate 	uint16_t		Enum;
356*0Sstevel@tonic-gate 	uint8_t			Reserved[6];
357*0Sstevel@tonic-gate 	ib_mad_informinfo_t	InformInfo;
358*0Sstevel@tonic-gate } sa_informinfo_record_t;
359*0Sstevel@tonic-gate 
360*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_SUBGID		0x1
361*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_ENUM		0x2
362*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_RESERVED		0x4
363*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_GID		0x8
364*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_LIDRANGEBEGIN	0x10
365*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_LIDRANGEEND	0x20
366*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_RESERVED2	0x40
367*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_ISGENERIC	0x80
368*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_SUBSCRIBE	0x100
369*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_TYPE		0x200
370*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_TRAPNUM_DEVID	0x400
371*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_QPN		0x800
372*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_RESERVED3	0x1000
373*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_RESPTIMEVALUE	0x2000
374*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_RESERVED4	0x4000
375*0Sstevel@tonic-gate #define	SA_INFORMINFO_COMPMASK_PRODTYPE_VENDID	0x8000
376*0Sstevel@tonic-gate 
377*0Sstevel@tonic-gate /* Link Record: Table 168 */
378*0Sstevel@tonic-gate typedef struct sa_link_record_s {
379*0Sstevel@tonic-gate 	ib_lid_t	FromLID;
380*0Sstevel@tonic-gate 	uint8_t		FromPort;
381*0Sstevel@tonic-gate 	uint8_t		ToPort;
382*0Sstevel@tonic-gate 	ib_lid_t	ToLID;
383*0Sstevel@tonic-gate } sa_link_record_t;
384*0Sstevel@tonic-gate 
385*0Sstevel@tonic-gate #define	SA_LINKRECORD_COMPMASK_FROMLID		0x1
386*0Sstevel@tonic-gate #define	SA_LINKRECORD_COMPMASK_FROMPORT		0x2
387*0Sstevel@tonic-gate #define	SA_LINKRECORD_COMPMASK_TOPORT		0x4
388*0Sstevel@tonic-gate #define	SA_LINKRECORD_COMPMASK_TOLID		0x8
389*0Sstevel@tonic-gate 
390*0Sstevel@tonic-gate /* Service Record: Table 169 */
391*0Sstevel@tonic-gate typedef struct sa_service_record_s {
392*0Sstevel@tonic-gate 	uint64_t	ServiceID;		/* id of service on port */
393*0Sstevel@tonic-gate 	ib_gid_t	ServiceGID;		/* port GID for this service */
394*0Sstevel@tonic-gate 	uint16_t	ServiceP_Key;		/* p_key used to contact serv */
395*0Sstevel@tonic-gate 	uint16_t	Reserved;
396*0Sstevel@tonic-gate 	uint32_t	ServiceLease;		/* lease period remaining */
397*0Sstevel@tonic-gate 	uint64_t	ServiceKey_hi;		/* key value assoc. with serv */
398*0Sstevel@tonic-gate 	uint64_t	ServiceKey_lo;
399*0Sstevel@tonic-gate 	uint8_t		ServiceName[IB_SVC_NAME_LEN];
400*0Sstevel@tonic-gate 						/* UTF-8 encoded service name */
401*0Sstevel@tonic-gate 	uint8_t		ServiceData[IB_SVC_DATA_LEN];
402*0Sstevel@tonic-gate 						/* data for this service rec. */
403*0Sstevel@tonic-gate } sa_service_record_t;
404*0Sstevel@tonic-gate 
405*0Sstevel@tonic-gate #define	SA_SR_INDEFINITE_SERVICE_LEASE	0xFFFFFFFF
406*0Sstevel@tonic-gate 
407*0Sstevel@tonic-gate /*
408*0Sstevel@tonic-gate  * #defines mapping individual bits of the service record component mask
409*0Sstevel@tonic-gate  * to components in the service record.  ServiceData uses one component mask per
410*0Sstevel@tonic-gate  * bit.  See the IB spec for details.
411*0Sstevel@tonic-gate  */
412*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_ID		0x1
413*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_GID		0x2
414*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_PKEY		0x4
415*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_RESERVED		0x8
416*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_LEASE		0x10
417*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_KEY		0x20
418*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_NAME		0x40
419*0Sstevel@tonic-gate 
420*0Sstevel@tonic-gate /* masks all ServiceData fields */
421*0Sstevel@tonic-gate #define	SA_SR_COMPMASK_ALL_DATA		0x1FFFFFFF80
422*0Sstevel@tonic-gate 
423*0Sstevel@tonic-gate /* Service Association Record: Table 170 */
424*0Sstevel@tonic-gate typedef struct sa_service_assn_record_s {
425*0Sstevel@tonic-gate 	uint64_t	ServiceKey_hi;
426*0Sstevel@tonic-gate 	uint64_t	ServiceKey_lo;
427*0Sstevel@tonic-gate 	uint8_t		ServiceName[IB_SVC_NAME_LEN];
428*0Sstevel@tonic-gate } sa_service_assn_record_t;
429*0Sstevel@tonic-gate 
430*0Sstevel@tonic-gate #define	SA_SERVASSOC_COMPMASK_SERVICEKEY		0x1
431*0Sstevel@tonic-gate #define	SA_SERVASSOC_COMPMASK_SERVICENAME	0x2
432*0Sstevel@tonic-gate 
433*0Sstevel@tonic-gate /* Path Record: Table 171 */
434*0Sstevel@tonic-gate 
435*0Sstevel@tonic-gate #if defined(_BIT_FIELDS_HTOL)
436*0Sstevel@tonic-gate typedef struct sa_path_record_s {
437*0Sstevel@tonic-gate 	uint32_t	Reserved;
438*0Sstevel@tonic-gate 	uint32_t	Reserved2;
439*0Sstevel@tonic-gate 	ib_gid_t	DGID;			/* dest gid of path */
440*0Sstevel@tonic-gate 	ib_gid_t	SGID;			/* source gid of path */
441*0Sstevel@tonic-gate 	uint16_t	DLID;			/* dest lid */
442*0Sstevel@tonic-gate 	uint16_t	SLID;			/* source lid */
443*0Sstevel@tonic-gate 	uint32_t	RawTraffic	:1;	/* raw pkt path */
444*0Sstevel@tonic-gate 	uint32_t	Reserved3	:3;
445*0Sstevel@tonic-gate 	uint32_t	FlowLabel	:20;	/* flow label */
446*0Sstevel@tonic-gate 	uint32_t	HopLimit	:8;	/* hop limit */
447*0Sstevel@tonic-gate 	uint8_t		TClass;			/* TClass */
448*0Sstevel@tonic-gate 	uint8_t		Reversible	:1;	/* reversible path required */
449*0Sstevel@tonic-gate 	uint8_t		NumbPath	:7;	/* max num. of paths to ret. */
450*0Sstevel@tonic-gate 	uint16_t	P_Key;			/* partition key for path */
451*0Sstevel@tonic-gate 	uint16_t	Reserved4	:12;
452*0Sstevel@tonic-gate 	uint16_t	SL		:4;	/* service level for path */
453*0Sstevel@tonic-gate 	uint8_t		MtuSelector	:2;	/* MTU selector */
454*0Sstevel@tonic-gate 	uint8_t		Mtu		:6;	/* required MTU */
455*0Sstevel@tonic-gate 	uint8_t		RateSelector	:2;	/* rate selector */
456*0Sstevel@tonic-gate 	uint8_t		Rate		:6;	/* value of rate */
457*0Sstevel@tonic-gate 	uint8_t		PacketLifeTimeSelector:2; /* pkt life time selector */
458*0Sstevel@tonic-gate 	uint8_t		PacketLifeTime	:6;	/* total packet life time */
459*0Sstevel@tonic-gate 	uint8_t		Preference;		/* in response, order of pref */
460*0Sstevel@tonic-gate 						/* among all paths */
461*0Sstevel@tonic-gate 	uint8_t		Reserved5[6];
462*0Sstevel@tonic-gate } sa_path_record_t;
463*0Sstevel@tonic-gate 
464*0Sstevel@tonic-gate #elif defined(_BIT_FIELDS_LTOH)
465*0Sstevel@tonic-gate 
466*0Sstevel@tonic-gate typedef struct sa_path_record_s {
467*0Sstevel@tonic-gate 	uint32_t	Reserved;
468*0Sstevel@tonic-gate 	uint32_t	Reserved2;
469*0Sstevel@tonic-gate 	ib_gid_t	DGID;			/* dest gid of path */
470*0Sstevel@tonic-gate 	ib_gid_t	SGID;			/* source gid of path */
471*0Sstevel@tonic-gate 	uint16_t	DLID;			/* dest lid */
472*0Sstevel@tonic-gate 	uint16_t	SLID;			/* source lid */
473*0Sstevel@tonic-gate 	uint32_t	HopLimit	:8;	/* hop limit */
474*0Sstevel@tonic-gate 	uint32_t	FlowLabel	:20;	/* flow label */
475*0Sstevel@tonic-gate 	uint32_t	Reserved3	:3;
476*0Sstevel@tonic-gate 	uint32_t	RawTraffic	:1;	/* raw pkt path */
477*0Sstevel@tonic-gate 	uint8_t		TClass;			/* TClass */
478*0Sstevel@tonic-gate 	uint8_t		NumbPath	:7;	/* max num. of paths to ret. */
479*0Sstevel@tonic-gate 	uint8_t		Reversible	:1;	/* reversible path required */
480*0Sstevel@tonic-gate 	uint16_t	P_Key;			/* partition key for path */
481*0Sstevel@tonic-gate 	uint16_t	SL		:4;	/* service level for path */
482*0Sstevel@tonic-gate 	uint16_t	Reserved4	:12;
483*0Sstevel@tonic-gate 	uint8_t		Mtu		:6;	/* required MTU */
484*0Sstevel@tonic-gate 	uint8_t		MtuSelector	:2;	/* MTU selector */
485*0Sstevel@tonic-gate 	uint8_t		Rate		:6;	/* value of rate */
486*0Sstevel@tonic-gate 	uint8_t		RateSelector	:2;	/* rate selector */
487*0Sstevel@tonic-gate 	uint8_t		PacketLifeTime	:6;	/* total packet life time */
488*0Sstevel@tonic-gate 	uint8_t		PacketLifeTimeSelector:2; /* pkt life time selector */
489*0Sstevel@tonic-gate 	uint8_t		Preference;		/* in response, order of pref */
490*0Sstevel@tonic-gate 						/* among all paths */
491*0Sstevel@tonic-gate 	uint8_t		Reserved5[6];
492*0Sstevel@tonic-gate } sa_path_record_t;
493*0Sstevel@tonic-gate 
494*0Sstevel@tonic-gate #else
495*0Sstevel@tonic-gate #error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
496*0Sstevel@tonic-gate #endif /* _BIT_FIELDS_HTOL */
497*0Sstevel@tonic-gate 
498*0Sstevel@tonic-gate /*
499*0Sstevel@tonic-gate  * #defines mapping individual bits of the path record component mask
500*0Sstevel@tonic-gate  * to components in the path record
501*0Sstevel@tonic-gate  */
502*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_RESERVED		0x1
503*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_RESERVED2	0x2
504*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_DGID		0x4
505*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_SGID		0x8
506*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_DLID		0x10
507*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_SLID		0x20
508*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_RAWTRAFFIC	0x40
509*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_RESERVED3	0x80
510*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_FLOWLABEL	0x100
511*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_HOPLIMIT		0x200
512*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_TCLASS		0x400
513*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_REVERSIBLE	0x800
514*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_NUMBPATH		0x1000
515*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_PKEY		0x2000
516*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_RESERVED4	0x4000
517*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_SL		0x8000
518*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_MTUSELECTOR	0x10000
519*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_MTU		0x20000
520*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_RATESELECTOR	0x40000
521*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_RATE		0x80000
522*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_PKTLTSELECTOR	0x100000
523*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_PKTLT		0x200000
524*0Sstevel@tonic-gate #define	SA_PR_COMPMASK_PREFERENCE	0x400000
525*0Sstevel@tonic-gate 
526*0Sstevel@tonic-gate #define	SA_PR_RAWTRAFFIC_PKEY		0x1
527*0Sstevel@tonic-gate #define	SA_PR_RAWTRAFFIC_NO_PKEY 	0x0
528*0Sstevel@tonic-gate #define	SA_PR_MTU_SEL_GREATER		0x0
529*0Sstevel@tonic-gate #define	SA_PR_MTU_SEL_LESS		0x1
530*0Sstevel@tonic-gate #define	SA_PR_MTU_SEL_EXACTLY		0x2
531*0Sstevel@tonic-gate #define	SA_PR_MTU_SEL_LARGEST_AVAIL	0x3
532*0Sstevel@tonic-gate #define	SA_PR_MTU_256			0x1
533*0Sstevel@tonic-gate #define	SA_PR_MTU_512			0x2
534*0Sstevel@tonic-gate #define	SA_PR_MTU_1024			0x3
535*0Sstevel@tonic-gate #define	SA_PR_MTU_2048			0x4
536*0Sstevel@tonic-gate #define	SA_PR_MTU_4096			0x5
537*0Sstevel@tonic-gate #define	SA_PR_RATE_SEL_GREATER		0x0
538*0Sstevel@tonic-gate #define	SA_PR_RATE_SEL_LESS		0x1
539*0Sstevel@tonic-gate #define	SA_PR_RATE_SEL_EXACTLY		0x2
540*0Sstevel@tonic-gate #define	SA_PR_RATE_SEL_LARGEST_AVAIL	0x3
541*0Sstevel@tonic-gate #define	SA_PR_RATE_25			0x2
542*0Sstevel@tonic-gate #define	SA_PR_RATE_10			0x3
543*0Sstevel@tonic-gate #define	SA_PR_RATE_30			0x4
544*0Sstevel@tonic-gate #define	SA_PR_LT_SEL_GREATER		0x0
545*0Sstevel@tonic-gate #define	SA_PR_LT_SEL_LESS		0x1
546*0Sstevel@tonic-gate #define	SA_PR_LT_SEL_EXACTLY		0x2
547*0Sstevel@tonic-gate #define	SA_PR_LT_SEL_SMALLEST_AVAIL	0x3
548*0Sstevel@tonic-gate 
549*0Sstevel@tonic-gate /* MCMember Record: Table 176 */
550*0Sstevel@tonic-gate 
551*0Sstevel@tonic-gate #if defined(_BIT_FIELDS_HTOL)
552*0Sstevel@tonic-gate typedef struct sa_mcmember_record_s {
553*0Sstevel@tonic-gate 	ib_gid_t	MGID;
554*0Sstevel@tonic-gate 	ib_gid_t	PortGID;
555*0Sstevel@tonic-gate 	uint32_t	Q_Key;
556*0Sstevel@tonic-gate 	ib_lid_t	MLID;
557*0Sstevel@tonic-gate 	uint8_t		MTUSelector		:2;
558*0Sstevel@tonic-gate 	uint8_t		MTU			:6;
559*0Sstevel@tonic-gate 	uint8_t		TClass;
560*0Sstevel@tonic-gate 	uint16_t	P_Key;
561*0Sstevel@tonic-gate 	uint8_t		RateSelector		:2;
562*0Sstevel@tonic-gate 	uint8_t		Rate			:6;
563*0Sstevel@tonic-gate 	uint8_t		PacketLifeTimeSelector	:2;
564*0Sstevel@tonic-gate 	uint8_t		PacketLifeTime		:6;
565*0Sstevel@tonic-gate 	uint32_t	SL			:4;
566*0Sstevel@tonic-gate 	uint32_t	FlowLabel		:20;
567*0Sstevel@tonic-gate 	uint32_t	HopLimit		:8;
568*0Sstevel@tonic-gate 	uint32_t	Scope			:4;
569*0Sstevel@tonic-gate 	uint32_t	JoinState		:4;
570*0Sstevel@tonic-gate 	uint32_t	ProxyJoin		:1;
571*0Sstevel@tonic-gate 	uint32_t	Reserved		:23;
572*0Sstevel@tonic-gate } sa_mcmember_record_t;
573*0Sstevel@tonic-gate 
574*0Sstevel@tonic-gate #elif defined(_BIT_FIELDS_LTOH)
575*0Sstevel@tonic-gate 
576*0Sstevel@tonic-gate typedef struct sa_mcmember_record_s {
577*0Sstevel@tonic-gate 	ib_gid_t	MGID;
578*0Sstevel@tonic-gate 	ib_gid_t	PortGID;
579*0Sstevel@tonic-gate 	uint32_t	Q_Key;
580*0Sstevel@tonic-gate 	ib_lid_t	MLID;
581*0Sstevel@tonic-gate 	uint8_t		MTU			:6;
582*0Sstevel@tonic-gate 	uint8_t		MTUSelector		:2;
583*0Sstevel@tonic-gate 	uint8_t		TClass;
584*0Sstevel@tonic-gate 	uint16_t	P_Key;
585*0Sstevel@tonic-gate 	uint8_t		Rate			:6;
586*0Sstevel@tonic-gate 	uint8_t		RateSelector		:2;
587*0Sstevel@tonic-gate 	uint8_t		PacketLifeTime		:6;
588*0Sstevel@tonic-gate 	uint8_t		PacketLifeTimeSelector	:2;
589*0Sstevel@tonic-gate 	uint32_t	HopLimit		:8;
590*0Sstevel@tonic-gate 	uint32_t	FlowLabel		:20;
591*0Sstevel@tonic-gate 	uint32_t	SL			:4;
592*0Sstevel@tonic-gate 	uint32_t	Reserved		:23;
593*0Sstevel@tonic-gate 	uint32_t	ProxyJoin		:1;
594*0Sstevel@tonic-gate 	uint32_t	JoinState		:4;
595*0Sstevel@tonic-gate 	uint32_t	Scope			:4;
596*0Sstevel@tonic-gate } sa_mcmember_record_t;
597*0Sstevel@tonic-gate 
598*0Sstevel@tonic-gate #else
599*0Sstevel@tonic-gate #error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
600*0Sstevel@tonic-gate #endif /* _BIT_FIELDS_HTOL */
601*0Sstevel@tonic-gate 
602*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_MGID		0x1
603*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_PORTGID		0x2
604*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_QKEY		0x4
605*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_MLID		0x8
606*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_MTUSELECTOR	0x10
607*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_MTU		0x20
608*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_TCLASS		0x40
609*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_PKEY		0x80
610*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_RATESELECTOR	0x100
611*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_RATE		0x200
612*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_PKTLTSELECTOR	0x400
613*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_PKTLT		0x800
614*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_SL		0x1000
615*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_FLOWLABEL	0x2000
616*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_HOPLIMIT		0x4000
617*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_SCOPE		0x8000
618*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_JOINSTATE	0x10000
619*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_PROXYJOIN	0x20000
620*0Sstevel@tonic-gate #define	SA_MC_COMPMASK_RESERVED		0x40000
621*0Sstevel@tonic-gate 
622*0Sstevel@tonic-gate #define	SA_MC_MTU_SEL_GREATER		0x0
623*0Sstevel@tonic-gate #define	SA_MC_MTU_SEL_LESS		0x1
624*0Sstevel@tonic-gate #define	SA_MC_MTU_SEL_EXACTLY		0x2
625*0Sstevel@tonic-gate #define	SA_MC_MTU_SEL_LARGEST_AVAIL	0x3
626*0Sstevel@tonic-gate #define	SA_MC_MTU_256			0x1
627*0Sstevel@tonic-gate #define	SA_MC_MTU_512			0x2
628*0Sstevel@tonic-gate #define	SA_MC_MTU_1024			0x3
629*0Sstevel@tonic-gate #define	SA_MC_MTU_2048			0x4
630*0Sstevel@tonic-gate #define	SA_MC_MTU_4096			0x5
631*0Sstevel@tonic-gate #define	SA_MC_RATE_SEL_GREATER		0x0
632*0Sstevel@tonic-gate #define	SA_MC_RATE_SEL_LESS		0x1
633*0Sstevel@tonic-gate #define	SA_MC_RATE_SEL_EXACTLY		0x2
634*0Sstevel@tonic-gate #define	SA_MC_RATE_SEL_LARGEST_AVAIL	0x3
635*0Sstevel@tonic-gate #define	SA_MC_RATE_25			0x2
636*0Sstevel@tonic-gate #define	SA_MC_RATE_10			0x3
637*0Sstevel@tonic-gate #define	SA_MC_RATE_30			0x4
638*0Sstevel@tonic-gate #define	SA_MC_LT_SEL_GREATER		0x0
639*0Sstevel@tonic-gate #define	SA_MC_LT_SEL_LESS		0x1
640*0Sstevel@tonic-gate #define	SA_MC_LT_SEL_EXACTLY		0x2
641*0Sstevel@tonic-gate #define	SA_MC_LT_SMALLEST_AVAIL		0x3
642*0Sstevel@tonic-gate 
643*0Sstevel@tonic-gate /* GUIDInfo Record: Table 177 */
644*0Sstevel@tonic-gate typedef struct sa_guidinfo_record_s {
645*0Sstevel@tonic-gate 	ib_lid_t	LID;
646*0Sstevel@tonic-gate 	uint8_t		BlockNum;
647*0Sstevel@tonic-gate 	uint8_t		Reserved;
648*0Sstevel@tonic-gate 	uint32_t	Reserved2;
649*0Sstevel@tonic-gate 	sm_guidinfo_t	GUIDInfo;
650*0Sstevel@tonic-gate } sa_guidinfo_record_t;
651*0Sstevel@tonic-gate 
652*0Sstevel@tonic-gate #define	SA_GUIDINFO_COMPMASK_PORTLID	0x1
653*0Sstevel@tonic-gate #define	SA_GUIDINFO_COMPMASK_BLOCKNUM	0x2
654*0Sstevel@tonic-gate #define	SA_GUIDINFO_COMPMASK_RESERVED	0x4
655*0Sstevel@tonic-gate #define	SA_GUIDINFO_COMPMASK_RESERVEVD2	0x8
656*0Sstevel@tonic-gate #define	SA_GUIDINFO_COMPMASK_GUIDINFO	0x10
657*0Sstevel@tonic-gate 
658*0Sstevel@tonic-gate /* Trace Record: Table 178 */
659*0Sstevel@tonic-gate typedef struct sa_trace_record_s {
660*0Sstevel@tonic-gate 	ib_sn_prefix_t	GIDPrefix;
661*0Sstevel@tonic-gate 	uint16_t	IOCGeneration;
662*0Sstevel@tonic-gate 	uint8_t		Reserved;
663*0Sstevel@tonic-gate 	uint8_t		NodeType;
664*0Sstevel@tonic-gate 	uint64_t	NodeID;
665*0Sstevel@tonic-gate 	uint64_t	ChassisID;
666*0Sstevel@tonic-gate 	uint64_t	EntryPortID;
667*0Sstevel@tonic-gate 	uint64_t	ExitPortID;
668*0Sstevel@tonic-gate 	uint8_t		EntryPort;
669*0Sstevel@tonic-gate 	uint8_t		ExitPort;
670*0Sstevel@tonic-gate } sa_trace_record_t;
671*0Sstevel@tonic-gate 
672*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_GIDPREFIX	0x1
673*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_IOCGENERATION	0x2
674*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_RESERVED	0x4
675*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_NODETYPE	0x8
676*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_NODEID	0x10
677*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_CHASSISID	0x20
678*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_ENTRYPORTID	0x40
679*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_EXITPORTID	0x80
680*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_ENTRYPORT	0x100
681*0Sstevel@tonic-gate #define	SA_TRACE_COMPMASK_EXITPORT	0x200
682*0Sstevel@tonic-gate 
683*0Sstevel@tonic-gate /*
684*0Sstevel@tonic-gate  * MultiPath Record: Table 179
685*0Sstevel@tonic-gate  * This structure only includes the constant portion of the multipath record.
686*0Sstevel@tonic-gate  * The multipath record request will contain a variable number of SGIDs and
687*0Sstevel@tonic-gate  * DGIDs at the end of this structure, as specified in the SGIDCount and
688*0Sstevel@tonic-gate  * DGIDCount fields.
689*0Sstevel@tonic-gate  */
690*0Sstevel@tonic-gate 
691*0Sstevel@tonic-gate #if defined(_BIT_FIELDS_HTOL)
692*0Sstevel@tonic-gate typedef struct sa_mutipath_record_s {
693*0Sstevel@tonic-gate 	uint32_t	RawTraffic	:1;	/* raw pkt path */
694*0Sstevel@tonic-gate 	uint32_t	Reserved	:3;
695*0Sstevel@tonic-gate 	uint32_t	FlowLabel	:20;	/* flow label */
696*0Sstevel@tonic-gate 	uint32_t	HopLimit	:8;	/* hop limit */
697*0Sstevel@tonic-gate 	uint8_t		TClass;			/* TClass */
698*0Sstevel@tonic-gate 	uint8_t		Reversible	:1;	/* reversible path required */
699*0Sstevel@tonic-gate 	uint8_t		NumbPath	:7;	/* max num. of paths to ret. */
700*0Sstevel@tonic-gate 	uint16_t	P_Key;			/* partition key for path */
701*0Sstevel@tonic-gate 	uint16_t	Reserved2	:12;
702*0Sstevel@tonic-gate 	uint16_t	SL		:4;	/* service level for path */
703*0Sstevel@tonic-gate 	uint8_t		MtuSelector	:2;	/* MTU selector */
704*0Sstevel@tonic-gate 	uint8_t		Mtu		:6;	/* required MTU */
705*0Sstevel@tonic-gate 	uint8_t		RateSelector	:2;	/* rate selector */
706*0Sstevel@tonic-gate 	uint8_t		Rate		:6;	/* value of rate */
707*0Sstevel@tonic-gate 	uint8_t		PacketLifeTimeSelector:2; /* pkt life time selector */
708*0Sstevel@tonic-gate 	uint8_t		PacketLifeTime	:6;	/* total packet life time */
709*0Sstevel@tonic-gate 	uint8_t		Reserved3;
710*0Sstevel@tonic-gate 	uint8_t		IndependenceSelector:2;	/* fault-tolerant paths */
711*0Sstevel@tonic-gate 	uint8_t		Reserved4	:6;
712*0Sstevel@tonic-gate 	uint8_t		SGIDCount;		/* number of SGIDS */
713*0Sstevel@tonic-gate 	uint8_t		DGIDCount;		/* number of DGIDS */
714*0Sstevel@tonic-gate 	uint8_t		Reserved5[7];
715*0Sstevel@tonic-gate } sa_multipath_record_t;
716*0Sstevel@tonic-gate 
717*0Sstevel@tonic-gate #elif defined(_BIT_FIELDS_LTOH)
718*0Sstevel@tonic-gate 
719*0Sstevel@tonic-gate typedef struct sa_mutipath_record_s {
720*0Sstevel@tonic-gate 	uint32_t	HopLimit	:8;	/* hop limit */
721*0Sstevel@tonic-gate 	uint32_t	FlowLabel	:20;	/* flow label */
722*0Sstevel@tonic-gate 	uint32_t	Reserved	:3;
723*0Sstevel@tonic-gate 	uint32_t	RawTraffic	:1;	/* raw pkt path */
724*0Sstevel@tonic-gate 	uint8_t		TClass;			/* TClass */
725*0Sstevel@tonic-gate 	uint8_t		NumbPath	:7;	/* max num. of paths to ret. */
726*0Sstevel@tonic-gate 	uint8_t		Reversible	:1;	/* reversible path required */
727*0Sstevel@tonic-gate 	uint16_t	P_Key;			/* partition key for path */
728*0Sstevel@tonic-gate 	uint16_t	SL		:4;	/* service level for path */
729*0Sstevel@tonic-gate 	uint16_t	Reserved2	:12;
730*0Sstevel@tonic-gate 	uint8_t		Mtu		:6;	/* required MTU */
731*0Sstevel@tonic-gate 	uint8_t		MtuSelector	:2;	/* MTU selector */
732*0Sstevel@tonic-gate 	uint8_t		Rate		:6;	/* value of rate */
733*0Sstevel@tonic-gate 	uint8_t		RateSelector	:2;	/* rate selector */
734*0Sstevel@tonic-gate 	uint8_t		PacketLifeTime	:6;	/* total packet life time */
735*0Sstevel@tonic-gate 	uint8_t		PacketLifeTimeSelector:2; /* pkt life time selector */
736*0Sstevel@tonic-gate 	uint8_t		Reserved3;
737*0Sstevel@tonic-gate 	uint8_t		Reserved4	:6;
738*0Sstevel@tonic-gate 	uint8_t		IndependenceSelector:2;	/* fault-tolerant paths */
739*0Sstevel@tonic-gate 	uint8_t		SGIDCount;		/* number of SGIDS */
740*0Sstevel@tonic-gate 	uint8_t		DGIDCount;		/* number of DGIDS */
741*0Sstevel@tonic-gate 	uint8_t		Reserved5[7];
742*0Sstevel@tonic-gate } sa_multipath_record_t;
743*0Sstevel@tonic-gate 
744*0Sstevel@tonic-gate #else
745*0Sstevel@tonic-gate #error	One of _BIT_FIELDS_HTOL or _BIT_FIELDS_HTOL must be defined
746*0Sstevel@tonic-gate #endif /* _BIT_FIELDS_HTOL */
747*0Sstevel@tonic-gate 
748*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RAWTRAFFIC	0x1
749*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RESERVED	0x2
750*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_FLOWLABEL	0x4
751*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_HOPLIMIT	0x8
752*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_TCLASS		0x10
753*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_REVERSIBLE	0x20
754*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_NUMBPATH	0x40
755*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_PKEY		0x80
756*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RESERVED2	0x100
757*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_SL		0x200
758*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_MTUSELECTOR	0x400
759*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_MTU		0x800
760*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RATESELECTOR	0x1000
761*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RATE		0x2000
762*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_PKTLTSELECTOR	0x4000
763*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_PKTLT		0x8000
764*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RESERVED3	0x10000
765*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_INDEPSEL	0x20000
766*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RESERVED4	0x40000
767*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_SGIDCOUNT	0x80000
768*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_DGIDCOUNT	0x100000
769*0Sstevel@tonic-gate #define	SA_MPR_COMPMASK_RESERVED5	0x200000
770*0Sstevel@tonic-gate 
771*0Sstevel@tonic-gate #ifdef __cplusplus
772*0Sstevel@tonic-gate }
773*0Sstevel@tonic-gate #endif
774*0Sstevel@tonic-gate 
775*0Sstevel@tonic-gate #endif	/* _SYS_IB_MGT_SA_RECS_H */
776