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