1*f844a0eaSJeff Kirsher /* 2*f844a0eaSJeff Kirsher * Linux network driver for Brocade Converged Network Adapter. 3*f844a0eaSJeff Kirsher * 4*f844a0eaSJeff Kirsher * This program is free software; you can redistribute it and/or modify it 5*f844a0eaSJeff Kirsher * under the terms of the GNU General Public License (GPL) Version 2 as 6*f844a0eaSJeff Kirsher * published by the Free Software Foundation 7*f844a0eaSJeff Kirsher * 8*f844a0eaSJeff Kirsher * This program is distributed in the hope that it will be useful, but 9*f844a0eaSJeff Kirsher * WITHOUT ANY WARRANTY; without even the implied warranty of 10*f844a0eaSJeff Kirsher * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11*f844a0eaSJeff Kirsher * General Public License for more details. 12*f844a0eaSJeff Kirsher */ 13*f844a0eaSJeff Kirsher /* 14*f844a0eaSJeff Kirsher * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. 15*f844a0eaSJeff Kirsher * All rights reserved 16*f844a0eaSJeff Kirsher * www.brocade.com 17*f844a0eaSJeff Kirsher */ 18*f844a0eaSJeff Kirsher 19*f844a0eaSJeff Kirsher #ifndef __BFI_H__ 20*f844a0eaSJeff Kirsher #define __BFI_H__ 21*f844a0eaSJeff Kirsher 22*f844a0eaSJeff Kirsher #include "bfa_defs.h" 23*f844a0eaSJeff Kirsher 24*f844a0eaSJeff Kirsher #pragma pack(1) 25*f844a0eaSJeff Kirsher 26*f844a0eaSJeff Kirsher /** 27*f844a0eaSJeff Kirsher * BFI FW image type 28*f844a0eaSJeff Kirsher */ 29*f844a0eaSJeff Kirsher #define BFI_FLASH_CHUNK_SZ 256 /*!< Flash chunk size */ 30*f844a0eaSJeff Kirsher #define BFI_FLASH_CHUNK_SZ_WORDS (BFI_FLASH_CHUNK_SZ/sizeof(u32)) 31*f844a0eaSJeff Kirsher enum { 32*f844a0eaSJeff Kirsher BFI_IMAGE_CB_FC, 33*f844a0eaSJeff Kirsher BFI_IMAGE_CT_FC, 34*f844a0eaSJeff Kirsher BFI_IMAGE_CT_CNA, 35*f844a0eaSJeff Kirsher BFI_IMAGE_MAX, 36*f844a0eaSJeff Kirsher }; 37*f844a0eaSJeff Kirsher 38*f844a0eaSJeff Kirsher /** 39*f844a0eaSJeff Kirsher * Msg header common to all msgs 40*f844a0eaSJeff Kirsher */ 41*f844a0eaSJeff Kirsher struct bfi_mhdr { 42*f844a0eaSJeff Kirsher u8 msg_class; /*!< @ref enum bfi_mclass */ 43*f844a0eaSJeff Kirsher u8 msg_id; /*!< msg opcode with in the class */ 44*f844a0eaSJeff Kirsher union { 45*f844a0eaSJeff Kirsher struct { 46*f844a0eaSJeff Kirsher u8 rsvd; 47*f844a0eaSJeff Kirsher u8 lpu_id; /*!< msg destination */ 48*f844a0eaSJeff Kirsher } h2i; 49*f844a0eaSJeff Kirsher u16 i2htok; /*!< token in msgs to host */ 50*f844a0eaSJeff Kirsher } mtag; 51*f844a0eaSJeff Kirsher }; 52*f844a0eaSJeff Kirsher 53*f844a0eaSJeff Kirsher #define bfi_h2i_set(_mh, _mc, _op, _lpuid) do { \ 54*f844a0eaSJeff Kirsher (_mh).msg_class = (_mc); \ 55*f844a0eaSJeff Kirsher (_mh).msg_id = (_op); \ 56*f844a0eaSJeff Kirsher (_mh).mtag.h2i.lpu_id = (_lpuid); \ 57*f844a0eaSJeff Kirsher } while (0) 58*f844a0eaSJeff Kirsher 59*f844a0eaSJeff Kirsher #define bfi_i2h_set(_mh, _mc, _op, _i2htok) do { \ 60*f844a0eaSJeff Kirsher (_mh).msg_class = (_mc); \ 61*f844a0eaSJeff Kirsher (_mh).msg_id = (_op); \ 62*f844a0eaSJeff Kirsher (_mh).mtag.i2htok = (_i2htok); \ 63*f844a0eaSJeff Kirsher } while (0) 64*f844a0eaSJeff Kirsher 65*f844a0eaSJeff Kirsher /* 66*f844a0eaSJeff Kirsher * Message opcodes: 0-127 to firmware, 128-255 to host 67*f844a0eaSJeff Kirsher */ 68*f844a0eaSJeff Kirsher #define BFI_I2H_OPCODE_BASE 128 69*f844a0eaSJeff Kirsher #define BFA_I2HM(_x) ((_x) + BFI_I2H_OPCODE_BASE) 70*f844a0eaSJeff Kirsher 71*f844a0eaSJeff Kirsher /** 72*f844a0eaSJeff Kirsher **************************************************************************** 73*f844a0eaSJeff Kirsher * 74*f844a0eaSJeff Kirsher * Scatter Gather Element and Page definition 75*f844a0eaSJeff Kirsher * 76*f844a0eaSJeff Kirsher **************************************************************************** 77*f844a0eaSJeff Kirsher */ 78*f844a0eaSJeff Kirsher 79*f844a0eaSJeff Kirsher #define BFI_SGE_INLINE 1 80*f844a0eaSJeff Kirsher #define BFI_SGE_INLINE_MAX (BFI_SGE_INLINE + 1) 81*f844a0eaSJeff Kirsher 82*f844a0eaSJeff Kirsher /** 83*f844a0eaSJeff Kirsher * SG Flags 84*f844a0eaSJeff Kirsher */ 85*f844a0eaSJeff Kirsher enum { 86*f844a0eaSJeff Kirsher BFI_SGE_DATA = 0, /*!< data address, not last */ 87*f844a0eaSJeff Kirsher BFI_SGE_DATA_CPL = 1, /*!< data addr, last in current page */ 88*f844a0eaSJeff Kirsher BFI_SGE_DATA_LAST = 3, /*!< data address, last */ 89*f844a0eaSJeff Kirsher BFI_SGE_LINK = 2, /*!< link address */ 90*f844a0eaSJeff Kirsher BFI_SGE_PGDLEN = 2, /*!< cumulative data length for page */ 91*f844a0eaSJeff Kirsher }; 92*f844a0eaSJeff Kirsher 93*f844a0eaSJeff Kirsher /** 94*f844a0eaSJeff Kirsher * DMA addresses 95*f844a0eaSJeff Kirsher */ 96*f844a0eaSJeff Kirsher union bfi_addr_u { 97*f844a0eaSJeff Kirsher struct { 98*f844a0eaSJeff Kirsher u32 addr_lo; 99*f844a0eaSJeff Kirsher u32 addr_hi; 100*f844a0eaSJeff Kirsher } a32; 101*f844a0eaSJeff Kirsher }; 102*f844a0eaSJeff Kirsher 103*f844a0eaSJeff Kirsher /** 104*f844a0eaSJeff Kirsher * Scatter Gather Element 105*f844a0eaSJeff Kirsher */ 106*f844a0eaSJeff Kirsher struct bfi_sge { 107*f844a0eaSJeff Kirsher #ifdef __BIGENDIAN 108*f844a0eaSJeff Kirsher u32 flags:2, 109*f844a0eaSJeff Kirsher rsvd:2, 110*f844a0eaSJeff Kirsher sg_len:28; 111*f844a0eaSJeff Kirsher #else 112*f844a0eaSJeff Kirsher u32 sg_len:28, 113*f844a0eaSJeff Kirsher rsvd:2, 114*f844a0eaSJeff Kirsher flags:2; 115*f844a0eaSJeff Kirsher #endif 116*f844a0eaSJeff Kirsher union bfi_addr_u sga; 117*f844a0eaSJeff Kirsher }; 118*f844a0eaSJeff Kirsher 119*f844a0eaSJeff Kirsher /** 120*f844a0eaSJeff Kirsher * Scatter Gather Page 121*f844a0eaSJeff Kirsher */ 122*f844a0eaSJeff Kirsher #define BFI_SGPG_DATA_SGES 7 123*f844a0eaSJeff Kirsher #define BFI_SGPG_SGES_MAX (BFI_SGPG_DATA_SGES + 1) 124*f844a0eaSJeff Kirsher #define BFI_SGPG_RSVD_WD_LEN 8 125*f844a0eaSJeff Kirsher struct bfi_sgpg { 126*f844a0eaSJeff Kirsher struct bfi_sge sges[BFI_SGPG_SGES_MAX]; 127*f844a0eaSJeff Kirsher u32 rsvd[BFI_SGPG_RSVD_WD_LEN]; 128*f844a0eaSJeff Kirsher }; 129*f844a0eaSJeff Kirsher 130*f844a0eaSJeff Kirsher /* 131*f844a0eaSJeff Kirsher * Large Message structure - 128 Bytes size Msgs 132*f844a0eaSJeff Kirsher */ 133*f844a0eaSJeff Kirsher #define BFI_LMSG_SZ 128 134*f844a0eaSJeff Kirsher #define BFI_LMSG_PL_WSZ \ 135*f844a0eaSJeff Kirsher ((BFI_LMSG_SZ - sizeof(struct bfi_mhdr)) / 4) 136*f844a0eaSJeff Kirsher 137*f844a0eaSJeff Kirsher struct bfi_msg { 138*f844a0eaSJeff Kirsher struct bfi_mhdr mhdr; 139*f844a0eaSJeff Kirsher u32 pl[BFI_LMSG_PL_WSZ]; 140*f844a0eaSJeff Kirsher }; 141*f844a0eaSJeff Kirsher 142*f844a0eaSJeff Kirsher /** 143*f844a0eaSJeff Kirsher * Mailbox message structure 144*f844a0eaSJeff Kirsher */ 145*f844a0eaSJeff Kirsher #define BFI_MBMSG_SZ 7 146*f844a0eaSJeff Kirsher struct bfi_mbmsg { 147*f844a0eaSJeff Kirsher struct bfi_mhdr mh; 148*f844a0eaSJeff Kirsher u32 pl[BFI_MBMSG_SZ]; 149*f844a0eaSJeff Kirsher }; 150*f844a0eaSJeff Kirsher 151*f844a0eaSJeff Kirsher /** 152*f844a0eaSJeff Kirsher * Message Classes 153*f844a0eaSJeff Kirsher */ 154*f844a0eaSJeff Kirsher enum bfi_mclass { 155*f844a0eaSJeff Kirsher BFI_MC_IOC = 1, /*!< IO Controller (IOC) */ 156*f844a0eaSJeff Kirsher BFI_MC_DIAG = 2, /*!< Diagnostic Msgs */ 157*f844a0eaSJeff Kirsher BFI_MC_FLASH = 3, /*!< Flash message class */ 158*f844a0eaSJeff Kirsher BFI_MC_CEE = 4, /*!< CEE */ 159*f844a0eaSJeff Kirsher BFI_MC_FCPORT = 5, /*!< FC port */ 160*f844a0eaSJeff Kirsher BFI_MC_IOCFC = 6, /*!< FC - IO Controller (IOC) */ 161*f844a0eaSJeff Kirsher BFI_MC_LL = 7, /*!< Link Layer */ 162*f844a0eaSJeff Kirsher BFI_MC_UF = 8, /*!< Unsolicited frame receive */ 163*f844a0eaSJeff Kirsher BFI_MC_FCXP = 9, /*!< FC Transport */ 164*f844a0eaSJeff Kirsher BFI_MC_LPS = 10, /*!< lport fc login services */ 165*f844a0eaSJeff Kirsher BFI_MC_RPORT = 11, /*!< Remote port */ 166*f844a0eaSJeff Kirsher BFI_MC_ITNIM = 12, /*!< I-T nexus (Initiator mode) */ 167*f844a0eaSJeff Kirsher BFI_MC_IOIM_READ = 13, /*!< read IO (Initiator mode) */ 168*f844a0eaSJeff Kirsher BFI_MC_IOIM_WRITE = 14, /*!< write IO (Initiator mode) */ 169*f844a0eaSJeff Kirsher BFI_MC_IOIM_IO = 15, /*!< IO (Initiator mode) */ 170*f844a0eaSJeff Kirsher BFI_MC_IOIM = 16, /*!< IO (Initiator mode) */ 171*f844a0eaSJeff Kirsher BFI_MC_IOIM_IOCOM = 17, /*!< good IO completion */ 172*f844a0eaSJeff Kirsher BFI_MC_TSKIM = 18, /*!< Initiator Task management */ 173*f844a0eaSJeff Kirsher BFI_MC_SBOOT = 19, /*!< SAN boot services */ 174*f844a0eaSJeff Kirsher BFI_MC_IPFC = 20, /*!< IP over FC Msgs */ 175*f844a0eaSJeff Kirsher BFI_MC_PORT = 21, /*!< Physical port */ 176*f844a0eaSJeff Kirsher BFI_MC_SFP = 22, /*!< SFP module */ 177*f844a0eaSJeff Kirsher BFI_MC_MSGQ = 23, /*!< MSGQ */ 178*f844a0eaSJeff Kirsher BFI_MC_ENET = 24, /*!< ENET commands/responses */ 179*f844a0eaSJeff Kirsher BFI_MC_MAX = 32 180*f844a0eaSJeff Kirsher }; 181*f844a0eaSJeff Kirsher 182*f844a0eaSJeff Kirsher #define BFI_IOC_MAX_CQS 4 183*f844a0eaSJeff Kirsher #define BFI_IOC_MAX_CQS_ASIC 8 184*f844a0eaSJeff Kirsher #define BFI_IOC_MSGLEN_MAX 32 /* 32 bytes */ 185*f844a0eaSJeff Kirsher 186*f844a0eaSJeff Kirsher #define BFI_BOOT_TYPE_OFF 8 187*f844a0eaSJeff Kirsher #define BFI_BOOT_LOADER_OFF 12 188*f844a0eaSJeff Kirsher 189*f844a0eaSJeff Kirsher #define BFI_BOOT_TYPE_NORMAL 0 190*f844a0eaSJeff Kirsher #define BFI_BOOT_TYPE_FLASH 1 191*f844a0eaSJeff Kirsher #define BFI_BOOT_TYPE_MEMTEST 2 192*f844a0eaSJeff Kirsher 193*f844a0eaSJeff Kirsher #define BFI_BOOT_LOADER_OS 0 194*f844a0eaSJeff Kirsher 195*f844a0eaSJeff Kirsher #define BFI_BOOT_MEMTEST_RES_ADDR 0x900 196*f844a0eaSJeff Kirsher #define BFI_BOOT_MEMTEST_RES_SIG 0xA0A1A2A3 197*f844a0eaSJeff Kirsher 198*f844a0eaSJeff Kirsher /** 199*f844a0eaSJeff Kirsher *---------------------------------------------------------------------- 200*f844a0eaSJeff Kirsher * IOC 201*f844a0eaSJeff Kirsher *---------------------------------------------------------------------- 202*f844a0eaSJeff Kirsher */ 203*f844a0eaSJeff Kirsher 204*f844a0eaSJeff Kirsher enum bfi_ioc_h2i_msgs { 205*f844a0eaSJeff Kirsher BFI_IOC_H2I_ENABLE_REQ = 1, 206*f844a0eaSJeff Kirsher BFI_IOC_H2I_DISABLE_REQ = 2, 207*f844a0eaSJeff Kirsher BFI_IOC_H2I_GETATTR_REQ = 3, 208*f844a0eaSJeff Kirsher BFI_IOC_H2I_DBG_SYNC = 4, 209*f844a0eaSJeff Kirsher BFI_IOC_H2I_DBG_DUMP = 5, 210*f844a0eaSJeff Kirsher }; 211*f844a0eaSJeff Kirsher 212*f844a0eaSJeff Kirsher enum bfi_ioc_i2h_msgs { 213*f844a0eaSJeff Kirsher BFI_IOC_I2H_ENABLE_REPLY = BFA_I2HM(1), 214*f844a0eaSJeff Kirsher BFI_IOC_I2H_DISABLE_REPLY = BFA_I2HM(2), 215*f844a0eaSJeff Kirsher BFI_IOC_I2H_GETATTR_REPLY = BFA_I2HM(3), 216*f844a0eaSJeff Kirsher BFI_IOC_I2H_READY_EVENT = BFA_I2HM(4), 217*f844a0eaSJeff Kirsher BFI_IOC_I2H_HBEAT = BFA_I2HM(5), 218*f844a0eaSJeff Kirsher }; 219*f844a0eaSJeff Kirsher 220*f844a0eaSJeff Kirsher /** 221*f844a0eaSJeff Kirsher * BFI_IOC_H2I_GETATTR_REQ message 222*f844a0eaSJeff Kirsher */ 223*f844a0eaSJeff Kirsher struct bfi_ioc_getattr_req { 224*f844a0eaSJeff Kirsher struct bfi_mhdr mh; 225*f844a0eaSJeff Kirsher union bfi_addr_u attr_addr; 226*f844a0eaSJeff Kirsher }; 227*f844a0eaSJeff Kirsher 228*f844a0eaSJeff Kirsher struct bfi_ioc_attr { 229*f844a0eaSJeff Kirsher u64 mfg_pwwn; /*!< Mfg port wwn */ 230*f844a0eaSJeff Kirsher u64 mfg_nwwn; /*!< Mfg node wwn */ 231*f844a0eaSJeff Kirsher mac_t mfg_mac; /*!< Mfg mac */ 232*f844a0eaSJeff Kirsher u16 rsvd_a; 233*f844a0eaSJeff Kirsher u64 pwwn; 234*f844a0eaSJeff Kirsher u64 nwwn; 235*f844a0eaSJeff Kirsher mac_t mac; /*!< PBC or Mfg mac */ 236*f844a0eaSJeff Kirsher u16 rsvd_b; 237*f844a0eaSJeff Kirsher mac_t fcoe_mac; 238*f844a0eaSJeff Kirsher u16 rsvd_c; 239*f844a0eaSJeff Kirsher char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; 240*f844a0eaSJeff Kirsher u8 pcie_gen; 241*f844a0eaSJeff Kirsher u8 pcie_lanes_orig; 242*f844a0eaSJeff Kirsher u8 pcie_lanes; 243*f844a0eaSJeff Kirsher u8 rx_bbcredit; /*!< receive buffer credits */ 244*f844a0eaSJeff Kirsher u32 adapter_prop; /*!< adapter properties */ 245*f844a0eaSJeff Kirsher u16 maxfrsize; /*!< max receive frame size */ 246*f844a0eaSJeff Kirsher char asic_rev; 247*f844a0eaSJeff Kirsher u8 rsvd_d; 248*f844a0eaSJeff Kirsher char fw_version[BFA_VERSION_LEN]; 249*f844a0eaSJeff Kirsher char optrom_version[BFA_VERSION_LEN]; 250*f844a0eaSJeff Kirsher struct bfa_mfg_vpd vpd; 251*f844a0eaSJeff Kirsher u32 card_type; /*!< card type */ 252*f844a0eaSJeff Kirsher }; 253*f844a0eaSJeff Kirsher 254*f844a0eaSJeff Kirsher /** 255*f844a0eaSJeff Kirsher * BFI_IOC_I2H_GETATTR_REPLY message 256*f844a0eaSJeff Kirsher */ 257*f844a0eaSJeff Kirsher struct bfi_ioc_getattr_reply { 258*f844a0eaSJeff Kirsher struct bfi_mhdr mh; /*!< Common msg header */ 259*f844a0eaSJeff Kirsher u8 status; /*!< cfg reply status */ 260*f844a0eaSJeff Kirsher u8 rsvd[3]; 261*f844a0eaSJeff Kirsher }; 262*f844a0eaSJeff Kirsher 263*f844a0eaSJeff Kirsher /** 264*f844a0eaSJeff Kirsher * Firmware memory page offsets 265*f844a0eaSJeff Kirsher */ 266*f844a0eaSJeff Kirsher #define BFI_IOC_SMEM_PG0_CB (0x40) 267*f844a0eaSJeff Kirsher #define BFI_IOC_SMEM_PG0_CT (0x180) 268*f844a0eaSJeff Kirsher 269*f844a0eaSJeff Kirsher /** 270*f844a0eaSJeff Kirsher * Firmware statistic offset 271*f844a0eaSJeff Kirsher */ 272*f844a0eaSJeff Kirsher #define BFI_IOC_FWSTATS_OFF (0x6B40) 273*f844a0eaSJeff Kirsher #define BFI_IOC_FWSTATS_SZ (4096) 274*f844a0eaSJeff Kirsher 275*f844a0eaSJeff Kirsher /** 276*f844a0eaSJeff Kirsher * Firmware trace offset 277*f844a0eaSJeff Kirsher */ 278*f844a0eaSJeff Kirsher #define BFI_IOC_TRC_OFF (0x4b00) 279*f844a0eaSJeff Kirsher #define BFI_IOC_TRC_ENTS 256 280*f844a0eaSJeff Kirsher 281*f844a0eaSJeff Kirsher #define BFI_IOC_FW_SIGNATURE (0xbfadbfad) 282*f844a0eaSJeff Kirsher #define BFI_IOC_MD5SUM_SZ 4 283*f844a0eaSJeff Kirsher struct bfi_ioc_image_hdr { 284*f844a0eaSJeff Kirsher u32 signature; /*!< constant signature */ 285*f844a0eaSJeff Kirsher u32 rsvd_a; 286*f844a0eaSJeff Kirsher u32 exec; /*!< exec vector */ 287*f844a0eaSJeff Kirsher u32 param; /*!< parameters */ 288*f844a0eaSJeff Kirsher u32 rsvd_b[4]; 289*f844a0eaSJeff Kirsher u32 md5sum[BFI_IOC_MD5SUM_SZ]; 290*f844a0eaSJeff Kirsher }; 291*f844a0eaSJeff Kirsher 292*f844a0eaSJeff Kirsher enum bfi_fwboot_type { 293*f844a0eaSJeff Kirsher BFI_FWBOOT_TYPE_NORMAL = 0, 294*f844a0eaSJeff Kirsher BFI_FWBOOT_TYPE_FLASH = 1, 295*f844a0eaSJeff Kirsher BFI_FWBOOT_TYPE_MEMTEST = 2, 296*f844a0eaSJeff Kirsher }; 297*f844a0eaSJeff Kirsher 298*f844a0eaSJeff Kirsher /** 299*f844a0eaSJeff Kirsher * BFI_IOC_I2H_READY_EVENT message 300*f844a0eaSJeff Kirsher */ 301*f844a0eaSJeff Kirsher struct bfi_ioc_rdy_event { 302*f844a0eaSJeff Kirsher struct bfi_mhdr mh; /*!< common msg header */ 303*f844a0eaSJeff Kirsher u8 init_status; /*!< init event status */ 304*f844a0eaSJeff Kirsher u8 rsvd[3]; 305*f844a0eaSJeff Kirsher }; 306*f844a0eaSJeff Kirsher 307*f844a0eaSJeff Kirsher struct bfi_ioc_hbeat { 308*f844a0eaSJeff Kirsher struct bfi_mhdr mh; /*!< common msg header */ 309*f844a0eaSJeff Kirsher u32 hb_count; /*!< current heart beat count */ 310*f844a0eaSJeff Kirsher }; 311*f844a0eaSJeff Kirsher 312*f844a0eaSJeff Kirsher /** 313*f844a0eaSJeff Kirsher * IOC hardware/firmware state 314*f844a0eaSJeff Kirsher */ 315*f844a0eaSJeff Kirsher enum bfi_ioc_state { 316*f844a0eaSJeff Kirsher BFI_IOC_UNINIT = 0, /*!< not initialized */ 317*f844a0eaSJeff Kirsher BFI_IOC_INITING = 1, /*!< h/w is being initialized */ 318*f844a0eaSJeff Kirsher BFI_IOC_HWINIT = 2, /*!< h/w is initialized */ 319*f844a0eaSJeff Kirsher BFI_IOC_CFG = 3, /*!< IOC configuration in progress */ 320*f844a0eaSJeff Kirsher BFI_IOC_OP = 4, /*!< IOC is operational */ 321*f844a0eaSJeff Kirsher BFI_IOC_DISABLING = 5, /*!< IOC is being disabled */ 322*f844a0eaSJeff Kirsher BFI_IOC_DISABLED = 6, /*!< IOC is disabled */ 323*f844a0eaSJeff Kirsher BFI_IOC_CFG_DISABLED = 7, /*!< IOC is being disabled;transient */ 324*f844a0eaSJeff Kirsher BFI_IOC_FAIL = 8, /*!< IOC heart-beat failure */ 325*f844a0eaSJeff Kirsher BFI_IOC_MEMTEST = 9, /*!< IOC is doing memtest */ 326*f844a0eaSJeff Kirsher }; 327*f844a0eaSJeff Kirsher 328*f844a0eaSJeff Kirsher #define BFI_IOC_ENDIAN_SIG 0x12345678 329*f844a0eaSJeff Kirsher 330*f844a0eaSJeff Kirsher enum { 331*f844a0eaSJeff Kirsher BFI_ADAPTER_TYPE_FC = 0x01, /*!< FC adapters */ 332*f844a0eaSJeff Kirsher BFI_ADAPTER_TYPE_MK = 0x0f0000, /*!< adapter type mask */ 333*f844a0eaSJeff Kirsher BFI_ADAPTER_TYPE_SH = 16, /*!< adapter type shift */ 334*f844a0eaSJeff Kirsher BFI_ADAPTER_NPORTS_MK = 0xff00, /*!< number of ports mask */ 335*f844a0eaSJeff Kirsher BFI_ADAPTER_NPORTS_SH = 8, /*!< number of ports shift */ 336*f844a0eaSJeff Kirsher BFI_ADAPTER_SPEED_MK = 0xff, /*!< adapter speed mask */ 337*f844a0eaSJeff Kirsher BFI_ADAPTER_SPEED_SH = 0, /*!< adapter speed shift */ 338*f844a0eaSJeff Kirsher BFI_ADAPTER_PROTO = 0x100000, /*!< prototype adapaters */ 339*f844a0eaSJeff Kirsher BFI_ADAPTER_TTV = 0x200000, /*!< TTV debug capable */ 340*f844a0eaSJeff Kirsher BFI_ADAPTER_UNSUPP = 0x400000, /*!< unknown adapter type */ 341*f844a0eaSJeff Kirsher }; 342*f844a0eaSJeff Kirsher 343*f844a0eaSJeff Kirsher #define BFI_ADAPTER_GETP(__prop, __adap_prop) \ 344*f844a0eaSJeff Kirsher (((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >> \ 345*f844a0eaSJeff Kirsher BFI_ADAPTER_ ## __prop ## _SH) 346*f844a0eaSJeff Kirsher #define BFI_ADAPTER_SETP(__prop, __val) \ 347*f844a0eaSJeff Kirsher ((__val) << BFI_ADAPTER_ ## __prop ## _SH) 348*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_PROTO(__adap_type) \ 349*f844a0eaSJeff Kirsher ((__adap_type) & BFI_ADAPTER_PROTO) 350*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_TTV(__adap_type) \ 351*f844a0eaSJeff Kirsher ((__adap_type) & BFI_ADAPTER_TTV) 352*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_UNSUPP(__adap_type) \ 353*f844a0eaSJeff Kirsher ((__adap_type) & BFI_ADAPTER_UNSUPP) 354*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_SPECIAL(__adap_type) \ 355*f844a0eaSJeff Kirsher ((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO | \ 356*f844a0eaSJeff Kirsher BFI_ADAPTER_UNSUPP)) 357*f844a0eaSJeff Kirsher 358*f844a0eaSJeff Kirsher /** 359*f844a0eaSJeff Kirsher * BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages 360*f844a0eaSJeff Kirsher */ 361*f844a0eaSJeff Kirsher struct bfi_ioc_ctrl_req { 362*f844a0eaSJeff Kirsher struct bfi_mhdr mh; 363*f844a0eaSJeff Kirsher u8 ioc_class; 364*f844a0eaSJeff Kirsher u8 rsvd[3]; 365*f844a0eaSJeff Kirsher u32 tv_sec; 366*f844a0eaSJeff Kirsher }; 367*f844a0eaSJeff Kirsher 368*f844a0eaSJeff Kirsher /** 369*f844a0eaSJeff Kirsher * BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages 370*f844a0eaSJeff Kirsher */ 371*f844a0eaSJeff Kirsher struct bfi_ioc_ctrl_reply { 372*f844a0eaSJeff Kirsher struct bfi_mhdr mh; /*!< Common msg header */ 373*f844a0eaSJeff Kirsher u8 status; /*!< enable/disable status */ 374*f844a0eaSJeff Kirsher u8 rsvd[3]; 375*f844a0eaSJeff Kirsher }; 376*f844a0eaSJeff Kirsher 377*f844a0eaSJeff Kirsher #define BFI_IOC_MSGSZ 8 378*f844a0eaSJeff Kirsher /** 379*f844a0eaSJeff Kirsher * H2I Messages 380*f844a0eaSJeff Kirsher */ 381*f844a0eaSJeff Kirsher union bfi_ioc_h2i_msg_u { 382*f844a0eaSJeff Kirsher struct bfi_mhdr mh; 383*f844a0eaSJeff Kirsher struct bfi_ioc_ctrl_req enable_req; 384*f844a0eaSJeff Kirsher struct bfi_ioc_ctrl_req disable_req; 385*f844a0eaSJeff Kirsher struct bfi_ioc_getattr_req getattr_req; 386*f844a0eaSJeff Kirsher u32 mboxmsg[BFI_IOC_MSGSZ]; 387*f844a0eaSJeff Kirsher }; 388*f844a0eaSJeff Kirsher 389*f844a0eaSJeff Kirsher /** 390*f844a0eaSJeff Kirsher * I2H Messages 391*f844a0eaSJeff Kirsher */ 392*f844a0eaSJeff Kirsher union bfi_ioc_i2h_msg_u { 393*f844a0eaSJeff Kirsher struct bfi_mhdr mh; 394*f844a0eaSJeff Kirsher struct bfi_ioc_rdy_event rdy_event; 395*f844a0eaSJeff Kirsher u32 mboxmsg[BFI_IOC_MSGSZ]; 396*f844a0eaSJeff Kirsher }; 397*f844a0eaSJeff Kirsher 398*f844a0eaSJeff Kirsher #pragma pack() 399*f844a0eaSJeff Kirsher 400*f844a0eaSJeff Kirsher #endif /* __BFI_H__ */ 401