docs/how-to-build.md: use proper markup for directory names
[unleashed/tickless.git] / include / sys / ib / clients / eoib / eib.h
blob6af767eebb329efcab7874999698250abd7f33b3
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
26 #ifndef _SYS_IB_EOIB_EIB_H
27 #define _SYS_IB_EOIB_EIB_H
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
35 * EoIB Encapsulation Header Layout
37 * 31 30 29 28 27 26 25 24 22 21 20 ... 16 15 0
38 * +-----+-----+-----+-----+--+---+--+---------+-------------------------+
39 * | sig | ver | TCP | IP | |fcs|ms| segment | segment id |
40 * | | | chk | chk | | | | offset | |
41 * +-----+-----+-----+-----+--+---+--+---------+-------------------------+
44 #define EIB_ENCAP_HDR_SZ 4
46 #define EIB_ENCAP_SIGN_MASK 0x3
47 #define EIB_ENCAP_SIGN_SHIFT 30
48 #define EIB_ENCAP_VER_MASK 0x3
49 #define EIB_ENCAP_VER_SHIFT 28
50 #define EIB_ENCAP_TCPCHK_MASK 0x3
51 #define EIB_ENCAP_TCPCHK_SHIFT 26
52 #define EIB_ENCAP_IPCHK_MASK 0x3
53 #define EIB_ENCAP_IPCHK_SHIFT 24
54 #define EIB_ENCAP_FCS_B_SHIFT 22
55 #define EIB_ENCAP_MS_B_SHIFT 21
56 #define EIB_ENCAP_SEGOFF_MASK 0x1F
57 #define EIB_ENCAP_SEGOFF_SHIFT 16
58 #define EIB_ENCAP_SEGID_MASK 0xFFFF
61 * Bit fields values definitions
63 #define EIB_EH_SIGNATURE 3
64 #define EIB_EH_VERSION 0
65 #define EIB_EH_CSUM_UNKNOWN 0
66 #define EIB_EH_TCPCSUM_OK 1
67 #define EIB_EH_UDPCSUM_OK 2
68 #define EIB_EH_CSUM_BAD 3
69 #define EIB_EH_IPCSUM_OK 1
72 * Some shortcuts
74 #define EIB_TX_ENCAP_HDR 0xC0000000
75 #define EIB_RX_ENCAP_TCPIP_OK 0xC5000000
76 #define EIB_RX_ENCAP_UDPIP_OK 0xC9000000
79 * Driver name
81 #define EIB_DRV_NAME "eoib"
84 * Currently, the gateway responds to login requests on the qpn that carried
85 * the solication request, rather than on the qpn that carried the login
86 * request. This means that EoIB nexus receives the acknowledgements from
87 * gateways to login requests made by the individual EoIB instances, and must
88 * pass this login ack information back to the appropriate EoIB instance.
90 * Now, the only field in the login ack packet that could identify the
91 * individual EoIB instance is the vNIC id field, but this is a 16-bit field,
92 * with the MSB reserved to indicate whether the mac/vlan is host-managed
93 * or gateway-managed. This leaves us with just 15-bits to encode the EoIB
94 * device instance and its Solaris vnic instance. For now, we divide this
95 * field as a 6-bit vnic instance number (max Solaris vnics is 64) and a
96 * 9-bit device instance number (max EoIB pseudo-NICs in a system is 512).
98 * The long-term solution is to get the gateway to respond directly to the
99 * login requestor, so the requestor can use all 15-bits to identify its
100 * Solaris vnic instance (max 32K) and leave the device instance limit to
101 * the system limit.
103 #define EIB_DVI_SHIFT 6
104 #define EIB_DVI_MASK 0x1FF
105 #define EIB_VNI_MASK 0x03F
107 #define EIB_VNIC_INSTANCE(id) ((id) & EIB_VNI_MASK)
108 #define EIB_DEVI_INSTANCE(id) (((id) >> EIB_DVI_SHIFT) & EIB_DVI_MASK)
109 #define EIB_VNIC_ID(dvi, vni) \
110 ((((dvi) & EIB_DVI_MASK) << EIB_DVI_SHIFT) | ((vni) & EIB_VNI_MASK))
113 * Making VHUB_ID from vlan and portid
115 #define EIB_VHUB_ID(portid, vlan) \
116 ((((uint_t)(portid) & 0xfff) << 12) | ((uint_t)(vlan) & 0xfff))
119 * NDI Events that individual EoIB instance will be interested in
121 #define EIB_NDI_EVENT_GW_AVAILABLE "SUNW,eoib:gateway-available"
122 #define EIB_NDI_EVENT_LOGIN_ACK "SUNW,eoib:vnic-login-ack"
123 #define EIB_NDI_EVENT_GW_INFO_UPDATE "SUNW,eoib:gateway-info-update"
126 * Properties for each eoib node created
128 #define EIB_PROP_HCA_GUID "hca-guid"
129 #define EIB_PROP_HCA_PORTNUM "hca-port#"
130 #define EIB_PROP_GW_SYS_GUID "gw-system-guid"
131 #define EIB_PROP_GW_GUID "gw-guid"
132 #define EIB_PROP_GW_SN_PREFIX "gw-sn-prefix"
133 #define EIB_PROP_GW_ADV_PERIOD "gw-adv-period"
134 #define EIB_PROP_GW_KA_PERIOD "gw-ka-period"
135 #define EIB_PROP_VNIC_KA_PERIOD "vnic-ka-period"
136 #define EIB_PROP_GW_CTRL_QPN "gw-ctrl-qpn"
137 #define EIB_PROP_GW_LID "gw-lid"
138 #define EIB_PROP_GW_PORTID "gw-portid"
139 #define EIB_PROP_GW_NUM_NET_VNICS "gw-num-net-vnics"
140 #define EIB_PROP_GW_AVAILABLE "gw-available?"
141 #define EIB_PROP_GW_HOST_VNICS "gw-host-vnics?"
142 #define EIB_PROP_GW_SL "gw-sl"
143 #define EIB_PROP_GW_N_RSS_QPN "gw-n-rss-qpn"
144 #define EIB_PROP_GW_SYS_NAME "gw-system-name"
145 #define EIB_PROP_GW_PORT_NAME "gw-port-name"
146 #define EIB_PROP_GW_VENDOR_ID "gw-vendor-id"
149 * Gateway information passed by eibnx to eoib. The lengths of character
150 * strings should be longer than what is defined for these objects in fip.h,
151 * to accomodate the terminating null.
153 #define EIB_GW_SYSNAME_LEN 40
154 #define EIB_GW_PORTNAME_LEN 12
155 #define EIB_GW_VENDOR_LEN 12
157 typedef struct eib_gw_info_s {
158 ib_guid_t gi_system_guid;
159 ib_guid_t gi_guid;
160 ib_sn_prefix_t gi_sn_prefix;
161 uint32_t gi_adv_period;
162 uint32_t gi_ka_period;
163 uint32_t gi_vnic_ka_period;
164 ib_qpn_t gi_ctrl_qpn;
165 ib_lid_t gi_lid;
166 uint16_t gi_portid;
167 uint16_t gi_num_net_vnics;
168 uint8_t gi_flag_available;
169 uint8_t gi_is_host_adm_vnics;
170 uint8_t gi_sl;
171 uint8_t gi_n_rss_qpn;
172 uint8_t gi_system_name[EIB_GW_SYSNAME_LEN];
173 uint8_t gi_port_name[EIB_GW_PORTNAME_LEN];
174 uint8_t gi_vendor_id[EIB_GW_VENDOR_LEN];
175 } eib_gw_info_t;
178 * Softint priority levels to use for data and control/admin cq handling
179 * in EoIB leaf and nexus drivers
181 #define EIB_SOFTPRI_DATA (DDI_INTR_SOFTPRI_MIN)
182 #define EIB_SOFTPRI_CTL (DDI_INTR_SOFTPRI_MIN + 1)
183 #define EIB_SOFTPRI_ADM (DDI_INTR_SOFTPRI_MIN + 1)
185 #ifdef __cplusplus
187 #endif
189 #endif /* _SYS_IB_EOIB_EIB_H */