xref: /onnv-gate/usr/src/uts/common/sys/ib/clients/eoib/fip.h (revision 13101:da7b13ec3a28)
1*13101SVenki.Rajagopalan@Sun.COM /*
2*13101SVenki.Rajagopalan@Sun.COM  * CDDL HEADER START
3*13101SVenki.Rajagopalan@Sun.COM  *
4*13101SVenki.Rajagopalan@Sun.COM  * The contents of this file are subject to the terms of the
5*13101SVenki.Rajagopalan@Sun.COM  * Common Development and Distribution License (the "License").
6*13101SVenki.Rajagopalan@Sun.COM  * You may not use this file except in compliance with the License.
7*13101SVenki.Rajagopalan@Sun.COM  *
8*13101SVenki.Rajagopalan@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*13101SVenki.Rajagopalan@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*13101SVenki.Rajagopalan@Sun.COM  * See the License for the specific language governing permissions
11*13101SVenki.Rajagopalan@Sun.COM  * and limitations under the License.
12*13101SVenki.Rajagopalan@Sun.COM  *
13*13101SVenki.Rajagopalan@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*13101SVenki.Rajagopalan@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*13101SVenki.Rajagopalan@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*13101SVenki.Rajagopalan@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*13101SVenki.Rajagopalan@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*13101SVenki.Rajagopalan@Sun.COM  *
19*13101SVenki.Rajagopalan@Sun.COM  * CDDL HEADER END
20*13101SVenki.Rajagopalan@Sun.COM  */
21*13101SVenki.Rajagopalan@Sun.COM 
22*13101SVenki.Rajagopalan@Sun.COM /*
23*13101SVenki.Rajagopalan@Sun.COM  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24*13101SVenki.Rajagopalan@Sun.COM  */
25*13101SVenki.Rajagopalan@Sun.COM 
26*13101SVenki.Rajagopalan@Sun.COM #ifndef _SYS_IB_EOIB_FIP_H
27*13101SVenki.Rajagopalan@Sun.COM #define	_SYS_IB_EOIB_FIP_H
28*13101SVenki.Rajagopalan@Sun.COM 
29*13101SVenki.Rajagopalan@Sun.COM #ifdef __cplusplus
30*13101SVenki.Rajagopalan@Sun.COM extern "C" {
31*13101SVenki.Rajagopalan@Sun.COM #endif
32*13101SVenki.Rajagopalan@Sun.COM 
33*13101SVenki.Rajagopalan@Sun.COM #include <sys/ethernet.h>
34*13101SVenki.Rajagopalan@Sun.COM #include <sys/ib/ib_types.h>
35*13101SVenki.Rajagopalan@Sun.COM 
36*13101SVenki.Rajagopalan@Sun.COM /*
37*13101SVenki.Rajagopalan@Sun.COM  * Sizes of various objects in FIP headers
38*13101SVenki.Rajagopalan@Sun.COM  */
39*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VENDOR_LEN			8
40*13101SVenki.Rajagopalan@Sun.COM #define	FIP_GUID_LEN			8
41*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SYSNAME_LEN			32
42*13101SVenki.Rajagopalan@Sun.COM #define	FIP_PORTNAME_LEN		8
43*13101SVenki.Rajagopalan@Sun.COM #define	FIP_MGID_PREFIX_LEN		5
44*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VNIC_NAME_LEN		16
45*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VHUBID_LEN			3
46*13101SVenki.Rajagopalan@Sun.COM 
47*13101SVenki.Rajagopalan@Sun.COM /*
48*13101SVenki.Rajagopalan@Sun.COM  * EoIB Pkeys and Qkeys
49*13101SVenki.Rajagopalan@Sun.COM  */
50*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ADMIN_PKEY			0xFFFF
51*13101SVenki.Rajagopalan@Sun.COM #define	EIB_FIP_QKEY			0x80020002
52*13101SVenki.Rajagopalan@Sun.COM #define	EIB_DATA_QKEY			0x80020003
53*13101SVenki.Rajagopalan@Sun.COM 
54*13101SVenki.Rajagopalan@Sun.COM /*
55*13101SVenki.Rajagopalan@Sun.COM  * EoIB Advertise and Solicit MCG GUIDs
56*13101SVenki.Rajagopalan@Sun.COM  */
57*13101SVenki.Rajagopalan@Sun.COM #define	EIB_GUID_ADVERTISE_PREFIX	0xFF12E01B00060000
58*13101SVenki.Rajagopalan@Sun.COM #define	EIB_GUID_SOLICIT_PREFIX		0xFF12E01B00070000
59*13101SVenki.Rajagopalan@Sun.COM 
60*13101SVenki.Rajagopalan@Sun.COM /*
61*13101SVenki.Rajagopalan@Sun.COM  * FIP_Protocol_Version
62*13101SVenki.Rajagopalan@Sun.COM  */
63*13101SVenki.Rajagopalan@Sun.COM #define	FIP_PROTO_VERSION		0
64*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_proto_s {
65*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		pr_version;
66*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		pr_reserved[3];
67*13101SVenki.Rajagopalan@Sun.COM } fip_proto_t;
68*13101SVenki.Rajagopalan@Sun.COM 
69*13101SVenki.Rajagopalan@Sun.COM /*
70*13101SVenki.Rajagopalan@Sun.COM  * Basic FIP Header: Opcodes and subcodes for EoIB
71*13101SVenki.Rajagopalan@Sun.COM  */
72*13101SVenki.Rajagopalan@Sun.COM #define	FIP_OPCODE_EOIB			0xFFF9
73*13101SVenki.Rajagopalan@Sun.COM 
74*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_H_SOLICIT		0x1
75*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_G_ADVERTISE		0x2
76*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_H_VNIC_LOGIN	0x3
77*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_G_VNIC_LOGIN_ACK	0x4
78*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_H_VNIC_LOGOUT	0x5
79*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_G_VHUB_UPDATE	0x6
80*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_G_VHUB_TABLE	0x7
81*13101SVenki.Rajagopalan@Sun.COM #define	FIP_SUBCODE_H_KEEP_ALIVE	0x8
82*13101SVenki.Rajagopalan@Sun.COM 
83*13101SVenki.Rajagopalan@Sun.COM /*
84*13101SVenki.Rajagopalan@Sun.COM  * Basic FIP Header: Flags relevant to EoIB
85*13101SVenki.Rajagopalan@Sun.COM  */
86*13101SVenki.Rajagopalan@Sun.COM #define	FIP_BHFLAG_GWAVAIL		0x4
87*13101SVenki.Rajagopalan@Sun.COM #define	FIP_BHFLAG_SLCTMSG		0x2
88*13101SVenki.Rajagopalan@Sun.COM 
89*13101SVenki.Rajagopalan@Sun.COM /*
90*13101SVenki.Rajagopalan@Sun.COM  * FIP_Basic_Header
91*13101SVenki.Rajagopalan@Sun.COM  */
92*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_VENDOR_ID		13
93*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_VENDOR_ID		3
94*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_basic_hdr_s {
95*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	hd_opcode;
96*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		hd_reserved1;
97*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		hd_subcode;
98*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	hd_desc_list_len;
99*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	hd_flags;
100*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		hd_type;
101*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		hd_len;
102*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		hd_reserved2[2];
103*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		hd_vendor_id[FIP_VENDOR_LEN];
104*13101SVenki.Rajagopalan@Sun.COM } fip_basic_hdr_t;
105*13101SVenki.Rajagopalan@Sun.COM 
106*13101SVenki.Rajagopalan@Sun.COM #define	FIP_IBA_QPN_MASK		0x00FFFFFF
107*13101SVenki.Rajagopalan@Sun.COM #define	FIP_IBA_PORTID_MASK		0x0FFF
108*13101SVenki.Rajagopalan@Sun.COM #define	FIP_IBA_SL_MASK			0xF000
109*13101SVenki.Rajagopalan@Sun.COM #define	FIP_IBA_SL_SHIFT		12
110*13101SVenki.Rajagopalan@Sun.COM 
111*13101SVenki.Rajagopalan@Sun.COM /*
112*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_Infiniband_Address
113*13101SVenki.Rajagopalan@Sun.COM  */
114*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_IBA		240
115*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_IBA		7
116*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_iba_s {
117*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ia_type;
118*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ia_len;
119*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ia_reserved[2];
120*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ia_vendor_id[FIP_VENDOR_LEN];
121*13101SVenki.Rajagopalan@Sun.COM 	uint32_t	ia_qpn;
122*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	ia_sl_portid;
123*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	ia_lid;
124*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ia_guid[FIP_GUID_LEN];
125*13101SVenki.Rajagopalan@Sun.COM } fip_desc_iba_t;
126*13101SVenki.Rajagopalan@Sun.COM 
127*13101SVenki.Rajagopalan@Sun.COM /*
128*13101SVenki.Rajagopalan@Sun.COM  * FIP Solicitation Control Message:
129*13101SVenki.Rajagopalan@Sun.COM  *
130*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Protocol_Version
131*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Basic_Header
132*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_Infiniband_Address
133*13101SVenki.Rajagopalan@Sun.COM  */
134*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_solicit_s {
135*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t	sl_proto_version;
136*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t	sl_fip_hdr;
137*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_iba_t	sl_iba;
138*13101SVenki.Rajagopalan@Sun.COM } fip_solicit_t;
139*13101SVenki.Rajagopalan@Sun.COM 
140*13101SVenki.Rajagopalan@Sun.COM /*
141*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_EoIB_Gateway_Information
142*13101SVenki.Rajagopalan@Sun.COM  */
143*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_EOIB_GW_INFO	241
144*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_EOIB_GW_INFO	4
145*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_gwinfo_s {
146*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_type;
147*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_len;
148*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_reserved1[2];
149*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_vendor_id[FIP_VENDOR_LEN];
150*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_flags;
151*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_reserved2;
152*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	gi_rss_qpn_num_net_vnics;
153*13101SVenki.Rajagopalan@Sun.COM } fip_desc_gwinfo_t;
154*13101SVenki.Rajagopalan@Sun.COM 
155*13101SVenki.Rajagopalan@Sun.COM #define	FIP_GWI_HOST_ADMIND_VNICS_MASK	0x80
156*13101SVenki.Rajagopalan@Sun.COM #define	FIP_GWI_NUM_NET_VNICS_MASK	0x0FFF
157*13101SVenki.Rajagopalan@Sun.COM #define	FIP_GWI_RSS_QPN_MASK		0xF000
158*13101SVenki.Rajagopalan@Sun.COM #define	FIP_GWI_RSS_QPN_SHIFT		12
159*13101SVenki.Rajagopalan@Sun.COM 
160*13101SVenki.Rajagopalan@Sun.COM /*
161*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_Gateway_Identifier
162*13101SVenki.Rajagopalan@Sun.COM  */
163*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_GW_ID		248
164*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_GW_ID		15
165*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_gwid_s {
166*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		id_type;
167*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		id_len;
168*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		id_reserved[2];
169*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		id_vendor_id[FIP_VENDOR_LEN];
170*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		id_guid[FIP_GUID_LEN];
171*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		id_sysname[FIP_SYSNAME_LEN];
172*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		id_portname[FIP_PORTNAME_LEN];
173*13101SVenki.Rajagopalan@Sun.COM } fip_desc_gwid_t;
174*13101SVenki.Rajagopalan@Sun.COM 
175*13101SVenki.Rajagopalan@Sun.COM /*
176*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_Keep_Alive_Parameters
177*13101SVenki.Rajagopalan@Sun.COM  */
178*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_KEEP_ALIVE	249
179*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_KEEP_ALIVE		6
180*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_keepalive_s {
181*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ka_type;
182*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ka_len;
183*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ka_reserved[2];
184*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		ka_vendor_id[FIP_VENDOR_LEN];
185*13101SVenki.Rajagopalan@Sun.COM 	uint32_t	ka_gw_adv_period;
186*13101SVenki.Rajagopalan@Sun.COM 	uint32_t	ka_gw_ka_period;
187*13101SVenki.Rajagopalan@Sun.COM 	uint32_t	ka_vnic_ka_period;
188*13101SVenki.Rajagopalan@Sun.COM } fip_desc_keepalive_t;
189*13101SVenki.Rajagopalan@Sun.COM 
190*13101SVenki.Rajagopalan@Sun.COM /*
191*13101SVenki.Rajagopalan@Sun.COM  * FIP Advertise Control Message:
192*13101SVenki.Rajagopalan@Sun.COM  *
193*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Protocol_Version
194*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Basic_Header
195*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_Infiniband_Address
196*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_EoIB_Gateway_Information
197*13101SVenki.Rajagopalan@Sun.COM  *	FIP_Descriptor_Gateway_Identifier
198*13101SVenki.Rajagopalan@Sun.COM  *	FIP_Descriptor_Keep_Alive_Parameters
199*13101SVenki.Rajagopalan@Sun.COM  */
200*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_advertise_s {
201*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t		ad_proto_version;
202*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t		ad_fip_header;
203*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_iba_t		ad_iba;
204*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_gwinfo_t	ad_gwinfo;
205*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_gwid_t		ad_gwid;
206*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_keepalive_t	ad_keep_alive;
207*13101SVenki.Rajagopalan@Sun.COM } fip_advertise_t;
208*13101SVenki.Rajagopalan@Sun.COM 
209*13101SVenki.Rajagopalan@Sun.COM /*
210*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_vNIC_Login
211*13101SVenki.Rajagopalan@Sun.COM  */
212*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_VNIC_LOGIN	242
213*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_VNIC_LOGIN		13
214*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_vnic_login_s {
215*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_type;
216*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_len;
217*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_reserved1[2];
218*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_vendor_id[FIP_VENDOR_LEN];
219*13101SVenki.Rajagopalan@Sun.COM 	uint16_t		vl_mtu;
220*13101SVenki.Rajagopalan@Sun.COM 	uint16_t		vl_vnic_id;
221*13101SVenki.Rajagopalan@Sun.COM 	uint16_t		vl_flags_vlan;
222*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_mac[ETHERADDRL];
223*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_gw_mgid_prefix[FIP_MGID_PREFIX_LEN];
224*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_reserved2;
225*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_flags_rss;
226*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_n_mac_mcgid;
227*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		vl_syndrome_ctl_qpn;
228*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vl_vnic_name[FIP_VNIC_NAME_LEN];
229*13101SVenki.Rajagopalan@Sun.COM } fip_desc_vnic_login_t;
230*13101SVenki.Rajagopalan@Sun.COM 
231*13101SVenki.Rajagopalan@Sun.COM /*
232*13101SVenki.Rajagopalan@Sun.COM  * Flags, masks and error codes for FIP_Descriptor_vNIC_Login
233*13101SVenki.Rajagopalan@Sun.COM  */
234*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_VNIC_ID_MSBIT		0x8000
235*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_FLAGS_V			0x8000
236*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_FLAGS_M			0x4000
237*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_FLAGS_VP			0x2000
238*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_FLAGS_H			0x1000
239*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_VLAN_MASK		0x0FFF
240*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_RSS_MASK			0x10
241*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_N_RSS_MCGID_MASK		0x0F
242*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_N_MAC_MCGID_MASK		0x3F
243*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_CTL_QPN_MASK		0x00FFFFFF
244*13101SVenki.Rajagopalan@Sun.COM 
245*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_MASK			0xFF000000
246*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_SHIFT		24
247*13101SVenki.Rajagopalan@Sun.COM 
248*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_SUCCESS		0
249*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_REJECTED		1
250*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_GW_NO_RESOURCE	2
251*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_NO_MORE_NWK_ADDRS	3
252*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_UNKNOWN_HOST		4
253*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VL_SYN_UNSUPP_PARAM		5
254*13101SVenki.Rajagopalan@Sun.COM 
255*13101SVenki.Rajagopalan@Sun.COM /*
256*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_Partition
257*13101SVenki.Rajagopalan@Sun.COM  */
258*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_PARTITION		246
259*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_PARTITION		4
260*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_partition_s {
261*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			pn_type;
262*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			pn_len;
263*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			pn_reserved1[2];
264*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			pn_vendor_id[FIP_VENDOR_LEN];
265*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			pn_reserved2[2];
266*13101SVenki.Rajagopalan@Sun.COM 	uint16_t		pn_pkey;
267*13101SVenki.Rajagopalan@Sun.COM } fip_desc_partition_t;
268*13101SVenki.Rajagopalan@Sun.COM 
269*13101SVenki.Rajagopalan@Sun.COM /*
270*13101SVenki.Rajagopalan@Sun.COM  * FIP Login Control Message:
271*13101SVenki.Rajagopalan@Sun.COM  *
272*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Protocol_Version
273*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Basic_Header
274*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_Infiniband_Address
275*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_vNIC_Login
276*13101SVenki.Rajagopalan@Sun.COM  */
277*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_login_s {
278*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t		lg_proto_version;
279*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t		lg_fip_header;
280*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_iba_t		lg_iba;
281*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_vnic_login_t	lg_vnic_login;
282*13101SVenki.Rajagopalan@Sun.COM } fip_login_t;
283*13101SVenki.Rajagopalan@Sun.COM 
284*13101SVenki.Rajagopalan@Sun.COM /*
285*13101SVenki.Rajagopalan@Sun.COM  * FIP Login ACK Control Message:
286*13101SVenki.Rajagopalan@Sun.COM  *
287*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Protocol_Version
288*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Basic_Header
289*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_Infiniband_Address
290*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_vNIC_Login
291*13101SVenki.Rajagopalan@Sun.COM  *	FIP_Descriptor_Partition
292*13101SVenki.Rajagopalan@Sun.COM  */
293*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_login_ack_s {
294*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t		ak_proto_version;
295*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t		ak_fip_header;
296*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_iba_t		ak_iba;
297*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_vnic_login_t	ak_vnic_login;
298*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_partition_t	ak_vhub_partition;
299*13101SVenki.Rajagopalan@Sun.COM } fip_login_ack_t;
300*13101SVenki.Rajagopalan@Sun.COM 
301*13101SVenki.Rajagopalan@Sun.COM /*
302*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_vNIC_Identity
303*13101SVenki.Rajagopalan@Sun.COM  */
304*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_VNIC_IDENTITY	245
305*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_VNIC_IDENTITY	13
306*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_vnic_identity_s {
307*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vi_type;
308*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vi_len;
309*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vi_reserved1[2];
310*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vi_vendor_id[FIP_VENDOR_LEN];
311*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		vi_flags_vhub_id;
312*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		vi_tusn;
313*13101SVenki.Rajagopalan@Sun.COM 	uint16_t		vi_vnic_id;
314*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vi_mac[ETHERADDRL];
315*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vi_port_guid[FIP_GUID_LEN];
316*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			vi_vnic_name[FIP_VNIC_NAME_LEN];
317*13101SVenki.Rajagopalan@Sun.COM } fip_desc_vnic_identity_t;
318*13101SVenki.Rajagopalan@Sun.COM 
319*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VI_FLAG_U		0x80000000
320*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VI_FLAG_R		0x40000000
321*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VI_FLAG_VP		0x01000000
322*13101SVenki.Rajagopalan@Sun.COM 
323*13101SVenki.Rajagopalan@Sun.COM /*
324*13101SVenki.Rajagopalan@Sun.COM  * FIP Keep Alive Control Message:
325*13101SVenki.Rajagopalan@Sun.COM  *
326*13101SVenki.Rajagopalan@Sun.COM  *	FIP_Protocol_Version
327*13101SVenki.Rajagopalan@Sun.COM  *	FIP_Basic_Header
328*13101SVenki.Rajagopalan@Sun.COM  *	FIP_Descriptor_vNIC_Identity
329*13101SVenki.Rajagopalan@Sun.COM  */
330*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_keep_alive_s {
331*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t			ka_proto_version;
332*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t			ka_fip_header;
333*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_vnic_identity_t	ka_vnic_identity;
334*13101SVenki.Rajagopalan@Sun.COM } fip_keep_alive_t;
335*13101SVenki.Rajagopalan@Sun.COM 
336*13101SVenki.Rajagopalan@Sun.COM /*
337*13101SVenki.Rajagopalan@Sun.COM  * FIP_vHUB_Table_Entry
338*13101SVenki.Rajagopalan@Sun.COM  */
339*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_vhub_table_entry_s {
340*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			te_v_rss_type;
341*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			te_reserved1;
342*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			te_mac[ETHERADDRL];
343*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		te_qpn;
344*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			te_reserved2;
345*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			te_sl;
346*13101SVenki.Rajagopalan@Sun.COM 	uint16_t		te_lid;
347*13101SVenki.Rajagopalan@Sun.COM } fip_vhub_table_entry_t;
348*13101SVenki.Rajagopalan@Sun.COM 
349*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_VALID			0x80
350*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_RSS			0x40
351*13101SVenki.Rajagopalan@Sun.COM 
352*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_TYPE_MASK		0x0F
353*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_TYPE_VNIC		0x00
354*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_TYPE_GATEWAY		0x01
355*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_TYPE_UNICAST_MISS	0x02
356*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_TYPE_MULTICAST_ENTRY	0x03
357*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_TYPE_VHUB_MULTICAST	0x04
358*13101SVenki.Rajagopalan@Sun.COM 
359*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_SL_MASK			0x0F
360*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TE_QPN_MASK			0x00FFFFFF
361*13101SVenki.Rajagopalan@Sun.COM 
362*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VHUB_TABLE_ENTRY_SZ		(sizeof (fip_vhub_table_entry_t))
363*13101SVenki.Rajagopalan@Sun.COM #define	FIP_VHUB_TABLE_ENTRY_WORDS	(FIP_VHUB_TABLE_ENTRY_SZ >> 2)
364*13101SVenki.Rajagopalan@Sun.COM 
365*13101SVenki.Rajagopalan@Sun.COM /*
366*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_vHUB_Update
367*13101SVenki.Rajagopalan@Sun.COM  */
368*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_VHUB_UPDATE	243
369*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_LEN_VHUB_UPDATE	9
370*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_vhub_update_s {
371*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			up_type;
372*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			up_len;
373*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			up_reserved1[2];
374*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			up_vendor_id[FIP_VENDOR_LEN];
375*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		up_eport_vp_vhub_id;
376*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		up_tusn;
377*13101SVenki.Rajagopalan@Sun.COM 	fip_vhub_table_entry_t	up_tbl_entry;
378*13101SVenki.Rajagopalan@Sun.COM } fip_desc_vhub_update_t;
379*13101SVenki.Rajagopalan@Sun.COM 
380*13101SVenki.Rajagopalan@Sun.COM #define	FIP_UP_VP_SHIFT			24
381*13101SVenki.Rajagopalan@Sun.COM #define	FIP_UP_VP_MASK			0x1
382*13101SVenki.Rajagopalan@Sun.COM #define	FIP_UP_EPORT_STATE_SHIFT	28
383*13101SVenki.Rajagopalan@Sun.COM #define	FIP_UP_EPORT_STATE_MASK		0x3
384*13101SVenki.Rajagopalan@Sun.COM #define	FIP_UP_VHUB_ID_MASK		0x00FFFFFF
385*13101SVenki.Rajagopalan@Sun.COM 
386*13101SVenki.Rajagopalan@Sun.COM #define	FIP_EPORT_DOWN			0x0
387*13101SVenki.Rajagopalan@Sun.COM #define	FIP_EPORT_UP			0x1
388*13101SVenki.Rajagopalan@Sun.COM 
389*13101SVenki.Rajagopalan@Sun.COM /*
390*13101SVenki.Rajagopalan@Sun.COM  * FIP_Descriptor_vHUB_Table
391*13101SVenki.Rajagopalan@Sun.COM  */
392*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_TYPE_VHUB_TABLE	244
393*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_desc_vhub_table_s {
394*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			tb_type;
395*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			tb_len;
396*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			tb_reserved1[2];
397*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			tb_vendor_id[FIP_VENDOR_LEN];
398*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		tb_flags_vhub_id;
399*13101SVenki.Rajagopalan@Sun.COM 	uint32_t		tb_tusn;
400*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			tb_hdr;
401*13101SVenki.Rajagopalan@Sun.COM 	uint8_t			tb_reserved2;
402*13101SVenki.Rajagopalan@Sun.COM 	uint16_t		tb_table_size;
403*13101SVenki.Rajagopalan@Sun.COM 	/*
404*13101SVenki.Rajagopalan@Sun.COM 	 * FIP_vHUB_Table_Entry
405*13101SVenki.Rajagopalan@Sun.COM 	 * FIP_vHUB_Table_Entry
406*13101SVenki.Rajagopalan@Sun.COM 	 * .
407*13101SVenki.Rajagopalan@Sun.COM 	 * .
408*13101SVenki.Rajagopalan@Sun.COM 	 * .
409*13101SVenki.Rajagopalan@Sun.COM 	 * uint32_t Checksum
410*13101SVenki.Rajagopalan@Sun.COM 	 */
411*13101SVenki.Rajagopalan@Sun.COM } fip_desc_vhub_table_t;
412*13101SVenki.Rajagopalan@Sun.COM 
413*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TB_FLAGS_VP_SHIFT		24
414*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TB_FLAGS_VP_MASK		0x1
415*13101SVenki.Rajagopalan@Sun.COM 
416*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TB_VHUB_ID_MASK		0x00FFFFFF
417*13101SVenki.Rajagopalan@Sun.COM 
418*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TB_HDR_MIDDLE		0x00
419*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TB_HDR_FIRST		0x40
420*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TB_HDR_LAST			0x80
421*13101SVenki.Rajagopalan@Sun.COM #define	FIP_TB_HDR_ONLY			0xC0
422*13101SVenki.Rajagopalan@Sun.COM 
423*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_VHUB_TABLE_SZ		(sizeof (fip_desc_vhub_table_t))
424*13101SVenki.Rajagopalan@Sun.COM #define	FIP_DESC_VHUB_TABLE_WORDS	(FIP_DESC_VHUB_TABLE_SZ >> 2)
425*13101SVenki.Rajagopalan@Sun.COM 
426*13101SVenki.Rajagopalan@Sun.COM /*
427*13101SVenki.Rajagopalan@Sun.COM  * FIP vHUB Table Message:
428*13101SVenki.Rajagopalan@Sun.COM  *
429*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Protocol_Version
430*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Basic_Header
431*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_vHUB_Table
432*13101SVenki.Rajagopalan@Sun.COM  */
433*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_vhub_table_s {
434*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t		vt_proto_version;
435*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t		vt_fip_header;
436*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_vhub_table_t	vt_vhub_table;
437*13101SVenki.Rajagopalan@Sun.COM } fip_vhub_table_t;
438*13101SVenki.Rajagopalan@Sun.COM 
439*13101SVenki.Rajagopalan@Sun.COM /*
440*13101SVenki.Rajagopalan@Sun.COM  * FIP vHUB Update Message:
441*13101SVenki.Rajagopalan@Sun.COM  *
442*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Protocol_Version
443*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Basic_Header
444*13101SVenki.Rajagopalan@Sun.COM  * 	FIP_Descriptor_vHUB_Update
445*13101SVenki.Rajagopalan@Sun.COM  */
446*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_vhub_update_s {
447*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t		vu_proto_version;
448*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t		vu_fip_header;
449*13101SVenki.Rajagopalan@Sun.COM 	fip_desc_vhub_update_t	vu_vhub_update;
450*13101SVenki.Rajagopalan@Sun.COM } fip_vhub_update_t;
451*13101SVenki.Rajagopalan@Sun.COM 
452*13101SVenki.Rajagopalan@Sun.COM /*
453*13101SVenki.Rajagopalan@Sun.COM  * Just a generic container to handle either type of VHUB
454*13101SVenki.Rajagopalan@Sun.COM  * messages
455*13101SVenki.Rajagopalan@Sun.COM  */
456*13101SVenki.Rajagopalan@Sun.COM typedef struct fip_vhub_pkt_s {
457*13101SVenki.Rajagopalan@Sun.COM 	fip_proto_t		hb_proto_version;
458*13101SVenki.Rajagopalan@Sun.COM 	fip_basic_hdr_t		hb_fip_header;
459*13101SVenki.Rajagopalan@Sun.COM } fip_vhub_pkt_t;
460*13101SVenki.Rajagopalan@Sun.COM 
461*13101SVenki.Rajagopalan@Sun.COM #ifdef __cplusplus
462*13101SVenki.Rajagopalan@Sun.COM }
463*13101SVenki.Rajagopalan@Sun.COM #endif
464*13101SVenki.Rajagopalan@Sun.COM 
465*13101SVenki.Rajagopalan@Sun.COM #endif	/* _SYS_IB_EOIB_FIP_H */
466