xref: /onnv-gate/usr/src/uts/common/sys/ib/clients/eoib/eib.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_EIB_H
27*13101SVenki.Rajagopalan@Sun.COM #define	_SYS_IB_EOIB_EIB_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 /*
34*13101SVenki.Rajagopalan@Sun.COM  *
35*13101SVenki.Rajagopalan@Sun.COM  * EoIB Encapsulation Header Layout
36*13101SVenki.Rajagopalan@Sun.COM  *
37*13101SVenki.Rajagopalan@Sun.COM  *  31 30 29 28 27 26 25 24     22 21 20 ... 16 15                      0
38*13101SVenki.Rajagopalan@Sun.COM  * +-----+-----+-----+-----+--+---+--+---------+-------------------------+
39*13101SVenki.Rajagopalan@Sun.COM  * | sig | ver | TCP | IP  |  |fcs|ms| segment |       segment id        |
40*13101SVenki.Rajagopalan@Sun.COM  * |     |     | chk | chk |  |   |  | offset  |                         |
41*13101SVenki.Rajagopalan@Sun.COM  * +-----+-----+-----+-----+--+---+--+---------+-------------------------+
42*13101SVenki.Rajagopalan@Sun.COM  *
43*13101SVenki.Rajagopalan@Sun.COM  */
44*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_HDR_SZ		4
45*13101SVenki.Rajagopalan@Sun.COM 
46*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_SIGN_MASK		0x3
47*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_SIGN_SHIFT		30
48*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_VER_MASK		0x3
49*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_VER_SHIFT		28
50*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_TCPCHK_MASK		0x3
51*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_TCPCHK_SHIFT		26
52*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_IPCHK_MASK		0x3
53*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_IPCHK_SHIFT		24
54*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_FCS_B_SHIFT		22
55*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_MS_B_SHIFT		21
56*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_SEGOFF_MASK		0x1F
57*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_SEGOFF_SHIFT		16
58*13101SVenki.Rajagopalan@Sun.COM #define	EIB_ENCAP_SEGID_MASK		0xFFFF
59*13101SVenki.Rajagopalan@Sun.COM 
60*13101SVenki.Rajagopalan@Sun.COM /*
61*13101SVenki.Rajagopalan@Sun.COM  * Bit fields values definitions
62*13101SVenki.Rajagopalan@Sun.COM  */
63*13101SVenki.Rajagopalan@Sun.COM #define	EIB_EH_SIGNATURE		3
64*13101SVenki.Rajagopalan@Sun.COM #define	EIB_EH_VERSION			0
65*13101SVenki.Rajagopalan@Sun.COM #define	EIB_EH_CSUM_UNKNOWN		0
66*13101SVenki.Rajagopalan@Sun.COM #define	EIB_EH_TCPCSUM_OK		1
67*13101SVenki.Rajagopalan@Sun.COM #define	EIB_EH_UDPCSUM_OK		2
68*13101SVenki.Rajagopalan@Sun.COM #define	EIB_EH_CSUM_BAD			3
69*13101SVenki.Rajagopalan@Sun.COM #define	EIB_EH_IPCSUM_OK		1
70*13101SVenki.Rajagopalan@Sun.COM 
71*13101SVenki.Rajagopalan@Sun.COM /*
72*13101SVenki.Rajagopalan@Sun.COM  * Some shortcuts
73*13101SVenki.Rajagopalan@Sun.COM  */
74*13101SVenki.Rajagopalan@Sun.COM #define	EIB_TX_ENCAP_HDR		0xC0000000
75*13101SVenki.Rajagopalan@Sun.COM #define	EIB_RX_ENCAP_TCPIP_OK		0xC5000000
76*13101SVenki.Rajagopalan@Sun.COM #define	EIB_RX_ENCAP_UDPIP_OK		0xC9000000
77*13101SVenki.Rajagopalan@Sun.COM 
78*13101SVenki.Rajagopalan@Sun.COM /*
79*13101SVenki.Rajagopalan@Sun.COM  * Driver name
80*13101SVenki.Rajagopalan@Sun.COM  */
81*13101SVenki.Rajagopalan@Sun.COM #define	EIB_DRV_NAME			"eoib"
82*13101SVenki.Rajagopalan@Sun.COM 
83*13101SVenki.Rajagopalan@Sun.COM /*
84*13101SVenki.Rajagopalan@Sun.COM  * Currently, the gateway responds to login requests on the qpn that carried
85*13101SVenki.Rajagopalan@Sun.COM  * the solication request, rather than on the qpn that carried the login
86*13101SVenki.Rajagopalan@Sun.COM  * request.  This means that EoIB nexus receives the acknowledgements from
87*13101SVenki.Rajagopalan@Sun.COM  * gateways to login requests made by the individual EoIB instances, and must
88*13101SVenki.Rajagopalan@Sun.COM  * pass this login ack information back to the appropriate EoIB instance.
89*13101SVenki.Rajagopalan@Sun.COM  *
90*13101SVenki.Rajagopalan@Sun.COM  * Now, the only field in the login ack packet that could identify the
91*13101SVenki.Rajagopalan@Sun.COM  * individual EoIB instance is the vNIC id field, but this is a 16-bit field,
92*13101SVenki.Rajagopalan@Sun.COM  * with the MSB reserved to indicate whether the mac/vlan is host-managed
93*13101SVenki.Rajagopalan@Sun.COM  * or gateway-managed.  This leaves us with just 15-bits to encode the EoIB
94*13101SVenki.Rajagopalan@Sun.COM  * device instance and its Solaris vnic instance.  For now, we divide this
95*13101SVenki.Rajagopalan@Sun.COM  * field as a 6-bit vnic instance number (max Solaris vnics is 64) and a
96*13101SVenki.Rajagopalan@Sun.COM  * 9-bit device instance number (max EoIB pseudo-NICs in a system is 512).
97*13101SVenki.Rajagopalan@Sun.COM  *
98*13101SVenki.Rajagopalan@Sun.COM  * The long-term solution is to get the gateway to respond directly to the
99*13101SVenki.Rajagopalan@Sun.COM  * login requestor, so the requestor can use all 15-bits to identify its
100*13101SVenki.Rajagopalan@Sun.COM  * Solaris vnic instance (max 32K) and leave the device instance limit to
101*13101SVenki.Rajagopalan@Sun.COM  * the system limit.
102*13101SVenki.Rajagopalan@Sun.COM  */
103*13101SVenki.Rajagopalan@Sun.COM #define	EIB_DVI_SHIFT			6
104*13101SVenki.Rajagopalan@Sun.COM #define	EIB_DVI_MASK			0x1FF
105*13101SVenki.Rajagopalan@Sun.COM #define	EIB_VNI_MASK			0x03F
106*13101SVenki.Rajagopalan@Sun.COM 
107*13101SVenki.Rajagopalan@Sun.COM #define	EIB_VNIC_INSTANCE(id)		((id) & EIB_VNI_MASK)
108*13101SVenki.Rajagopalan@Sun.COM #define	EIB_DEVI_INSTANCE(id)		(((id) >> EIB_DVI_SHIFT) & EIB_DVI_MASK)
109*13101SVenki.Rajagopalan@Sun.COM #define	EIB_VNIC_ID(dvi, vni)		\
110*13101SVenki.Rajagopalan@Sun.COM 	((((dvi) & EIB_DVI_MASK) << EIB_DVI_SHIFT) | ((vni) & EIB_VNI_MASK))
111*13101SVenki.Rajagopalan@Sun.COM 
112*13101SVenki.Rajagopalan@Sun.COM /*
113*13101SVenki.Rajagopalan@Sun.COM  * Making VHUB_ID from vlan and portid
114*13101SVenki.Rajagopalan@Sun.COM  */
115*13101SVenki.Rajagopalan@Sun.COM #define	EIB_VHUB_ID(portid, vlan)	\
116*13101SVenki.Rajagopalan@Sun.COM 	((((uint_t)(portid) & 0xfff) << 12) | ((uint_t)(vlan) & 0xfff))
117*13101SVenki.Rajagopalan@Sun.COM 
118*13101SVenki.Rajagopalan@Sun.COM /*
119*13101SVenki.Rajagopalan@Sun.COM  * NDI Events that individual EoIB instance will be interested in
120*13101SVenki.Rajagopalan@Sun.COM  */
121*13101SVenki.Rajagopalan@Sun.COM #define	EIB_NDI_EVENT_GW_AVAILABLE	"SUNW,eoib:gateway-available"
122*13101SVenki.Rajagopalan@Sun.COM #define	EIB_NDI_EVENT_LOGIN_ACK		"SUNW,eoib:vnic-login-ack"
123*13101SVenki.Rajagopalan@Sun.COM #define	EIB_NDI_EVENT_GW_INFO_UPDATE	"SUNW,eoib:gateway-info-update"
124*13101SVenki.Rajagopalan@Sun.COM 
125*13101SVenki.Rajagopalan@Sun.COM /*
126*13101SVenki.Rajagopalan@Sun.COM  * Properties for each eoib node created
127*13101SVenki.Rajagopalan@Sun.COM  */
128*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_HCA_GUID		"hca-guid"
129*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_HCA_PORTNUM		"hca-port#"
130*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_SYS_GUID		"gw-system-guid"
131*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_GUID		"gw-guid"
132*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_SN_PREFIX		"gw-sn-prefix"
133*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_ADV_PERIOD		"gw-adv-period"
134*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_KA_PERIOD		"gw-ka-period"
135*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_VNIC_KA_PERIOD		"vnic-ka-period"
136*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_CTRL_QPN		"gw-ctrl-qpn"
137*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_LID			"gw-lid"
138*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_PORTID		"gw-portid"
139*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_NUM_NET_VNICS	"gw-num-net-vnics"
140*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_AVAILABLE		"gw-available?"
141*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_HOST_VNICS		"gw-host-vnics?"
142*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_SL			"gw-sl"
143*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_N_RSS_QPN		"gw-n-rss-qpn"
144*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_SYS_NAME		"gw-system-name"
145*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_PORT_NAME		"gw-port-name"
146*13101SVenki.Rajagopalan@Sun.COM #define	EIB_PROP_GW_VENDOR_ID		"gw-vendor-id"
147*13101SVenki.Rajagopalan@Sun.COM 
148*13101SVenki.Rajagopalan@Sun.COM /*
149*13101SVenki.Rajagopalan@Sun.COM  * Gateway information passed by eibnx to eoib.  The lengths of character
150*13101SVenki.Rajagopalan@Sun.COM  * strings should be longer than what is defined for these objects in fip.h,
151*13101SVenki.Rajagopalan@Sun.COM  * to accomodate the terminating null.
152*13101SVenki.Rajagopalan@Sun.COM  */
153*13101SVenki.Rajagopalan@Sun.COM #define	EIB_GW_SYSNAME_LEN		40
154*13101SVenki.Rajagopalan@Sun.COM #define	EIB_GW_PORTNAME_LEN		12
155*13101SVenki.Rajagopalan@Sun.COM #define	EIB_GW_VENDOR_LEN		12
156*13101SVenki.Rajagopalan@Sun.COM 
157*13101SVenki.Rajagopalan@Sun.COM typedef struct eib_gw_info_s {
158*13101SVenki.Rajagopalan@Sun.COM 	ib_guid_t	gi_system_guid;
159*13101SVenki.Rajagopalan@Sun.COM 	ib_guid_t	gi_guid;
160*13101SVenki.Rajagopalan@Sun.COM 	ib_sn_prefix_t	gi_sn_prefix;
161*13101SVenki.Rajagopalan@Sun.COM 	uint32_t	gi_adv_period;
162*13101SVenki.Rajagopalan@Sun.COM 	uint32_t	gi_ka_period;
163*13101SVenki.Rajagopalan@Sun.COM 	uint32_t	gi_vnic_ka_period;
164*13101SVenki.Rajagopalan@Sun.COM 	ib_qpn_t	gi_ctrl_qpn;
165*13101SVenki.Rajagopalan@Sun.COM 	ib_lid_t	gi_lid;
166*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	gi_portid;
167*13101SVenki.Rajagopalan@Sun.COM 	uint16_t	gi_num_net_vnics;
168*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_flag_available;
169*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_is_host_adm_vnics;
170*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_sl;
171*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_n_rss_qpn;
172*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_system_name[EIB_GW_SYSNAME_LEN];
173*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_port_name[EIB_GW_PORTNAME_LEN];
174*13101SVenki.Rajagopalan@Sun.COM 	uint8_t		gi_vendor_id[EIB_GW_VENDOR_LEN];
175*13101SVenki.Rajagopalan@Sun.COM } eib_gw_info_t;
176*13101SVenki.Rajagopalan@Sun.COM 
177*13101SVenki.Rajagopalan@Sun.COM /*
178*13101SVenki.Rajagopalan@Sun.COM  * Softint priority levels to use for data and control/admin cq handling
179*13101SVenki.Rajagopalan@Sun.COM  * in EoIB leaf and nexus drivers
180*13101SVenki.Rajagopalan@Sun.COM  */
181*13101SVenki.Rajagopalan@Sun.COM #define	EIB_SOFTPRI_DATA		(DDI_INTR_SOFTPRI_MIN)
182*13101SVenki.Rajagopalan@Sun.COM #define	EIB_SOFTPRI_CTL			(DDI_INTR_SOFTPRI_MIN + 1)
183*13101SVenki.Rajagopalan@Sun.COM #define	EIB_SOFTPRI_ADM			(DDI_INTR_SOFTPRI_MIN + 1)
184*13101SVenki.Rajagopalan@Sun.COM 
185*13101SVenki.Rajagopalan@Sun.COM #ifdef __cplusplus
186*13101SVenki.Rajagopalan@Sun.COM }
187*13101SVenki.Rajagopalan@Sun.COM #endif
188*13101SVenki.Rajagopalan@Sun.COM 
189*13101SVenki.Rajagopalan@Sun.COM #endif	/* _SYS_IB_EOIB_EIB_H */
190