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