0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __BFA_DEFS_H__
0012 #define __BFA_DEFS_H__
0013
0014 #include "bfa_fc.h"
0015 #include "bfad_drv.h"
0016
0017 #define BFA_MFG_SERIALNUM_SIZE 11
0018 #define STRSZ(_n) (((_n) + 4) & ~3)
0019
0020
0021
0022
0023 enum {
0024 BFA_MFG_TYPE_CB_MAX = 825,
0025 BFA_MFG_TYPE_FC8P2 = 825,
0026 BFA_MFG_TYPE_FC8P1 = 815,
0027 BFA_MFG_TYPE_FC4P2 = 425,
0028 BFA_MFG_TYPE_FC4P1 = 415,
0029 BFA_MFG_TYPE_CNA10P2 = 1020,
0030 BFA_MFG_TYPE_CNA10P1 = 1010,
0031 BFA_MFG_TYPE_JAYHAWK = 804,
0032 BFA_MFG_TYPE_WANCHESE = 1007,
0033 BFA_MFG_TYPE_ASTRA = 807,
0034 BFA_MFG_TYPE_LIGHTNING_P0 = 902,
0035 BFA_MFG_TYPE_LIGHTNING = 1741,
0036 BFA_MFG_TYPE_PROWLER_F = 1560,
0037 BFA_MFG_TYPE_PROWLER_N = 1410,
0038 BFA_MFG_TYPE_PROWLER_C = 1710,
0039 BFA_MFG_TYPE_PROWLER_D = 1860,
0040 BFA_MFG_TYPE_CHINOOK = 1867,
0041 BFA_MFG_TYPE_CHINOOK2 = 1869,
0042 BFA_MFG_TYPE_INVALID = 0,
0043 };
0044
0045 #pragma pack(1)
0046
0047
0048
0049
0050 #define bfa_mfg_is_mezz(type) (( \
0051 (type) == BFA_MFG_TYPE_JAYHAWK || \
0052 (type) == BFA_MFG_TYPE_WANCHESE || \
0053 (type) == BFA_MFG_TYPE_ASTRA || \
0054 (type) == BFA_MFG_TYPE_LIGHTNING_P0 || \
0055 (type) == BFA_MFG_TYPE_LIGHTNING || \
0056 (type) == BFA_MFG_TYPE_CHINOOK || \
0057 (type) == BFA_MFG_TYPE_CHINOOK2))
0058
0059
0060
0061
0062 #define bfa_mfg_is_old_wwn_mac_model(type) (( \
0063 (type) == BFA_MFG_TYPE_FC8P2 || \
0064 (type) == BFA_MFG_TYPE_FC8P1 || \
0065 (type) == BFA_MFG_TYPE_FC4P2 || \
0066 (type) == BFA_MFG_TYPE_FC4P1 || \
0067 (type) == BFA_MFG_TYPE_CNA10P2 || \
0068 (type) == BFA_MFG_TYPE_CNA10P1 || \
0069 (type) == BFA_MFG_TYPE_JAYHAWK || \
0070 (type) == BFA_MFG_TYPE_WANCHESE))
0071
0072 #define bfa_mfg_increment_wwn_mac(m, i) \
0073 do { \
0074 u32 t = ((u32)(m)[0] << 16) | ((u32)(m)[1] << 8) | \
0075 (u32)(m)[2]; \
0076 t += (i); \
0077 (m)[0] = (t >> 16) & 0xFF; \
0078 (m)[1] = (t >> 8) & 0xFF; \
0079 (m)[2] = t & 0xFF; \
0080 } while (0)
0081
0082
0083
0084
0085 #define BFA_MFG_VPD_LEN 512
0086
0087
0088
0089
0090 enum {
0091 BFA_MFG_VPD_UNKNOWN = 0,
0092 BFA_MFG_VPD_IBM = 1,
0093 BFA_MFG_VPD_HP = 2,
0094 BFA_MFG_VPD_DELL = 3,
0095 BFA_MFG_VPD_PCI_IBM = 0x08,
0096 BFA_MFG_VPD_PCI_HP = 0x10,
0097 BFA_MFG_VPD_PCI_DELL = 0x20,
0098 BFA_MFG_VPD_PCI_BRCD = 0xf8,
0099 };
0100
0101
0102
0103
0104 struct bfa_mfg_vpd_s {
0105 u8 version;
0106 u8 vpd_sig[3];
0107 u8 chksum;
0108 u8 vendor;
0109 u8 len;
0110 u8 rsv;
0111 u8 data[BFA_MFG_VPD_LEN];
0112 };
0113
0114 #pragma pack()
0115
0116
0117
0118
0119 enum bfa_status {
0120 BFA_STATUS_OK = 0,
0121 BFA_STATUS_FAILED = 1,
0122 BFA_STATUS_EINVAL = 2,
0123
0124 BFA_STATUS_ENOMEM = 3,
0125 BFA_STATUS_ETIMER = 5,
0126
0127 BFA_STATUS_EPROTOCOL = 6,
0128 BFA_STATUS_BADFLASH = 9,
0129 BFA_STATUS_SFP_UNSUPP = 10,
0130 BFA_STATUS_UNKNOWN_VFID = 11,
0131 BFA_STATUS_DATACORRUPTED = 12,
0132 BFA_STATUS_DEVBUSY = 13,
0133 BFA_STATUS_HDMA_FAILED = 16,
0134 BFA_STATUS_FLASH_BAD_LEN = 17,
0135 BFA_STATUS_UNKNOWN_LWWN = 18,
0136 BFA_STATUS_UNKNOWN_RWWN = 19,
0137 BFA_STATUS_VPORT_EXISTS = 21,
0138 BFA_STATUS_VPORT_MAX = 22,
0139 BFA_STATUS_UNSUPP_SPEED = 23,
0140 BFA_STATUS_INVLD_DFSZ = 24,
0141 BFA_STATUS_CMD_NOTSUPP = 26,
0142 BFA_STATUS_FABRIC_RJT = 29,
0143 BFA_STATUS_UNKNOWN_VWWN = 30,
0144 BFA_STATUS_PORT_OFFLINE = 34,
0145 BFA_STATUS_VPORT_WWN_BP = 46,
0146 BFA_STATUS_PORT_NOT_DISABLED = 47,
0147 BFA_STATUS_NO_FCPIM_NEXUS = 52,
0148 BFA_STATUS_IOC_FAILURE = 56,
0149
0150 BFA_STATUS_INVALID_WWN = 57,
0151 BFA_STATUS_ADAPTER_ENABLED = 60,
0152 BFA_STATUS_IOC_NON_OP = 61,
0153 BFA_STATUS_VERSION_FAIL = 70,
0154 BFA_STATUS_DIAG_BUSY = 71,
0155 BFA_STATUS_BEACON_ON = 72,
0156 BFA_STATUS_ENOFSAVE = 78,
0157 BFA_STATUS_IOC_DISABLED = 82,
0158 BFA_STATUS_ERROR_TRL_ENABLED = 87,
0159 BFA_STATUS_ERROR_QOS_ENABLED = 88,
0160 BFA_STATUS_NO_SFP_DEV = 89,
0161 BFA_STATUS_MEMTEST_FAILED = 90,
0162 BFA_STATUS_LEDTEST_OP = 109,
0163 BFA_STATUS_INVALID_MAC = 134,
0164 BFA_STATUS_CMD_NOTSUPP_CNA = 146,
0165 BFA_STATUS_PBC = 154,
0166
0167 BFA_STATUS_BAD_FWCFG = 156,
0168 BFA_STATUS_INVALID_VENDOR = 158,
0169 BFA_STATUS_SFP_NOT_READY = 159,
0170 BFA_STATUS_TRUNK_ENABLED = 164,
0171
0172 BFA_STATUS_TRUNK_DISABLED = 165,
0173
0174 BFA_STATUS_IOPROFILE_OFF = 175,
0175 BFA_STATUS_PHY_NOT_PRESENT = 183,
0176 BFA_STATUS_FEATURE_NOT_SUPPORTED = 192,
0177 BFA_STATUS_ENTRY_EXISTS = 193,
0178 BFA_STATUS_ENTRY_NOT_EXISTS = 194,
0179 BFA_STATUS_NO_CHANGE = 195,
0180 BFA_STATUS_FAA_ENABLED = 197,
0181 BFA_STATUS_FAA_DISABLED = 198,
0182 BFA_STATUS_FAA_ACQUIRED = 199,
0183 BFA_STATUS_FAA_ACQ_ADDR = 200,
0184 BFA_STATUS_BBCR_FC_ONLY = 201,
0185
0186 BFA_STATUS_ERROR_TRUNK_ENABLED = 203,
0187 BFA_STATUS_MAX_ENTRY_REACHED = 212,
0188 BFA_STATUS_TOPOLOGY_LOOP = 230,
0189 BFA_STATUS_LOOP_UNSUPP_MEZZ = 231,
0190
0191 BFA_STATUS_INVALID_BW = 233,
0192 BFA_STATUS_QOS_BW_INVALID = 234,
0193
0194 BFA_STATUS_DPORT_ENABLED = 235,
0195 BFA_STATUS_DPORT_DISABLED = 236,
0196 BFA_STATUS_CMD_NOTSUPP_MEZZ = 239,
0197 BFA_STATUS_FRU_NOT_PRESENT = 240,
0198 BFA_STATUS_DPORT_NO_SFP = 243,
0199
0200
0201 BFA_STATUS_DPORT_ERR = 245,
0202 BFA_STATUS_DPORT_ENOSYS = 254,
0203 BFA_STATUS_DPORT_CANT_PERF = 255,
0204
0205 BFA_STATUS_DPORT_LOGICALERR = 256,
0206 BFA_STATUS_DPORT_SWBUSY = 257,
0207 BFA_STATUS_ERR_BBCR_SPEED_UNSUPPORT = 258,
0208
0209 BFA_STATUS_ERROR_BBCR_ENABLED = 259,
0210
0211 BFA_STATUS_INVALID_BBSCN = 260,
0212
0213 BFA_STATUS_DDPORT_ERR = 261,
0214
0215
0216 BFA_STATUS_DPORT_SFPWRAP_ERR = 262,
0217
0218 BFA_STATUS_BBCR_CFG_NO_CHANGE = 265,
0219
0220 BFA_STATUS_DPORT_SW_NOTREADY = 268,
0221
0222
0223 BFA_STATUS_DPORT_INV_SFP = 271,
0224 BFA_STATUS_DPORT_CMD_NOTSUPP = 273,
0225
0226 BFA_STATUS_MAX_VAL
0227 };
0228 #define bfa_status_t enum bfa_status
0229
0230 enum bfa_eproto_status {
0231 BFA_EPROTO_BAD_ACCEPT = 0,
0232 BFA_EPROTO_UNKNOWN_RSP = 1
0233 };
0234 #define bfa_eproto_status_t enum bfa_eproto_status
0235
0236 enum bfa_boolean {
0237 BFA_FALSE = 0,
0238 BFA_TRUE = 1
0239 };
0240 #define bfa_boolean_t enum bfa_boolean
0241
0242 #define BFA_STRING_32 32
0243 #define BFA_VERSION_LEN 64
0244
0245
0246
0247
0248
0249
0250
0251
0252 enum {
0253 BFA_ADAPTER_SERIAL_NUM_LEN = STRSZ(BFA_MFG_SERIALNUM_SIZE),
0254
0255
0256
0257 BFA_ADAPTER_MODEL_NAME_LEN = 16,
0258 BFA_ADAPTER_MODEL_DESCR_LEN = 128,
0259 BFA_ADAPTER_MFG_NAME_LEN = 8,
0260 BFA_ADAPTER_SYM_NAME_LEN = 64,
0261 BFA_ADAPTER_OS_TYPE_LEN = 64,
0262 BFA_ADAPTER_UUID_LEN = 16,
0263 };
0264
0265 struct bfa_adapter_attr_s {
0266 char manufacturer[BFA_ADAPTER_MFG_NAME_LEN];
0267 char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN];
0268 u32 card_type;
0269 char model[BFA_ADAPTER_MODEL_NAME_LEN];
0270 char model_descr[BFA_ADAPTER_MODEL_DESCR_LEN];
0271 wwn_t pwwn;
0272 char node_symname[FC_SYMNAME_MAX];
0273 char hw_ver[BFA_VERSION_LEN];
0274 char fw_ver[BFA_VERSION_LEN];
0275 char optrom_ver[BFA_VERSION_LEN];
0276 char os_type[BFA_ADAPTER_OS_TYPE_LEN];
0277 struct bfa_mfg_vpd_s vpd;
0278 struct mac_s mac;
0279
0280 u8 nports;
0281 u8 max_speed;
0282 u8 prototype;
0283 char asic_rev;
0284
0285 u8 pcie_gen;
0286 u8 pcie_lanes_orig;
0287 u8 pcie_lanes;
0288 u8 cna_capable;
0289
0290 u8 is_mezz;
0291 u8 trunk_capable;
0292 u8 mfg_day;
0293 u8 mfg_month;
0294 u16 mfg_year;
0295 u16 rsvd;
0296 u8 uuid[BFA_ADAPTER_UUID_LEN];
0297 };
0298
0299
0300
0301
0302
0303 enum {
0304 BFA_IOC_DRIVER_LEN = 16,
0305 BFA_IOC_CHIP_REV_LEN = 8,
0306 };
0307
0308
0309
0310
0311 struct bfa_ioc_driver_attr_s {
0312 char driver[BFA_IOC_DRIVER_LEN];
0313 char driver_ver[BFA_VERSION_LEN];
0314 char fw_ver[BFA_VERSION_LEN];
0315 char bios_ver[BFA_VERSION_LEN];
0316 char efi_ver[BFA_VERSION_LEN];
0317 char ob_ver[BFA_VERSION_LEN];
0318 };
0319
0320
0321
0322
0323 struct bfa_ioc_pci_attr_s {
0324 u16 vendor_id;
0325 u16 device_id;
0326 u16 ssid;
0327 u16 ssvid;
0328 u32 pcifn;
0329 u32 rsvd;
0330 char chip_rev[BFA_IOC_CHIP_REV_LEN];
0331 };
0332
0333
0334
0335
0336 enum bfa_ioc_state {
0337 BFA_IOC_UNINIT = 1,
0338 BFA_IOC_RESET = 2,
0339 BFA_IOC_SEMWAIT = 3,
0340 BFA_IOC_HWINIT = 4,
0341 BFA_IOC_GETATTR = 5,
0342 BFA_IOC_OPERATIONAL = 6,
0343 BFA_IOC_INITFAIL = 7,
0344 BFA_IOC_FAIL = 8,
0345 BFA_IOC_DISABLING = 9,
0346 BFA_IOC_DISABLED = 10,
0347 BFA_IOC_FWMISMATCH = 11,
0348 BFA_IOC_ENABLING = 12,
0349 BFA_IOC_HWFAIL = 13,
0350 BFA_IOC_ACQ_ADDR = 14,
0351 };
0352
0353
0354
0355
0356 struct bfa_fw_ioc_stats_s {
0357 u32 enable_reqs;
0358 u32 disable_reqs;
0359 u32 get_attr_reqs;
0360 u32 dbg_sync;
0361 u32 dbg_dump;
0362 u32 unknown_reqs;
0363 };
0364
0365
0366
0367
0368 struct bfa_ioc_drv_stats_s {
0369 u32 ioc_isrs;
0370 u32 ioc_enables;
0371 u32 ioc_disables;
0372 u32 ioc_hbfails;
0373 u32 ioc_boots;
0374 u32 stats_tmos;
0375 u32 hb_count;
0376 u32 disable_reqs;
0377 u32 enable_reqs;
0378 u32 disable_replies;
0379 u32 enable_replies;
0380 u32 rsvd;
0381 };
0382
0383
0384
0385
0386 struct bfa_ioc_stats_s {
0387 struct bfa_ioc_drv_stats_s drv_stats;
0388 struct bfa_fw_ioc_stats_s fw_stats;
0389 };
0390
0391 enum bfa_ioc_type_e {
0392 BFA_IOC_TYPE_FC = 1,
0393 BFA_IOC_TYPE_FCoE = 2,
0394 BFA_IOC_TYPE_LL = 3,
0395 };
0396
0397
0398
0399
0400 struct bfa_ioc_attr_s {
0401 enum bfa_ioc_type_e ioc_type;
0402 enum bfa_ioc_state state;
0403 struct bfa_adapter_attr_s adapter_attr;
0404 struct bfa_ioc_driver_attr_s driver_attr;
0405 struct bfa_ioc_pci_attr_s pci_attr;
0406 u8 port_id;
0407 u8 port_mode;
0408 u8 cap_bm;
0409 u8 port_mode_cfg;
0410 u8 def_fn;
0411 u8 rsvd[3];
0412 };
0413
0414
0415
0416
0417 enum bfa_aen_category {
0418 BFA_AEN_CAT_ADAPTER = 1,
0419 BFA_AEN_CAT_PORT = 2,
0420 BFA_AEN_CAT_LPORT = 3,
0421 BFA_AEN_CAT_RPORT = 4,
0422 BFA_AEN_CAT_ITNIM = 5,
0423 BFA_AEN_CAT_AUDIT = 8,
0424 BFA_AEN_CAT_IOC = 9,
0425 };
0426
0427
0428 enum bfa_adapter_aen_event {
0429 BFA_ADAPTER_AEN_ADD = 1,
0430 BFA_ADAPTER_AEN_REMOVE = 2,
0431 };
0432
0433 struct bfa_adapter_aen_data_s {
0434 char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN];
0435 u32 nports;
0436 wwn_t pwwn;
0437 };
0438
0439
0440 enum bfa_port_aen_event {
0441 BFA_PORT_AEN_ONLINE = 1,
0442 BFA_PORT_AEN_OFFLINE = 2,
0443 BFA_PORT_AEN_RLIR = 3,
0444 BFA_PORT_AEN_SFP_INSERT = 4,
0445 BFA_PORT_AEN_SFP_REMOVE = 5,
0446 BFA_PORT_AEN_SFP_POM = 6,
0447 BFA_PORT_AEN_ENABLE = 7,
0448 BFA_PORT_AEN_DISABLE = 8,
0449 BFA_PORT_AEN_AUTH_ON = 9,
0450 BFA_PORT_AEN_AUTH_OFF = 10,
0451 BFA_PORT_AEN_DISCONNECT = 11,
0452 BFA_PORT_AEN_QOS_NEG = 12,
0453 BFA_PORT_AEN_FABRIC_NAME_CHANGE = 13,
0454 BFA_PORT_AEN_SFP_ACCESS_ERROR = 14,
0455 BFA_PORT_AEN_SFP_UNSUPPORT = 15,
0456 };
0457
0458 enum bfa_port_aen_sfp_pom {
0459 BFA_PORT_AEN_SFP_POM_GREEN = 1,
0460 BFA_PORT_AEN_SFP_POM_AMBER = 2,
0461 BFA_PORT_AEN_SFP_POM_RED = 3,
0462 BFA_PORT_AEN_SFP_POM_MAX = BFA_PORT_AEN_SFP_POM_RED
0463 };
0464
0465 struct bfa_port_aen_data_s {
0466 wwn_t pwwn;
0467 wwn_t fwwn;
0468 u32 phy_port_num;
0469 u16 ioc_type;
0470 u16 level;
0471 mac_t mac;
0472 u16 rsvd;
0473 };
0474
0475
0476 enum bfa_lport_aen_event {
0477 BFA_LPORT_AEN_NEW = 1,
0478 BFA_LPORT_AEN_DELETE = 2,
0479 BFA_LPORT_AEN_ONLINE = 3,
0480 BFA_LPORT_AEN_OFFLINE = 4,
0481 BFA_LPORT_AEN_DISCONNECT = 5,
0482 BFA_LPORT_AEN_NEW_PROP = 6,
0483 BFA_LPORT_AEN_DELETE_PROP = 7,
0484 BFA_LPORT_AEN_NEW_STANDARD = 8,
0485 BFA_LPORT_AEN_DELETE_STANDARD = 9,
0486 BFA_LPORT_AEN_NPIV_DUP_WWN = 10,
0487 BFA_LPORT_AEN_NPIV_FABRIC_MAX = 11,
0488 BFA_LPORT_AEN_NPIV_UNKNOWN = 12,
0489 };
0490
0491 struct bfa_lport_aen_data_s {
0492 u16 vf_id;
0493 u16 roles;
0494 u32 rsvd;
0495 wwn_t ppwwn;
0496 wwn_t lpwwn;
0497 };
0498
0499
0500 enum bfa_itnim_aen_event {
0501 BFA_ITNIM_AEN_ONLINE = 1,
0502 BFA_ITNIM_AEN_OFFLINE = 2,
0503 BFA_ITNIM_AEN_DISCONNECT = 3,
0504 };
0505
0506 struct bfa_itnim_aen_data_s {
0507 u16 vf_id;
0508 u16 rsvd[3];
0509 wwn_t ppwwn;
0510 wwn_t lpwwn;
0511 wwn_t rpwwn;
0512 };
0513
0514
0515 enum bfa_audit_aen_event {
0516 BFA_AUDIT_AEN_AUTH_ENABLE = 1,
0517 BFA_AUDIT_AEN_AUTH_DISABLE = 2,
0518 BFA_AUDIT_AEN_FLASH_ERASE = 3,
0519 BFA_AUDIT_AEN_FLASH_UPDATE = 4,
0520 };
0521
0522 struct bfa_audit_aen_data_s {
0523 wwn_t pwwn;
0524 int partition_inst;
0525 int partition_type;
0526 };
0527
0528
0529 enum bfa_ioc_aen_event {
0530 BFA_IOC_AEN_HBGOOD = 1,
0531 BFA_IOC_AEN_HBFAIL = 2,
0532 BFA_IOC_AEN_ENABLE = 3,
0533 BFA_IOC_AEN_DISABLE = 4,
0534 BFA_IOC_AEN_FWMISMATCH = 5,
0535 BFA_IOC_AEN_FWCFG_ERROR = 6,
0536 BFA_IOC_AEN_INVALID_VENDOR = 7,
0537 BFA_IOC_AEN_INVALID_NWWN = 8,
0538 BFA_IOC_AEN_INVALID_PWWN = 9
0539 };
0540
0541 struct bfa_ioc_aen_data_s {
0542 wwn_t pwwn;
0543 u16 ioc_type;
0544 mac_t mac;
0545 };
0546
0547
0548
0549
0550
0551
0552
0553
0554 #define BFA_MFG_CHKSUM_SIZE 16
0555
0556 #define BFA_MFG_PARTNUM_SIZE 14
0557 #define BFA_MFG_SUPPLIER_ID_SIZE 10
0558 #define BFA_MFG_SUPPLIER_PARTNUM_SIZE 20
0559 #define BFA_MFG_SUPPLIER_SERIALNUM_SIZE 20
0560 #define BFA_MFG_SUPPLIER_REVISION_SIZE 4
0561
0562
0563
0564 #define BFA_MFG_IC_FC 0x01
0565 #define BFA_MFG_IC_ETH 0x02
0566
0567
0568
0569
0570 #define BFA_CM_HBA 0x01
0571 #define BFA_CM_CNA 0x02
0572 #define BFA_CM_NIC 0x04
0573 #define BFA_CM_FC16G 0x08
0574 #define BFA_CM_SRIOV 0x10
0575 #define BFA_CM_MEZZ 0x20
0576
0577 #pragma pack(1)
0578
0579
0580
0581
0582 struct bfa_mfg_block_s {
0583 u8 version;
0584 u8 mfg_sig[3];
0585 u16 mfgsize;
0586 u16 u16_chksum;
0587 char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)];
0588 char brcd_partnum[STRSZ(BFA_MFG_PARTNUM_SIZE)];
0589 u8 mfg_day;
0590 u8 mfg_month;
0591 u16 mfg_year;
0592 wwn_t mfg_wwn;
0593 u8 num_wwn;
0594 u8 mfg_speeds;
0595 u8 rsv[2];
0596 char supplier_id[STRSZ(BFA_MFG_SUPPLIER_ID_SIZE)];
0597 char supplier_partnum[STRSZ(BFA_MFG_SUPPLIER_PARTNUM_SIZE)];
0598 char supplier_serialnum[STRSZ(BFA_MFG_SUPPLIER_SERIALNUM_SIZE)];
0599 char supplier_revision[STRSZ(BFA_MFG_SUPPLIER_REVISION_SIZE)];
0600 mac_t mfg_mac;
0601 u8 num_mac;
0602 u8 rsv2;
0603 u32 card_type;
0604 char cap_nic;
0605 char cap_cna;
0606 char cap_hba;
0607 char cap_fc16g;
0608 char cap_sriov;
0609 char cap_mezz;
0610 u8 rsv3;
0611 u8 mfg_nports;
0612 char media[8];
0613 char initial_mode[8];
0614 u8 rsv4[84];
0615 u8 md5_chksum[BFA_MFG_CHKSUM_SIZE];
0616 };
0617
0618 #pragma pack()
0619
0620
0621
0622
0623
0624
0625
0626
0627 enum {
0628 BFA_PCI_VENDOR_ID_BROCADE = 0x1657,
0629 BFA_PCI_DEVICE_ID_FC_8G2P = 0x13,
0630 BFA_PCI_DEVICE_ID_FC_8G1P = 0x17,
0631 BFA_PCI_DEVICE_ID_CT = 0x14,
0632 BFA_PCI_DEVICE_ID_CT_FC = 0x21,
0633 BFA_PCI_DEVICE_ID_CT2 = 0x22,
0634 BFA_PCI_DEVICE_ID_CT2_QUAD = 0x23,
0635 };
0636
0637 #define bfa_asic_id_cb(__d) \
0638 ((__d) == BFA_PCI_DEVICE_ID_FC_8G2P || \
0639 (__d) == BFA_PCI_DEVICE_ID_FC_8G1P)
0640 #define bfa_asic_id_ct(__d) \
0641 ((__d) == BFA_PCI_DEVICE_ID_CT || \
0642 (__d) == BFA_PCI_DEVICE_ID_CT_FC)
0643 #define bfa_asic_id_ct2(__d) \
0644 ((__d) == BFA_PCI_DEVICE_ID_CT2 || \
0645 (__d) == BFA_PCI_DEVICE_ID_CT2_QUAD)
0646 #define bfa_asic_id_ctc(__d) \
0647 (bfa_asic_id_ct(__d) || bfa_asic_id_ct2(__d))
0648
0649
0650
0651
0652 enum {
0653 BFA_PCI_FCOE_SSDEVICE_ID = 0x14,
0654 BFA_PCI_CT2_SSID_FCoE = 0x22,
0655 BFA_PCI_CT2_SSID_ETH = 0x23,
0656 BFA_PCI_CT2_SSID_FC = 0x24,
0657 };
0658
0659
0660
0661
0662 #define BFA_PCI_ACCESS_RANGES 1
0663
0664
0665
0666
0667
0668 enum bfa_port_speed {
0669 BFA_PORT_SPEED_UNKNOWN = 0,
0670 BFA_PORT_SPEED_1GBPS = 1,
0671 BFA_PORT_SPEED_2GBPS = 2,
0672 BFA_PORT_SPEED_4GBPS = 4,
0673 BFA_PORT_SPEED_8GBPS = 8,
0674 BFA_PORT_SPEED_10GBPS = 10,
0675 BFA_PORT_SPEED_16GBPS = 16,
0676 BFA_PORT_SPEED_AUTO = 0xf,
0677 };
0678 #define bfa_port_speed_t enum bfa_port_speed
0679
0680 enum {
0681 BFA_BOOT_BOOTLUN_MAX = 4,
0682 BFA_PREBOOT_BOOTLUN_MAX = 8,
0683 };
0684
0685 #define BOOT_CFG_REV1 1
0686 #define BOOT_CFG_VLAN 1
0687
0688
0689
0690
0691
0692 enum bfa_boot_bootopt {
0693 BFA_BOOT_AUTO_DISCOVER = 0,
0694 BFA_BOOT_STORED_BLUN = 1,
0695 BFA_BOOT_FIRST_LUN = 2,
0696 BFA_BOOT_PBC = 3,
0697 };
0698
0699 #pragma pack(1)
0700
0701
0702
0703 struct bfa_boot_bootlun_s {
0704 wwn_t pwwn;
0705 struct scsi_lun lun;
0706 };
0707 #pragma pack()
0708
0709
0710
0711
0712 struct bfa_boot_cfg_s {
0713 u8 version;
0714 u8 rsvd1;
0715 u16 chksum;
0716 u8 enable;
0717 u8 speed;
0718 u8 topology;
0719 u8 bootopt;
0720 u32 nbluns;
0721 u32 rsvd2;
0722 struct bfa_boot_bootlun_s blun[BFA_BOOT_BOOTLUN_MAX];
0723 struct bfa_boot_bootlun_s blun_disc[BFA_BOOT_BOOTLUN_MAX];
0724 };
0725
0726 struct bfa_boot_pbc_s {
0727 u8 enable;
0728 u8 speed;
0729 u8 topology;
0730 u8 rsvd1;
0731 u32 nbluns;
0732 struct bfa_boot_bootlun_s pblun[BFA_PREBOOT_BOOTLUN_MAX];
0733 };
0734
0735 struct bfa_ethboot_cfg_s {
0736 u8 version;
0737 u8 rsvd1;
0738 u16 chksum;
0739 u8 enable;
0740 u8 rsvd2;
0741 u16 vlan;
0742 };
0743
0744
0745
0746
0747 #define BFA_ABLK_MAX_PORTS 2
0748 #define BFA_ABLK_MAX_PFS 16
0749 #define BFA_ABLK_MAX 2
0750
0751 #pragma pack(1)
0752 enum bfa_mode_s {
0753 BFA_MODE_HBA = 1,
0754 BFA_MODE_CNA = 2,
0755 BFA_MODE_NIC = 3
0756 };
0757
0758 struct bfa_adapter_cfg_mode_s {
0759 u16 max_pf;
0760 u16 max_vf;
0761 enum bfa_mode_s mode;
0762 };
0763
0764 struct bfa_ablk_cfg_pf_s {
0765 u16 pers;
0766 u8 port_id;
0767 u8 optrom;
0768 u8 valid;
0769 u8 sriov;
0770 u8 max_vfs;
0771 u8 rsvd[1];
0772 u16 num_qpairs;
0773 u16 num_vectors;
0774 u16 bw_min;
0775 u16 bw_max;
0776 };
0777
0778 struct bfa_ablk_cfg_port_s {
0779 u8 mode;
0780 u8 type;
0781 u8 max_pfs;
0782 u8 rsvd[5];
0783 };
0784
0785 struct bfa_ablk_cfg_inst_s {
0786 u8 nports;
0787 u8 max_pfs;
0788 u8 rsvd[6];
0789 struct bfa_ablk_cfg_pf_s pf_cfg[BFA_ABLK_MAX_PFS];
0790 struct bfa_ablk_cfg_port_s port_cfg[BFA_ABLK_MAX_PORTS];
0791 };
0792
0793 struct bfa_ablk_cfg_s {
0794 struct bfa_ablk_cfg_inst_s inst[BFA_ABLK_MAX];
0795 };
0796
0797
0798
0799
0800
0801 #define SFP_DIAGMON_SIZE 10
0802
0803
0804 #define BFA_SFP_SCN_REMOVED 0
0805 #define BFA_SFP_SCN_INSERTED 1
0806 #define BFA_SFP_SCN_POM 2
0807 #define BFA_SFP_SCN_FAILED 3
0808 #define BFA_SFP_SCN_UNSUPPORT 4
0809 #define BFA_SFP_SCN_VALID 5
0810
0811 enum bfa_defs_sfp_media_e {
0812 BFA_SFP_MEDIA_UNKNOWN = 0x00,
0813 BFA_SFP_MEDIA_CU = 0x01,
0814 BFA_SFP_MEDIA_LW = 0x02,
0815 BFA_SFP_MEDIA_SW = 0x03,
0816 BFA_SFP_MEDIA_EL = 0x04,
0817 BFA_SFP_MEDIA_UNSUPPORT = 0x05,
0818 };
0819
0820
0821
0822
0823 enum {
0824 SFP_XMTR_TECH_CU = (1 << 0),
0825 SFP_XMTR_TECH_CP = (1 << 1),
0826 SFP_XMTR_TECH_CA = (1 << 2),
0827 SFP_XMTR_TECH_LL = (1 << 3),
0828 SFP_XMTR_TECH_SL = (1 << 4),
0829 SFP_XMTR_TECH_SN = (1 << 5),
0830 SFP_XMTR_TECH_EL_INTRA = (1 << 6),
0831 SFP_XMTR_TECH_EL_INTER = (1 << 7),
0832 SFP_XMTR_TECH_LC = (1 << 8),
0833 SFP_XMTR_TECH_SA = (1 << 9)
0834 };
0835
0836
0837
0838
0839
0840 struct sfp_srlid_base_s {
0841 u8 id;
0842 u8 extid;
0843 u8 connector;
0844 u8 xcvr[8];
0845 u8 encoding;
0846 u8 br_norm;
0847 u8 rate_id;
0848 u8 len_km;
0849 u8 len_100m;
0850 u8 len_om2;
0851 u8 len_om1;
0852 u8 len_cu;
0853 u8 len_om3;
0854 u8 vendor_name[16];
0855 u8 unalloc1;
0856 u8 vendor_oui[3];
0857 u8 vendor_pn[16];
0858 u8 vendor_rev[4];
0859 u8 wavelen[2];
0860 u8 unalloc2;
0861 u8 cc_base;
0862 };
0863
0864
0865
0866
0867
0868 struct sfp_srlid_ext_s {
0869 u8 options[2];
0870 u8 br_max;
0871 u8 br_min;
0872 u8 vendor_sn[16];
0873 u8 date_code[8];
0874 u8 diag_mon_type;
0875 u8 en_options;
0876 u8 sff_8472;
0877 u8 cc_ext;
0878 };
0879
0880
0881
0882
0883
0884 struct sfp_diag_base_s {
0885
0886
0887
0888 u8 temp_high_alarm[2];
0889 u8 temp_low_alarm[2];
0890 u8 temp_high_warning[2];
0891 u8 temp_low_warning[2];
0892
0893 u8 volt_high_alarm[2];
0894 u8 volt_low_alarm[2];
0895 u8 volt_high_warning[2];
0896 u8 volt_low_warning[2];
0897
0898 u8 bias_high_alarm[2];
0899 u8 bias_low_alarm[2];
0900 u8 bias_high_warning[2];
0901 u8 bias_low_warning[2];
0902
0903 u8 tx_pwr_high_alarm[2];
0904 u8 tx_pwr_low_alarm[2];
0905 u8 tx_pwr_high_warning[2];
0906 u8 tx_pwr_low_warning[2];
0907
0908 u8 rx_pwr_high_alarm[2];
0909 u8 rx_pwr_low_alarm[2];
0910 u8 rx_pwr_high_warning[2];
0911 u8 rx_pwr_low_warning[2];
0912
0913 u8 unallocate_1[16];
0914
0915
0916
0917
0918 u8 rx_pwr[20];
0919 u8 tx_i[4];
0920 u8 tx_pwr[4];
0921 u8 temp[4];
0922 u8 volt[4];
0923 u8 unallocate_2[3];
0924 u8 cc_dmi;
0925 };
0926
0927
0928
0929
0930
0931 struct sfp_diag_ext_s {
0932 u8 diag[SFP_DIAGMON_SIZE];
0933 u8 unalloc1[4];
0934 u8 status_ctl;
0935 u8 rsvd;
0936 u8 alarm_flags[2];
0937 u8 unalloc2[2];
0938 u8 warning_flags[2];
0939 u8 ext_status_ctl[2];
0940 };
0941
0942
0943
0944
0945
0946
0947 struct sfp_usr_eeprom_s {
0948 u8 rsvd1[2];
0949 u8 ewrap;
0950 u8 rsvd2[2];
0951 u8 owrap;
0952 u8 rsvd3[2];
0953 u8 prbs;
0954 u8 rsvd4[2];
0955 u8 tx_eqz_16;
0956 u8 tx_eqz_8;
0957 u8 rsvd5[2];
0958 u8 rx_emp_16;
0959 u8 rx_emp_8;
0960 u8 rsvd6[2];
0961 u8 tx_eye_adj;
0962 u8 rsvd7[3];
0963 u8 tx_eye_qctl;
0964 u8 tx_eye_qres;
0965 u8 rsvd8[2];
0966 u8 poh[3];
0967 u8 rsvd9[2];
0968 };
0969
0970 struct sfp_mem_s {
0971 struct sfp_srlid_base_s srlid_base;
0972 struct sfp_srlid_ext_s srlid_ext;
0973 struct sfp_diag_base_s diag_base;
0974 struct sfp_diag_ext_s diag_ext;
0975 struct sfp_usr_eeprom_s usr_eeprom;
0976 };
0977
0978
0979
0980
0981 union sfp_xcvr_e10g_code_u {
0982 u8 b;
0983 struct {
0984 #ifdef __BIG_ENDIAN
0985 u8 e10g_unall:1;
0986 u8 e10g_lrm:1;
0987 u8 e10g_lr:1;
0988 u8 e10g_sr:1;
0989 u8 ib_sx:1;
0990 u8 ib_lx:1;
0991 u8 ib_cu_a:1;
0992 u8 ib_cu_p:1;
0993 #else
0994 u8 ib_cu_p:1;
0995 u8 ib_cu_a:1;
0996 u8 ib_lx:1;
0997 u8 ib_sx:1;
0998 u8 e10g_sr:1;
0999 u8 e10g_lr:1;
1000 u8 e10g_lrm:1;
1001 u8 e10g_unall:1;
1002 #endif
1003 } r;
1004 };
1005
1006 union sfp_xcvr_so1_code_u {
1007 u8 b;
1008 struct {
1009 u8 escon:2;
1010 u8 oc192_reach:1;
1011 u8 so_reach:2;
1012 u8 oc48_reach:3;
1013 } r;
1014 };
1015
1016 union sfp_xcvr_so2_code_u {
1017 u8 b;
1018 struct {
1019 u8 reserved:1;
1020 u8 oc12_reach:3;
1021 u8 reserved1:1;
1022 u8 oc3_reach:3;
1023 } r;
1024 };
1025
1026 union sfp_xcvr_eth_code_u {
1027 u8 b;
1028 struct {
1029 u8 base_px:1;
1030 u8 base_bx10:1;
1031 u8 e100base_fx:1;
1032 u8 e100base_lx:1;
1033 u8 e1000base_t:1;
1034 u8 e1000base_cx:1;
1035 u8 e1000base_lx:1;
1036 u8 e1000base_sx:1;
1037 } r;
1038 };
1039
1040 struct sfp_xcvr_fc1_code_s {
1041 u8 link_len:5;
1042 u8 xmtr_tech2:3;
1043 u8 xmtr_tech1:7;
1044 u8 reserved1:1;
1045 };
1046
1047 union sfp_xcvr_fc2_code_u {
1048 u8 b;
1049 struct {
1050 u8 tw_media:1;
1051 u8 tp_media:1;
1052 u8 mi_media:1;
1053 u8 tv_media:1;
1054 u8 m6_media:1;
1055 u8 m5_media:1;
1056 u8 reserved:1;
1057 u8 sm_media:1;
1058 } r;
1059 };
1060
1061 union sfp_xcvr_fc3_code_u {
1062 u8 b;
1063 struct {
1064 #ifdef __BIG_ENDIAN
1065 u8 rsv4:1;
1066 u8 mb800:1;
1067 u8 mb1600:1;
1068 u8 mb400:1;
1069 u8 rsv2:1;
1070 u8 mb200:1;
1071 u8 rsv1:1;
1072 u8 mb100:1;
1073 #else
1074 u8 mb100:1;
1075 u8 rsv1:1;
1076 u8 mb200:1;
1077 u8 rsv2:1;
1078 u8 mb400:1;
1079 u8 mb1600:1;
1080 u8 mb800:1;
1081 u8 rsv4:1;
1082 #endif
1083 } r;
1084 };
1085
1086 struct sfp_xcvr_s {
1087 union sfp_xcvr_e10g_code_u e10g;
1088 union sfp_xcvr_so1_code_u so1;
1089 union sfp_xcvr_so2_code_u so2;
1090 union sfp_xcvr_eth_code_u eth;
1091 struct sfp_xcvr_fc1_code_s fc1;
1092 union sfp_xcvr_fc2_code_u fc2;
1093 union sfp_xcvr_fc3_code_u fc3;
1094 };
1095
1096
1097
1098
1099 #define BFA_FLASH_PART_ENTRY_SIZE 32
1100 #define BFA_FLASH_PART_MAX 32
1101
1102 enum bfa_flash_part_type {
1103 BFA_FLASH_PART_OPTROM = 1,
1104 BFA_FLASH_PART_FWIMG = 2,
1105 BFA_FLASH_PART_FWCFG = 3,
1106 BFA_FLASH_PART_DRV = 4,
1107 BFA_FLASH_PART_BOOT = 5,
1108 BFA_FLASH_PART_ASIC = 6,
1109 BFA_FLASH_PART_MFG = 7,
1110 BFA_FLASH_PART_OPTROM2 = 8,
1111 BFA_FLASH_PART_VPD = 9,
1112 BFA_FLASH_PART_PBC = 10,
1113 BFA_FLASH_PART_BOOTOVL = 11,
1114 BFA_FLASH_PART_LOG = 12,
1115 BFA_FLASH_PART_PXECFG = 13,
1116 BFA_FLASH_PART_PXEOVL = 14,
1117 BFA_FLASH_PART_PORTCFG = 15,
1118 BFA_FLASH_PART_ASICBK = 16,
1119 };
1120
1121
1122
1123
1124 struct bfa_flash_part_attr_s {
1125 u32 part_type;
1126 u32 part_instance;
1127 u32 part_off;
1128 u32 part_size;
1129 u32 part_len;
1130 u32 part_status;
1131 char rsv[BFA_FLASH_PART_ENTRY_SIZE - 24];
1132 };
1133
1134
1135
1136
1137 struct bfa_flash_attr_s {
1138 u32 status;
1139 u32 npart;
1140 struct bfa_flash_part_attr_s part[BFA_FLASH_PART_MAX];
1141 };
1142
1143
1144
1145
1146 #define LB_PATTERN_DEFAULT 0xB5B5B5B5
1147 #define QTEST_CNT_DEFAULT 10
1148 #define QTEST_PAT_DEFAULT LB_PATTERN_DEFAULT
1149 #define DPORT_ENABLE_LOOPCNT_DEFAULT (1024 * 1024)
1150
1151 struct bfa_diag_memtest_s {
1152 u8 algo;
1153 u8 rsvd[7];
1154 };
1155
1156 struct bfa_diag_memtest_result {
1157 u32 status;
1158 u32 addr;
1159 u32 exp;
1160 u32 act;
1161 u32 err_status;
1162 u32 err_status1;
1163 u32 err_addr;
1164 u8 algo;
1165 u8 rsv[3];
1166 };
1167
1168 struct bfa_diag_loopback_result_s {
1169 u32 numtxmfrm;
1170 u32 numosffrm;
1171 u32 numrcvfrm;
1172 u32 badfrminf;
1173 u32 badfrmnum;
1174 u8 status;
1175 u8 rsvd[3];
1176 };
1177
1178 enum bfa_diag_dport_test_status {
1179 DPORT_TEST_ST_IDLE = 0,
1180 DPORT_TEST_ST_FINAL = 1,
1181 DPORT_TEST_ST_SKIP = 2,
1182 DPORT_TEST_ST_FAIL = 3,
1183 DPORT_TEST_ST_INPRG = 4,
1184 DPORT_TEST_ST_RESPONDER = 5,
1185 DPORT_TEST_ST_STOPPED = 6,
1186 DPORT_TEST_ST_MAX
1187 };
1188
1189 enum bfa_diag_dport_test_type {
1190 DPORT_TEST_ELOOP = 0,
1191 DPORT_TEST_OLOOP = 1,
1192 DPORT_TEST_ROLOOP = 2,
1193 DPORT_TEST_LINK = 3,
1194 DPORT_TEST_MAX
1195 };
1196
1197 enum bfa_diag_dport_test_opmode {
1198 BFA_DPORT_OPMODE_AUTO = 0,
1199 BFA_DPORT_OPMODE_MANU = 1,
1200 };
1201
1202 struct bfa_diag_dport_subtest_result_s {
1203 u8 status;
1204 u8 rsvd[7];
1205 u64 start_time;
1206 };
1207
1208 struct bfa_diag_dport_result_s {
1209 wwn_t rp_pwwn;
1210 wwn_t rp_nwwn;
1211 u64 start_time;
1212 u64 end_time;
1213 u8 status;
1214 u8 mode;
1215 u8 rsvd;
1216 u8 speed;
1217 u16 buffer_required;
1218 u16 frmsz;
1219 u32 lpcnt;
1220 u32 pat;
1221 u32 roundtrip_latency;
1222 u32 est_cable_distance;
1223 struct bfa_diag_dport_subtest_result_s subtest[DPORT_TEST_MAX];
1224 };
1225
1226 struct bfa_diag_ledtest_s {
1227 u32 cmd;
1228 u32 color;
1229 u16 freq;
1230 u8 led;
1231 u8 rsvd[5];
1232 };
1233
1234 struct bfa_diag_loopback_s {
1235 u32 loopcnt;
1236 u32 pattern;
1237 u8 lb_mode;
1238 u8 speed;
1239 u8 rsvd[2];
1240 };
1241
1242
1243
1244
1245 enum bfa_phy_status_e {
1246 BFA_PHY_STATUS_GOOD = 0,
1247 BFA_PHY_STATUS_NOT_PRESENT = 1,
1248 BFA_PHY_STATUS_BAD = 2,
1249 };
1250
1251
1252
1253
1254 struct bfa_phy_attr_s {
1255 u32 status;
1256 u32 length;
1257 u32 fw_ver;
1258 u32 an_status;
1259 u32 pma_pmd_status;
1260 u32 pma_pmd_signal;
1261 u32 pcs_status;
1262 };
1263
1264
1265
1266
1267 struct bfa_phy_stats_s {
1268 u32 status;
1269 u32 link_breaks;
1270 u32 pma_pmd_fault;
1271 u32 pcs_fault;
1272 u32 speed_neg;
1273 u32 tx_eq_training;
1274 u32 tx_eq_timeout;
1275 u32 crc_error;
1276 };
1277
1278 #pragma pack()
1279
1280 #endif