1*a36c61f9SKrishna Gudipati /* 2*a36c61f9SKrishna Gudipati * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. 3*a36c61f9SKrishna Gudipati * All rights reserved 4*a36c61f9SKrishna Gudipati * www.brocade.com 5*a36c61f9SKrishna Gudipati * 6*a36c61f9SKrishna Gudipati * Linux driver for Brocade Fibre Channel Host Bus Adapter. 7*a36c61f9SKrishna Gudipati * 8*a36c61f9SKrishna Gudipati * This program is free software; you can redistribute it and/or modify it 9*a36c61f9SKrishna Gudipati * under the terms of the GNU General Public License (GPL) Version 2 as 10*a36c61f9SKrishna Gudipati * published by the Free Software Foundation 11*a36c61f9SKrishna Gudipati * 12*a36c61f9SKrishna Gudipati * This program is distributed in the hope that it will be useful, but 13*a36c61f9SKrishna Gudipati * WITHOUT ANY WARRANTY; without even the implied warranty of 14*a36c61f9SKrishna Gudipati * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15*a36c61f9SKrishna Gudipati * General Public License for more details. 16*a36c61f9SKrishna Gudipati */ 17*a36c61f9SKrishna Gudipati 18*a36c61f9SKrishna Gudipati #ifndef __BFA_DEFS_H__ 19*a36c61f9SKrishna Gudipati #define __BFA_DEFS_H__ 20*a36c61f9SKrishna Gudipati 21*a36c61f9SKrishna Gudipati #include "bfa_fc.h" 22*a36c61f9SKrishna Gudipati #include "bfa_os_inc.h" 23*a36c61f9SKrishna Gudipati 24*a36c61f9SKrishna Gudipati #define BFA_MFG_SERIALNUM_SIZE 11 25*a36c61f9SKrishna Gudipati #define STRSZ(_n) (((_n) + 4) & ~3) 26*a36c61f9SKrishna Gudipati 27*a36c61f9SKrishna Gudipati /** 28*a36c61f9SKrishna Gudipati * Manufacturing card type 29*a36c61f9SKrishna Gudipati */ 30*a36c61f9SKrishna Gudipati enum { 31*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_CB_MAX = 825, /* Crossbow card type max */ 32*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_FC8P2 = 825, /* 8G 2port FC card */ 33*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_FC8P1 = 815, /* 8G 1port FC card */ 34*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_FC4P2 = 425, /* 4G 2port FC card */ 35*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_FC4P1 = 415, /* 4G 1port FC card */ 36*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_CNA10P2 = 1020, /* 10G 2port CNA card */ 37*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_CNA10P1 = 1010, /* 10G 1port CNA card */ 38*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_JAYHAWK = 804, /* Jayhawk mezz card */ 39*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_WANCHESE = 1007, /* Wanchese mezz card */ 40*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_ASTRA = 807, /* Astra mezz card */ 41*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_LIGHTNING_P0 = 902, /* Lightning mezz card - old */ 42*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_LIGHTNING = 1741, /* Lightning mezz card */ 43*a36c61f9SKrishna Gudipati BFA_MFG_TYPE_INVALID = 0, /* Invalid card type */ 44*a36c61f9SKrishna Gudipati }; 45*a36c61f9SKrishna Gudipati 46*a36c61f9SKrishna Gudipati #pragma pack(1) 47*a36c61f9SKrishna Gudipati 48*a36c61f9SKrishna Gudipati /** 49*a36c61f9SKrishna Gudipati * Check if Mezz card 50*a36c61f9SKrishna Gudipati */ 51*a36c61f9SKrishna Gudipati #define bfa_mfg_is_mezz(type) (( \ 52*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_JAYHAWK || \ 53*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_WANCHESE || \ 54*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_ASTRA || \ 55*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_LIGHTNING_P0 || \ 56*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_LIGHTNING)) 57*a36c61f9SKrishna Gudipati 58*a36c61f9SKrishna Gudipati /** 59*a36c61f9SKrishna Gudipati * Check if the card having old wwn/mac handling 60*a36c61f9SKrishna Gudipati */ 61*a36c61f9SKrishna Gudipati #define bfa_mfg_is_old_wwn_mac_model(type) (( \ 62*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_FC8P2 || \ 63*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_FC8P1 || \ 64*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_FC4P2 || \ 65*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_FC4P1 || \ 66*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_CNA10P2 || \ 67*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_CNA10P1 || \ 68*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_JAYHAWK || \ 69*a36c61f9SKrishna Gudipati (type) == BFA_MFG_TYPE_WANCHESE)) 70*a36c61f9SKrishna Gudipati 71*a36c61f9SKrishna Gudipati #define bfa_mfg_increment_wwn_mac(m, i) \ 72*a36c61f9SKrishna Gudipati do { \ 73*a36c61f9SKrishna Gudipati u32 t = ((u32)(m)[0] << 16) | ((u32)(m)[1] << 8) | \ 74*a36c61f9SKrishna Gudipati (u32)(m)[2]; \ 75*a36c61f9SKrishna Gudipati t += (i); \ 76*a36c61f9SKrishna Gudipati (m)[0] = (t >> 16) & 0xFF; \ 77*a36c61f9SKrishna Gudipati (m)[1] = (t >> 8) & 0xFF; \ 78*a36c61f9SKrishna Gudipati (m)[2] = t & 0xFF; \ 79*a36c61f9SKrishna Gudipati } while (0) 80*a36c61f9SKrishna Gudipati 81*a36c61f9SKrishna Gudipati /** 82*a36c61f9SKrishna Gudipati * VPD data length 83*a36c61f9SKrishna Gudipati */ 84*a36c61f9SKrishna Gudipati #define BFA_MFG_VPD_LEN 512 85*a36c61f9SKrishna Gudipati 86*a36c61f9SKrishna Gudipati /** 87*a36c61f9SKrishna Gudipati * VPD vendor tag 88*a36c61f9SKrishna Gudipati */ 89*a36c61f9SKrishna Gudipati enum { 90*a36c61f9SKrishna Gudipati BFA_MFG_VPD_UNKNOWN = 0, /* vendor unknown */ 91*a36c61f9SKrishna Gudipati BFA_MFG_VPD_IBM = 1, /* vendor IBM */ 92*a36c61f9SKrishna Gudipati BFA_MFG_VPD_HP = 2, /* vendor HP */ 93*a36c61f9SKrishna Gudipati BFA_MFG_VPD_DELL = 3, /* vendor DELL */ 94*a36c61f9SKrishna Gudipati BFA_MFG_VPD_PCI_IBM = 0x08, /* PCI VPD IBM */ 95*a36c61f9SKrishna Gudipati BFA_MFG_VPD_PCI_HP = 0x10, /* PCI VPD HP */ 96*a36c61f9SKrishna Gudipati BFA_MFG_VPD_PCI_DELL = 0x20, /* PCI VPD DELL */ 97*a36c61f9SKrishna Gudipati BFA_MFG_VPD_PCI_BRCD = 0xf8, /* PCI VPD Brocade */ 98*a36c61f9SKrishna Gudipati }; 99*a36c61f9SKrishna Gudipati 100*a36c61f9SKrishna Gudipati /** 101*a36c61f9SKrishna Gudipati * All numerical fields are in big-endian format. 102*a36c61f9SKrishna Gudipati */ 103*a36c61f9SKrishna Gudipati struct bfa_mfg_vpd_s { 104*a36c61f9SKrishna Gudipati u8 version; /* vpd data version */ 105*a36c61f9SKrishna Gudipati u8 vpd_sig[3]; /* characters 'V', 'P', 'D' */ 106*a36c61f9SKrishna Gudipati u8 chksum; /* u8 checksum */ 107*a36c61f9SKrishna Gudipati u8 vendor; /* vendor */ 108*a36c61f9SKrishna Gudipati u8 len; /* vpd data length excluding header */ 109*a36c61f9SKrishna Gudipati u8 rsv; 110*a36c61f9SKrishna Gudipati u8 data[BFA_MFG_VPD_LEN]; /* vpd data */ 111*a36c61f9SKrishna Gudipati }; 112*a36c61f9SKrishna Gudipati 113*a36c61f9SKrishna Gudipati #pragma pack() 114*a36c61f9SKrishna Gudipati 115*a36c61f9SKrishna Gudipati /** 116*a36c61f9SKrishna Gudipati * Status return values 117*a36c61f9SKrishna Gudipati */ 118*a36c61f9SKrishna Gudipati enum bfa_status { 119*a36c61f9SKrishna Gudipati BFA_STATUS_OK = 0, /* Success */ 120*a36c61f9SKrishna Gudipati BFA_STATUS_FAILED = 1, /* Operation failed */ 121*a36c61f9SKrishna Gudipati BFA_STATUS_EINVAL = 2, /* Invalid params Check input 122*a36c61f9SKrishna Gudipati * parameters */ 123*a36c61f9SKrishna Gudipati BFA_STATUS_ENOMEM = 3, /* Out of resources */ 124*a36c61f9SKrishna Gudipati BFA_STATUS_ETIMER = 5, /* Timer expired - Retry, if persists, 125*a36c61f9SKrishna Gudipati * contact support */ 126*a36c61f9SKrishna Gudipati BFA_STATUS_EPROTOCOL = 6, /* Protocol error */ 127*a36c61f9SKrishna Gudipati BFA_STATUS_DEVBUSY = 13, /* Device busy - Retry operation */ 128*a36c61f9SKrishna Gudipati BFA_STATUS_UNKNOWN_LWWN = 18, /* LPORT PWWN not found */ 129*a36c61f9SKrishna Gudipati BFA_STATUS_UNKNOWN_RWWN = 19, /* RPORT PWWN not found */ 130*a36c61f9SKrishna Gudipati BFA_STATUS_VPORT_EXISTS = 21, /* VPORT already exists */ 131*a36c61f9SKrishna Gudipati BFA_STATUS_VPORT_MAX = 22, /* Reached max VPORT supported limit */ 132*a36c61f9SKrishna Gudipati BFA_STATUS_UNSUPP_SPEED = 23, /* Invalid Speed Check speed setting */ 133*a36c61f9SKrishna Gudipati BFA_STATUS_INVLD_DFSZ = 24, /* Invalid Max data field size */ 134*a36c61f9SKrishna Gudipati BFA_STATUS_FABRIC_RJT = 29, /* Reject from attached fabric */ 135*a36c61f9SKrishna Gudipati BFA_STATUS_VPORT_WWN_BP = 46, /* WWN is same as base port's WWN */ 136*a36c61f9SKrishna Gudipati BFA_STATUS_NO_FCPIM_NEXUS = 52, /* No FCP Nexus exists with the rport */ 137*a36c61f9SKrishna Gudipati BFA_STATUS_IOC_FAILURE = 56, /* IOC failure - Retry, if persists 138*a36c61f9SKrishna Gudipati * contact support */ 139*a36c61f9SKrishna Gudipati BFA_STATUS_INVALID_WWN = 57, /* Invalid WWN */ 140*a36c61f9SKrishna Gudipati BFA_STATUS_DIAG_BUSY = 71, /* diag busy */ 141*a36c61f9SKrishna Gudipati BFA_STATUS_ENOFSAVE = 78, /* No saved firmware trace */ 142*a36c61f9SKrishna Gudipati BFA_STATUS_IOC_DISABLED = 82, /* IOC is already disabled */ 143*a36c61f9SKrishna Gudipati BFA_STATUS_INVALID_MAC = 134, /* Invalid MAC address */ 144*a36c61f9SKrishna Gudipati BFA_STATUS_PBC = 154, /* Operation not allowed for pre-boot 145*a36c61f9SKrishna Gudipati * configuration */ 146*a36c61f9SKrishna Gudipati BFA_STATUS_TRUNK_ENABLED = 164, /* Trunk is already enabled on 147*a36c61f9SKrishna Gudipati * this adapter */ 148*a36c61f9SKrishna Gudipati BFA_STATUS_TRUNK_DISABLED = 165, /* Trunking is disabled on 149*a36c61f9SKrishna Gudipati * the adapter */ 150*a36c61f9SKrishna Gudipati BFA_STATUS_IOPROFILE_OFF = 175, /* IO profile OFF */ 151*a36c61f9SKrishna Gudipati BFA_STATUS_MAX_VAL /* Unknown error code */ 152*a36c61f9SKrishna Gudipati }; 153*a36c61f9SKrishna Gudipati #define bfa_status_t enum bfa_status 154*a36c61f9SKrishna Gudipati 155*a36c61f9SKrishna Gudipati enum bfa_eproto_status { 156*a36c61f9SKrishna Gudipati BFA_EPROTO_BAD_ACCEPT = 0, 157*a36c61f9SKrishna Gudipati BFA_EPROTO_UNKNOWN_RSP = 1 158*a36c61f9SKrishna Gudipati }; 159*a36c61f9SKrishna Gudipati #define bfa_eproto_status_t enum bfa_eproto_status 160*a36c61f9SKrishna Gudipati 161*a36c61f9SKrishna Gudipati enum bfa_boolean { 162*a36c61f9SKrishna Gudipati BFA_FALSE = 0, 163*a36c61f9SKrishna Gudipati BFA_TRUE = 1 164*a36c61f9SKrishna Gudipati }; 165*a36c61f9SKrishna Gudipati #define bfa_boolean_t enum bfa_boolean 166*a36c61f9SKrishna Gudipati 167*a36c61f9SKrishna Gudipati #define BFA_STRING_32 32 168*a36c61f9SKrishna Gudipati #define BFA_VERSION_LEN 64 169*a36c61f9SKrishna Gudipati 170*a36c61f9SKrishna Gudipati /** 171*a36c61f9SKrishna Gudipati * ---------------------- adapter definitions ------------ 172*a36c61f9SKrishna Gudipati */ 173*a36c61f9SKrishna Gudipati 174*a36c61f9SKrishna Gudipati /** 175*a36c61f9SKrishna Gudipati * BFA adapter level attributes. 176*a36c61f9SKrishna Gudipati */ 177*a36c61f9SKrishna Gudipati enum { 178*a36c61f9SKrishna Gudipati BFA_ADAPTER_SERIAL_NUM_LEN = STRSZ(BFA_MFG_SERIALNUM_SIZE), 179*a36c61f9SKrishna Gudipati /* 180*a36c61f9SKrishna Gudipati *!< adapter serial num length 181*a36c61f9SKrishna Gudipati */ 182*a36c61f9SKrishna Gudipati BFA_ADAPTER_MODEL_NAME_LEN = 16, /* model name length */ 183*a36c61f9SKrishna Gudipati BFA_ADAPTER_MODEL_DESCR_LEN = 128, /* model description length */ 184*a36c61f9SKrishna Gudipati BFA_ADAPTER_MFG_NAME_LEN = 8, /* manufacturer name length */ 185*a36c61f9SKrishna Gudipati BFA_ADAPTER_SYM_NAME_LEN = 64, /* adapter symbolic name length */ 186*a36c61f9SKrishna Gudipati BFA_ADAPTER_OS_TYPE_LEN = 64, /* adapter os type length */ 187*a36c61f9SKrishna Gudipati }; 188*a36c61f9SKrishna Gudipati 189*a36c61f9SKrishna Gudipati struct bfa_adapter_attr_s { 190*a36c61f9SKrishna Gudipati char manufacturer[BFA_ADAPTER_MFG_NAME_LEN]; 191*a36c61f9SKrishna Gudipati char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN]; 192*a36c61f9SKrishna Gudipati u32 card_type; 193*a36c61f9SKrishna Gudipati char model[BFA_ADAPTER_MODEL_NAME_LEN]; 194*a36c61f9SKrishna Gudipati char model_descr[BFA_ADAPTER_MODEL_DESCR_LEN]; 195*a36c61f9SKrishna Gudipati wwn_t pwwn; 196*a36c61f9SKrishna Gudipati char node_symname[FC_SYMNAME_MAX]; 197*a36c61f9SKrishna Gudipati char hw_ver[BFA_VERSION_LEN]; 198*a36c61f9SKrishna Gudipati char fw_ver[BFA_VERSION_LEN]; 199*a36c61f9SKrishna Gudipati char optrom_ver[BFA_VERSION_LEN]; 200*a36c61f9SKrishna Gudipati char os_type[BFA_ADAPTER_OS_TYPE_LEN]; 201*a36c61f9SKrishna Gudipati struct bfa_mfg_vpd_s vpd; 202*a36c61f9SKrishna Gudipati struct mac_s mac; 203*a36c61f9SKrishna Gudipati 204*a36c61f9SKrishna Gudipati u8 nports; 205*a36c61f9SKrishna Gudipati u8 max_speed; 206*a36c61f9SKrishna Gudipati u8 prototype; 207*a36c61f9SKrishna Gudipati char asic_rev; 208*a36c61f9SKrishna Gudipati 209*a36c61f9SKrishna Gudipati u8 pcie_gen; 210*a36c61f9SKrishna Gudipati u8 pcie_lanes_orig; 211*a36c61f9SKrishna Gudipati u8 pcie_lanes; 212*a36c61f9SKrishna Gudipati u8 cna_capable; 213*a36c61f9SKrishna Gudipati 214*a36c61f9SKrishna Gudipati u8 is_mezz; 215*a36c61f9SKrishna Gudipati u8 trunk_capable; 216*a36c61f9SKrishna Gudipati }; 217*a36c61f9SKrishna Gudipati 218*a36c61f9SKrishna Gudipati /** 219*a36c61f9SKrishna Gudipati * ---------------------- IOC definitions ------------ 220*a36c61f9SKrishna Gudipati */ 221*a36c61f9SKrishna Gudipati 222*a36c61f9SKrishna Gudipati enum { 223*a36c61f9SKrishna Gudipati BFA_IOC_DRIVER_LEN = 16, 224*a36c61f9SKrishna Gudipati BFA_IOC_CHIP_REV_LEN = 8, 225*a36c61f9SKrishna Gudipati }; 226*a36c61f9SKrishna Gudipati 227*a36c61f9SKrishna Gudipati /** 228*a36c61f9SKrishna Gudipati * Driver and firmware versions. 229*a36c61f9SKrishna Gudipati */ 230*a36c61f9SKrishna Gudipati struct bfa_ioc_driver_attr_s { 231*a36c61f9SKrishna Gudipati char driver[BFA_IOC_DRIVER_LEN]; /* driver name */ 232*a36c61f9SKrishna Gudipati char driver_ver[BFA_VERSION_LEN]; /* driver version */ 233*a36c61f9SKrishna Gudipati char fw_ver[BFA_VERSION_LEN]; /* firmware version */ 234*a36c61f9SKrishna Gudipati char bios_ver[BFA_VERSION_LEN]; /* bios version */ 235*a36c61f9SKrishna Gudipati char efi_ver[BFA_VERSION_LEN]; /* EFI version */ 236*a36c61f9SKrishna Gudipati char ob_ver[BFA_VERSION_LEN]; /* openboot version */ 237*a36c61f9SKrishna Gudipati }; 238*a36c61f9SKrishna Gudipati 239*a36c61f9SKrishna Gudipati /** 240*a36c61f9SKrishna Gudipati * IOC PCI device attributes 241*a36c61f9SKrishna Gudipati */ 242*a36c61f9SKrishna Gudipati struct bfa_ioc_pci_attr_s { 243*a36c61f9SKrishna Gudipati u16 vendor_id; /* PCI vendor ID */ 244*a36c61f9SKrishna Gudipati u16 device_id; /* PCI device ID */ 245*a36c61f9SKrishna Gudipati u16 ssid; /* subsystem ID */ 246*a36c61f9SKrishna Gudipati u16 ssvid; /* subsystem vendor ID */ 247*a36c61f9SKrishna Gudipati u32 pcifn; /* PCI device function */ 248*a36c61f9SKrishna Gudipati u32 rsvd; /* padding */ 249*a36c61f9SKrishna Gudipati char chip_rev[BFA_IOC_CHIP_REV_LEN]; /* chip revision */ 250*a36c61f9SKrishna Gudipati }; 251*a36c61f9SKrishna Gudipati 252*a36c61f9SKrishna Gudipati /** 253*a36c61f9SKrishna Gudipati * IOC states 254*a36c61f9SKrishna Gudipati */ 255*a36c61f9SKrishna Gudipati enum bfa_ioc_state { 256*a36c61f9SKrishna Gudipati BFA_IOC_UNINIT = 1, /* IOC is in uninit state */ 257*a36c61f9SKrishna Gudipati BFA_IOC_RESET = 2, /* IOC is in reset state */ 258*a36c61f9SKrishna Gudipati BFA_IOC_SEMWAIT = 3, /* Waiting for IOC h/w semaphore */ 259*a36c61f9SKrishna Gudipati BFA_IOC_HWINIT = 4, /* IOC h/w is being initialized */ 260*a36c61f9SKrishna Gudipati BFA_IOC_GETATTR = 5, /* IOC is being configured */ 261*a36c61f9SKrishna Gudipati BFA_IOC_OPERATIONAL = 6, /* IOC is operational */ 262*a36c61f9SKrishna Gudipati BFA_IOC_INITFAIL = 7, /* IOC hardware failure */ 263*a36c61f9SKrishna Gudipati BFA_IOC_FAIL = 8, /* IOC heart-beat failure */ 264*a36c61f9SKrishna Gudipati BFA_IOC_DISABLING = 9, /* IOC is being disabled */ 265*a36c61f9SKrishna Gudipati BFA_IOC_DISABLED = 10, /* IOC is disabled */ 266*a36c61f9SKrishna Gudipati BFA_IOC_FWMISMATCH = 11, /* IOC f/w different from drivers */ 267*a36c61f9SKrishna Gudipati BFA_IOC_ENABLING = 12, /* IOC is being enabled */ 268*a36c61f9SKrishna Gudipati }; 269*a36c61f9SKrishna Gudipati 270*a36c61f9SKrishna Gudipati /** 271*a36c61f9SKrishna Gudipati * IOC firmware stats 272*a36c61f9SKrishna Gudipati */ 273*a36c61f9SKrishna Gudipati struct bfa_fw_ioc_stats_s { 274*a36c61f9SKrishna Gudipati u32 enable_reqs; 275*a36c61f9SKrishna Gudipati u32 disable_reqs; 276*a36c61f9SKrishna Gudipati u32 get_attr_reqs; 277*a36c61f9SKrishna Gudipati u32 dbg_sync; 278*a36c61f9SKrishna Gudipati u32 dbg_dump; 279*a36c61f9SKrishna Gudipati u32 unknown_reqs; 280*a36c61f9SKrishna Gudipati }; 281*a36c61f9SKrishna Gudipati 282*a36c61f9SKrishna Gudipati /** 283*a36c61f9SKrishna Gudipati * IOC driver stats 284*a36c61f9SKrishna Gudipati */ 285*a36c61f9SKrishna Gudipati struct bfa_ioc_drv_stats_s { 286*a36c61f9SKrishna Gudipati u32 ioc_isrs; 287*a36c61f9SKrishna Gudipati u32 ioc_enables; 288*a36c61f9SKrishna Gudipati u32 ioc_disables; 289*a36c61f9SKrishna Gudipati u32 ioc_hbfails; 290*a36c61f9SKrishna Gudipati u32 ioc_boots; 291*a36c61f9SKrishna Gudipati u32 stats_tmos; 292*a36c61f9SKrishna Gudipati u32 hb_count; 293*a36c61f9SKrishna Gudipati u32 disable_reqs; 294*a36c61f9SKrishna Gudipati u32 enable_reqs; 295*a36c61f9SKrishna Gudipati u32 disable_replies; 296*a36c61f9SKrishna Gudipati u32 enable_replies; 297*a36c61f9SKrishna Gudipati }; 298*a36c61f9SKrishna Gudipati 299*a36c61f9SKrishna Gudipati /** 300*a36c61f9SKrishna Gudipati * IOC statistics 301*a36c61f9SKrishna Gudipati */ 302*a36c61f9SKrishna Gudipati struct bfa_ioc_stats_s { 303*a36c61f9SKrishna Gudipati struct bfa_ioc_drv_stats_s drv_stats; /* driver IOC stats */ 304*a36c61f9SKrishna Gudipati struct bfa_fw_ioc_stats_s fw_stats; /* firmware IOC stats */ 305*a36c61f9SKrishna Gudipati }; 306*a36c61f9SKrishna Gudipati 307*a36c61f9SKrishna Gudipati enum bfa_ioc_type_e { 308*a36c61f9SKrishna Gudipati BFA_IOC_TYPE_FC = 1, 309*a36c61f9SKrishna Gudipati BFA_IOC_TYPE_FCoE = 2, 310*a36c61f9SKrishna Gudipati BFA_IOC_TYPE_LL = 3, 311*a36c61f9SKrishna Gudipati }; 312*a36c61f9SKrishna Gudipati 313*a36c61f9SKrishna Gudipati /** 314*a36c61f9SKrishna Gudipati * IOC attributes returned in queries 315*a36c61f9SKrishna Gudipati */ 316*a36c61f9SKrishna Gudipati struct bfa_ioc_attr_s { 317*a36c61f9SKrishna Gudipati enum bfa_ioc_type_e ioc_type; 318*a36c61f9SKrishna Gudipati enum bfa_ioc_state state; /* IOC state */ 319*a36c61f9SKrishna Gudipati struct bfa_adapter_attr_s adapter_attr; /* HBA attributes */ 320*a36c61f9SKrishna Gudipati struct bfa_ioc_driver_attr_s driver_attr; /* driver attr */ 321*a36c61f9SKrishna Gudipati struct bfa_ioc_pci_attr_s pci_attr; 322*a36c61f9SKrishna Gudipati u8 port_id; /* port number */ 323*a36c61f9SKrishna Gudipati u8 rsvd[7]; /* 64bit align */ 324*a36c61f9SKrishna Gudipati }; 325*a36c61f9SKrishna Gudipati 326*a36c61f9SKrishna Gudipati /** 327*a36c61f9SKrishna Gudipati * ---------------------- mfg definitions ------------ 328*a36c61f9SKrishna Gudipati */ 329*a36c61f9SKrishna Gudipati 330*a36c61f9SKrishna Gudipati /** 331*a36c61f9SKrishna Gudipati * Checksum size 332*a36c61f9SKrishna Gudipati */ 333*a36c61f9SKrishna Gudipati #define BFA_MFG_CHKSUM_SIZE 16 334*a36c61f9SKrishna Gudipati 335*a36c61f9SKrishna Gudipati #define BFA_MFG_PARTNUM_SIZE 14 336*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_ID_SIZE 10 337*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_PARTNUM_SIZE 20 338*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_SERIALNUM_SIZE 20 339*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_REVISION_SIZE 4 340*a36c61f9SKrishna Gudipati 341*a36c61f9SKrishna Gudipati #pragma pack(1) 342*a36c61f9SKrishna Gudipati 343*a36c61f9SKrishna Gudipati /** 344*a36c61f9SKrishna Gudipati * All numerical fields are in big-endian format. 345*a36c61f9SKrishna Gudipati */ 346*a36c61f9SKrishna Gudipati struct bfa_mfg_block_s { 347*a36c61f9SKrishna Gudipati u8 version; /* manufacturing block version */ 348*a36c61f9SKrishna Gudipati u8 mfg_sig[3]; /* characters 'M', 'F', 'G' */ 349*a36c61f9SKrishna Gudipati u16 mfgsize; /* mfg block size */ 350*a36c61f9SKrishna Gudipati u16 u16_chksum; /* old u16 checksum */ 351*a36c61f9SKrishna Gudipati char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; 352*a36c61f9SKrishna Gudipati char brcd_partnum[STRSZ(BFA_MFG_PARTNUM_SIZE)]; 353*a36c61f9SKrishna Gudipati u8 mfg_day; /* manufacturing day */ 354*a36c61f9SKrishna Gudipati u8 mfg_month; /* manufacturing month */ 355*a36c61f9SKrishna Gudipati u16 mfg_year; /* manufacturing year */ 356*a36c61f9SKrishna Gudipati wwn_t mfg_wwn; /* wwn base for this adapter */ 357*a36c61f9SKrishna Gudipati u8 num_wwn; /* number of wwns assigned */ 358*a36c61f9SKrishna Gudipati u8 mfg_speeds; /* speeds allowed for this adapter */ 359*a36c61f9SKrishna Gudipati u8 rsv[2]; 360*a36c61f9SKrishna Gudipati char supplier_id[STRSZ(BFA_MFG_SUPPLIER_ID_SIZE)]; 361*a36c61f9SKrishna Gudipati char supplier_partnum[STRSZ(BFA_MFG_SUPPLIER_PARTNUM_SIZE)]; 362*a36c61f9SKrishna Gudipati char 363*a36c61f9SKrishna Gudipati supplier_serialnum[STRSZ(BFA_MFG_SUPPLIER_SERIALNUM_SIZE)]; 364*a36c61f9SKrishna Gudipati char 365*a36c61f9SKrishna Gudipati supplier_revision[STRSZ(BFA_MFG_SUPPLIER_REVISION_SIZE)]; 366*a36c61f9SKrishna Gudipati mac_t mfg_mac; /* mac address */ 367*a36c61f9SKrishna Gudipati u8 num_mac; /* number of mac addresses */ 368*a36c61f9SKrishna Gudipati u8 rsv2; 369*a36c61f9SKrishna Gudipati u32 mfg_type; /* card type */ 370*a36c61f9SKrishna Gudipati u8 rsv3[108]; 371*a36c61f9SKrishna Gudipati u8 md5_chksum[BFA_MFG_CHKSUM_SIZE]; /* md5 checksum */ 372*a36c61f9SKrishna Gudipati }; 373*a36c61f9SKrishna Gudipati 374*a36c61f9SKrishna Gudipati #pragma pack() 375*a36c61f9SKrishna Gudipati 376*a36c61f9SKrishna Gudipati /** 377*a36c61f9SKrishna Gudipati * ---------------------- pci definitions ------------ 378*a36c61f9SKrishna Gudipati */ 379*a36c61f9SKrishna Gudipati 380*a36c61f9SKrishna Gudipati /** 381*a36c61f9SKrishna Gudipati * PCI device and vendor ID information 382*a36c61f9SKrishna Gudipati */ 383*a36c61f9SKrishna Gudipati enum { 384*a36c61f9SKrishna Gudipati BFA_PCI_VENDOR_ID_BROCADE = 0x1657, 385*a36c61f9SKrishna Gudipati BFA_PCI_DEVICE_ID_FC_8G2P = 0x13, 386*a36c61f9SKrishna Gudipati BFA_PCI_DEVICE_ID_FC_8G1P = 0x17, 387*a36c61f9SKrishna Gudipati BFA_PCI_DEVICE_ID_CT = 0x14, 388*a36c61f9SKrishna Gudipati BFA_PCI_DEVICE_ID_CT_FC = 0x21, 389*a36c61f9SKrishna Gudipati }; 390*a36c61f9SKrishna Gudipati 391*a36c61f9SKrishna Gudipati #define bfa_asic_id_ct(devid) \ 392*a36c61f9SKrishna Gudipati ((devid) == BFA_PCI_DEVICE_ID_CT || \ 393*a36c61f9SKrishna Gudipati (devid) == BFA_PCI_DEVICE_ID_CT_FC) 394*a36c61f9SKrishna Gudipati 395*a36c61f9SKrishna Gudipati /** 396*a36c61f9SKrishna Gudipati * PCI sub-system device and vendor ID information 397*a36c61f9SKrishna Gudipati */ 398*a36c61f9SKrishna Gudipati enum { 399*a36c61f9SKrishna Gudipati BFA_PCI_FCOE_SSDEVICE_ID = 0x14, 400*a36c61f9SKrishna Gudipati }; 401*a36c61f9SKrishna Gudipati 402*a36c61f9SKrishna Gudipati /** 403*a36c61f9SKrishna Gudipati * Maximum number of device address ranges mapped through different BAR(s) 404*a36c61f9SKrishna Gudipati */ 405*a36c61f9SKrishna Gudipati #define BFA_PCI_ACCESS_RANGES 1 406*a36c61f9SKrishna Gudipati 407*a36c61f9SKrishna Gudipati /* 408*a36c61f9SKrishna Gudipati * Port speed settings. Each specific speed is a bit field. Use multiple 409*a36c61f9SKrishna Gudipati * bits to specify speeds to be selected for auto-negotiation. 410*a36c61f9SKrishna Gudipati */ 411*a36c61f9SKrishna Gudipati enum bfa_port_speed { 412*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_UNKNOWN = 0, 413*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_1GBPS = 1, 414*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_2GBPS = 2, 415*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_4GBPS = 4, 416*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_8GBPS = 8, 417*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_10GBPS = 10, 418*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_16GBPS = 16, 419*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_AUTO = 420*a36c61f9SKrishna Gudipati (BFA_PORT_SPEED_1GBPS | BFA_PORT_SPEED_2GBPS | 421*a36c61f9SKrishna Gudipati BFA_PORT_SPEED_4GBPS | BFA_PORT_SPEED_8GBPS), 422*a36c61f9SKrishna Gudipati }; 423*a36c61f9SKrishna Gudipati #define bfa_port_speed_t enum bfa_port_speed 424*a36c61f9SKrishna Gudipati 425*a36c61f9SKrishna Gudipati enum { 426*a36c61f9SKrishna Gudipati BFA_BOOT_BOOTLUN_MAX = 4, /* maximum boot lun per IOC */ 427*a36c61f9SKrishna Gudipati BFA_PREBOOT_BOOTLUN_MAX = 8, /* maximum preboot lun per IOC */ 428*a36c61f9SKrishna Gudipati }; 429*a36c61f9SKrishna Gudipati 430*a36c61f9SKrishna Gudipati #define BOOT_CFG_REV1 1 431*a36c61f9SKrishna Gudipati #define BOOT_CFG_VLAN 1 432*a36c61f9SKrishna Gudipati 433*a36c61f9SKrishna Gudipati /** 434*a36c61f9SKrishna Gudipati * Boot options setting. Boot options setting determines from where 435*a36c61f9SKrishna Gudipati * to get the boot lun information 436*a36c61f9SKrishna Gudipati */ 437*a36c61f9SKrishna Gudipati enum bfa_boot_bootopt { 438*a36c61f9SKrishna Gudipati BFA_BOOT_AUTO_DISCOVER = 0, /* Boot from blun provided by fabric */ 439*a36c61f9SKrishna Gudipati BFA_BOOT_STORED_BLUN = 1, /* Boot from bluns stored in flash */ 440*a36c61f9SKrishna Gudipati BFA_BOOT_FIRST_LUN = 2, /* Boot from first discovered blun */ 441*a36c61f9SKrishna Gudipati BFA_BOOT_PBC = 3, /* Boot from pbc configured blun */ 442*a36c61f9SKrishna Gudipati }; 443*a36c61f9SKrishna Gudipati 444*a36c61f9SKrishna Gudipati #pragma pack(1) 445*a36c61f9SKrishna Gudipati /** 446*a36c61f9SKrishna Gudipati * Boot lun information. 447*a36c61f9SKrishna Gudipati */ 448*a36c61f9SKrishna Gudipati struct bfa_boot_bootlun_s { 449*a36c61f9SKrishna Gudipati wwn_t pwwn; /* port wwn of target */ 450*a36c61f9SKrishna Gudipati lun_t lun; /* 64-bit lun */ 451*a36c61f9SKrishna Gudipati }; 452*a36c61f9SKrishna Gudipati #pragma pack() 453*a36c61f9SKrishna Gudipati 454*a36c61f9SKrishna Gudipati /** 455*a36c61f9SKrishna Gudipati * BOOT boot configuraton 456*a36c61f9SKrishna Gudipati */ 457*a36c61f9SKrishna Gudipati struct bfa_boot_pbc_s { 458*a36c61f9SKrishna Gudipati u8 enable; /* enable/disable SAN boot */ 459*a36c61f9SKrishna Gudipati u8 speed; /* boot speed settings */ 460*a36c61f9SKrishna Gudipati u8 topology; /* boot topology setting */ 461*a36c61f9SKrishna Gudipati u8 rsvd1; 462*a36c61f9SKrishna Gudipati u32 nbluns; /* number of boot luns */ 463*a36c61f9SKrishna Gudipati struct bfa_boot_bootlun_s pblun[BFA_PREBOOT_BOOTLUN_MAX]; 464*a36c61f9SKrishna Gudipati }; 465*a36c61f9SKrishna Gudipati 466*a36c61f9SKrishna Gudipati #endif /* __BFA_DEFS_H__ */ 467