1*52fa7bf9SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 28b230ed8SRasesh Mody /* 32732ba56SRasesh Mody * Linux network driver for QLogic BR-series Converged Network Adapter. 48b230ed8SRasesh Mody */ 58b230ed8SRasesh Mody /* 62732ba56SRasesh Mody * Copyright (c) 2005-2014 Brocade Communications Systems, Inc. 72732ba56SRasesh Mody * Copyright (c) 2014-2015 QLogic Corporation 88b230ed8SRasesh Mody * All rights reserved 92732ba56SRasesh Mody * www.qlogic.com 108b230ed8SRasesh Mody */ 118b230ed8SRasesh Mody 128b230ed8SRasesh Mody #ifndef __BFA_DEFS_H__ 138b230ed8SRasesh Mody #define __BFA_DEFS_H__ 148b230ed8SRasesh Mody 158b230ed8SRasesh Mody #include "cna.h" 168b230ed8SRasesh Mody #include "bfa_defs_status.h" 178b230ed8SRasesh Mody #include "bfa_defs_mfg_comm.h" 188b230ed8SRasesh Mody 198b230ed8SRasesh Mody #define BFA_VERSION_LEN 64 208b230ed8SRasesh Mody 211aa8b471SBen Hutchings /* ---------------------- adapter definitions ------------ */ 228b230ed8SRasesh Mody 231aa8b471SBen Hutchings /* BFA adapter level attributes. */ 248b230ed8SRasesh Mody enum { 258b230ed8SRasesh Mody BFA_ADAPTER_SERIAL_NUM_LEN = STRSZ(BFA_MFG_SERIALNUM_SIZE), 268b230ed8SRasesh Mody /* 278b230ed8SRasesh Mody *!< adapter serial num length 288b230ed8SRasesh Mody */ 298b230ed8SRasesh Mody BFA_ADAPTER_MODEL_NAME_LEN = 16, /*!< model name length */ 308b230ed8SRasesh Mody BFA_ADAPTER_MODEL_DESCR_LEN = 128, /*!< model description length */ 318b230ed8SRasesh Mody BFA_ADAPTER_MFG_NAME_LEN = 8, /*!< manufacturer name length */ 328b230ed8SRasesh Mody BFA_ADAPTER_SYM_NAME_LEN = 64, /*!< adapter symbolic name length */ 338b230ed8SRasesh Mody BFA_ADAPTER_OS_TYPE_LEN = 64, /*!< adapter os type length */ 348b230ed8SRasesh Mody }; 358b230ed8SRasesh Mody 368b230ed8SRasesh Mody struct bfa_adapter_attr { 378b230ed8SRasesh Mody char manufacturer[BFA_ADAPTER_MFG_NAME_LEN]; 388b230ed8SRasesh Mody char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN]; 398b230ed8SRasesh Mody u32 card_type; 408b230ed8SRasesh Mody char model[BFA_ADAPTER_MODEL_NAME_LEN]; 418b230ed8SRasesh Mody char model_descr[BFA_ADAPTER_MODEL_DESCR_LEN]; 428b230ed8SRasesh Mody u64 pwwn; 438b230ed8SRasesh Mody char node_symname[FC_SYMNAME_MAX]; 448b230ed8SRasesh Mody char hw_ver[BFA_VERSION_LEN]; 458b230ed8SRasesh Mody char fw_ver[BFA_VERSION_LEN]; 468b230ed8SRasesh Mody char optrom_ver[BFA_VERSION_LEN]; 478b230ed8SRasesh Mody char os_type[BFA_ADAPTER_OS_TYPE_LEN]; 488b230ed8SRasesh Mody struct bfa_mfg_vpd vpd; 49d6b30598SIvan Vecera u8 mac[ETH_ALEN]; 508b230ed8SRasesh Mody 518b230ed8SRasesh Mody u8 nports; 528b230ed8SRasesh Mody u8 max_speed; 538b230ed8SRasesh Mody u8 prototype; 548b230ed8SRasesh Mody char asic_rev; 558b230ed8SRasesh Mody 568b230ed8SRasesh Mody u8 pcie_gen; 578b230ed8SRasesh Mody u8 pcie_lanes_orig; 588b230ed8SRasesh Mody u8 pcie_lanes; 598b230ed8SRasesh Mody u8 cna_capable; 608b230ed8SRasesh Mody 618b230ed8SRasesh Mody u8 is_mezz; 628b230ed8SRasesh Mody u8 trunk_capable; 638b230ed8SRasesh Mody }; 648b230ed8SRasesh Mody 651aa8b471SBen Hutchings /* ---------------------- IOC definitions ------------ */ 668b230ed8SRasesh Mody 678b230ed8SRasesh Mody enum { 688b230ed8SRasesh Mody BFA_IOC_DRIVER_LEN = 16, 698b230ed8SRasesh Mody BFA_IOC_CHIP_REV_LEN = 8, 708b230ed8SRasesh Mody }; 718b230ed8SRasesh Mody 721aa8b471SBen Hutchings /* Driver and firmware versions. */ 738b230ed8SRasesh Mody struct bfa_ioc_driver_attr { 748b230ed8SRasesh Mody char driver[BFA_IOC_DRIVER_LEN]; /*!< driver name */ 758b230ed8SRasesh Mody char driver_ver[BFA_VERSION_LEN]; /*!< driver version */ 768b230ed8SRasesh Mody char fw_ver[BFA_VERSION_LEN]; /*!< firmware version */ 778b230ed8SRasesh Mody char bios_ver[BFA_VERSION_LEN]; /*!< bios version */ 788b230ed8SRasesh Mody char efi_ver[BFA_VERSION_LEN]; /*!< EFI version */ 798b230ed8SRasesh Mody char ob_ver[BFA_VERSION_LEN]; /*!< openboot version */ 808b230ed8SRasesh Mody }; 818b230ed8SRasesh Mody 821aa8b471SBen Hutchings /* IOC PCI device attributes */ 838b230ed8SRasesh Mody struct bfa_ioc_pci_attr { 848b230ed8SRasesh Mody u16 vendor_id; /*!< PCI vendor ID */ 858b230ed8SRasesh Mody u16 device_id; /*!< PCI device ID */ 868b230ed8SRasesh Mody u16 ssid; /*!< subsystem ID */ 878b230ed8SRasesh Mody u16 ssvid; /*!< subsystem vendor ID */ 888b230ed8SRasesh Mody u32 pcifn; /*!< PCI device function */ 898b230ed8SRasesh Mody u32 rsvd; /* padding */ 908b230ed8SRasesh Mody char chip_rev[BFA_IOC_CHIP_REV_LEN]; /*!< chip revision */ 918b230ed8SRasesh Mody }; 928b230ed8SRasesh Mody 931aa8b471SBen Hutchings /* IOC states */ 948b230ed8SRasesh Mody enum bfa_ioc_state { 951d32f769SRasesh Mody BFA_IOC_UNINIT = 1, /*!< IOC is in uninit state */ 961d32f769SRasesh Mody BFA_IOC_RESET = 2, /*!< IOC is in reset state */ 971d32f769SRasesh Mody BFA_IOC_SEMWAIT = 3, /*!< Waiting for IOC h/w semaphore */ 981d32f769SRasesh Mody BFA_IOC_HWINIT = 4, /*!< IOC h/w is being initialized */ 991d32f769SRasesh Mody BFA_IOC_GETATTR = 5, /*!< IOC is being configured */ 1001d32f769SRasesh Mody BFA_IOC_OPERATIONAL = 6, /*!< IOC is operational */ 1011d32f769SRasesh Mody BFA_IOC_INITFAIL = 7, /*!< IOC hardware failure */ 1021d32f769SRasesh Mody BFA_IOC_FAIL = 8, /*!< IOC heart-beat failure */ 1031d32f769SRasesh Mody BFA_IOC_DISABLING = 9, /*!< IOC is being disabled */ 1041d32f769SRasesh Mody BFA_IOC_DISABLED = 10, /*!< IOC is disabled */ 1051d32f769SRasesh Mody BFA_IOC_FWMISMATCH = 11, /*!< IOC f/w different from drivers */ 1061d32f769SRasesh Mody BFA_IOC_ENABLING = 12, /*!< IOC is being enabled */ 107078086f3SRasesh Mody BFA_IOC_HWFAIL = 13, /*!< PCI mapping doesn't exist */ 1088b230ed8SRasesh Mody }; 1098b230ed8SRasesh Mody 1101aa8b471SBen Hutchings /* IOC firmware stats */ 1118b230ed8SRasesh Mody struct bfa_fw_ioc_stats { 1128b230ed8SRasesh Mody u32 enable_reqs; 1138b230ed8SRasesh Mody u32 disable_reqs; 1148b230ed8SRasesh Mody u32 get_attr_reqs; 1158b230ed8SRasesh Mody u32 dbg_sync; 1168b230ed8SRasesh Mody u32 dbg_dump; 1178b230ed8SRasesh Mody u32 unknown_reqs; 1188b230ed8SRasesh Mody }; 1198b230ed8SRasesh Mody 1201aa8b471SBen Hutchings /* IOC driver stats */ 1218b230ed8SRasesh Mody struct bfa_ioc_drv_stats { 1228b230ed8SRasesh Mody u32 ioc_isrs; 1238b230ed8SRasesh Mody u32 ioc_enables; 1248b230ed8SRasesh Mody u32 ioc_disables; 1258b230ed8SRasesh Mody u32 ioc_hbfails; 1268b230ed8SRasesh Mody u32 ioc_boots; 1278b230ed8SRasesh Mody u32 stats_tmos; 1288b230ed8SRasesh Mody u32 hb_count; 1298b230ed8SRasesh Mody u32 disable_reqs; 1308b230ed8SRasesh Mody u32 enable_reqs; 1318b230ed8SRasesh Mody u32 disable_replies; 1328b230ed8SRasesh Mody u32 enable_replies; 1339b08a4fcSRasesh Mody u32 rsvd; 1348b230ed8SRasesh Mody }; 1358b230ed8SRasesh Mody 1361aa8b471SBen Hutchings /* IOC statistics */ 1378b230ed8SRasesh Mody struct bfa_ioc_stats { 1388b230ed8SRasesh Mody struct bfa_ioc_drv_stats drv_stats; /*!< driver IOC stats */ 1398b230ed8SRasesh Mody struct bfa_fw_ioc_stats fw_stats; /*!< firmware IOC stats */ 1408b230ed8SRasesh Mody }; 1418b230ed8SRasesh Mody 1428b230ed8SRasesh Mody enum bfa_ioc_type { 1438b230ed8SRasesh Mody BFA_IOC_TYPE_FC = 1, 1448b230ed8SRasesh Mody BFA_IOC_TYPE_FCoE = 2, 1458b230ed8SRasesh Mody BFA_IOC_TYPE_LL = 3, 1468b230ed8SRasesh Mody }; 1478b230ed8SRasesh Mody 1481aa8b471SBen Hutchings /* IOC attributes returned in queries */ 1498b230ed8SRasesh Mody struct bfa_ioc_attr { 1508b230ed8SRasesh Mody enum bfa_ioc_type ioc_type; 1518b230ed8SRasesh Mody enum bfa_ioc_state state; /*!< IOC state */ 1528b230ed8SRasesh Mody struct bfa_adapter_attr adapter_attr; /*!< HBA attributes */ 1538b230ed8SRasesh Mody struct bfa_ioc_driver_attr driver_attr; /*!< driver attr */ 1548b230ed8SRasesh Mody struct bfa_ioc_pci_attr pci_attr; 1558b230ed8SRasesh Mody u8 port_id; /*!< port number */ 156078086f3SRasesh Mody u8 port_mode; /*!< enum bfa_mode */ 157078086f3SRasesh Mody u8 cap_bm; /*!< capability */ 158078086f3SRasesh Mody u8 port_mode_cfg; /*!< enum bfa_mode */ 15943c07adaSRasesh Mody u8 def_fn; /*!< 1 if default fn */ 16043c07adaSRasesh Mody u8 rsvd[3]; /*!< 64bit align */ 161078086f3SRasesh Mody }; 162078086f3SRasesh Mody 1631aa8b471SBen Hutchings /* Adapter capability mask definition */ 164078086f3SRasesh Mody enum { 165078086f3SRasesh Mody BFA_CM_HBA = 0x01, 166078086f3SRasesh Mody BFA_CM_CNA = 0x02, 167586b2816SRasesh Mody BFA_CM_NIC = 0x04, 1688b230ed8SRasesh Mody }; 1698b230ed8SRasesh Mody 1701aa8b471SBen Hutchings /* ---------------------- mfg definitions ------------ */ 1718b230ed8SRasesh Mody 1721aa8b471SBen Hutchings /* Checksum size */ 1738b230ed8SRasesh Mody #define BFA_MFG_CHKSUM_SIZE 16 1748b230ed8SRasesh Mody 1758b230ed8SRasesh Mody #define BFA_MFG_PARTNUM_SIZE 14 1768b230ed8SRasesh Mody #define BFA_MFG_SUPPLIER_ID_SIZE 10 1778b230ed8SRasesh Mody #define BFA_MFG_SUPPLIER_PARTNUM_SIZE 20 1788b230ed8SRasesh Mody #define BFA_MFG_SUPPLIER_SERIALNUM_SIZE 20 1798b230ed8SRasesh Mody #define BFA_MFG_SUPPLIER_REVISION_SIZE 4 1808b230ed8SRasesh Mody 1811aa8b471SBen Hutchings /* BFA adapter manufacturing block definition. 1828b230ed8SRasesh Mody * 1838b230ed8SRasesh Mody * All numerical fields are in big-endian format. 1848b230ed8SRasesh Mody */ 1858b230ed8SRasesh Mody struct bfa_mfg_block { 18672a9730bSKrishna Gudipati u8 version; /* manufacturing block version */ 18772a9730bSKrishna Gudipati u8 mfg_sig[3]; /* characters 'M', 'F', 'G' */ 18872a9730bSKrishna Gudipati u16 mfgsize; /* mfg block size */ 18972a9730bSKrishna Gudipati u16 u16_chksum; /* old u16 checksum */ 1908b230ed8SRasesh Mody char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; 1918b230ed8SRasesh Mody char brcd_partnum[STRSZ(BFA_MFG_PARTNUM_SIZE)]; 19272a9730bSKrishna Gudipati u8 mfg_day; /* manufacturing day */ 19372a9730bSKrishna Gudipati u8 mfg_month; /* manufacturing month */ 19472a9730bSKrishna Gudipati u16 mfg_year; /* manufacturing year */ 19572a9730bSKrishna Gudipati u64 mfg_wwn; /* wwn base for this adapter */ 19672a9730bSKrishna Gudipati u8 num_wwn; /* number of wwns assigned */ 19772a9730bSKrishna Gudipati u8 mfg_speeds; /* speeds allowed for this adapter */ 1988b230ed8SRasesh Mody u8 rsv[2]; 1998b230ed8SRasesh Mody char supplier_id[STRSZ(BFA_MFG_SUPPLIER_ID_SIZE)]; 2008b230ed8SRasesh Mody char supplier_partnum[STRSZ(BFA_MFG_SUPPLIER_PARTNUM_SIZE)]; 20172a9730bSKrishna Gudipati char supplier_serialnum[STRSZ(BFA_MFG_SUPPLIER_SERIALNUM_SIZE)]; 20272a9730bSKrishna Gudipati char supplier_revision[STRSZ(BFA_MFG_SUPPLIER_REVISION_SIZE)]; 203d6b30598SIvan Vecera u8 mfg_mac[ETH_ALEN]; /* base mac address */ 20472a9730bSKrishna Gudipati u8 num_mac; /* number of mac addresses */ 2058b230ed8SRasesh Mody u8 rsv2; 20672a9730bSKrishna Gudipati u32 card_type; /* card type */ 20772a9730bSKrishna Gudipati char cap_nic; /* capability nic */ 20872a9730bSKrishna Gudipati char cap_cna; /* capability cna */ 20972a9730bSKrishna Gudipati char cap_hba; /* capability hba */ 21072a9730bSKrishna Gudipati char cap_fc16g; /* capability fc 16g */ 21172a9730bSKrishna Gudipati char cap_sriov; /* capability sriov */ 21272a9730bSKrishna Gudipati char cap_mezz; /* capability mezz */ 213f391fda1SRasesh Mody u8 rsv3; 21472a9730bSKrishna Gudipati u8 mfg_nports; /* number of ports */ 21572a9730bSKrishna Gudipati char media[8]; /* xfi/xaui */ 21672a9730bSKrishna Gudipati char initial_mode[8]; /* initial mode: hba/cna/nic */ 217f391fda1SRasesh Mody u8 rsv4[84]; 21872a9730bSKrishna Gudipati u8 md5_chksum[BFA_MFG_CHKSUM_SIZE]; /* md5 checksum */ 219e423c856SIvan Vecera } __packed; 2208b230ed8SRasesh Mody 2211aa8b471SBen Hutchings /* ---------------------- pci definitions ------------ */ 2228b230ed8SRasesh Mody 2231bf9fd70SRasesh Mody /* 2241bf9fd70SRasesh Mody * PCI device ID information 2251bf9fd70SRasesh Mody */ 2261bf9fd70SRasesh Mody enum { 2271bf9fd70SRasesh Mody BFA_PCI_DEVICE_ID_CT2 = 0x22, 2281bf9fd70SRasesh Mody }; 2291bf9fd70SRasesh Mody 230772b5235SRasesh Mody #define bfa_asic_id_ct(device) \ 231772b5235SRasesh Mody ((device) == PCI_DEVICE_ID_BROCADE_CT || \ 232772b5235SRasesh Mody (device) == PCI_DEVICE_ID_BROCADE_CT_FC) 233586b2816SRasesh Mody #define bfa_asic_id_ct2(device) \ 234586b2816SRasesh Mody ((device) == BFA_PCI_DEVICE_ID_CT2) 235586b2816SRasesh Mody #define bfa_asic_id_ctc(device) \ 236586b2816SRasesh Mody (bfa_asic_id_ct(device) || bfa_asic_id_ct2(device)) 237586b2816SRasesh Mody 2381aa8b471SBen Hutchings /* PCI sub-system device and vendor ID information */ 239586b2816SRasesh Mody enum { 240586b2816SRasesh Mody BFA_PCI_FCOE_SSDEVICE_ID = 0x14, 241586b2816SRasesh Mody BFA_PCI_CT2_SSID_FCoE = 0x22, 242586b2816SRasesh Mody BFA_PCI_CT2_SSID_ETH = 0x23, 243586b2816SRasesh Mody BFA_PCI_CT2_SSID_FC = 0x24, 244586b2816SRasesh Mody }; 245078086f3SRasesh Mody 246078086f3SRasesh Mody enum bfa_mode { 247078086f3SRasesh Mody BFA_MODE_HBA = 1, 248078086f3SRasesh Mody BFA_MODE_CNA = 2, 249078086f3SRasesh Mody BFA_MODE_NIC = 3 250078086f3SRasesh Mody }; 2518b230ed8SRasesh Mody 25272a9730bSKrishna Gudipati /* 25372a9730bSKrishna Gudipati * Flash module specific 25472a9730bSKrishna Gudipati */ 25572a9730bSKrishna Gudipati #define BFA_FLASH_PART_ENTRY_SIZE 32 /* partition entry size */ 25672a9730bSKrishna Gudipati #define BFA_FLASH_PART_MAX 32 /* maximal # of partitions */ 25772a9730bSKrishna Gudipati #define BFA_TOTAL_FLASH_SIZE 0x400000 25857b9bef0SKrishna Gudipati #define BFA_FLASH_PART_FWIMG 2 25972a9730bSKrishna Gudipati #define BFA_FLASH_PART_MFG 7 26072a9730bSKrishna Gudipati 26172a9730bSKrishna Gudipati /* 26272a9730bSKrishna Gudipati * flash partition attributes 26372a9730bSKrishna Gudipati */ 26472a9730bSKrishna Gudipati struct bfa_flash_part_attr { 26572a9730bSKrishna Gudipati u32 part_type; /* partition type */ 26672a9730bSKrishna Gudipati u32 part_instance; /* partition instance */ 26772a9730bSKrishna Gudipati u32 part_off; /* partition offset */ 26872a9730bSKrishna Gudipati u32 part_size; /* partition size */ 26972a9730bSKrishna Gudipati u32 part_len; /* partition content length */ 27072a9730bSKrishna Gudipati u32 part_status; /* partition status */ 27172a9730bSKrishna Gudipati char rsv[BFA_FLASH_PART_ENTRY_SIZE - 24]; 27272a9730bSKrishna Gudipati }; 27372a9730bSKrishna Gudipati 27472a9730bSKrishna Gudipati /* 27572a9730bSKrishna Gudipati * flash attributes 27672a9730bSKrishna Gudipati */ 27772a9730bSKrishna Gudipati struct bfa_flash_attr { 27872a9730bSKrishna Gudipati u32 status; /* flash overall status */ 27972a9730bSKrishna Gudipati u32 npart; /* num of partitions */ 28072a9730bSKrishna Gudipati struct bfa_flash_part_attr part[BFA_FLASH_PART_MAX]; 28172a9730bSKrishna Gudipati }; 28272a9730bSKrishna Gudipati 2838b230ed8SRasesh Mody #endif /* __BFA_DEFS_H__ */ 284