Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* bnx2fc.h: QLogic Linux FCoE offload driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright (c) 2008-2013 Broadcom Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * Copyright (c) 2014-2016 QLogic Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (c) 2016-2017 Cavium Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * it under the terms of the GNU General Public License as published by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * the Free Software Foundation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * Written by: Bhanu Prakash Gollapudi (bprakash@broadcom.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #ifndef _BNX2FC_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define _BNX2FC_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #include <linux/moduleparam.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #include <linux/skbuff.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #include <linux/netdevice.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #include <linux/etherdevice.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #include <linux/if_ether.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #include <linux/if_vlan.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #include <linux/kthread.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #include <linux/crc32.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #include <linux/cpu.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #include <linux/list.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #include <linux/delay.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #include <linux/timer.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #include <linux/errno.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #include <linux/pci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #include <linux/dma-mapping.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #include <linux/workqueue.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #include <linux/mutex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #include <linux/spinlock.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #include <linux/bitops.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #include <linux/log2.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #include <linux/interrupt.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #include <linux/sched/signal.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #include <linux/io.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #include <scsi/scsi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #include <scsi/scsi_host.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #include <scsi/scsi_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #include <scsi/scsi_cmnd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #include <scsi/scsi_eh.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #include <scsi/scsi_tcq.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #include <scsi/libfc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #include <scsi/libfcoe.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #include <scsi/fc_encode.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #include <scsi/scsi_transport.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #include <scsi/scsi_transport_fc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #include <scsi/fc/fc_fip.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #include <scsi/fc/fc_fc2.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #include <scsi/fc_frame.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #include <scsi/fc/fc_fcoe.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) #include <scsi/fc/fc_fcp.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #include "57xx_hsi_bnx2fc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #include "../../net/ethernet/broadcom/cnic_if.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #include  "../../net/ethernet/broadcom/bnx2x/bnx2x_mfw_req.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #include "bnx2fc_constants.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define BNX2FC_NAME		"bnx2fc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define BNX2FC_VERSION		"2.12.13"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define PFX			"bnx2fc: "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) #define BCM_CHIP_LEN		16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #define BNX2X_DOORBELL_PCI_BAR		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #define BNX2FC_MAX_BD_LEN		0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define BNX2FC_BD_SPLIT_SZ		0xffff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #define BNX2FC_MAX_BDS_PER_CMD		255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) #define BNX2FC_FW_MAX_BDS_PER_CMD	255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) #define BNX2FC_SQ_WQES_MAX	256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) #define BNX2FC_SCSI_MAX_SQES	((3 * BNX2FC_SQ_WQES_MAX) / 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) #define BNX2FC_TM_MAX_SQES	((BNX2FC_SQ_WQES_MAX) / 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define BNX2FC_ELS_MAX_SQES	(BNX2FC_TM_MAX_SQES - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define BNX2FC_RQ_WQES_MAX	16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define BNX2FC_CQ_WQES_MAX	(BNX2FC_SQ_WQES_MAX + BNX2FC_RQ_WQES_MAX)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define BNX2FC_NUM_MAX_SESS	1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define BNX2FC_NUM_MAX_SESS_LOG	(ilog2(BNX2FC_NUM_MAX_SESS))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define BNX2FC_MAX_NPIV		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) #define BNX2FC_MIN_PAYLOAD		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) #define BNX2FC_MAX_PAYLOAD		2048
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define BNX2FC_MFS			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 			(BNX2FC_MAX_PAYLOAD + sizeof(struct fc_frame_header))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define BNX2FC_MINI_JUMBO_MTU		2500
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define BNX2FC_RQ_BUF_SZ		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define BNX2FC_RQ_BUF_LOG_SZ		(ilog2(BNX2FC_RQ_BUF_SZ))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define BNX2FC_SQ_WQE_SIZE		(sizeof(struct fcoe_sqe))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define BNX2FC_CQ_WQE_SIZE		(sizeof(struct fcoe_cqe))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define BNX2FC_RQ_WQE_SIZE		(BNX2FC_RQ_BUF_SZ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define BNX2FC_XFERQ_WQE_SIZE		(sizeof(struct fcoe_xfrqe))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define BNX2FC_CONFQ_WQE_SIZE		(sizeof(struct fcoe_confqe))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define BNX2X_DB_SHIFT			3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define BNX2FC_TASK_SIZE		128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define	BNX2FC_TASKS_PER_PAGE		(PAGE_SIZE/BNX2FC_TASK_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define BNX2FC_MAX_ROWS_IN_HASH_TBL	8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define BNX2FC_HASH_TBL_CHUNK_SIZE	(16 * 1024)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define BNX2FC_MAX_SEQS			255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define BNX2FC_MAX_RETRY_CNT		3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define BNX2FC_MAX_RPORT_RETRY_CNT	255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define BNX2FC_READ			(1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define BNX2FC_WRITE			(1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define BNX2FC_MIN_XID			0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define FCOE_MAX_NUM_XIDS		0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define FCOE_MAX_XID_OFFSET		(FCOE_MAX_NUM_XIDS - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define FCOE_XIDS_PER_CPU_OFFSET	((512 * nr_cpu_ids) - 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define BNX2FC_MAX_LUN			0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define BNX2FC_MAX_FCP_TGT		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define BNX2FC_MAX_CMD_LEN		16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define BNX2FC_TM_TIMEOUT		60	/* secs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define BNX2FC_IO_TIMEOUT		20000UL	/* msecs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define BNX2FC_WAIT_CNT			1200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define BNX2FC_FW_TIMEOUT		(3 * HZ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define PORT_MAX			2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define CMD_SCSI_STATUS(Cmnd)		((Cmnd)->SCp.Status)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) /* FC FCP Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define	FC_GOOD				0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define BNX2FC_RNID_HBA			0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define SRR_RETRY_COUNT			5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define REC_RETRY_COUNT			1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define BNX2FC_NUM_ERR_BITS		63
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define BNX2FC_RELOGIN_WAIT_TIME	200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define BNX2FC_RELOGIN_WAIT_CNT		10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define BNX2FC_STATS(hba, stat, cnt)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	do {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 		u32 val;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 		val = fw_stats->stat.cnt;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 		if (hba->prev_stats.stat.cnt <= val)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 			val -= hba->prev_stats.stat.cnt;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 		else							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 			val += (0xfffffff - hba->prev_stats.stat.cnt);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 		hba->bfw_stats.cnt += val;				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	} while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) /* bnx2fc driver uses only one instance of fcoe_percpu_s */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) extern struct fcoe_percpu_s bnx2fc_global;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) extern struct workqueue_struct *bnx2fc_wq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) struct bnx2fc_percpu_s {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	struct task_struct *iothread;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	struct list_head work_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	spinlock_t fp_work_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) struct bnx2fc_fw_stats {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	u64	fc_crc_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 	u64	fcoe_tx_pkt_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 	u64	fcoe_rx_pkt_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	u64	fcoe_tx_byte_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	u64	fcoe_rx_byte_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) struct bnx2fc_hba {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	struct cnic_dev *cnic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	struct pci_dev *pcidev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	struct net_device *phys_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	unsigned long reg_with_cnic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 		#define BNX2FC_CNIC_REGISTERED           1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	struct bnx2fc_cmd_mgr *cmd_mgr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	spinlock_t hba_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	struct mutex hba_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	struct mutex hba_stats_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	unsigned long adapter_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 		#define ADAPTER_STATE_UP		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 		#define ADAPTER_STATE_GOING_DOWN	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 		#define ADAPTER_STATE_LINK_DOWN		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 		#define ADAPTER_STATE_READY		3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	unsigned long flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 		#define BNX2FC_FLAG_FW_INIT_DONE	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 		#define BNX2FC_FLAG_DESTROY_CMPL	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	u32 next_conn_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	/* xid resources */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	u16 max_xid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	u32 max_tasks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	u32 max_outstanding_cmds;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	u32 elstm_xids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	struct fcoe_task_ctx_entry **task_ctx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	dma_addr_t *task_ctx_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	struct regpair *task_ctx_bd_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 	dma_addr_t task_ctx_bd_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	int hash_tbl_segment_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	void **hash_tbl_segments;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	void *hash_tbl_pbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	dma_addr_t hash_tbl_pbl_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	struct fcoe_t2_hash_table_entry *t2_hash_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	dma_addr_t t2_hash_tbl_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	char *t2_hash_tbl_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 	dma_addr_t t2_hash_tbl_ptr_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	char *dummy_buffer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	dma_addr_t dummy_buf_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 	/* Active list of offloaded sessions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	struct bnx2fc_rport **tgt_ofld_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 	/* statistics */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 	struct bnx2fc_fw_stats bfw_stats;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	struct fcoe_statistics_params prev_stats;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 	struct fcoe_statistics_params *stats_buffer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	dma_addr_t stats_buf_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	struct completion stat_req_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	struct fcoe_capabilities fcoe_cap;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	/*destroy handling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	struct timer_list destroy_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	wait_queue_head_t destroy_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 	/* linkdown handling */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	wait_queue_head_t shutdown_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	int wait_for_link_down;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 	int num_ofld_sess;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 	struct list_head vports;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	char chip_num[BCM_CHIP_LEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) struct bnx2fc_interface {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	unsigned long if_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 		#define BNX2FC_CTLR_INIT_DONE		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	struct bnx2fc_hba *hba;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	struct net_device *netdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	struct packet_type fcoe_packet_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	struct packet_type fip_packet_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	struct workqueue_struct *timer_work_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	struct kref kref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	u8 vlan_enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	int vlan_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	bool enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 	u8 tm_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) #define bnx2fc_from_ctlr(x)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	((struct bnx2fc_interface *)((x) + 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) #define bnx2fc_to_ctlr(x)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	((struct fcoe_ctlr *)(((struct fcoe_ctlr *)(x)) - 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) struct bnx2fc_lport {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) 	struct fc_lport *lport;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) struct bnx2fc_cmd_mgr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 	struct bnx2fc_hba *hba;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	u16 next_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	struct list_head *free_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	spinlock_t *free_list_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	struct io_bdt **io_bdt_pool;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	struct bnx2fc_cmd **cmds;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) struct bnx2fc_rport {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	struct fcoe_port *port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	struct fc_rport *rport;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	struct fc_rport_priv *rdata;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	void __iomem *ctx_base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define DPM_TRIGER_TYPE		0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 	u32 io_timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	u32 fcoe_conn_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	u32 context_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	u32 sid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	int dev_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	unsigned long flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) #define BNX2FC_FLAG_SESSION_READY	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) #define BNX2FC_FLAG_OFFLOADED		0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) #define BNX2FC_FLAG_DISABLED		0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) #define BNX2FC_FLAG_DESTROYED		0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #define BNX2FC_FLAG_OFLD_REQ_CMPL	0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) #define BNX2FC_FLAG_CTX_ALLOC_FAILURE	0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) #define BNX2FC_FLAG_UPLD_REQ_COMPL	0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) #define BNX2FC_FLAG_DISABLE_FAILED	0x9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) #define BNX2FC_FLAG_ENABLED		0xa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	u8 src_addr[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	u32 max_sqes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 	u32 max_rqes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	u32 max_cqes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	atomic_t free_sqes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	struct b577xx_doorbell_set_prod sq_db;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	struct b577xx_fcoe_rx_doorbell rx_db;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	struct fcoe_sqe *sq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	dma_addr_t sq_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	u16 sq_prod_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	u8 sq_curr_toggle_bit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	u32 sq_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 	struct fcoe_cqe *cq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	dma_addr_t cq_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	u16 cq_cons_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 	u8 cq_curr_toggle_bit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	u32 cq_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 	void *rq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	dma_addr_t rq_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	u32 rq_prod_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 	u32 rq_cons_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 	u32 rq_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	void *rq_pbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	dma_addr_t rq_pbl_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	u32 rq_pbl_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	struct fcoe_xfrqe *xferq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	dma_addr_t xferq_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	u32 xferq_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	struct fcoe_confqe *confq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	dma_addr_t confq_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 	u32 confq_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	void *confq_pbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	dma_addr_t confq_pbl_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	u32 confq_pbl_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	struct fcoe_conn_db *conn_db;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 	dma_addr_t conn_db_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 	u32 conn_db_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	struct fcoe_sqe *lcq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	dma_addr_t lcq_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	u32 lcq_mem_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 	void *ofld_req[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	dma_addr_t ofld_req_dma[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	void *enbl_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	dma_addr_t enbl_req_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	spinlock_t tgt_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	spinlock_t cq_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	atomic_t num_active_ios;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	u32 flush_in_prog;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 	unsigned long timestamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 	unsigned long retry_delay_timestamp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	struct list_head free_task_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	struct bnx2fc_cmd *pending_queue[BNX2FC_SQ_WQES_MAX+1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	struct list_head active_cmd_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	struct list_head els_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	struct list_head io_retire_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	struct list_head active_tm_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 	struct timer_list ofld_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 	wait_queue_head_t ofld_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	struct timer_list upld_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) 	wait_queue_head_t upld_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) struct bnx2fc_mp_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 	u8 tm_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	u32 req_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 	void *req_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	dma_addr_t req_buf_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	struct fcoe_bd_ctx *mp_req_bd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	dma_addr_t mp_req_bd_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	struct fc_frame_header req_fc_hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	u32 resp_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	void *resp_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 	dma_addr_t resp_buf_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 	struct fcoe_bd_ctx *mp_resp_bd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 	dma_addr_t mp_resp_bd_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	struct fc_frame_header resp_fc_hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) struct bnx2fc_els_cb_arg {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 	struct bnx2fc_cmd *aborted_io_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 	struct bnx2fc_cmd *io_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	u16 l2_oxid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 	u32 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 	enum fc_rctl r_ctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) /* bnx2fc command structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) struct bnx2fc_cmd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	struct list_head link;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	u8 on_active_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	u8 on_tmf_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	u8 cmd_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) #define BNX2FC_SCSI_CMD		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) #define BNX2FC_TASK_MGMT_CMD		2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) #define BNX2FC_ABTS			3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) #define BNX2FC_ELS			4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) #define BNX2FC_CLEANUP			5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) #define BNX2FC_SEQ_CLEANUP		6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	u8 io_req_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	struct kref refcount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 	struct fcoe_port *port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	struct bnx2fc_rport *tgt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	struct scsi_cmnd *sc_cmd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	struct bnx2fc_cmd_mgr *cmd_mgr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	struct bnx2fc_mp_req mp_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	void (*cb_func)(struct bnx2fc_els_cb_arg *cb_arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 	struct bnx2fc_els_cb_arg *cb_arg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 	struct delayed_work timeout_work; /* timer for ULP timeouts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	struct completion abts_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	struct completion cleanup_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	int wait_for_abts_comp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	int wait_for_cleanup_comp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	u16 xid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 	struct fcoe_err_report_entry err_entry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 	struct fcoe_task_ctx_entry *task;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	struct io_bdt *bd_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	struct fcp_rsp *rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	size_t data_xfer_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	unsigned long req_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) #define BNX2FC_FLAG_ISSUE_RRQ		0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) #define BNX2FC_FLAG_ISSUE_ABTS		0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) #define BNX2FC_FLAG_ABTS_DONE		0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) #define BNX2FC_FLAG_TM_COMPL		0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) #define BNX2FC_FLAG_TM_TIMEOUT		0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) #define BNX2FC_FLAG_IO_CLEANUP		0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) #define BNX2FC_FLAG_RETIRE_OXID		0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) #define	BNX2FC_FLAG_EH_ABORT		0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) #define BNX2FC_FLAG_IO_COMPL		0x9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) #define BNX2FC_FLAG_ELS_DONE		0xa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) #define BNX2FC_FLAG_ELS_TIMEOUT		0xb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) #define BNX2FC_FLAG_CMD_LOST		0xc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) #define BNX2FC_FLAG_SRR_SENT		0xd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) #define BNX2FC_FLAG_ISSUE_CLEANUP_REQ	0xe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	u8 rec_retry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	u8 srr_retry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	u32 srr_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 	u8 srr_rctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	u32 fcp_resid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	u32 fcp_rsp_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 	u32 fcp_sns_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	u8 cdb_status; /* SCSI IO status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 	u8 fcp_status; /* FCP IO status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	u8 fcp_rsp_code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 	u8 scsi_comp_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) struct io_bdt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	struct bnx2fc_cmd *io_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	struct fcoe_bd_ctx *bd_tbl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 	dma_addr_t bd_tbl_dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	u16 bd_valid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) struct bnx2fc_work {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 	struct bnx2fc_rport *tgt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 	struct fcoe_task_ctx_entry *task;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	unsigned char rq_data[BNX2FC_RQ_BUF_SZ];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	u16 wqe;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) 	u8 num_rq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) struct bnx2fc_unsol_els {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 	struct fc_lport *lport;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 	struct fc_frame *fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) 	struct bnx2fc_hba *hba;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 	struct work_struct unsol_els_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) struct bnx2fc_cmd *bnx2fc_cmd_alloc(struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) struct bnx2fc_cmd *bnx2fc_elstm_alloc(struct bnx2fc_rport *tgt, int type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) void bnx2fc_cmd_release(struct kref *ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) int bnx2fc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *sc_cmd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) int bnx2fc_send_fw_fcoe_init_msg(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) int bnx2fc_send_fw_fcoe_destroy_msg(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) int bnx2fc_send_session_ofld_req(struct fcoe_port *port,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 					struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) int bnx2fc_send_session_enable_req(struct fcoe_port *port,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 					struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) int bnx2fc_send_session_disable_req(struct fcoe_port *port,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 				    struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) int bnx2fc_send_session_destroy_req(struct bnx2fc_hba *hba,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 					struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) int bnx2fc_map_doorbell(struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) void bnx2fc_indicate_kcqe(void *context, struct kcqe *kcq[],
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 					u32 num_cqe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) int bnx2fc_setup_task_ctx(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) void bnx2fc_free_task_ctx(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) int bnx2fc_setup_fw_resc(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) void bnx2fc_free_fw_resc(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) struct bnx2fc_cmd_mgr *bnx2fc_cmd_mgr_alloc(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) void bnx2fc_cmd_mgr_free(struct bnx2fc_cmd_mgr *cmgr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) void bnx2fc_get_link_state(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) char *bnx2fc_get_next_rqe(struct bnx2fc_rport *tgt, u8 num_items);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) void bnx2fc_return_rqe(struct bnx2fc_rport *tgt, u8 num_items);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) int bnx2fc_get_paged_crc_eof(struct sk_buff *skb, int tlen);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) int bnx2fc_send_rrq(struct bnx2fc_cmd *aborted_io_req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) int bnx2fc_send_adisc(struct bnx2fc_rport *tgt, struct fc_frame *fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) int bnx2fc_send_logo(struct bnx2fc_rport *tgt, struct fc_frame *fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) int bnx2fc_send_rls(struct bnx2fc_rport *tgt, struct fc_frame *fp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) int bnx2fc_initiate_cleanup(struct bnx2fc_cmd *io_req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) int bnx2fc_initiate_abts(struct bnx2fc_cmd *io_req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) void bnx2fc_cmd_timer_set(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 			  unsigned int timer_msec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) int bnx2fc_init_mp_req(struct bnx2fc_cmd *io_req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) void bnx2fc_init_cleanup_task(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 			      struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 			      u16 orig_xid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) void bnx2fc_init_seq_cleanup_task(struct bnx2fc_cmd *seq_clnup_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 				  struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 				  struct bnx2fc_cmd *orig_io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 				  u32 offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) void bnx2fc_init_mp_task(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 			 struct fcoe_task_ctx_entry *task);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) void bnx2fc_init_task(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 			     struct fcoe_task_ctx_entry *task);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) void bnx2fc_add_2_sq(struct bnx2fc_rport *tgt, u16 xid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) void bnx2fc_ring_doorbell(struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) int bnx2fc_eh_abort(struct scsi_cmnd *sc_cmd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) int bnx2fc_eh_target_reset(struct scsi_cmnd *sc_cmd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) int bnx2fc_eh_device_reset(struct scsi_cmnd *sc_cmd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) void bnx2fc_rport_event_handler(struct fc_lport *lport,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) 				struct fc_rport_priv *rport,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 				enum fc_rport_event event);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) void bnx2fc_process_scsi_cmd_compl(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 				   struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 				   u8 num_rq, unsigned char *rq_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) void bnx2fc_process_cleanup_compl(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 			       struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 			       u8 num_rq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) void bnx2fc_process_abts_compl(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 			       struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 			       u8 num_rq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) void bnx2fc_process_tm_compl(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 			     struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) 			     u8 num_rq, unsigned char *rq_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) void bnx2fc_process_els_compl(struct bnx2fc_cmd *els_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) 			      struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 			      u8 num_rq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) void bnx2fc_build_fcp_cmnd(struct bnx2fc_cmd *io_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 			   struct fcp_cmnd *fcp_cmnd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) void bnx2fc_flush_active_ios(struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) struct fc_seq *bnx2fc_elsct_send(struct fc_lport *lport, u32 did,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 				      struct fc_frame *fp, unsigned int op,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 				      void (*resp)(struct fc_seq *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) 						   struct fc_frame *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 						   void *),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 				      void *arg, u32 timeout);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) void bnx2fc_arm_cq(struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) int bnx2fc_process_new_cqes(struct bnx2fc_rport *tgt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) void bnx2fc_process_cq_compl(struct bnx2fc_rport *tgt, u16 wqe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 			     unsigned char *rq_data, u8 num_rq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) 			     struct fcoe_task_ctx_entry *task);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) struct bnx2fc_rport *bnx2fc_tgt_lookup(struct fcoe_port *port,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) 					     u32 port_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) void bnx2fc_process_l2_frame_compl(struct bnx2fc_rport *tgt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 				   unsigned char *buf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 				   u32 frame_len, u16 l2_oxid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) int bnx2fc_send_stat_req(struct bnx2fc_hba *hba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) int bnx2fc_post_io_req(struct bnx2fc_rport *tgt, struct bnx2fc_cmd *io_req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) int bnx2fc_send_rec(struct bnx2fc_cmd *orig_io_req);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) int bnx2fc_send_srr(struct bnx2fc_cmd *orig_io_req, u32 offset, u8 r_ctl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) void bnx2fc_process_seq_cleanup_compl(struct bnx2fc_cmd *seq_clnup_req,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) 				      struct fcoe_task_ctx_entry *task,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 				      u8 rx_state);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) int bnx2fc_initiate_seq_cleanup(struct bnx2fc_cmd *orig_io_req, u32 offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 				enum fc_rctl r_ctl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) #include "bnx2fc_debug.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) #endif