cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

lpfc.h (61594B)


      1/*******************************************************************
      2 * This file is part of the Emulex Linux Device Driver for         *
      3 * Fibre Channel Host Bus Adapters.                                *
      4 * Copyright (C) 2017-2022 Broadcom. All Rights Reserved. The term *
      5 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.     *
      6 * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
      7 * EMULEX and SLI are trademarks of Emulex.                        *
      8 * www.broadcom.com                                                *
      9 * Portions Copyright (C) 2004-2005 Christoph Hellwig              *
     10 *                                                                 *
     11 * This program is free software; you can redistribute it and/or   *
     12 * modify it under the terms of version 2 of the GNU General       *
     13 * Public License as published by the Free Software Foundation.    *
     14 * This program is distributed in the hope that it will be useful. *
     15 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
     16 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
     17 * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
     18 * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
     19 * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
     20 * more details, a copy of which can be found in the file COPYING  *
     21 * included with this package.                                     *
     22 *******************************************************************/
     23
     24#include <scsi/scsi_host.h>
     25#include <linux/hashtable.h>
     26#include <linux/ktime.h>
     27#include <linux/workqueue.h>
     28
     29#if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_SCSI_LPFC_DEBUG_FS)
     30#define CONFIG_SCSI_LPFC_DEBUG_FS
     31#endif
     32
     33struct lpfc_sli2_slim;
     34
     35#define ELX_MODEL_NAME_SIZE	80
     36
     37#define LPFC_PCI_DEV_LP		0x1
     38#define LPFC_PCI_DEV_OC		0x2
     39
     40#define LPFC_SLI_REV2		2
     41#define LPFC_SLI_REV3		3
     42#define LPFC_SLI_REV4		4
     43
     44#define LPFC_MAX_TARGET		4096	/* max number of targets supported */
     45#define LPFC_MAX_DISC_THREADS	64	/* max outstanding discovery els
     46					   requests */
     47#define LPFC_MAX_NS_RETRY	3	/* Number of retry attempts to contact
     48					   the NameServer  before giving up. */
     49#define LPFC_CMD_PER_LUN	3	/* max outstanding cmds per lun */
     50#define LPFC_DEFAULT_SG_SEG_CNT 64	/* sg element count per scsi cmnd */
     51#define LPFC_DEFAULT_MENLO_SG_SEG_CNT 128	/* sg element count per scsi
     52		cmnd for menlo needs nearly twice as for firmware
     53		downloads using bsg */
     54
     55#define LPFC_DEFAULT_XPSGL_SIZE	256
     56#define LPFC_MAX_SG_TABLESIZE	0xffff
     57#define LPFC_MIN_SG_SLI4_BUF_SZ	0x800	/* based on LPFC_DEFAULT_SG_SEG_CNT */
     58#define LPFC_MAX_BG_SLI4_SEG_CNT_DIF 128 /* sg element count for BlockGuard */
     59#define LPFC_MAX_SG_SEG_CNT_DIF 512	/* sg element count per scsi cmnd  */
     60#define LPFC_MAX_SG_SEG_CNT	4096	/* sg element count per scsi cmnd */
     61#define LPFC_MIN_SG_SEG_CNT	32	/* sg element count per scsi cmnd */
     62#define LPFC_MAX_SGL_SEG_CNT	512	/* SGL element count per scsi cmnd */
     63#define LPFC_MAX_BPL_SEG_CNT	4096	/* BPL element count per scsi cmnd */
     64#define LPFC_MAX_NVME_SEG_CNT	256	/* max SGL element cnt per NVME cmnd */
     65
     66#define LPFC_MAX_SGE_SIZE       0x80000000 /* Maximum data allowed in a SGE */
     67#define LPFC_IOCB_LIST_CNT	2250	/* list of IOCBs for fast-path usage. */
     68#define LPFC_Q_RAMP_UP_INTERVAL 120     /* lun q_depth ramp up interval */
     69#define LPFC_VNAME_LEN		100	/* vport symbolic name length */
     70#define LPFC_TGTQ_RAMPUP_PCENT	5	/* Target queue rampup in percentage */
     71#define LPFC_MIN_TGT_QDEPTH	10
     72#define LPFC_MAX_TGT_QDEPTH	0xFFFF
     73
     74#define  LPFC_MAX_BUCKET_COUNT 20	/* Maximum no. of buckets for stat data
     75					   collection. */
     76/*
     77 * Following time intervals are used of adjusting SCSI device
     78 * queue depths when there are driver resource error or Firmware
     79 * resource error.
     80 */
     81/* 1 Second */
     82#define QUEUE_RAMP_DOWN_INTERVAL	(msecs_to_jiffies(1000 * 1))
     83
     84/* Number of exchanges reserved for discovery to complete */
     85#define LPFC_DISC_IOCB_BUFF_COUNT 20
     86
     87#define LPFC_HB_MBOX_INTERVAL   5	/* Heart beat interval in seconds. */
     88#define LPFC_HB_MBOX_TIMEOUT    30	/* Heart beat timeout  in seconds. */
     89
     90/* Error Attention event polling interval */
     91#define LPFC_ERATT_POLL_INTERVAL	5 /* EATT poll interval in seconds */
     92
     93/* Define macros for 64 bit support */
     94#define putPaddrLow(addr)    ((uint32_t) (0xffffffff & (u64)(addr)))
     95#define putPaddrHigh(addr)   ((uint32_t) (0xffffffff & (((u64)(addr))>>32)))
     96#define getPaddr(high, low)  ((dma_addr_t)( \
     97			     (( (u64)(high)<<16 ) << 16)|( (u64)(low))))
     98/* Provide maximum configuration definitions. */
     99#define LPFC_DRVR_TIMEOUT	16	/* driver iocb timeout value in sec */
    100#define FC_MAX_ADPTMSG		64
    101
    102#define MAX_HBAEVT	32
    103#define MAX_HBAS_NO_RESET 16
    104
    105/* Number of MSI-X vectors the driver uses */
    106#define LPFC_MSIX_VECTORS	2
    107
    108/* lpfc wait event data ready flag */
    109#define LPFC_DATA_READY		0	/* bit 0 */
    110
    111/* queue dump line buffer size */
    112#define LPFC_LBUF_SZ		128
    113
    114/* mailbox system shutdown options */
    115#define LPFC_MBX_NO_WAIT	0
    116#define LPFC_MBX_WAIT		1
    117
    118#define LPFC_CFG_PARAM_MAGIC_NUM 0xFEAA0005
    119#define LPFC_PORT_CFG_NAME "/cfg/port.cfg"
    120
    121#define lpfc_rangecheck(val, min, max) \
    122	((uint)(val) >= (uint)(min) && (val) <= (max))
    123
    124enum lpfc_polling_flags {
    125	ENABLE_FCP_RING_POLLING = 0x1,
    126	DISABLE_FCP_RING_INT    = 0x2
    127};
    128
    129struct perf_prof {
    130	uint16_t cmd_cpu[40];
    131	uint16_t rsp_cpu[40];
    132	uint16_t qh_cpu[40];
    133	uint16_t wqidx[40];
    134};
    135
    136/*
    137 * Provide for FC4 TYPE x28 - NVME.  The
    138 * bit mask for FCP and NVME is 0x8 identically
    139 * because they are 32 bit positions distance.
    140 */
    141#define LPFC_FC4_TYPE_BITMASK	0x00000100
    142
    143/* Provide DMA memory definitions the driver uses per port instance. */
    144struct lpfc_dmabuf {
    145	struct list_head list;
    146	void *virt;		/* virtual address ptr */
    147	dma_addr_t phys;	/* mapped address */
    148	uint32_t   buffer_tag;	/* used for tagged queue ring */
    149};
    150
    151struct lpfc_nvmet_ctxbuf {
    152	struct list_head list;
    153	struct lpfc_async_xchg_ctx *context;
    154	struct lpfc_iocbq *iocbq;
    155	struct lpfc_sglq *sglq;
    156	struct work_struct defer_work;
    157};
    158
    159struct lpfc_dma_pool {
    160	struct lpfc_dmabuf   *elements;
    161	uint32_t    max_count;
    162	uint32_t    current_count;
    163};
    164
    165struct hbq_dmabuf {
    166	struct lpfc_dmabuf hbuf;
    167	struct lpfc_dmabuf dbuf;
    168	uint16_t total_size;
    169	uint16_t bytes_recv;
    170	uint32_t tag;
    171	struct lpfc_cq_event cq_event;
    172	unsigned long time_stamp;
    173	void *context;
    174};
    175
    176struct rqb_dmabuf {
    177	struct lpfc_dmabuf hbuf;
    178	struct lpfc_dmabuf dbuf;
    179	uint16_t total_size;
    180	uint16_t bytes_recv;
    181	uint16_t idx;
    182	struct lpfc_queue *hrq;	  /* ptr to associated Header RQ */
    183	struct lpfc_queue *drq;	  /* ptr to associated Data RQ */
    184};
    185
    186/* Priority bit.  Set value to exceed low water mark in lpfc_mem. */
    187#define MEM_PRI		0x100
    188
    189
    190/****************************************************************************/
    191/*      Device VPD save area                                                */
    192/****************************************************************************/
    193typedef struct lpfc_vpd {
    194	uint32_t status;	/* vpd status value */
    195	uint32_t length;	/* number of bytes actually returned */
    196	struct {
    197		uint32_t rsvd1;	/* Revision numbers */
    198		uint32_t biuRev;
    199		uint32_t smRev;
    200		uint32_t smFwRev;
    201		uint32_t endecRev;
    202		uint16_t rBit;
    203		uint8_t fcphHigh;
    204		uint8_t fcphLow;
    205		uint8_t feaLevelHigh;
    206		uint8_t feaLevelLow;
    207		uint32_t postKernRev;
    208		uint32_t opFwRev;
    209		uint8_t opFwName[16];
    210		uint32_t sli1FwRev;
    211		uint8_t sli1FwName[16];
    212		uint32_t sli2FwRev;
    213		uint8_t sli2FwName[16];
    214	} rev;
    215	struct {
    216#ifdef __BIG_ENDIAN_BITFIELD
    217		uint32_t rsvd3  :20;  /* Reserved                             */
    218		uint32_t rsvd2	: 3;  /* Reserved                             */
    219		uint32_t cbg	: 1;  /* Configure BlockGuard                 */
    220		uint32_t cmv	: 1;  /* Configure Max VPIs                   */
    221		uint32_t ccrp   : 1;  /* Config Command Ring Polling          */
    222		uint32_t csah   : 1;  /* Configure Synchronous Abort Handling */
    223		uint32_t chbs   : 1;  /* Cofigure Host Backing store          */
    224		uint32_t cinb   : 1;  /* Enable Interrupt Notification Block  */
    225		uint32_t cerbm	: 1;  /* Configure Enhanced Receive Buf Mgmt  */
    226		uint32_t cmx	: 1;  /* Configure Max XRIs                   */
    227		uint32_t cmr	: 1;  /* Configure Max RPIs                   */
    228#else	/*  __LITTLE_ENDIAN */
    229		uint32_t cmr	: 1;  /* Configure Max RPIs                   */
    230		uint32_t cmx	: 1;  /* Configure Max XRIs                   */
    231		uint32_t cerbm	: 1;  /* Configure Enhanced Receive Buf Mgmt  */
    232		uint32_t cinb   : 1;  /* Enable Interrupt Notification Block  */
    233		uint32_t chbs   : 1;  /* Cofigure Host Backing store          */
    234		uint32_t csah   : 1;  /* Configure Synchronous Abort Handling */
    235		uint32_t ccrp   : 1;  /* Config Command Ring Polling          */
    236		uint32_t cmv	: 1;  /* Configure Max VPIs                   */
    237		uint32_t cbg	: 1;  /* Configure BlockGuard                 */
    238		uint32_t rsvd2	: 3;  /* Reserved                             */
    239		uint32_t rsvd3  :20;  /* Reserved                             */
    240#endif
    241	} sli3Feat;
    242} lpfc_vpd_t;
    243
    244
    245/*
    246 * lpfc stat counters
    247 */
    248struct lpfc_stats {
    249	/* Statistics for ELS commands */
    250	uint32_t elsLogiCol;
    251	uint32_t elsRetryExceeded;
    252	uint32_t elsXmitRetry;
    253	uint32_t elsDelayRetry;
    254	uint32_t elsRcvDrop;
    255	uint32_t elsRcvFrame;
    256	uint32_t elsRcvRSCN;
    257	uint32_t elsRcvRNID;
    258	uint32_t elsRcvFARP;
    259	uint32_t elsRcvFARPR;
    260	uint32_t elsRcvFLOGI;
    261	uint32_t elsRcvPLOGI;
    262	uint32_t elsRcvADISC;
    263	uint32_t elsRcvPDISC;
    264	uint32_t elsRcvFAN;
    265	uint32_t elsRcvLOGO;
    266	uint32_t elsRcvPRLO;
    267	uint32_t elsRcvPRLI;
    268	uint32_t elsRcvLIRR;
    269	uint32_t elsRcvRLS;
    270	uint32_t elsRcvRPL;
    271	uint32_t elsRcvRRQ;
    272	uint32_t elsRcvRTV;
    273	uint32_t elsRcvECHO;
    274	uint32_t elsRcvLCB;
    275	uint32_t elsRcvRDP;
    276	uint32_t elsRcvRDF;
    277	uint32_t elsXmitFLOGI;
    278	uint32_t elsXmitFDISC;
    279	uint32_t elsXmitPLOGI;
    280	uint32_t elsXmitPRLI;
    281	uint32_t elsXmitADISC;
    282	uint32_t elsXmitLOGO;
    283	uint32_t elsXmitSCR;
    284	uint32_t elsXmitRSCN;
    285	uint32_t elsXmitRNID;
    286	uint32_t elsXmitFARP;
    287	uint32_t elsXmitFARPR;
    288	uint32_t elsXmitACC;
    289	uint32_t elsXmitLSRJT;
    290
    291	uint32_t frameRcvBcast;
    292	uint32_t frameRcvMulti;
    293	uint32_t strayXmitCmpl;
    294	uint32_t frameXmitDelay;
    295	uint32_t xriCmdCmpl;
    296	uint32_t xriStatErr;
    297	uint32_t LinkUp;
    298	uint32_t LinkDown;
    299	uint32_t LinkMultiEvent;
    300	uint32_t NoRcvBuf;
    301	uint32_t fcpCmd;
    302	uint32_t fcpCmpl;
    303	uint32_t fcpRspErr;
    304	uint32_t fcpRemoteStop;
    305	uint32_t fcpPortRjt;
    306	uint32_t fcpPortBusy;
    307	uint32_t fcpError;
    308	uint32_t fcpLocalErr;
    309};
    310
    311struct lpfc_hba;
    312
    313
    314#define LPFC_VMID_TIMER   300	/* timer interval in seconds */
    315
    316#define LPFC_MAX_VMID_SIZE      256
    317#define LPFC_COMPRESS_VMID_SIZE 16
    318
    319union lpfc_vmid_io_tag {
    320	u32 app_id;	/* App Id vmid */
    321	u8 cs_ctl_vmid;	/* Priority tag vmid */
    322};
    323
    324#define JIFFIES_PER_HR	(HZ * 60 * 60)
    325
    326struct lpfc_vmid {
    327	u8 flag;
    328#define LPFC_VMID_SLOT_FREE     0x0
    329#define LPFC_VMID_SLOT_USED     0x1
    330#define LPFC_VMID_REQ_REGISTER  0x2
    331#define LPFC_VMID_REGISTERED    0x4
    332#define LPFC_VMID_DE_REGISTER   0x8
    333	char host_vmid[LPFC_MAX_VMID_SIZE];
    334	union lpfc_vmid_io_tag un;
    335	struct hlist_node hnode;
    336	u64 io_rd_cnt;
    337	u64 io_wr_cnt;
    338	u8 vmid_len;
    339	u8 delete_inactive; /* Delete if inactive flag 0 = no, 1 = yes */
    340	u32 hash_index;
    341	u64 __percpu *last_io_time;
    342};
    343
    344#define lpfc_vmid_is_type_priority_tag(vport)\
    345	(vport->vmid_priority_tagging ? 1 : 0)
    346
    347#define LPFC_VMID_HASH_SIZE     256
    348#define LPFC_VMID_HASH_MASK     255
    349#define LPFC_VMID_HASH_SHIFT    6
    350
    351struct lpfc_vmid_context {
    352	struct lpfc_vmid *vmp;
    353	struct lpfc_nodelist *nlp;
    354	bool instantiated;
    355};
    356
    357struct lpfc_vmid_priority_range {
    358	u8 low;
    359	u8 high;
    360	u8 qos;
    361};
    362
    363struct lpfc_vmid_priority_info {
    364	u32 num_descriptors;
    365	struct lpfc_vmid_priority_range *vmid_range;
    366};
    367
    368#define QFPA_EVEN_ONLY 0x01
    369#define QFPA_ODD_ONLY  0x02
    370#define QFPA_EVEN_ODD  0x03
    371
    372enum discovery_state {
    373	LPFC_VPORT_UNKNOWN     =  0,    /* vport state is unknown */
    374	LPFC_VPORT_FAILED      =  1,    /* vport has failed */
    375	LPFC_LOCAL_CFG_LINK    =  6,    /* local NPORT Id configured */
    376	LPFC_FLOGI             =  7,    /* FLOGI sent to Fabric */
    377	LPFC_FDISC             =  8,    /* FDISC sent for vport */
    378	LPFC_FABRIC_CFG_LINK   =  9,    /* Fabric assigned NPORT Id
    379				         * configured */
    380	LPFC_NS_REG            =  10,   /* Register with NameServer */
    381	LPFC_NS_QRY            =  11,   /* Query NameServer for NPort ID list */
    382	LPFC_BUILD_DISC_LIST   =  12,   /* Build ADISC and PLOGI lists for
    383				         * device authentication / discovery */
    384	LPFC_DISC_AUTH         =  13,   /* Processing ADISC list */
    385	LPFC_VPORT_READY       =  32,
    386};
    387
    388enum hba_state {
    389	LPFC_LINK_UNKNOWN    =   0,   /* HBA state is unknown */
    390	LPFC_WARM_START      =   1,   /* HBA state after selective reset */
    391	LPFC_INIT_START      =   2,   /* Initial state after board reset */
    392	LPFC_INIT_MBX_CMDS   =   3,   /* Initialize HBA with mbox commands */
    393	LPFC_LINK_DOWN       =   4,   /* HBA initialized, link is down */
    394	LPFC_LINK_UP         =   5,   /* Link is up  - issue READ_LA */
    395	LPFC_CLEAR_LA        =   6,   /* authentication cmplt - issue
    396				       * CLEAR_LA */
    397	LPFC_HBA_READY       =  32,
    398	LPFC_HBA_ERROR       =  -1
    399};
    400
    401struct lpfc_trunk_link_state {
    402	enum hba_state state;
    403	uint8_t fault;
    404};
    405
    406struct lpfc_trunk_link  {
    407	struct lpfc_trunk_link_state link0,
    408				     link1,
    409				     link2,
    410				     link3;
    411};
    412
    413/* Format of congestion module parameters */
    414struct lpfc_cgn_param {
    415	uint32_t cgn_param_magic;
    416	uint8_t  cgn_param_version;	/* version 1 */
    417	uint8_t  cgn_param_mode;	/* 0=off 1=managed 2=monitor only */
    418#define LPFC_CFG_OFF		0
    419#define LPFC_CFG_MANAGED	1
    420#define LPFC_CFG_MONITOR	2
    421	uint8_t  cgn_rsvd1;
    422	uint8_t  cgn_rsvd2;
    423	uint8_t  cgn_param_level0;
    424	uint8_t  cgn_param_level1;
    425	uint8_t  cgn_param_level2;
    426	uint8_t  byte11;
    427	uint8_t  byte12;
    428	uint8_t  byte13;
    429	uint8_t  byte14;
    430	uint8_t  byte15;
    431};
    432
    433/* Max number of days of congestion data */
    434#define LPFC_MAX_CGN_DAYS 10
    435
    436/* Format of congestion buffer info
    437 * This structure defines memory thats allocated and registered with
    438 * the HBA firmware. When adding or removing fields from this structure
    439 * the alignment must match the HBA firmware.
    440 */
    441
    442struct lpfc_cgn_info {
    443	/* Header */
    444	__le16   cgn_info_size;		/* is sizeof(struct lpfc_cgn_info) */
    445	uint8_t  cgn_info_version;	/* represents format of structure */
    446#define LPFC_CGN_INFO_V1	1
    447#define LPFC_CGN_INFO_V2	2
    448#define LPFC_CGN_INFO_V3	3
    449	uint8_t  cgn_info_mode;		/* 0=off 1=managed 2=monitor only */
    450	uint8_t  cgn_info_detect;
    451	uint8_t  cgn_info_action;
    452	uint8_t  cgn_info_level0;
    453	uint8_t  cgn_info_level1;
    454	uint8_t  cgn_info_level2;
    455
    456	/* Start Time */
    457	uint8_t  cgn_info_month;
    458	uint8_t  cgn_info_day;
    459	uint8_t  cgn_info_year;
    460	uint8_t  cgn_info_hour;
    461	uint8_t  cgn_info_minute;
    462	uint8_t  cgn_info_second;
    463
    464	/* minute / hours / daily indices */
    465	uint8_t  cgn_index_minute;
    466	uint8_t  cgn_index_hour;
    467	uint8_t  cgn_index_day;
    468
    469	__le16   cgn_warn_freq;
    470	__le16   cgn_alarm_freq;
    471	__le16   cgn_lunq;
    472	uint8_t  cgn_pad1[8];
    473
    474	/* Driver Information */
    475	__le16   cgn_drvr_min[60];
    476	__le32   cgn_drvr_hr[24];
    477	__le32   cgn_drvr_day[LPFC_MAX_CGN_DAYS];
    478
    479	/* Congestion Warnings */
    480	__le16   cgn_warn_min[60];
    481	__le32   cgn_warn_hr[24];
    482	__le32   cgn_warn_day[LPFC_MAX_CGN_DAYS];
    483
    484	/* Latency Information */
    485	__le32   cgn_latency_min[60];
    486	__le32   cgn_latency_hr[24];
    487	__le32   cgn_latency_day[LPFC_MAX_CGN_DAYS];
    488
    489	/* Bandwidth Information */
    490	__le16   cgn_bw_min[60];
    491	__le16   cgn_bw_hr[24];
    492	__le16   cgn_bw_day[LPFC_MAX_CGN_DAYS];
    493
    494	/* Congestion Alarms */
    495	__le16   cgn_alarm_min[60];
    496	__le32   cgn_alarm_hr[24];
    497	__le32   cgn_alarm_day[LPFC_MAX_CGN_DAYS];
    498
    499	struct_group(cgn_stat,
    500		uint8_t  cgn_stat_npm;		/* Notifications per minute */
    501
    502		/* Start Time */
    503		uint8_t  cgn_stat_month;
    504		uint8_t  cgn_stat_day;
    505		uint8_t  cgn_stat_year;
    506		uint8_t  cgn_stat_hour;
    507		uint8_t  cgn_stat_minute;
    508		uint8_t  cgn_pad2[2];
    509
    510		__le32   cgn_notification;
    511		__le32   cgn_peer_notification;
    512		__le32   link_integ_notification;
    513		__le32   delivery_notification;
    514
    515		uint8_t  cgn_stat_cgn_month; /* Last congestion notification FPIN */
    516		uint8_t  cgn_stat_cgn_day;
    517		uint8_t  cgn_stat_cgn_year;
    518		uint8_t  cgn_stat_cgn_hour;
    519		uint8_t  cgn_stat_cgn_min;
    520		uint8_t  cgn_stat_cgn_sec;
    521
    522		uint8_t  cgn_stat_peer_month; /* Last peer congestion FPIN */
    523		uint8_t  cgn_stat_peer_day;
    524		uint8_t  cgn_stat_peer_year;
    525		uint8_t  cgn_stat_peer_hour;
    526		uint8_t  cgn_stat_peer_min;
    527		uint8_t  cgn_stat_peer_sec;
    528
    529		uint8_t  cgn_stat_lnk_month; /* Last link integrity FPIN */
    530		uint8_t  cgn_stat_lnk_day;
    531		uint8_t  cgn_stat_lnk_year;
    532		uint8_t  cgn_stat_lnk_hour;
    533		uint8_t  cgn_stat_lnk_min;
    534		uint8_t  cgn_stat_lnk_sec;
    535
    536		uint8_t  cgn_stat_del_month; /* Last delivery notification FPIN */
    537		uint8_t  cgn_stat_del_day;
    538		uint8_t  cgn_stat_del_year;
    539		uint8_t  cgn_stat_del_hour;
    540		uint8_t  cgn_stat_del_min;
    541		uint8_t  cgn_stat_del_sec;
    542	);
    543
    544	__le32   cgn_info_crc;
    545#define LPFC_CGN_CRC32_MAGIC_NUMBER	0x1EDC6F41
    546#define LPFC_CGN_CRC32_SEED		0xFFFFFFFF
    547};
    548
    549#define LPFC_CGN_INFO_SZ	(sizeof(struct lpfc_cgn_info) -  \
    550				sizeof(uint32_t))
    551
    552struct lpfc_cgn_stat {
    553	atomic64_t total_bytes;
    554	atomic64_t rcv_bytes;
    555	atomic64_t rx_latency;
    556#define LPFC_CGN_NOT_SENT	0xFFFFFFFFFFFFFFFFLL
    557	atomic_t rx_io_cnt;
    558};
    559
    560struct lpfc_cgn_acqe_stat {
    561	atomic64_t alarm;
    562	atomic64_t warn;
    563};
    564
    565struct lpfc_vport {
    566	struct lpfc_hba *phba;
    567	struct list_head listentry;
    568	uint8_t port_type;
    569#define LPFC_PHYSICAL_PORT 1
    570#define LPFC_NPIV_PORT  2
    571#define LPFC_FABRIC_PORT 3
    572	enum discovery_state port_state;
    573
    574	uint16_t vpi;
    575	uint16_t vfi;
    576	uint8_t vpi_state;
    577#define LPFC_VPI_REGISTERED	0x1
    578
    579	uint32_t fc_flag;	/* FC flags */
    580/* Several of these flags are HBA centric and should be moved to
    581 * phba->link_flag (e.g. FC_PTP, FC_PUBLIC_LOOP)
    582 */
    583#define FC_PT2PT                0x1	 /* pt2pt with no fabric */
    584#define FC_PT2PT_PLOGI          0x2	 /* pt2pt initiate PLOGI */
    585#define FC_DISC_TMO             0x4	 /* Discovery timer running */
    586#define FC_PUBLIC_LOOP          0x8	 /* Public loop */
    587#define FC_LBIT                 0x10	 /* LOGIN bit in loopinit set */
    588#define FC_RSCN_MODE            0x20	 /* RSCN cmd rcv'ed */
    589#define FC_NLP_MORE             0x40	 /* More node to process in node tbl */
    590#define FC_OFFLINE_MODE         0x80	 /* Interface is offline for diag */
    591#define FC_FABRIC               0x100	 /* We are fabric attached */
    592#define FC_VPORT_LOGO_RCVD      0x200    /* LOGO received on vport */
    593#define FC_RSCN_DISCOVERY       0x400	 /* Auth all devices after RSCN */
    594#define FC_LOGO_RCVD_DID_CHNG   0x800    /* FDISC on phys port detect DID chng*/
    595#define FC_PT2PT_NO_NVME        0x1000   /* Don't send NVME PRLI */
    596#define FC_SCSI_SCAN_TMO        0x4000	 /* scsi scan timer running */
    597#define FC_ABORT_DISCOVERY      0x8000	 /* we want to abort discovery */
    598#define FC_NDISC_ACTIVE         0x10000	 /* NPort discovery active */
    599#define FC_BYPASSED_MODE        0x20000	 /* NPort is in bypassed mode */
    600#define FC_VPORT_NEEDS_REG_VPI	0x80000  /* Needs to have its vpi registered */
    601#define FC_RSCN_DEFERRED	0x100000 /* A deferred RSCN being processed */
    602#define FC_VPORT_NEEDS_INIT_VPI 0x200000 /* Need to INIT_VPI before FDISC */
    603#define FC_VPORT_CVL_RCVD	0x400000 /* VLink failed due to CVL	 */
    604#define FC_VFI_REGISTERED	0x800000 /* VFI is registered */
    605#define FC_FDISC_COMPLETED	0x1000000/* FDISC completed */
    606#define FC_DISC_DELAYED		0x2000000/* Delay NPort discovery */
    607#define FC_RSCN_MEMENTO		0x4000000/* RSCN cmd processed */
    608
    609	uint32_t ct_flags;
    610#define FC_CT_RFF_ID		0x1	 /* RFF_ID accepted by switch */
    611#define FC_CT_RNN_ID		0x2	 /* RNN_ID accepted by switch */
    612#define FC_CT_RSNN_NN		0x4	 /* RSNN_NN accepted by switch */
    613#define FC_CT_RSPN_ID		0x8	 /* RSPN_ID accepted by switch */
    614#define FC_CT_RFT_ID		0x10	 /* RFT_ID accepted by switch */
    615#define FC_CT_RPRT_DEFER	0x20	 /* Defer issuing FDMI RPRT */
    616
    617	struct list_head fc_nodes;
    618
    619	/* Keep counters for the number of entries in each list. */
    620	uint16_t fc_plogi_cnt;
    621	uint16_t fc_adisc_cnt;
    622	uint16_t fc_reglogin_cnt;
    623	uint16_t fc_prli_cnt;
    624	uint16_t fc_unmap_cnt;
    625	uint16_t fc_map_cnt;
    626	uint16_t fc_npr_cnt;
    627	uint16_t fc_unused_cnt;
    628	struct serv_parm fc_sparam;	/* buffer for our service parameters */
    629
    630	uint32_t fc_myDID;	/* fibre channel S_ID */
    631	uint32_t fc_prevDID;	/* previous fibre channel S_ID */
    632	struct lpfc_name fabric_portname;
    633	struct lpfc_name fabric_nodename;
    634
    635	int32_t stopped;   /* HBA has not been restarted since last ERATT */
    636	uint8_t fc_linkspeed;	/* Link speed after last READ_LA */
    637
    638	uint32_t num_disc_nodes;	/* in addition to hba_state */
    639	uint32_t gidft_inp;		/* cnt of outstanding GID_FTs */
    640
    641	uint32_t fc_nlp_cnt;	/* outstanding NODELIST requests */
    642	uint32_t fc_rscn_id_cnt;	/* count of RSCNs payloads in list */
    643	uint32_t fc_rscn_flush;		/* flag use of fc_rscn_id_list */
    644	struct lpfc_dmabuf *fc_rscn_id_list[FC_MAX_HOLD_RSCN];
    645	struct lpfc_name fc_nodename;	/* fc nodename */
    646	struct lpfc_name fc_portname;	/* fc portname */
    647
    648	struct lpfc_work_evt disc_timeout_evt;
    649
    650	struct timer_list fc_disctmo;	/* Discovery rescue timer */
    651	uint8_t fc_ns_retry;	/* retries for fabric nameserver */
    652	uint32_t fc_prli_sent;	/* cntr for outstanding PRLIs */
    653
    654	spinlock_t work_port_lock;
    655	uint32_t work_port_events; /* Timeout to be handled  */
    656#define WORKER_DISC_TMO                0x1	/* vport: Discovery timeout */
    657#define WORKER_ELS_TMO                 0x2	/* vport: ELS timeout */
    658#define WORKER_DELAYED_DISC_TMO        0x8	/* vport: delayed discovery */
    659
    660#define WORKER_MBOX_TMO                0x100	/* hba: MBOX timeout */
    661#define WORKER_HB_TMO                  0x200	/* hba: Heart beat timeout */
    662#define WORKER_FABRIC_BLOCK_TMO        0x400	/* hba: fabric block timeout */
    663#define WORKER_RAMP_DOWN_QUEUE         0x800	/* hba: Decrease Q depth */
    664#define WORKER_RAMP_UP_QUEUE           0x1000	/* hba: Increase Q depth */
    665#define WORKER_SERVICE_TXQ             0x2000	/* hba: IOCBs on the txq */
    666#define WORKER_CHECK_INACTIVE_VMID     0x4000	/* hba: check inactive vmids */
    667#define WORKER_CHECK_VMID_ISSUE_QFPA   0x8000	/* vport: Check if qfpa needs
    668						 * to be issued */
    669
    670	struct timer_list els_tmofunc;
    671	struct timer_list delayed_disc_tmo;
    672
    673	uint8_t load_flag;
    674#define FC_LOADING		0x1	/* HBA in process of loading drvr */
    675#define FC_UNLOADING		0x2	/* HBA in process of unloading drvr */
    676#define FC_ALLOW_FDMI		0x4	/* port is ready for FDMI requests */
    677#define FC_ALLOW_VMID		0x8	/* Allow VMID I/Os */
    678#define FC_DEREGISTER_ALL_APP_ID	0x10	/* Deregister all VMIDs */
    679	/* Vport Config Parameters */
    680	uint32_t cfg_scan_down;
    681	uint32_t cfg_lun_queue_depth;
    682	uint32_t cfg_nodev_tmo;
    683	uint32_t cfg_devloss_tmo;
    684	uint32_t cfg_restrict_login;
    685	uint32_t cfg_peer_port_login;
    686	uint32_t cfg_fcp_class;
    687	uint32_t cfg_use_adisc;
    688	uint32_t cfg_discovery_threads;
    689	uint32_t cfg_log_verbose;
    690	uint32_t cfg_enable_fc4_type;
    691	uint32_t cfg_max_luns;
    692	uint32_t cfg_enable_da_id;
    693	uint32_t cfg_max_scsicmpl_time;
    694	uint32_t cfg_tgt_queue_depth;
    695	uint32_t cfg_first_burst_size;
    696	uint32_t dev_loss_tmo_changed;
    697	/* VMID parameters */
    698	u8 lpfc_vmid_host_uuid[LPFC_COMPRESS_VMID_SIZE];
    699	u32 max_vmid;	/* maximum VMIDs allowed per port */
    700	u32 cur_vmid_cnt;	/* Current VMID count */
    701#define LPFC_MIN_VMID	4
    702#define LPFC_MAX_VMID	255
    703	u32 vmid_inactivity_timeout;	/* Time after which the VMID */
    704						/* deregisters from switch */
    705	u32 vmid_priority_tagging;
    706#define LPFC_VMID_PRIO_TAG_DISABLE	0 /* Disable */
    707#define LPFC_VMID_PRIO_TAG_SUP_TARGETS	1 /* Allow supported targets only */
    708#define LPFC_VMID_PRIO_TAG_ALL_TARGETS	2 /* Allow all targets */
    709	unsigned long *vmid_priority_range;
    710#define LPFC_VMID_MAX_PRIORITY_RANGE    256
    711#define LPFC_VMID_PRIORITY_BITMAP_SIZE  32
    712	u8 vmid_flag;
    713#define LPFC_VMID_IN_USE		0x1
    714#define LPFC_VMID_ISSUE_QFPA		0x2
    715#define LPFC_VMID_QFPA_CMPL		0x4
    716#define LPFC_VMID_QOS_ENABLED		0x8
    717#define LPFC_VMID_TIMER_ENBLD		0x10
    718#define LPFC_VMID_TYPE_PRIO		0x20
    719	struct fc_qfpa_res *qfpa_res;
    720
    721	struct fc_vport *fc_vport;
    722
    723	struct lpfc_vmid *vmid;
    724	DECLARE_HASHTABLE(hash_table, 8);
    725	rwlock_t vmid_lock;
    726	struct lpfc_vmid_priority_info vmid_priority;
    727
    728#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
    729	struct dentry *debug_disc_trc;
    730	struct dentry *debug_nodelist;
    731	struct dentry *debug_nvmestat;
    732	struct dentry *debug_scsistat;
    733	struct dentry *debug_ioktime;
    734	struct dentry *debug_hdwqstat;
    735	struct dentry *vport_debugfs_root;
    736	struct lpfc_debugfs_trc *disc_trc;
    737	atomic_t disc_trc_cnt;
    738#endif
    739	uint8_t stat_data_enabled;
    740	uint8_t stat_data_blocked;
    741	struct list_head rcv_buffer_list;
    742	unsigned long rcv_buffer_time_stamp;
    743	uint32_t vport_flag;
    744#define STATIC_VPORT		0x1
    745#define FAWWPN_PARAM_CHG	0x2
    746
    747	uint16_t fdmi_num_disc;
    748	uint32_t fdmi_hba_mask;
    749	uint32_t fdmi_port_mask;
    750
    751	/* There is a single nvme instance per vport. */
    752	struct nvme_fc_local_port *localport;
    753	uint8_t  nvmei_support; /* driver supports NVME Initiator */
    754	uint32_t last_fcp_wqidx;
    755	uint32_t rcv_flogi_cnt; /* How many unsol FLOGIs ACK'd. */
    756};
    757
    758struct hbq_s {
    759	uint16_t entry_count;	  /* Current number of HBQ slots */
    760	uint16_t buffer_count;	  /* Current number of buffers posted */
    761	uint32_t next_hbqPutIdx;  /* Index to next HBQ slot to use */
    762	uint32_t hbqPutIdx;	  /* HBQ slot to use */
    763	uint32_t local_hbqGetIdx; /* Local copy of Get index from Port */
    764	void    *hbq_virt;	  /* Virtual ptr to this hbq */
    765	struct list_head hbq_buffer_list;  /* buffers assigned to this HBQ */
    766				  /* Callback for HBQ buffer allocation */
    767	struct hbq_dmabuf *(*hbq_alloc_buffer) (struct lpfc_hba *);
    768				  /* Callback for HBQ buffer free */
    769	void               (*hbq_free_buffer) (struct lpfc_hba *,
    770					       struct hbq_dmabuf *);
    771};
    772
    773/* this matches the position in the lpfc_hbq_defs array */
    774#define LPFC_ELS_HBQ	0
    775#define LPFC_MAX_HBQS	1
    776
    777enum hba_temp_state {
    778	HBA_NORMAL_TEMP,
    779	HBA_OVER_TEMP
    780};
    781
    782enum intr_type_t {
    783	NONE = 0,
    784	INTx,
    785	MSI,
    786	MSIX,
    787};
    788
    789#define LPFC_CT_CTX_MAX		64
    790struct unsol_rcv_ct_ctx {
    791	uint32_t ctxt_id;
    792	uint32_t SID;
    793	uint32_t valid;
    794#define UNSOL_INVALID		0
    795#define UNSOL_VALID		1
    796	uint16_t oxid;
    797	uint16_t rxid;
    798};
    799
    800#define LPFC_USER_LINK_SPEED_AUTO	0	/* auto select (default)*/
    801#define LPFC_USER_LINK_SPEED_1G		1	/* 1 Gigabaud */
    802#define LPFC_USER_LINK_SPEED_2G		2	/* 2 Gigabaud */
    803#define LPFC_USER_LINK_SPEED_4G		4	/* 4 Gigabaud */
    804#define LPFC_USER_LINK_SPEED_8G		8	/* 8 Gigabaud */
    805#define LPFC_USER_LINK_SPEED_10G	10	/* 10 Gigabaud */
    806#define LPFC_USER_LINK_SPEED_16G	16	/* 16 Gigabaud */
    807#define LPFC_USER_LINK_SPEED_32G	32	/* 32 Gigabaud */
    808#define LPFC_USER_LINK_SPEED_64G	64	/* 64 Gigabaud */
    809#define LPFC_USER_LINK_SPEED_MAX	LPFC_USER_LINK_SPEED_64G
    810
    811#define LPFC_LINK_SPEED_STRING "0, 1, 2, 4, 8, 10, 16, 32, 64"
    812
    813enum nemb_type {
    814	nemb_mse = 1,
    815	nemb_hbd
    816};
    817
    818enum mbox_type {
    819	mbox_rd = 1,
    820	mbox_wr
    821};
    822
    823enum dma_type {
    824	dma_mbox = 1,
    825	dma_ebuf
    826};
    827
    828enum sta_type {
    829	sta_pre_addr = 1,
    830	sta_pos_addr
    831};
    832
    833struct lpfc_mbox_ext_buf_ctx {
    834	uint32_t state;
    835#define LPFC_BSG_MBOX_IDLE		0
    836#define LPFC_BSG_MBOX_HOST              1
    837#define LPFC_BSG_MBOX_PORT		2
    838#define LPFC_BSG_MBOX_DONE		3
    839#define LPFC_BSG_MBOX_ABTS		4
    840	enum nemb_type nembType;
    841	enum mbox_type mboxType;
    842	uint32_t numBuf;
    843	uint32_t mbxTag;
    844	uint32_t seqNum;
    845	struct lpfc_dmabuf *mbx_dmabuf;
    846	struct list_head ext_dmabuf_list;
    847};
    848
    849struct lpfc_epd_pool {
    850	/* Expedite pool */
    851	struct list_head list;
    852	u32 count;
    853	spinlock_t lock;	/* lock for expedite pool */
    854};
    855
    856enum ras_state {
    857	INACTIVE,
    858	REG_INPROGRESS,
    859	ACTIVE
    860};
    861
    862struct lpfc_ras_fwlog {
    863	uint8_t *fwlog_buff;
    864	uint32_t fw_buffcount; /* Buffer size posted to FW */
    865#define LPFC_RAS_BUFF_ENTERIES  16      /* Each entry can hold max of 64k */
    866#define LPFC_RAS_MAX_ENTRY_SIZE (64 * 1024)
    867#define LPFC_RAS_MIN_BUFF_POST_SIZE (256 * 1024)
    868#define LPFC_RAS_MAX_BUFF_POST_SIZE (1024 * 1024)
    869	uint32_t fw_loglevel; /* Log level set */
    870	struct lpfc_dmabuf lwpd;
    871	struct list_head fwlog_buff_list;
    872
    873	/* RAS support status on adapter */
    874	bool ras_hwsupport; /* RAS Support available on HW or not */
    875	bool ras_enabled;   /* Ras Enabled for the function */
    876#define LPFC_RAS_DISABLE_LOGGING 0x00
    877#define LPFC_RAS_ENABLE_LOGGING 0x01
    878	enum ras_state state;    /* RAS logging running state */
    879};
    880
    881#define DBG_LOG_STR_SZ 256
    882#define DBG_LOG_SZ 256
    883
    884struct dbg_log_ent {
    885	char log[DBG_LOG_STR_SZ];
    886	u64     t_ns;
    887};
    888
    889enum lpfc_irq_chann_mode {
    890	/* Assign IRQs to all possible cpus that have hardware queues */
    891	NORMAL_MODE,
    892
    893	/* Assign IRQs only to cpus on the same numa node as HBA */
    894	NUMA_MODE,
    895
    896	/* Assign IRQs only on non-hyperthreaded CPUs. This is the
    897	 * same as normal_mode, but assign IRQS only on physical CPUs.
    898	 */
    899	NHT_MODE,
    900};
    901
    902enum lpfc_hba_bit_flags {
    903	FABRIC_COMANDS_BLOCKED,
    904	HBA_PCI_ERR,
    905};
    906
    907struct lpfc_hba {
    908	/* SCSI interface function jump table entries */
    909	struct lpfc_io_buf * (*lpfc_get_scsi_buf)
    910		(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp,
    911		struct scsi_cmnd *cmnd);
    912	int (*lpfc_scsi_prep_dma_buf)
    913		(struct lpfc_hba *, struct lpfc_io_buf *);
    914	void (*lpfc_scsi_unprep_dma_buf)
    915		(struct lpfc_hba *, struct lpfc_io_buf *);
    916	void (*lpfc_release_scsi_buf)
    917		(struct lpfc_hba *, struct lpfc_io_buf *);
    918	void (*lpfc_rampdown_queue_depth)
    919		(struct lpfc_hba *);
    920	void (*lpfc_scsi_prep_cmnd)
    921		(struct lpfc_vport *, struct lpfc_io_buf *,
    922		 struct lpfc_nodelist *);
    923	int (*lpfc_scsi_prep_cmnd_buf)
    924		(struct lpfc_vport *vport,
    925		 struct lpfc_io_buf *lpfc_cmd,
    926		 uint8_t tmo);
    927	int (*lpfc_scsi_prep_task_mgmt_cmd)
    928		(struct lpfc_vport *vport,
    929		 struct lpfc_io_buf *lpfc_cmd,
    930		 u64 lun, u8 task_mgmt_cmd);
    931
    932	/* IOCB interface function jump table entries */
    933	int (*__lpfc_sli_issue_iocb)
    934		(struct lpfc_hba *, uint32_t,
    935		 struct lpfc_iocbq *, uint32_t);
    936	int (*__lpfc_sli_issue_fcp_io)
    937		(struct lpfc_hba *phba, uint32_t ring_number,
    938		 struct lpfc_iocbq *piocb, uint32_t flag);
    939	void (*__lpfc_sli_release_iocbq)(struct lpfc_hba *,
    940			 struct lpfc_iocbq *);
    941	int (*lpfc_hba_down_post)(struct lpfc_hba *phba);
    942	void (*lpfc_scsi_cmd_iocb_cmpl)
    943		(struct lpfc_hba *, struct lpfc_iocbq *, struct lpfc_iocbq *);
    944
    945	/* MBOX interface function jump table entries */
    946	int (*lpfc_sli_issue_mbox)
    947		(struct lpfc_hba *, LPFC_MBOXQ_t *, uint32_t);
    948
    949	/* Slow-path IOCB process function jump table entries */
    950	void (*lpfc_sli_handle_slow_ring_event)
    951		(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
    952		 uint32_t mask);
    953
    954	/* INIT device interface function jump table entries */
    955	int (*lpfc_sli_hbq_to_firmware)
    956		(struct lpfc_hba *, uint32_t, struct hbq_dmabuf *);
    957	int (*lpfc_sli_brdrestart)
    958		(struct lpfc_hba *);
    959	int (*lpfc_sli_brdready)
    960		(struct lpfc_hba *, uint32_t);
    961	void (*lpfc_handle_eratt)
    962		(struct lpfc_hba *);
    963	void (*lpfc_stop_port)
    964		(struct lpfc_hba *);
    965	int (*lpfc_hba_init_link)
    966		(struct lpfc_hba *, uint32_t);
    967	int (*lpfc_hba_down_link)
    968		(struct lpfc_hba *, uint32_t);
    969	int (*lpfc_selective_reset)
    970		(struct lpfc_hba *);
    971
    972	int (*lpfc_bg_scsi_prep_dma_buf)
    973		(struct lpfc_hba *, struct lpfc_io_buf *);
    974
    975	/* Prep SLI WQE/IOCB jump table entries */
    976	void (*__lpfc_sli_prep_els_req_rsp)(struct lpfc_iocbq *cmdiocbq,
    977					    struct lpfc_vport *vport,
    978					    struct lpfc_dmabuf *bmp,
    979					    u16 cmd_size, u32 did, u32 elscmd,
    980					    u8 tmo, u8 expect_rsp);
    981	void (*__lpfc_sli_prep_gen_req)(struct lpfc_iocbq *cmdiocbq,
    982					struct lpfc_dmabuf *bmp, u16 rpi,
    983					u32 num_entry, u8 tmo);
    984	void (*__lpfc_sli_prep_xmit_seq64)(struct lpfc_iocbq *cmdiocbq,
    985					   struct lpfc_dmabuf *bmp, u16 rpi,
    986					   u16 ox_id, u32 num_entry, u8 rctl,
    987					   u8 last_seq, u8 cr_cx_cmd);
    988	void (*__lpfc_sli_prep_abort_xri)(struct lpfc_iocbq *cmdiocbq,
    989					  u16 ulp_context, u16 iotag,
    990					  u8 ulp_class, u16 cqid, bool ia);
    991
    992	/* expedite pool */
    993	struct lpfc_epd_pool epd_pool;
    994
    995	/* SLI4 specific HBA data structure */
    996	struct lpfc_sli4_hba sli4_hba;
    997
    998	struct workqueue_struct *wq;
    999	struct delayed_work     eq_delay_work;
   1000
   1001#define LPFC_IDLE_STAT_DELAY 1000
   1002	struct delayed_work	idle_stat_delay_work;
   1003
   1004	struct lpfc_sli sli;
   1005	uint8_t pci_dev_grp;	/* lpfc PCI dev group: 0x0, 0x1, 0x2,... */
   1006	uint32_t sli_rev;		/* SLI2, SLI3, or SLI4 */
   1007	uint32_t sli3_options;		/* Mask of enabled SLI3 options */
   1008#define LPFC_SLI3_HBQ_ENABLED		0x01
   1009#define LPFC_SLI3_NPIV_ENABLED		0x02
   1010#define LPFC_SLI3_VPORT_TEARDOWN	0x04
   1011#define LPFC_SLI3_CRP_ENABLED		0x08
   1012#define LPFC_SLI3_BG_ENABLED		0x20
   1013#define LPFC_SLI3_DSS_ENABLED		0x40
   1014#define LPFC_SLI4_PERFH_ENABLED		0x80
   1015#define LPFC_SLI4_PHWQ_ENABLED		0x100
   1016	uint32_t iocb_cmd_size;
   1017	uint32_t iocb_rsp_size;
   1018
   1019	struct lpfc_trunk_link  trunk_link;
   1020	enum hba_state link_state;
   1021	uint32_t link_flag;	/* link state flags */
   1022#define LS_LOOPBACK_MODE      0x1	/* NPort is in Loopback mode */
   1023					/* This flag is set while issuing */
   1024					/* INIT_LINK mailbox command */
   1025#define LS_NPIV_FAB_SUPPORTED 0x2	/* Fabric supports NPIV */
   1026#define LS_IGNORE_ERATT       0x4	/* intr handler should ignore ERATT */
   1027#define LS_MDS_LINK_DOWN      0x8	/* MDS Diagnostics Link Down */
   1028#define LS_MDS_LOOPBACK       0x10	/* MDS Diagnostics Link Up (Loopback) */
   1029#define LS_CT_VEN_RPA         0x20	/* Vendor RPA sent to switch */
   1030#define LS_EXTERNAL_LOOPBACK  0x40	/* External loopback plug inserted */
   1031
   1032	uint32_t hba_flag;	/* hba generic flags */
   1033#define HBA_ERATT_HANDLED	0x1 /* This flag is set when eratt handled */
   1034#define DEFER_ERATT		0x2 /* Deferred error attention in progress */
   1035#define HBA_FCOE_MODE		0x4 /* HBA function in FCoE Mode */
   1036#define HBA_SP_QUEUE_EVT	0x8 /* Slow-path qevt posted to worker thread*/
   1037#define HBA_POST_RECEIVE_BUFFER 0x10 /* Rcv buffers need to be posted */
   1038#define HBA_PERSISTENT_TOPO	0x20 /* Persistent topology support in hba */
   1039#define ELS_XRI_ABORT_EVENT	0x40 /* ELS_XRI abort event was queued */
   1040#define ASYNC_EVENT		0x80
   1041#define LINK_DISABLED		0x100 /* Link disabled by user */
   1042#define FCF_TS_INPROG           0x200 /* FCF table scan in progress */
   1043#define FCF_RR_INPROG           0x400 /* FCF roundrobin flogi in progress */
   1044#define HBA_FIP_SUPPORT		0x800 /* FIP support in HBA */
   1045#define HBA_AER_ENABLED		0x1000 /* AER enabled with HBA */
   1046#define HBA_DEVLOSS_TMO         0x2000 /* HBA in devloss timeout */
   1047#define HBA_RRQ_ACTIVE		0x4000 /* process the rrq active list */
   1048#define HBA_IOQ_FLUSH		0x8000 /* FCP/NVME I/O queues being flushed */
   1049#define HBA_RECOVERABLE_UE	0x20000 /* Firmware supports recoverable UE */
   1050#define HBA_FORCED_LINK_SPEED	0x40000 /*
   1051					 * Firmware supports Forced Link Speed
   1052					 * capability
   1053					 */
   1054#define HBA_FLOGI_ISSUED	0x100000 /* FLOGI was issued */
   1055#define HBA_SHORT_CMF		0x200000 /* shorter CMF timer routine */
   1056#define HBA_CGN_DAY_WRAP	0x400000 /* HBA Congestion info day wraps */
   1057#define HBA_DEFER_FLOGI		0x800000 /* Defer FLOGI till read_sparm cmpl */
   1058#define HBA_SETUP		0x1000000 /* Signifies HBA setup is completed */
   1059#define HBA_NEEDS_CFG_PORT	0x2000000 /* SLI3 - needs a CONFIG_PORT mbox */
   1060#define HBA_HBEAT_INP		0x4000000 /* mbox HBEAT is in progress */
   1061#define HBA_HBEAT_TMO		0x8000000 /* HBEAT initiated after timeout */
   1062#define HBA_FLOGI_OUTSTANDING	0x10000000 /* FLOGI is outstanding */
   1063#define HBA_RHBA_CMPL		0x20000000 /* RHBA FDMI command is successful */
   1064
   1065	struct completion *fw_dump_cmpl; /* cmpl event tracker for fw_dump */
   1066	uint32_t fcp_ring_in_use; /* When polling test if intr-hndlr active*/
   1067	struct lpfc_dmabuf slim2p;
   1068
   1069	MAILBOX_t *mbox;
   1070	uint32_t *mbox_ext;
   1071	struct lpfc_mbox_ext_buf_ctx mbox_ext_buf_ctx;
   1072	uint32_t ha_copy;
   1073	struct _PCB *pcb;
   1074	struct _IOCB *IOCBs;
   1075
   1076	struct lpfc_dmabuf hbqslimp;
   1077
   1078	uint16_t pci_cfg_value;
   1079
   1080	uint8_t fc_linkspeed;	/* Link speed after last READ_LA */
   1081
   1082	uint32_t fc_eventTag;	/* event tag for link attention */
   1083	uint32_t link_events;
   1084
   1085	/* These fields used to be binfo */
   1086	uint32_t fc_pref_DID;	/* preferred D_ID */
   1087	uint8_t  fc_pref_ALPA;	/* preferred AL_PA */
   1088	uint32_t fc_edtovResol; /* E_D_TOV timer resolution */
   1089	uint32_t fc_edtov;	/* E_D_TOV timer value */
   1090	uint32_t fc_arbtov;	/* ARB_TOV timer value */
   1091	uint32_t fc_ratov;	/* R_A_TOV timer value */
   1092	uint32_t fc_rttov;	/* R_T_TOV timer value */
   1093	uint32_t fc_altov;	/* AL_TOV timer value */
   1094	uint32_t fc_crtov;	/* C_R_TOV timer value */
   1095
   1096	struct serv_parm fc_fabparam;	/* fabric service parameters buffer */
   1097	uint8_t alpa_map[128];	/* AL_PA map from READ_LA */
   1098
   1099	uint32_t lmt;
   1100
   1101	uint32_t fc_topology;	/* link topology, from LINK INIT */
   1102	uint32_t fc_topology_changed;	/* link topology, from LINK INIT */
   1103
   1104	struct lpfc_stats fc_stat;
   1105
   1106	struct lpfc_nodelist fc_fcpnodev; /* nodelist entry for no device */
   1107	uint32_t nport_event_cnt;	/* timestamp for nlplist entry */
   1108
   1109	uint8_t  wwnn[8];
   1110	uint8_t  wwpn[8];
   1111	uint32_t RandomData[7];
   1112	uint8_t  fcp_embed_io;
   1113	uint8_t  nvmet_support;	/* driver supports NVMET */
   1114#define LPFC_NVMET_MAX_PORTS	32
   1115	uint8_t  mds_diags_support;
   1116	uint8_t  bbcredit_support;
   1117	uint8_t  enab_exp_wqcq_pages;
   1118	u8	 nsler; /* Firmware supports FC-NVMe-2 SLER */
   1119
   1120	/* HBA Config Parameters */
   1121	uint32_t cfg_ack0;
   1122	uint32_t cfg_xri_rebalancing;
   1123	uint32_t cfg_xpsgl;
   1124	uint32_t cfg_enable_npiv;
   1125	uint32_t cfg_enable_rrq;
   1126	uint32_t cfg_topology;
   1127	uint32_t cfg_link_speed;
   1128#define LPFC_FCF_FOV 1		/* Fast fcf failover */
   1129#define LPFC_FCF_PRIORITY 2	/* Priority fcf failover */
   1130	uint32_t cfg_fcf_failover_policy;
   1131	uint32_t cfg_fcp_io_sched;
   1132	uint32_t cfg_ns_query;
   1133	uint32_t cfg_fcp2_no_tgt_reset;
   1134	uint32_t cfg_cr_delay;
   1135	uint32_t cfg_cr_count;
   1136	uint32_t cfg_multi_ring_support;
   1137	uint32_t cfg_multi_ring_rctl;
   1138	uint32_t cfg_multi_ring_type;
   1139	uint32_t cfg_poll;
   1140	uint32_t cfg_poll_tmo;
   1141	uint32_t cfg_task_mgmt_tmo;
   1142	uint32_t cfg_use_msi;
   1143	uint32_t cfg_auto_imax;
   1144	uint32_t cfg_fcp_imax;
   1145	uint32_t cfg_force_rscn;
   1146	uint32_t cfg_cq_poll_threshold;
   1147	uint32_t cfg_cq_max_proc_limit;
   1148	uint32_t cfg_fcp_cpu_map;
   1149	uint32_t cfg_fcp_mq_threshold;
   1150	uint32_t cfg_hdw_queue;
   1151	uint32_t cfg_irq_chann;
   1152	uint32_t cfg_suppress_rsp;
   1153	uint32_t cfg_nvme_oas;
   1154	uint32_t cfg_nvme_embed_cmd;
   1155	uint32_t cfg_nvmet_mrq_post;
   1156	uint32_t cfg_nvmet_mrq;
   1157	uint32_t cfg_enable_nvmet;
   1158	uint32_t cfg_nvme_enable_fb;
   1159	uint32_t cfg_nvmet_fb_size;
   1160	uint32_t cfg_total_seg_cnt;
   1161	uint32_t cfg_sg_seg_cnt;
   1162	uint32_t cfg_nvme_seg_cnt;
   1163	uint32_t cfg_scsi_seg_cnt;
   1164	uint32_t cfg_sg_dma_buf_size;
   1165	uint32_t cfg_hba_queue_depth;
   1166	uint32_t cfg_enable_hba_reset;
   1167	uint32_t cfg_enable_hba_heartbeat;
   1168	uint32_t cfg_fof;
   1169	uint32_t cfg_EnableXLane;
   1170	uint8_t cfg_oas_tgt_wwpn[8];
   1171	uint8_t cfg_oas_vpt_wwpn[8];
   1172	uint32_t cfg_oas_lun_state;
   1173#define OAS_LUN_ENABLE	1
   1174#define OAS_LUN_DISABLE	0
   1175	uint32_t cfg_oas_lun_status;
   1176#define OAS_LUN_STATUS_EXISTS	0x01
   1177	uint32_t cfg_oas_flags;
   1178#define OAS_FIND_ANY_VPORT	0x01
   1179#define OAS_FIND_ANY_TARGET	0x02
   1180#define OAS_LUN_VALID	0x04
   1181	uint32_t cfg_oas_priority;
   1182	uint32_t cfg_XLanePriority;
   1183	uint32_t cfg_enable_bg;
   1184	uint32_t cfg_prot_mask;
   1185	uint32_t cfg_prot_guard;
   1186	uint32_t cfg_hostmem_hgp;
   1187	uint32_t cfg_log_verbose;
   1188	uint32_t cfg_enable_fc4_type;
   1189#define LPFC_ENABLE_FCP  1
   1190#define LPFC_ENABLE_NVME 2
   1191#define LPFC_ENABLE_BOTH 3
   1192#if (IS_ENABLED(CONFIG_NVME_FC))
   1193#define LPFC_MAX_ENBL_FC4_TYPE LPFC_ENABLE_BOTH
   1194#define LPFC_DEF_ENBL_FC4_TYPE LPFC_ENABLE_BOTH
   1195#else
   1196#define LPFC_MAX_ENBL_FC4_TYPE LPFC_ENABLE_FCP
   1197#define LPFC_DEF_ENBL_FC4_TYPE LPFC_ENABLE_FCP
   1198#endif
   1199	uint32_t cfg_aer_support;
   1200	uint32_t cfg_sriov_nr_virtfn;
   1201	uint32_t cfg_request_firmware_upgrade;
   1202	uint32_t cfg_suppress_link_up;
   1203	uint32_t cfg_rrq_xri_bitmap_sz;
   1204	u32      cfg_fcp_wait_abts_rsp;
   1205	uint32_t cfg_delay_discovery;
   1206	uint32_t cfg_sli_mode;
   1207#define LPFC_INITIALIZE_LINK              0	/* do normal init_link mbox */
   1208#define LPFC_DELAY_INIT_LINK              1	/* layered driver hold off */
   1209#define LPFC_DELAY_INIT_LINK_INDEFINITELY 2	/* wait, manual intervention */
   1210	uint32_t cfg_fdmi_on;
   1211#define LPFC_FDMI_NO_SUPPORT	0	/* FDMI not supported */
   1212#define LPFC_FDMI_SUPPORT	1	/* FDMI supported? */
   1213	uint32_t cfg_enable_SmartSAN;
   1214	uint32_t cfg_enable_mds_diags;
   1215	uint32_t cfg_ras_fwlog_level;
   1216	uint32_t cfg_ras_fwlog_buffsize;
   1217	uint32_t cfg_ras_fwlog_func;
   1218	uint32_t cfg_enable_bbcr;	/* Enable BB Credit Recovery */
   1219	uint32_t cfg_enable_dpp;	/* Enable Direct Packet Push */
   1220	uint32_t cfg_enable_pbde;
   1221	uint32_t cfg_enable_mi;
   1222	struct nvmet_fc_target_port *targetport;
   1223	lpfc_vpd_t vpd;		/* vital product data */
   1224
   1225	u32 cfg_max_vmid;	/* maximum VMIDs allowed per port */
   1226	u32 cfg_vmid_app_header;
   1227#define LPFC_VMID_APP_HEADER_DISABLE	0
   1228#define LPFC_VMID_APP_HEADER_ENABLE	1
   1229	u32 cfg_vmid_priority_tagging;
   1230	u32 cfg_vmid_inactivity_timeout;	/* Time after which the VMID */
   1231						/* deregisters from switch */
   1232	struct pci_dev *pcidev;
   1233	struct list_head      work_list;
   1234	uint32_t              work_ha;      /* Host Attention Bits for WT */
   1235	uint32_t              work_ha_mask; /* HA Bits owned by WT        */
   1236	uint32_t              work_hs;      /* HS stored in case of ERRAT */
   1237	uint32_t              work_status[2]; /* Extra status from SLIM */
   1238
   1239	wait_queue_head_t    work_waitq;
   1240	struct task_struct   *worker_thread;
   1241	unsigned long data_flags;
   1242	uint32_t border_sge_num;
   1243
   1244	uint32_t hbq_in_use;		/* HBQs in use flag */
   1245	uint32_t hbq_count;	        /* Count of configured HBQs */
   1246	struct hbq_s hbqs[LPFC_MAX_HBQS]; /* local copy of hbq indicies  */
   1247
   1248	atomic_t fcp_qidx;         /* next FCP WQ (RR Policy) */
   1249	atomic_t nvme_qidx;        /* next NVME WQ (RR Policy) */
   1250
   1251	phys_addr_t pci_bar0_map;     /* Physical address for PCI BAR0 */
   1252	phys_addr_t pci_bar1_map;     /* Physical address for PCI BAR1 */
   1253	phys_addr_t pci_bar2_map;     /* Physical address for PCI BAR2 */
   1254	void __iomem *slim_memmap_p;	/* Kernel memory mapped address for
   1255					   PCI BAR0 */
   1256	void __iomem *ctrl_regs_memmap_p;/* Kernel memory mapped address for
   1257					    PCI BAR2 */
   1258
   1259	void __iomem *pci_bar0_memmap_p; /* Kernel memory mapped address for
   1260					    PCI BAR0 with dual-ULP support */
   1261	void __iomem *pci_bar2_memmap_p; /* Kernel memory mapped address for
   1262					    PCI BAR2 with dual-ULP support */
   1263	void __iomem *pci_bar4_memmap_p; /* Kernel memory mapped address for
   1264					    PCI BAR4 with dual-ULP support */
   1265#define PCI_64BIT_BAR0	0
   1266#define PCI_64BIT_BAR2	2
   1267#define PCI_64BIT_BAR4	4
   1268	void __iomem *MBslimaddr;	/* virtual address for mbox cmds */
   1269	void __iomem *HAregaddr;	/* virtual address for host attn reg */
   1270	void __iomem *CAregaddr;	/* virtual address for chip attn reg */
   1271	void __iomem *HSregaddr;	/* virtual address for host status
   1272					   reg */
   1273	void __iomem *HCregaddr;	/* virtual address for host ctl reg */
   1274
   1275	struct lpfc_hgp __iomem *host_gp; /* Host side get/put pointers */
   1276	struct lpfc_pgp   *port_gp;
   1277	uint32_t __iomem  *hbq_put;     /* Address in SLIM to HBQ put ptrs */
   1278	uint32_t          *hbq_get;     /* Host mem address of HBQ get ptrs */
   1279
   1280	int brd_no;			/* FC board number */
   1281	char SerialNumber[32];		/* adapter Serial Number */
   1282	char OptionROMVersion[32];	/* adapter BIOS / Fcode version */
   1283	char BIOSVersion[16];		/* Boot BIOS version */
   1284	char ModelDesc[256];		/* Model Description */
   1285	char ModelName[80];		/* Model Name */
   1286	char ProgramType[256];		/* Program Type */
   1287	char Port[20];			/* Port No */
   1288	uint8_t vpd_flag;               /* VPD data flag */
   1289
   1290#define VPD_MODEL_DESC      0x1         /* valid vpd model description */
   1291#define VPD_MODEL_NAME      0x2         /* valid vpd model name */
   1292#define VPD_PROGRAM_TYPE    0x4         /* valid vpd program type */
   1293#define VPD_PORT            0x8         /* valid vpd port data */
   1294#define VPD_MASK            0xf         /* mask for any vpd data */
   1295
   1296
   1297	struct timer_list fcp_poll_timer;
   1298	struct timer_list eratt_poll;
   1299	uint32_t eratt_poll_interval;
   1300
   1301	uint64_t bg_guard_err_cnt;
   1302	uint64_t bg_apptag_err_cnt;
   1303	uint64_t bg_reftag_err_cnt;
   1304
   1305	/* fastpath list. */
   1306	spinlock_t scsi_buf_list_get_lock;  /* SCSI buf alloc list lock */
   1307	spinlock_t scsi_buf_list_put_lock;  /* SCSI buf free list lock */
   1308	struct list_head lpfc_scsi_buf_list_get;
   1309	struct list_head lpfc_scsi_buf_list_put;
   1310	uint32_t total_scsi_bufs;
   1311	struct list_head lpfc_iocb_list;
   1312	uint32_t total_iocbq_bufs;
   1313	struct list_head active_rrq_list;
   1314	spinlock_t hbalock;
   1315	struct work_struct  unblock_request_work; /* SCSI layer unblock IOs */
   1316
   1317	/* dma_mem_pools */
   1318	struct dma_pool *lpfc_sg_dma_buf_pool;
   1319	struct dma_pool *lpfc_mbuf_pool;
   1320	struct dma_pool *lpfc_hrb_pool;	/* header receive buffer pool */
   1321	struct dma_pool *lpfc_drb_pool; /* data receive buffer pool */
   1322	struct dma_pool *lpfc_nvmet_drb_pool; /* data receive buffer pool */
   1323	struct dma_pool *lpfc_hbq_pool;	/* SLI3 hbq buffer pool */
   1324	struct dma_pool *lpfc_cmd_rsp_buf_pool;
   1325	struct lpfc_dma_pool lpfc_mbuf_safety_pool;
   1326
   1327	mempool_t *mbox_mem_pool;
   1328	mempool_t *nlp_mem_pool;
   1329	mempool_t *rrq_pool;
   1330	mempool_t *active_rrq_pool;
   1331
   1332	struct fc_host_statistics link_stats;
   1333	enum lpfc_irq_chann_mode irq_chann_mode;
   1334	enum intr_type_t intr_type;
   1335	uint32_t intr_mode;
   1336#define LPFC_INTR_ERROR	0xFFFFFFFF
   1337	struct list_head port_list;
   1338	spinlock_t port_list_lock;	/* lock for port_list mutations */
   1339	struct lpfc_vport *pport;	/* physical lpfc_vport pointer */
   1340	uint16_t max_vpi;		/* Maximum virtual nports */
   1341#define LPFC_MAX_VPI	0xFF		/* Max number VPI supported 0 - 0xff */
   1342#define LPFC_MAX_VPORTS	0x100		/* Max vports per port, with pport */
   1343	uint16_t max_vports;            /*
   1344					 * For IOV HBAs max_vpi can change
   1345					 * after a reset. max_vports is max
   1346					 * number of vports present. This can
   1347					 * be greater than max_vpi.
   1348					 */
   1349	uint16_t vpi_base;
   1350	uint16_t vfi_base;
   1351	unsigned long *vpi_bmask;	/* vpi allocation table */
   1352	uint16_t *vpi_ids;
   1353	uint16_t vpi_count;
   1354	struct list_head lpfc_vpi_blk_list;
   1355
   1356	/* Data structure used by fabric iocb scheduler */
   1357	struct list_head fabric_iocb_list;
   1358	atomic_t fabric_iocb_count;
   1359	struct timer_list fabric_block_timer;
   1360	unsigned long bit_flags;
   1361	atomic_t num_rsrc_err;
   1362	atomic_t num_cmd_success;
   1363	unsigned long last_rsrc_error_time;
   1364	unsigned long last_ramp_down_time;
   1365#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
   1366	struct dentry *hba_debugfs_root;
   1367	atomic_t debugfs_vport_count;
   1368	struct dentry *debug_multixri_pools;
   1369	struct dentry *debug_hbqinfo;
   1370	struct dentry *debug_dumpHostSlim;
   1371	struct dentry *debug_dumpHBASlim;
   1372	struct dentry *debug_InjErrLBA;  /* LBA to inject errors at */
   1373	struct dentry *debug_InjErrNPortID;  /* NPortID to inject errors at */
   1374	struct dentry *debug_InjErrWWPN;  /* WWPN to inject errors at */
   1375	struct dentry *debug_writeGuard; /* inject write guard_tag errors */
   1376	struct dentry *debug_writeApp;   /* inject write app_tag errors */
   1377	struct dentry *debug_writeRef;   /* inject write ref_tag errors */
   1378	struct dentry *debug_readGuard;  /* inject read guard_tag errors */
   1379	struct dentry *debug_readApp;    /* inject read app_tag errors */
   1380	struct dentry *debug_readRef;    /* inject read ref_tag errors */
   1381
   1382	struct dentry *debug_nvmeio_trc;
   1383	struct lpfc_debugfs_nvmeio_trc *nvmeio_trc;
   1384	struct dentry *debug_hdwqinfo;
   1385#ifdef LPFC_HDWQ_LOCK_STAT
   1386	struct dentry *debug_lockstat;
   1387#endif
   1388	struct dentry *debug_cgn_buffer;
   1389	struct dentry *debug_rx_monitor;
   1390	struct dentry *debug_ras_log;
   1391	atomic_t nvmeio_trc_cnt;
   1392	uint32_t nvmeio_trc_size;
   1393	uint32_t nvmeio_trc_output_idx;
   1394
   1395	/* T10 DIF error injection */
   1396	uint32_t lpfc_injerr_wgrd_cnt;
   1397	uint32_t lpfc_injerr_wapp_cnt;
   1398	uint32_t lpfc_injerr_wref_cnt;
   1399	uint32_t lpfc_injerr_rgrd_cnt;
   1400	uint32_t lpfc_injerr_rapp_cnt;
   1401	uint32_t lpfc_injerr_rref_cnt;
   1402	uint32_t lpfc_injerr_nportid;
   1403	struct lpfc_name lpfc_injerr_wwpn;
   1404	sector_t lpfc_injerr_lba;
   1405#define LPFC_INJERR_LBA_OFF	(sector_t)(-1)
   1406
   1407	struct dentry *debug_slow_ring_trc;
   1408	struct lpfc_debugfs_trc *slow_ring_trc;
   1409	atomic_t slow_ring_trc_cnt;
   1410	/* iDiag debugfs sub-directory */
   1411	struct dentry *idiag_root;
   1412	struct dentry *idiag_pci_cfg;
   1413	struct dentry *idiag_bar_acc;
   1414	struct dentry *idiag_que_info;
   1415	struct dentry *idiag_que_acc;
   1416	struct dentry *idiag_drb_acc;
   1417	struct dentry *idiag_ctl_acc;
   1418	struct dentry *idiag_mbx_acc;
   1419	struct dentry *idiag_ext_acc;
   1420	uint8_t lpfc_idiag_last_eq;
   1421#endif
   1422	uint16_t nvmeio_trc_on;
   1423
   1424	/* Used for deferred freeing of ELS data buffers */
   1425	struct list_head elsbuf;
   1426	int elsbuf_cnt;
   1427	int elsbuf_prev_cnt;
   1428
   1429	uint8_t temp_sensor_support;
   1430	/* Fields used for heart beat. */
   1431	unsigned long last_completion_time;
   1432	unsigned long skipped_hb;
   1433	struct timer_list hb_tmofunc;
   1434	struct timer_list rrq_tmr;
   1435	enum hba_temp_state over_temp_state;
   1436	/*
   1437	 * Following bit will be set for all buffer tags which are not
   1438	 * associated with any HBQ.
   1439	 */
   1440#define QUE_BUFTAG_BIT  (1<<31)
   1441	uint32_t buffer_tag_count;
   1442	int wait_4_mlo_maint_flg;
   1443	wait_queue_head_t wait_4_mlo_m_q;
   1444	/* data structure used for latency data collection */
   1445#define LPFC_NO_BUCKET	   0
   1446#define LPFC_LINEAR_BUCKET 1
   1447#define LPFC_POWER2_BUCKET 2
   1448	uint8_t  bucket_type;
   1449	uint32_t bucket_base;
   1450	uint32_t bucket_step;
   1451
   1452/* Maximum number of events that can be outstanding at any time*/
   1453#define LPFC_MAX_EVT_COUNT 512
   1454	atomic_t fast_event_count;
   1455	uint32_t fcoe_eventtag;
   1456	uint32_t fcoe_eventtag_at_fcf_scan;
   1457	uint32_t fcoe_cvl_eventtag;
   1458	uint32_t fcoe_cvl_eventtag_attn;
   1459	struct lpfc_fcf fcf;
   1460	uint8_t fc_map[3];
   1461	uint8_t valid_vlan;
   1462	uint16_t vlan_id;
   1463	struct list_head fcf_conn_rec_list;
   1464
   1465	bool defer_flogi_acc_flag;
   1466	uint16_t defer_flogi_acc_rx_id;
   1467	uint16_t defer_flogi_acc_ox_id;
   1468
   1469	spinlock_t ct_ev_lock; /* synchronize access to ct_ev_waiters */
   1470	struct list_head ct_ev_waiters;
   1471	struct unsol_rcv_ct_ctx ct_ctx[LPFC_CT_CTX_MAX];
   1472	uint32_t ctx_idx;
   1473	struct timer_list inactive_vmid_poll;
   1474
   1475	/* RAS Support */
   1476	struct lpfc_ras_fwlog ras_fwlog;
   1477
   1478	uint8_t menlo_flag;	/* menlo generic flags */
   1479#define HBA_MENLO_SUPPORT	0x1 /* HBA supports menlo commands */
   1480	uint32_t iocb_cnt;
   1481	uint32_t iocb_max;
   1482	atomic_t sdev_cnt;
   1483	spinlock_t devicelock;	/* lock for luns list */
   1484	mempool_t *device_data_mem_pool;
   1485	struct list_head luns;
   1486#define LPFC_TRANSGRESSION_HIGH_TEMPERATURE	0x0080
   1487#define LPFC_TRANSGRESSION_LOW_TEMPERATURE	0x0040
   1488#define LPFC_TRANSGRESSION_HIGH_VOLTAGE		0x0020
   1489#define LPFC_TRANSGRESSION_LOW_VOLTAGE		0x0010
   1490#define LPFC_TRANSGRESSION_HIGH_TXBIAS		0x0008
   1491#define LPFC_TRANSGRESSION_LOW_TXBIAS		0x0004
   1492#define LPFC_TRANSGRESSION_HIGH_TXPOWER		0x0002
   1493#define LPFC_TRANSGRESSION_LOW_TXPOWER		0x0001
   1494#define LPFC_TRANSGRESSION_HIGH_RXPOWER		0x8000
   1495#define LPFC_TRANSGRESSION_LOW_RXPOWER		0x4000
   1496	uint16_t sfp_alarm;
   1497	uint16_t sfp_warning;
   1498
   1499#ifdef CONFIG_SCSI_LPFC_DEBUG_FS
   1500	uint16_t hdwqstat_on;
   1501#define LPFC_CHECK_OFF		0
   1502#define LPFC_CHECK_NVME_IO	1
   1503#define LPFC_CHECK_NVMET_IO	2
   1504#define LPFC_CHECK_SCSI_IO	4
   1505	uint16_t ktime_on;
   1506	uint64_t ktime_data_samples;
   1507	uint64_t ktime_status_samples;
   1508	uint64_t ktime_last_cmd;
   1509	uint64_t ktime_seg1_total;
   1510	uint64_t ktime_seg1_min;
   1511	uint64_t ktime_seg1_max;
   1512	uint64_t ktime_seg2_total;
   1513	uint64_t ktime_seg2_min;
   1514	uint64_t ktime_seg2_max;
   1515	uint64_t ktime_seg3_total;
   1516	uint64_t ktime_seg3_min;
   1517	uint64_t ktime_seg3_max;
   1518	uint64_t ktime_seg4_total;
   1519	uint64_t ktime_seg4_min;
   1520	uint64_t ktime_seg4_max;
   1521	uint64_t ktime_seg5_total;
   1522	uint64_t ktime_seg5_min;
   1523	uint64_t ktime_seg5_max;
   1524	uint64_t ktime_seg6_total;
   1525	uint64_t ktime_seg6_min;
   1526	uint64_t ktime_seg6_max;
   1527	uint64_t ktime_seg7_total;
   1528	uint64_t ktime_seg7_min;
   1529	uint64_t ktime_seg7_max;
   1530	uint64_t ktime_seg8_total;
   1531	uint64_t ktime_seg8_min;
   1532	uint64_t ktime_seg8_max;
   1533	uint64_t ktime_seg9_total;
   1534	uint64_t ktime_seg9_min;
   1535	uint64_t ktime_seg9_max;
   1536	uint64_t ktime_seg10_total;
   1537	uint64_t ktime_seg10_min;
   1538	uint64_t ktime_seg10_max;
   1539#endif
   1540	/* CMF objects */
   1541	struct lpfc_cgn_stat __percpu *cmf_stat;
   1542	uint32_t cmf_interval_rate;  /* timer interval limit in ms */
   1543	uint32_t cmf_timer_cnt;
   1544#define LPFC_CMF_INTERVAL 90
   1545	uint64_t cmf_link_byte_count;
   1546	uint64_t cmf_max_line_rate;
   1547	uint64_t cmf_max_bytes_per_interval;
   1548	uint64_t cmf_last_sync_bw;
   1549#define  LPFC_CMF_BLK_SIZE 512
   1550	struct hrtimer cmf_timer;
   1551	atomic_t cmf_bw_wait;
   1552	atomic_t cmf_busy;
   1553	atomic_t cmf_stop_io;      /* To block request and stop IO's */
   1554	uint32_t cmf_active_mode;
   1555	uint32_t cmf_info_per_interval;
   1556#define LPFC_MAX_CMF_INFO 32
   1557	struct timespec64 cmf_latency;  /* Interval congestion timestamp */
   1558	uint32_t cmf_last_ts;   /* Interval congestion time (ms) */
   1559	uint32_t cmf_active_info;
   1560
   1561	/* Signal / FPIN handling for Congestion Mgmt */
   1562	u8 cgn_reg_fpin;           /* Negotiated value from RDF */
   1563	u8 cgn_init_reg_fpin;      /* Initial value from READ_CONFIG */
   1564#define LPFC_CGN_FPIN_NONE	0x0
   1565#define LPFC_CGN_FPIN_WARN	0x1
   1566#define LPFC_CGN_FPIN_ALARM	0x2
   1567#define LPFC_CGN_FPIN_BOTH	(LPFC_CGN_FPIN_WARN | LPFC_CGN_FPIN_ALARM)
   1568
   1569	u8 cgn_reg_signal;          /* Negotiated value from EDC */
   1570	u8 cgn_init_reg_signal;     /* Initial value from READ_CONFIG */
   1571		/* cgn_reg_signal and cgn_init_reg_signal use
   1572		 * enum fc_edc_cg_signal_cap_types
   1573		 */
   1574	u16 cgn_fpin_frequency;
   1575#define LPFC_FPIN_INIT_FREQ	0xffff
   1576	u32 cgn_sig_freq;
   1577	u32 cgn_acqe_cnt;
   1578
   1579	/* RX monitor handling for CMF */
   1580	struct rxtable_entry *rxtable;  /* RX_monitor information */
   1581	atomic_t rxtable_idx_head;
   1582#define LPFC_RXMONITOR_TABLE_IN_USE     (LPFC_MAX_RXMONITOR_ENTRY + 73)
   1583	atomic_t rxtable_idx_tail;
   1584	atomic_t rx_max_read_cnt;       /* Maximum read bytes */
   1585	uint64_t rx_block_cnt;
   1586
   1587	/* Congestion parameters from flash */
   1588	struct lpfc_cgn_param cgn_p;
   1589
   1590	/* Statistics counter for ACQE cgn alarms and warnings */
   1591	struct lpfc_cgn_acqe_stat cgn_acqe_stat;
   1592
   1593	/* Congestion buffer information */
   1594	struct lpfc_dmabuf *cgn_i;      /* Congestion Info buffer */
   1595	atomic_t cgn_fabric_warn_cnt;   /* Total warning cgn events for info */
   1596	atomic_t cgn_fabric_alarm_cnt;  /* Total alarm cgn events for info */
   1597	atomic_t cgn_sync_warn_cnt;     /* Total warning events for SYNC wqe */
   1598	atomic_t cgn_sync_alarm_cnt;    /* Total alarm events for SYNC wqe */
   1599	atomic_t cgn_driver_evt_cnt;    /* Total driver cgn events for fmw */
   1600	atomic_t cgn_latency_evt_cnt;
   1601	struct timespec64 cgn_daily_ts;
   1602	atomic64_t cgn_latency_evt;     /* Avg latency per minute */
   1603	unsigned long cgn_evt_timestamp;
   1604#define LPFC_CGN_TIMER_TO_MIN   60000 /* ms in a minute */
   1605	uint32_t cgn_evt_minute;
   1606#define LPFC_SEC_MIN		60
   1607#define LPFC_MIN_HOUR		60
   1608#define LPFC_HOUR_DAY		24
   1609#define LPFC_MIN_DAY		(LPFC_MIN_HOUR * LPFC_HOUR_DAY)
   1610
   1611	struct hlist_node cpuhp;	/* used for cpuhp per hba callback */
   1612	struct timer_list cpuhp_poll_timer;
   1613	struct list_head poll_list;	/* slowpath eq polling list */
   1614#define LPFC_POLL_HB	1		/* slowpath heartbeat */
   1615#define LPFC_POLL_FASTPATH	0	/* called from fastpath */
   1616#define LPFC_POLL_SLOWPATH	1	/* called from slowpath */
   1617
   1618	char os_host_name[MAXHOSTNAMELEN];
   1619
   1620	/* SCSI host template information - for physical port */
   1621	struct scsi_host_template port_template;
   1622	/* SCSI host template information - for all vports */
   1623	struct scsi_host_template vport_template;
   1624	atomic_t dbg_log_idx;
   1625	atomic_t dbg_log_cnt;
   1626	atomic_t dbg_log_dmping;
   1627	struct dbg_log_ent dbg_log[DBG_LOG_SZ];
   1628};
   1629
   1630#define LPFC_MAX_RXMONITOR_ENTRY	800
   1631#define LPFC_MAX_RXMONITOR_DUMP		32
   1632struct rxtable_entry {
   1633	uint64_t cmf_bytes;	/* Total no of read bytes for CMF_SYNC_WQE */
   1634	uint64_t total_bytes;   /* Total no of read bytes requested */
   1635	uint64_t rcv_bytes;     /* Total no of read bytes completed */
   1636	uint64_t avg_io_size;
   1637	uint64_t avg_io_latency;/* Average io latency in microseconds */
   1638	uint64_t max_read_cnt;  /* Maximum read bytes */
   1639	uint64_t max_bytes_per_interval;
   1640	uint32_t cmf_busy;
   1641	uint32_t cmf_info;      /* CMF_SYNC_WQE info */
   1642	uint32_t io_cnt;
   1643	uint32_t timer_utilization;
   1644	uint32_t timer_interval;
   1645};
   1646
   1647static inline struct Scsi_Host *
   1648lpfc_shost_from_vport(struct lpfc_vport *vport)
   1649{
   1650	return container_of((void *) vport, struct Scsi_Host, hostdata[0]);
   1651}
   1652
   1653static inline void
   1654lpfc_set_loopback_flag(struct lpfc_hba *phba)
   1655{
   1656	if (phba->cfg_topology == FLAGS_LOCAL_LB)
   1657		phba->link_flag |= LS_LOOPBACK_MODE;
   1658	else
   1659		phba->link_flag &= ~LS_LOOPBACK_MODE;
   1660}
   1661
   1662static inline int
   1663lpfc_is_link_up(struct lpfc_hba *phba)
   1664{
   1665	return  phba->link_state == LPFC_LINK_UP ||
   1666		phba->link_state == LPFC_CLEAR_LA ||
   1667		phba->link_state == LPFC_HBA_READY;
   1668}
   1669
   1670static inline void
   1671lpfc_worker_wake_up(struct lpfc_hba *phba)
   1672{
   1673	/* Set the lpfc data pending flag */
   1674	set_bit(LPFC_DATA_READY, &phba->data_flags);
   1675
   1676	/* Wake up worker thread */
   1677	wake_up(&phba->work_waitq);
   1678	return;
   1679}
   1680
   1681static inline int
   1682lpfc_readl(void __iomem *addr, uint32_t *data)
   1683{
   1684	uint32_t temp;
   1685	temp = readl(addr);
   1686	if (temp == 0xffffffff)
   1687		return -EIO;
   1688	*data = temp;
   1689	return 0;
   1690}
   1691
   1692static inline int
   1693lpfc_sli_read_hs(struct lpfc_hba *phba)
   1694{
   1695	/*
   1696	 * There was a link/board error. Read the status register to retrieve
   1697	 * the error event and process it.
   1698	 */
   1699	phba->sli.slistat.err_attn_event++;
   1700
   1701	/* Save status info and check for unplug error */
   1702	if (lpfc_readl(phba->HSregaddr, &phba->work_hs) ||
   1703		lpfc_readl(phba->MBslimaddr + 0xa8, &phba->work_status[0]) ||
   1704		lpfc_readl(phba->MBslimaddr + 0xac, &phba->work_status[1])) {
   1705		return -EIO;
   1706	}
   1707
   1708	/* Clear chip Host Attention error bit */
   1709	writel(HA_ERATT, phba->HAregaddr);
   1710	readl(phba->HAregaddr); /* flush */
   1711	phba->pport->stopped = 1;
   1712
   1713	return 0;
   1714}
   1715
   1716static inline struct lpfc_sli_ring *
   1717lpfc_phba_elsring(struct lpfc_hba *phba)
   1718{
   1719	/* Return NULL if sli_rev has become invalid due to bad fw */
   1720	if (phba->sli_rev != LPFC_SLI_REV4  &&
   1721	    phba->sli_rev != LPFC_SLI_REV3  &&
   1722	    phba->sli_rev != LPFC_SLI_REV2)
   1723		return NULL;
   1724
   1725	if (phba->sli_rev == LPFC_SLI_REV4) {
   1726		if (phba->sli4_hba.els_wq)
   1727			return phba->sli4_hba.els_wq->pring;
   1728		else
   1729			return NULL;
   1730	}
   1731	return &phba->sli.sli3_ring[LPFC_ELS_RING];
   1732}
   1733
   1734/**
   1735 * lpfc_next_online_cpu - Finds next online CPU on cpumask
   1736 * @mask: Pointer to phba's cpumask member.
   1737 * @start: starting cpu index
   1738 *
   1739 * Note: If no valid cpu found, then nr_cpu_ids is returned.
   1740 *
   1741 **/
   1742static inline unsigned int
   1743lpfc_next_online_cpu(const struct cpumask *mask, unsigned int start)
   1744{
   1745	unsigned int cpu_it;
   1746
   1747	for_each_cpu_wrap(cpu_it, mask, start) {
   1748		if (cpu_online(cpu_it))
   1749			break;
   1750	}
   1751
   1752	return cpu_it;
   1753}
   1754/**
   1755 * lpfc_sli4_mod_hba_eq_delay - update EQ delay
   1756 * @phba: Pointer to HBA context object.
   1757 * @q: The Event Queue to update.
   1758 * @delay: The delay value (in us) to be written.
   1759 *
   1760 **/
   1761static inline void
   1762lpfc_sli4_mod_hba_eq_delay(struct lpfc_hba *phba, struct lpfc_queue *eq,
   1763			   u32 delay)
   1764{
   1765	struct lpfc_register reg_data;
   1766
   1767	reg_data.word0 = 0;
   1768	bf_set(lpfc_sliport_eqdelay_id, &reg_data, eq->queue_id);
   1769	bf_set(lpfc_sliport_eqdelay_delay, &reg_data, delay);
   1770	writel(reg_data.word0, phba->sli4_hba.u.if_type2.EQDregaddr);
   1771	eq->q_mode = delay;
   1772}
   1773
   1774
   1775/*
   1776 * Macro that declares tables and a routine to perform enum type to
   1777 * ascii string lookup.
   1778 *
   1779 * Defines a <key,value> table for an enum. Uses xxx_INIT defines for
   1780 * the enum to populate the table.  Macro defines a routine (named
   1781 * by caller) that will search all elements of the table for the key
   1782 * and return the name string if found or "Unrecognized" if not found.
   1783 */
   1784#define DECLARE_ENUM2STR_LOOKUP(routine, enum_name, enum_init)		\
   1785static struct {								\
   1786	enum enum_name		value;					\
   1787	char			*name;					\
   1788} fc_##enum_name##_e2str_names[] = enum_init;				\
   1789static const char *routine(enum enum_name table_key)			\
   1790{									\
   1791	int i;								\
   1792	char *name = "Unrecognized";					\
   1793									\
   1794	for (i = 0; i < ARRAY_SIZE(fc_##enum_name##_e2str_names); i++) {\
   1795		if (fc_##enum_name##_e2str_names[i].value == table_key) {\
   1796			name = fc_##enum_name##_e2str_names[i].name;	\
   1797			break;						\
   1798		}							\
   1799	}								\
   1800	return name;							\
   1801}
   1802
   1803/**
   1804 * lpfc_is_vmid_enabled - returns if VMID is enabled for either switch types
   1805 * @phba: Pointer to HBA context object.
   1806 *
   1807 * Relationship between the enable, target support and if vmid tag is required
   1808 * for the particular combination
   1809 * ---------------------------------------------------
   1810 * Switch    Enable Flag  Target Support  VMID Needed
   1811 * ---------------------------------------------------
   1812 * App Id     0              NA              N
   1813 * App Id     1               0              N
   1814 * App Id     1               1              Y
   1815 * Pr Tag     0              NA              N
   1816 * Pr Tag     1               0              N
   1817 * Pr Tag     1               1              Y
   1818 * Pr Tag     2               *              Y
   1819 ---------------------------------------------------
   1820 *
   1821 **/
   1822static inline int lpfc_is_vmid_enabled(struct lpfc_hba *phba)
   1823{
   1824	return phba->cfg_vmid_app_header || phba->cfg_vmid_priority_tagging;
   1825}
   1826
   1827static inline
   1828u8 get_job_ulpstatus(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1829{
   1830	if (phba->sli_rev == LPFC_SLI_REV4)
   1831		return bf_get(lpfc_wcqe_c_status, &iocbq->wcqe_cmpl);
   1832	else
   1833		return iocbq->iocb.ulpStatus;
   1834}
   1835
   1836static inline
   1837u32 get_job_word4(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1838{
   1839	if (phba->sli_rev == LPFC_SLI_REV4)
   1840		return iocbq->wcqe_cmpl.parameter;
   1841	else
   1842		return iocbq->iocb.un.ulpWord[4];
   1843}
   1844
   1845static inline
   1846u8 get_job_cmnd(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1847{
   1848	if (phba->sli_rev == LPFC_SLI_REV4)
   1849		return bf_get(wqe_cmnd, &iocbq->wqe.generic.wqe_com);
   1850	else
   1851		return iocbq->iocb.ulpCommand;
   1852}
   1853
   1854static inline
   1855u16 get_job_ulpcontext(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1856{
   1857	if (phba->sli_rev == LPFC_SLI_REV4)
   1858		return bf_get(wqe_ctxt_tag, &iocbq->wqe.generic.wqe_com);
   1859	else
   1860		return iocbq->iocb.ulpContext;
   1861}
   1862
   1863static inline
   1864u16 get_job_rcvoxid(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1865{
   1866	if (phba->sli_rev == LPFC_SLI_REV4)
   1867		return bf_get(wqe_rcvoxid, &iocbq->wqe.generic.wqe_com);
   1868	else
   1869		return iocbq->iocb.unsli3.rcvsli3.ox_id;
   1870}
   1871
   1872static inline
   1873u32 get_job_data_placed(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1874{
   1875	if (phba->sli_rev == LPFC_SLI_REV4)
   1876		return iocbq->wcqe_cmpl.total_data_placed;
   1877	else
   1878		return iocbq->iocb.un.genreq64.bdl.bdeSize;
   1879}
   1880
   1881static inline
   1882u32 get_job_abtsiotag(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1883{
   1884	if (phba->sli_rev == LPFC_SLI_REV4)
   1885		return iocbq->wqe.abort_cmd.wqe_com.abort_tag;
   1886	else
   1887		return iocbq->iocb.un.acxri.abortIoTag;
   1888}
   1889
   1890static inline
   1891u32 get_job_els_rsp64_did(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq)
   1892{
   1893	if (phba->sli_rev == LPFC_SLI_REV4)
   1894		return bf_get(wqe_els_did, &iocbq->wqe.els_req.wqe_dest);
   1895	else
   1896		return iocbq->iocb.un.elsreq64.remoteID;
   1897}