162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Linux network driver for QLogic BR-series Converged Network Adapter. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci/* 662306a36Sopenharmony_ci * Copyright (c) 2005-2014 Brocade Communications Systems, Inc. 762306a36Sopenharmony_ci * Copyright (c) 2014-2015 QLogic Corporation 862306a36Sopenharmony_ci * All rights reserved 962306a36Sopenharmony_ci * www.qlogic.com 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#ifndef __BFA_DEFS_H__ 1362306a36Sopenharmony_ci#define __BFA_DEFS_H__ 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include "cna.h" 1662306a36Sopenharmony_ci#include "bfa_defs_status.h" 1762306a36Sopenharmony_ci#include "bfa_defs_mfg_comm.h" 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define BFA_VERSION_LEN 64 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* ---------------------- adapter definitions ------------ */ 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci/* BFA adapter level attributes. */ 2462306a36Sopenharmony_cienum { 2562306a36Sopenharmony_ci BFA_ADAPTER_SERIAL_NUM_LEN = STRSZ(BFA_MFG_SERIALNUM_SIZE), 2662306a36Sopenharmony_ci /* 2762306a36Sopenharmony_ci *!< adapter serial num length 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_ci BFA_ADAPTER_MODEL_NAME_LEN = 16, /*!< model name length */ 3062306a36Sopenharmony_ci BFA_ADAPTER_MODEL_DESCR_LEN = 128, /*!< model description length */ 3162306a36Sopenharmony_ci BFA_ADAPTER_MFG_NAME_LEN = 8, /*!< manufacturer name length */ 3262306a36Sopenharmony_ci BFA_ADAPTER_SYM_NAME_LEN = 64, /*!< adapter symbolic name length */ 3362306a36Sopenharmony_ci BFA_ADAPTER_OS_TYPE_LEN = 64, /*!< adapter os type length */ 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistruct bfa_adapter_attr { 3762306a36Sopenharmony_ci char manufacturer[BFA_ADAPTER_MFG_NAME_LEN]; 3862306a36Sopenharmony_ci char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN]; 3962306a36Sopenharmony_ci u32 card_type; 4062306a36Sopenharmony_ci char model[BFA_ADAPTER_MODEL_NAME_LEN]; 4162306a36Sopenharmony_ci char model_descr[BFA_ADAPTER_MODEL_DESCR_LEN]; 4262306a36Sopenharmony_ci u64 pwwn; 4362306a36Sopenharmony_ci char node_symname[FC_SYMNAME_MAX]; 4462306a36Sopenharmony_ci char hw_ver[BFA_VERSION_LEN]; 4562306a36Sopenharmony_ci char fw_ver[BFA_VERSION_LEN]; 4662306a36Sopenharmony_ci char optrom_ver[BFA_VERSION_LEN]; 4762306a36Sopenharmony_ci char os_type[BFA_ADAPTER_OS_TYPE_LEN]; 4862306a36Sopenharmony_ci struct bfa_mfg_vpd vpd; 4962306a36Sopenharmony_ci u8 mac[ETH_ALEN]; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci u8 nports; 5262306a36Sopenharmony_ci u8 max_speed; 5362306a36Sopenharmony_ci u8 prototype; 5462306a36Sopenharmony_ci char asic_rev; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci u8 pcie_gen; 5762306a36Sopenharmony_ci u8 pcie_lanes_orig; 5862306a36Sopenharmony_ci u8 pcie_lanes; 5962306a36Sopenharmony_ci u8 cna_capable; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci u8 is_mezz; 6262306a36Sopenharmony_ci u8 trunk_capable; 6362306a36Sopenharmony_ci}; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci/* ---------------------- IOC definitions ------------ */ 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cienum { 6862306a36Sopenharmony_ci BFA_IOC_DRIVER_LEN = 16, 6962306a36Sopenharmony_ci BFA_IOC_CHIP_REV_LEN = 8, 7062306a36Sopenharmony_ci}; 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci/* Driver and firmware versions. */ 7362306a36Sopenharmony_cistruct bfa_ioc_driver_attr { 7462306a36Sopenharmony_ci char driver[BFA_IOC_DRIVER_LEN]; /*!< driver name */ 7562306a36Sopenharmony_ci char driver_ver[BFA_VERSION_LEN]; /*!< driver version */ 7662306a36Sopenharmony_ci char fw_ver[BFA_VERSION_LEN]; /*!< firmware version */ 7762306a36Sopenharmony_ci char bios_ver[BFA_VERSION_LEN]; /*!< bios version */ 7862306a36Sopenharmony_ci char efi_ver[BFA_VERSION_LEN]; /*!< EFI version */ 7962306a36Sopenharmony_ci char ob_ver[BFA_VERSION_LEN]; /*!< openboot version */ 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci/* IOC PCI device attributes */ 8362306a36Sopenharmony_cistruct bfa_ioc_pci_attr { 8462306a36Sopenharmony_ci u16 vendor_id; /*!< PCI vendor ID */ 8562306a36Sopenharmony_ci u16 device_id; /*!< PCI device ID */ 8662306a36Sopenharmony_ci u16 ssid; /*!< subsystem ID */ 8762306a36Sopenharmony_ci u16 ssvid; /*!< subsystem vendor ID */ 8862306a36Sopenharmony_ci u32 pcifn; /*!< PCI device function */ 8962306a36Sopenharmony_ci u32 rsvd; /* padding */ 9062306a36Sopenharmony_ci char chip_rev[BFA_IOC_CHIP_REV_LEN]; /*!< chip revision */ 9162306a36Sopenharmony_ci}; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci/* IOC states */ 9462306a36Sopenharmony_cienum bfa_ioc_state { 9562306a36Sopenharmony_ci BFA_IOC_UNINIT = 1, /*!< IOC is in uninit state */ 9662306a36Sopenharmony_ci BFA_IOC_RESET = 2, /*!< IOC is in reset state */ 9762306a36Sopenharmony_ci BFA_IOC_SEMWAIT = 3, /*!< Waiting for IOC h/w semaphore */ 9862306a36Sopenharmony_ci BFA_IOC_HWINIT = 4, /*!< IOC h/w is being initialized */ 9962306a36Sopenharmony_ci BFA_IOC_GETATTR = 5, /*!< IOC is being configured */ 10062306a36Sopenharmony_ci BFA_IOC_OPERATIONAL = 6, /*!< IOC is operational */ 10162306a36Sopenharmony_ci BFA_IOC_INITFAIL = 7, /*!< IOC hardware failure */ 10262306a36Sopenharmony_ci BFA_IOC_FAIL = 8, /*!< IOC heart-beat failure */ 10362306a36Sopenharmony_ci BFA_IOC_DISABLING = 9, /*!< IOC is being disabled */ 10462306a36Sopenharmony_ci BFA_IOC_DISABLED = 10, /*!< IOC is disabled */ 10562306a36Sopenharmony_ci BFA_IOC_FWMISMATCH = 11, /*!< IOC f/w different from drivers */ 10662306a36Sopenharmony_ci BFA_IOC_ENABLING = 12, /*!< IOC is being enabled */ 10762306a36Sopenharmony_ci BFA_IOC_HWFAIL = 13, /*!< PCI mapping doesn't exist */ 10862306a36Sopenharmony_ci}; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/* IOC firmware stats */ 11162306a36Sopenharmony_cistruct bfa_fw_ioc_stats { 11262306a36Sopenharmony_ci u32 enable_reqs; 11362306a36Sopenharmony_ci u32 disable_reqs; 11462306a36Sopenharmony_ci u32 get_attr_reqs; 11562306a36Sopenharmony_ci u32 dbg_sync; 11662306a36Sopenharmony_ci u32 dbg_dump; 11762306a36Sopenharmony_ci u32 unknown_reqs; 11862306a36Sopenharmony_ci}; 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci/* IOC driver stats */ 12162306a36Sopenharmony_cistruct bfa_ioc_drv_stats { 12262306a36Sopenharmony_ci u32 ioc_isrs; 12362306a36Sopenharmony_ci u32 ioc_enables; 12462306a36Sopenharmony_ci u32 ioc_disables; 12562306a36Sopenharmony_ci u32 ioc_hbfails; 12662306a36Sopenharmony_ci u32 ioc_boots; 12762306a36Sopenharmony_ci u32 stats_tmos; 12862306a36Sopenharmony_ci u32 hb_count; 12962306a36Sopenharmony_ci u32 disable_reqs; 13062306a36Sopenharmony_ci u32 enable_reqs; 13162306a36Sopenharmony_ci u32 disable_replies; 13262306a36Sopenharmony_ci u32 enable_replies; 13362306a36Sopenharmony_ci u32 rsvd; 13462306a36Sopenharmony_ci}; 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci/* IOC statistics */ 13762306a36Sopenharmony_cistruct bfa_ioc_stats { 13862306a36Sopenharmony_ci struct bfa_ioc_drv_stats drv_stats; /*!< driver IOC stats */ 13962306a36Sopenharmony_ci struct bfa_fw_ioc_stats fw_stats; /*!< firmware IOC stats */ 14062306a36Sopenharmony_ci}; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_cienum bfa_ioc_type { 14362306a36Sopenharmony_ci BFA_IOC_TYPE_FC = 1, 14462306a36Sopenharmony_ci BFA_IOC_TYPE_FCoE = 2, 14562306a36Sopenharmony_ci BFA_IOC_TYPE_LL = 3, 14662306a36Sopenharmony_ci}; 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci/* IOC attributes returned in queries */ 14962306a36Sopenharmony_cistruct bfa_ioc_attr { 15062306a36Sopenharmony_ci enum bfa_ioc_type ioc_type; 15162306a36Sopenharmony_ci enum bfa_ioc_state state; /*!< IOC state */ 15262306a36Sopenharmony_ci struct bfa_adapter_attr adapter_attr; /*!< HBA attributes */ 15362306a36Sopenharmony_ci struct bfa_ioc_driver_attr driver_attr; /*!< driver attr */ 15462306a36Sopenharmony_ci struct bfa_ioc_pci_attr pci_attr; 15562306a36Sopenharmony_ci u8 port_id; /*!< port number */ 15662306a36Sopenharmony_ci u8 port_mode; /*!< enum bfa_mode */ 15762306a36Sopenharmony_ci u8 cap_bm; /*!< capability */ 15862306a36Sopenharmony_ci u8 port_mode_cfg; /*!< enum bfa_mode */ 15962306a36Sopenharmony_ci u8 def_fn; /*!< 1 if default fn */ 16062306a36Sopenharmony_ci u8 rsvd[3]; /*!< 64bit align */ 16162306a36Sopenharmony_ci}; 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci/* Adapter capability mask definition */ 16462306a36Sopenharmony_cienum { 16562306a36Sopenharmony_ci BFA_CM_HBA = 0x01, 16662306a36Sopenharmony_ci BFA_CM_CNA = 0x02, 16762306a36Sopenharmony_ci BFA_CM_NIC = 0x04, 16862306a36Sopenharmony_ci}; 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci/* ---------------------- mfg definitions ------------ */ 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci/* Checksum size */ 17362306a36Sopenharmony_ci#define BFA_MFG_CHKSUM_SIZE 16 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci#define BFA_MFG_PARTNUM_SIZE 14 17662306a36Sopenharmony_ci#define BFA_MFG_SUPPLIER_ID_SIZE 10 17762306a36Sopenharmony_ci#define BFA_MFG_SUPPLIER_PARTNUM_SIZE 20 17862306a36Sopenharmony_ci#define BFA_MFG_SUPPLIER_SERIALNUM_SIZE 20 17962306a36Sopenharmony_ci#define BFA_MFG_SUPPLIER_REVISION_SIZE 4 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci/* BFA adapter manufacturing block definition. 18262306a36Sopenharmony_ci * 18362306a36Sopenharmony_ci * All numerical fields are in big-endian format. 18462306a36Sopenharmony_ci */ 18562306a36Sopenharmony_cistruct bfa_mfg_block { 18662306a36Sopenharmony_ci u8 version; /* manufacturing block version */ 18762306a36Sopenharmony_ci u8 mfg_sig[3]; /* characters 'M', 'F', 'G' */ 18862306a36Sopenharmony_ci u16 mfgsize; /* mfg block size */ 18962306a36Sopenharmony_ci u16 u16_chksum; /* old u16 checksum */ 19062306a36Sopenharmony_ci char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; 19162306a36Sopenharmony_ci char brcd_partnum[STRSZ(BFA_MFG_PARTNUM_SIZE)]; 19262306a36Sopenharmony_ci u8 mfg_day; /* manufacturing day */ 19362306a36Sopenharmony_ci u8 mfg_month; /* manufacturing month */ 19462306a36Sopenharmony_ci u16 mfg_year; /* manufacturing year */ 19562306a36Sopenharmony_ci u64 mfg_wwn; /* wwn base for this adapter */ 19662306a36Sopenharmony_ci u8 num_wwn; /* number of wwns assigned */ 19762306a36Sopenharmony_ci u8 mfg_speeds; /* speeds allowed for this adapter */ 19862306a36Sopenharmony_ci u8 rsv[2]; 19962306a36Sopenharmony_ci char supplier_id[STRSZ(BFA_MFG_SUPPLIER_ID_SIZE)]; 20062306a36Sopenharmony_ci char supplier_partnum[STRSZ(BFA_MFG_SUPPLIER_PARTNUM_SIZE)]; 20162306a36Sopenharmony_ci char supplier_serialnum[STRSZ(BFA_MFG_SUPPLIER_SERIALNUM_SIZE)]; 20262306a36Sopenharmony_ci char supplier_revision[STRSZ(BFA_MFG_SUPPLIER_REVISION_SIZE)]; 20362306a36Sopenharmony_ci u8 mfg_mac[ETH_ALEN]; /* base mac address */ 20462306a36Sopenharmony_ci u8 num_mac; /* number of mac addresses */ 20562306a36Sopenharmony_ci u8 rsv2; 20662306a36Sopenharmony_ci u32 card_type; /* card type */ 20762306a36Sopenharmony_ci char cap_nic; /* capability nic */ 20862306a36Sopenharmony_ci char cap_cna; /* capability cna */ 20962306a36Sopenharmony_ci char cap_hba; /* capability hba */ 21062306a36Sopenharmony_ci char cap_fc16g; /* capability fc 16g */ 21162306a36Sopenharmony_ci char cap_sriov; /* capability sriov */ 21262306a36Sopenharmony_ci char cap_mezz; /* capability mezz */ 21362306a36Sopenharmony_ci u8 rsv3; 21462306a36Sopenharmony_ci u8 mfg_nports; /* number of ports */ 21562306a36Sopenharmony_ci char media[8]; /* xfi/xaui */ 21662306a36Sopenharmony_ci char initial_mode[8]; /* initial mode: hba/cna/nic */ 21762306a36Sopenharmony_ci u8 rsv4[84]; 21862306a36Sopenharmony_ci u8 md5_chksum[BFA_MFG_CHKSUM_SIZE]; /* md5 checksum */ 21962306a36Sopenharmony_ci} __packed; 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci/* ---------------------- pci definitions ------------ */ 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci/* 22462306a36Sopenharmony_ci * PCI device ID information 22562306a36Sopenharmony_ci */ 22662306a36Sopenharmony_cienum { 22762306a36Sopenharmony_ci BFA_PCI_DEVICE_ID_CT2 = 0x22, 22862306a36Sopenharmony_ci}; 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci#define bfa_asic_id_ct(device) \ 23162306a36Sopenharmony_ci ((device) == PCI_DEVICE_ID_BROCADE_CT || \ 23262306a36Sopenharmony_ci (device) == PCI_DEVICE_ID_BROCADE_CT_FC) 23362306a36Sopenharmony_ci#define bfa_asic_id_ct2(device) \ 23462306a36Sopenharmony_ci ((device) == BFA_PCI_DEVICE_ID_CT2) 23562306a36Sopenharmony_ci#define bfa_asic_id_ctc(device) \ 23662306a36Sopenharmony_ci (bfa_asic_id_ct(device) || bfa_asic_id_ct2(device)) 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci/* PCI sub-system device and vendor ID information */ 23962306a36Sopenharmony_cienum { 24062306a36Sopenharmony_ci BFA_PCI_FCOE_SSDEVICE_ID = 0x14, 24162306a36Sopenharmony_ci BFA_PCI_CT2_SSID_FCoE = 0x22, 24262306a36Sopenharmony_ci BFA_PCI_CT2_SSID_ETH = 0x23, 24362306a36Sopenharmony_ci BFA_PCI_CT2_SSID_FC = 0x24, 24462306a36Sopenharmony_ci}; 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_cienum bfa_mode { 24762306a36Sopenharmony_ci BFA_MODE_HBA = 1, 24862306a36Sopenharmony_ci BFA_MODE_CNA = 2, 24962306a36Sopenharmony_ci BFA_MODE_NIC = 3 25062306a36Sopenharmony_ci}; 25162306a36Sopenharmony_ci 25262306a36Sopenharmony_ci/* 25362306a36Sopenharmony_ci * Flash module specific 25462306a36Sopenharmony_ci */ 25562306a36Sopenharmony_ci#define BFA_FLASH_PART_ENTRY_SIZE 32 /* partition entry size */ 25662306a36Sopenharmony_ci#define BFA_FLASH_PART_MAX 32 /* maximal # of partitions */ 25762306a36Sopenharmony_ci#define BFA_TOTAL_FLASH_SIZE 0x400000 25862306a36Sopenharmony_ci#define BFA_FLASH_PART_FWIMG 2 25962306a36Sopenharmony_ci#define BFA_FLASH_PART_MFG 7 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci/* 26262306a36Sopenharmony_ci * flash partition attributes 26362306a36Sopenharmony_ci */ 26462306a36Sopenharmony_cistruct bfa_flash_part_attr { 26562306a36Sopenharmony_ci u32 part_type; /* partition type */ 26662306a36Sopenharmony_ci u32 part_instance; /* partition instance */ 26762306a36Sopenharmony_ci u32 part_off; /* partition offset */ 26862306a36Sopenharmony_ci u32 part_size; /* partition size */ 26962306a36Sopenharmony_ci u32 part_len; /* partition content length */ 27062306a36Sopenharmony_ci u32 part_status; /* partition status */ 27162306a36Sopenharmony_ci char rsv[BFA_FLASH_PART_ENTRY_SIZE - 24]; 27262306a36Sopenharmony_ci}; 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci/* 27562306a36Sopenharmony_ci * flash attributes 27662306a36Sopenharmony_ci */ 27762306a36Sopenharmony_cistruct bfa_flash_attr { 27862306a36Sopenharmony_ci u32 status; /* flash overall status */ 27962306a36Sopenharmony_ci u32 npart; /* num of partitions */ 28062306a36Sopenharmony_ci struct bfa_flash_part_attr part[BFA_FLASH_PART_MAX]; 28162306a36Sopenharmony_ci}; 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci#endif /* __BFA_DEFS_H__ */ 284