0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef _BNX2FC_H_
0015 #define _BNX2FC_H_
0016 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0017
0018 #include <linux/module.h>
0019 #include <linux/moduleparam.h>
0020 #include <linux/kernel.h>
0021 #include <linux/skbuff.h>
0022 #include <linux/netdevice.h>
0023 #include <linux/etherdevice.h>
0024 #include <linux/if_ether.h>
0025 #include <linux/if_vlan.h>
0026 #include <linux/kthread.h>
0027 #include <linux/crc32.h>
0028 #include <linux/cpu.h>
0029 #include <linux/types.h>
0030 #include <linux/list.h>
0031 #include <linux/delay.h>
0032 #include <linux/timer.h>
0033 #include <linux/errno.h>
0034 #include <linux/pci.h>
0035 #include <linux/init.h>
0036 #include <linux/dma-mapping.h>
0037 #include <linux/workqueue.h>
0038 #include <linux/mutex.h>
0039 #include <linux/spinlock.h>
0040 #include <linux/bitops.h>
0041 #include <linux/log2.h>
0042 #include <linux/interrupt.h>
0043 #include <linux/sched/signal.h>
0044 #include <linux/io.h>
0045
0046 #include <scsi/scsi.h>
0047 #include <scsi/scsi_host.h>
0048 #include <scsi/scsi_device.h>
0049 #include <scsi/scsi_cmnd.h>
0050 #include <scsi/scsi_eh.h>
0051 #include <scsi/scsi_tcq.h>
0052 #include <scsi/libfc.h>
0053 #include <scsi/libfcoe.h>
0054 #include <scsi/scsi_transport.h>
0055 #include <scsi/scsi_transport_fc.h>
0056 #include <scsi/fc/fc_fip.h>
0057 #include <scsi/fc/fc_fc2.h>
0058 #include <scsi/fc_frame.h>
0059 #include <scsi/fc/fc_fcoe.h>
0060 #include <scsi/fc/fc_fcp.h>
0061
0062 #include "57xx_hsi_bnx2fc.h"
0063 #include "../../net/ethernet/broadcom/cnic_if.h"
0064 #include "../../net/ethernet/broadcom/bnx2x/bnx2x_mfw_req.h"
0065 #include "bnx2fc_constants.h"
0066
0067 #define BNX2FC_NAME "bnx2fc"
0068 #define BNX2FC_VERSION "2.12.13"
0069
0070 #define PFX "bnx2fc: "
0071
0072 #define BCM_CHIP_LEN 16
0073
0074 #define BNX2X_DOORBELL_PCI_BAR 2
0075
0076 #define BNX2FC_MAX_BD_LEN 0xffff
0077 #define BNX2FC_BD_SPLIT_SZ 0xffff
0078 #define BNX2FC_MAX_BDS_PER_CMD 255
0079 #define BNX2FC_FW_MAX_BDS_PER_CMD 255
0080
0081 #define BNX2FC_SQ_WQES_MAX 256
0082
0083 #define BNX2FC_SCSI_MAX_SQES ((3 * BNX2FC_SQ_WQES_MAX) / 8)
0084 #define BNX2FC_TM_MAX_SQES ((BNX2FC_SQ_WQES_MAX) / 2)
0085 #define BNX2FC_ELS_MAX_SQES (BNX2FC_TM_MAX_SQES - 1)
0086
0087 #define BNX2FC_RQ_WQES_MAX 16
0088 #define BNX2FC_CQ_WQES_MAX (BNX2FC_SQ_WQES_MAX + BNX2FC_RQ_WQES_MAX)
0089
0090 #define BNX2FC_NUM_MAX_SESS 1024
0091 #define BNX2FC_NUM_MAX_SESS_LOG (ilog2(BNX2FC_NUM_MAX_SESS))
0092
0093 #define BNX2FC_MAX_NPIV 256
0094
0095 #define BNX2FC_MIN_PAYLOAD 256
0096 #define BNX2FC_MAX_PAYLOAD 2048
0097 #define BNX2FC_MFS \
0098 (BNX2FC_MAX_PAYLOAD + sizeof(struct fc_frame_header))
0099 #define BNX2FC_MINI_JUMBO_MTU 2500
0100
0101
0102 #define BNX2FC_RQ_BUF_SZ 256
0103 #define BNX2FC_RQ_BUF_LOG_SZ (ilog2(BNX2FC_RQ_BUF_SZ))
0104
0105 #define BNX2FC_SQ_WQE_SIZE (sizeof(struct fcoe_sqe))
0106 #define BNX2FC_CQ_WQE_SIZE (sizeof(struct fcoe_cqe))
0107 #define BNX2FC_RQ_WQE_SIZE (BNX2FC_RQ_BUF_SZ)
0108 #define BNX2FC_XFERQ_WQE_SIZE (sizeof(struct fcoe_xfrqe))
0109 #define BNX2FC_CONFQ_WQE_SIZE (sizeof(struct fcoe_confqe))
0110 #define BNX2X_DB_SHIFT 3
0111
0112 #define BNX2FC_TASK_SIZE 128
0113 #define BNX2FC_TASKS_PER_PAGE (PAGE_SIZE/BNX2FC_TASK_SIZE)
0114
0115 #define BNX2FC_MAX_ROWS_IN_HASH_TBL 8
0116 #define BNX2FC_HASH_TBL_CHUNK_SIZE (16 * 1024)
0117
0118 #define BNX2FC_MAX_SEQS 255
0119 #define BNX2FC_MAX_RETRY_CNT 3
0120 #define BNX2FC_MAX_RPORT_RETRY_CNT 255
0121
0122 #define BNX2FC_READ (1 << 1)
0123 #define BNX2FC_WRITE (1 << 0)
0124
0125 #define BNX2FC_MIN_XID 0
0126 #define FCOE_MAX_NUM_XIDS 0x2000
0127 #define FCOE_MAX_XID_OFFSET (FCOE_MAX_NUM_XIDS - 1)
0128 #define FCOE_XIDS_PER_CPU_OFFSET ((512 * nr_cpu_ids) - 1)
0129 #define BNX2FC_MAX_LUN 0xFFFF
0130 #define BNX2FC_MAX_FCP_TGT 256
0131 #define BNX2FC_MAX_CMD_LEN 16
0132
0133 #define BNX2FC_TM_TIMEOUT 60
0134 #define BNX2FC_IO_TIMEOUT 20000UL
0135
0136 #define BNX2FC_WAIT_CNT 1200
0137 #define BNX2FC_FW_TIMEOUT (3 * HZ)
0138 #define PORT_MAX 2
0139
0140
0141 #define FC_GOOD 0
0142
0143 #define BNX2FC_RNID_HBA 0x7
0144
0145 #define SRR_RETRY_COUNT 5
0146 #define REC_RETRY_COUNT 1
0147 #define BNX2FC_NUM_ERR_BITS 63
0148
0149 #define BNX2FC_RELOGIN_WAIT_TIME 200
0150 #define BNX2FC_RELOGIN_WAIT_CNT 10
0151
0152 #define BNX2FC_STATS(hba, stat, cnt) \
0153 do { \
0154 u32 val; \
0155 \
0156 val = fw_stats->stat.cnt; \
0157 if (hba->prev_stats.stat.cnt <= val) \
0158 val -= hba->prev_stats.stat.cnt; \
0159 else \
0160 val += (0xfffffff - hba->prev_stats.stat.cnt); \
0161 hba->bfw_stats.cnt += val; \
0162 } while (0)
0163
0164
0165 extern struct fcoe_percpu_s bnx2fc_global;
0166
0167 extern struct workqueue_struct *bnx2fc_wq;
0168
0169 struct bnx2fc_percpu_s {
0170 struct task_struct *iothread;
0171 struct list_head work_list;
0172 spinlock_t fp_work_lock;
0173 };
0174
0175 struct bnx2fc_fw_stats {
0176 u64 fc_crc_cnt;
0177 u64 fcoe_tx_pkt_cnt;
0178 u64 fcoe_rx_pkt_cnt;
0179 u64 fcoe_tx_byte_cnt;
0180 u64 fcoe_rx_byte_cnt;
0181 };
0182
0183 struct bnx2fc_hba {
0184 struct list_head list;
0185 struct cnic_dev *cnic;
0186 struct pci_dev *pcidev;
0187 struct net_device *phys_dev;
0188 unsigned long reg_with_cnic;
0189 #define BNX2FC_CNIC_REGISTERED 1
0190 struct bnx2fc_cmd_mgr *cmd_mgr;
0191 spinlock_t hba_lock;
0192 struct mutex hba_mutex;
0193 struct mutex hba_stats_mutex;
0194 unsigned long adapter_state;
0195 #define ADAPTER_STATE_UP 0
0196 #define ADAPTER_STATE_GOING_DOWN 1
0197 #define ADAPTER_STATE_LINK_DOWN 2
0198 #define ADAPTER_STATE_READY 3
0199 unsigned long flags;
0200 #define BNX2FC_FLAG_FW_INIT_DONE 0
0201 #define BNX2FC_FLAG_DESTROY_CMPL 1
0202 u32 next_conn_id;
0203
0204
0205 u16 max_xid;
0206 u32 max_tasks;
0207 u32 max_outstanding_cmds;
0208 u32 elstm_xids;
0209
0210 struct fcoe_task_ctx_entry **task_ctx;
0211 dma_addr_t *task_ctx_dma;
0212 struct regpair *task_ctx_bd_tbl;
0213 dma_addr_t task_ctx_bd_dma;
0214
0215 int hash_tbl_segment_count;
0216 void **hash_tbl_segments;
0217 void *hash_tbl_pbl;
0218 dma_addr_t hash_tbl_pbl_dma;
0219 struct fcoe_t2_hash_table_entry *t2_hash_tbl;
0220 dma_addr_t t2_hash_tbl_dma;
0221 char *t2_hash_tbl_ptr;
0222 dma_addr_t t2_hash_tbl_ptr_dma;
0223
0224 char *dummy_buffer;
0225 dma_addr_t dummy_buf_dma;
0226
0227
0228 struct bnx2fc_rport **tgt_ofld_list;
0229
0230
0231 struct bnx2fc_fw_stats bfw_stats;
0232 struct fcoe_statistics_params prev_stats;
0233 struct fcoe_statistics_params *stats_buffer;
0234 dma_addr_t stats_buf_dma;
0235 struct completion stat_req_done;
0236 struct fcoe_capabilities fcoe_cap;
0237
0238
0239 struct timer_list destroy_timer;
0240 wait_queue_head_t destroy_wait;
0241
0242
0243 wait_queue_head_t shutdown_wait;
0244 int wait_for_link_down;
0245 int num_ofld_sess;
0246 struct list_head vports;
0247
0248 char chip_num[BCM_CHIP_LEN];
0249 };
0250
0251 struct bnx2fc_interface {
0252 struct list_head list;
0253 unsigned long if_flags;
0254 #define BNX2FC_CTLR_INIT_DONE 0
0255 struct bnx2fc_hba *hba;
0256 struct net_device *netdev;
0257 struct packet_type fcoe_packet_type;
0258 struct packet_type fip_packet_type;
0259 struct workqueue_struct *timer_work_queue;
0260 struct kref kref;
0261 u8 vlan_enabled;
0262 int vlan_id;
0263 bool enabled;
0264 u8 tm_timeout;
0265 };
0266
0267 #define bnx2fc_from_ctlr(x) \
0268 ((struct bnx2fc_interface *)((x) + 1))
0269
0270 #define bnx2fc_to_ctlr(x) \
0271 ((struct fcoe_ctlr *)(((struct fcoe_ctlr *)(x)) - 1))
0272
0273 struct bnx2fc_lport {
0274 struct list_head list;
0275 struct fc_lport *lport;
0276 };
0277
0278 struct bnx2fc_cmd_mgr {
0279 struct bnx2fc_hba *hba;
0280 u16 next_idx;
0281 struct list_head *free_list;
0282 spinlock_t *free_list_lock;
0283 struct io_bdt **io_bdt_pool;
0284 struct bnx2fc_cmd **cmds;
0285 };
0286
0287 struct bnx2fc_rport {
0288 struct fcoe_port *port;
0289 struct fc_rport *rport;
0290 struct fc_rport_priv *rdata;
0291 void __iomem *ctx_base;
0292 #define DPM_TRIGER_TYPE 0x40
0293 u32 io_timeout;
0294 u32 fcoe_conn_id;
0295 u32 context_id;
0296 u32 sid;
0297 int dev_type;
0298
0299 unsigned long flags;
0300 #define BNX2FC_FLAG_SESSION_READY 0x1
0301 #define BNX2FC_FLAG_OFFLOADED 0x2
0302 #define BNX2FC_FLAG_DISABLED 0x3
0303 #define BNX2FC_FLAG_DESTROYED 0x4
0304 #define BNX2FC_FLAG_OFLD_REQ_CMPL 0x5
0305 #define BNX2FC_FLAG_CTX_ALLOC_FAILURE 0x6
0306 #define BNX2FC_FLAG_UPLD_REQ_COMPL 0x7
0307 #define BNX2FC_FLAG_DISABLE_FAILED 0x9
0308 #define BNX2FC_FLAG_ENABLED 0xa
0309
0310 u8 src_addr[ETH_ALEN];
0311 u32 max_sqes;
0312 u32 max_rqes;
0313 u32 max_cqes;
0314 atomic_t free_sqes;
0315
0316 struct b577xx_doorbell_set_prod sq_db;
0317 struct b577xx_fcoe_rx_doorbell rx_db;
0318
0319 struct fcoe_sqe *sq;
0320 dma_addr_t sq_dma;
0321 u16 sq_prod_idx;
0322 u8 sq_curr_toggle_bit;
0323 u32 sq_mem_size;
0324
0325 struct fcoe_cqe *cq;
0326 dma_addr_t cq_dma;
0327 u16 cq_cons_idx;
0328 u8 cq_curr_toggle_bit;
0329 u32 cq_mem_size;
0330
0331 void *rq;
0332 dma_addr_t rq_dma;
0333 u32 rq_prod_idx;
0334 u32 rq_cons_idx;
0335 u32 rq_mem_size;
0336
0337 void *rq_pbl;
0338 dma_addr_t rq_pbl_dma;
0339 u32 rq_pbl_size;
0340
0341 struct fcoe_xfrqe *xferq;
0342 dma_addr_t xferq_dma;
0343 u32 xferq_mem_size;
0344
0345 struct fcoe_confqe *confq;
0346 dma_addr_t confq_dma;
0347 u32 confq_mem_size;
0348
0349 void *confq_pbl;
0350 dma_addr_t confq_pbl_dma;
0351 u32 confq_pbl_size;
0352
0353 struct fcoe_conn_db *conn_db;
0354 dma_addr_t conn_db_dma;
0355 u32 conn_db_mem_size;
0356
0357 struct fcoe_sqe *lcq;
0358 dma_addr_t lcq_dma;
0359 u32 lcq_mem_size;
0360
0361 void *ofld_req[4];
0362 dma_addr_t ofld_req_dma[4];
0363 void *enbl_req;
0364 dma_addr_t enbl_req_dma;
0365
0366 spinlock_t tgt_lock;
0367 spinlock_t cq_lock;
0368 atomic_t num_active_ios;
0369 u32 flush_in_prog;
0370 unsigned long timestamp;
0371 unsigned long retry_delay_timestamp;
0372 struct list_head free_task_list;
0373 struct bnx2fc_cmd *pending_queue[BNX2FC_SQ_WQES_MAX+1];
0374 struct list_head active_cmd_queue;
0375 struct list_head els_queue;
0376 struct list_head io_retire_queue;
0377 struct list_head active_tm_queue;
0378
0379 struct timer_list ofld_timer;
0380 wait_queue_head_t ofld_wait;
0381
0382 struct timer_list upld_timer;
0383 wait_queue_head_t upld_wait;
0384 };
0385
0386 struct bnx2fc_mp_req {
0387 u8 tm_flags;
0388
0389 u32 req_len;
0390 void *req_buf;
0391 dma_addr_t req_buf_dma;
0392 struct fcoe_bd_ctx *mp_req_bd;
0393 dma_addr_t mp_req_bd_dma;
0394 struct fc_frame_header req_fc_hdr;
0395
0396 u32 resp_len;
0397 void *resp_buf;
0398 dma_addr_t resp_buf_dma;
0399 struct fcoe_bd_ctx *mp_resp_bd;
0400 dma_addr_t mp_resp_bd_dma;
0401 struct fc_frame_header resp_fc_hdr;
0402 };
0403
0404 struct bnx2fc_els_cb_arg {
0405 struct bnx2fc_cmd *aborted_io_req;
0406 struct bnx2fc_cmd *io_req;
0407 u16 l2_oxid;
0408 u32 offset;
0409 enum fc_rctl r_ctl;
0410 };
0411
0412
0413 struct bnx2fc_cmd {
0414 struct list_head link;
0415 u8 on_active_queue;
0416 u8 on_tmf_queue;
0417 u8 cmd_type;
0418 #define BNX2FC_SCSI_CMD 1
0419 #define BNX2FC_TASK_MGMT_CMD 2
0420 #define BNX2FC_ABTS 3
0421 #define BNX2FC_ELS 4
0422 #define BNX2FC_CLEANUP 5
0423 #define BNX2FC_SEQ_CLEANUP 6
0424 u8 io_req_flags;
0425 struct kref refcount;
0426 struct fcoe_port *port;
0427 struct bnx2fc_rport *tgt;
0428 struct scsi_cmnd *sc_cmd;
0429 struct bnx2fc_cmd_mgr *cmd_mgr;
0430 struct bnx2fc_mp_req mp_req;
0431 void (*cb_func)(struct bnx2fc_els_cb_arg *cb_arg);
0432 struct bnx2fc_els_cb_arg *cb_arg;
0433 struct delayed_work timeout_work;
0434 struct completion abts_done;
0435 struct completion cleanup_done;
0436 int wait_for_abts_comp;
0437 int wait_for_cleanup_comp;
0438 u16 xid;
0439 struct fcoe_err_report_entry err_entry;
0440 struct fcoe_task_ctx_entry *task;
0441 struct io_bdt *bd_tbl;
0442 struct fcp_rsp *rsp;
0443 size_t data_xfer_len;
0444 unsigned long req_flags;
0445 #define BNX2FC_FLAG_ISSUE_RRQ 0x1
0446 #define BNX2FC_FLAG_ISSUE_ABTS 0x2
0447 #define BNX2FC_FLAG_ABTS_DONE 0x3
0448 #define BNX2FC_FLAG_TM_COMPL 0x4
0449 #define BNX2FC_FLAG_TM_TIMEOUT 0x5
0450 #define BNX2FC_FLAG_IO_CLEANUP 0x6
0451 #define BNX2FC_FLAG_RETIRE_OXID 0x7
0452 #define BNX2FC_FLAG_EH_ABORT 0x8
0453 #define BNX2FC_FLAG_IO_COMPL 0x9
0454 #define BNX2FC_FLAG_ELS_DONE 0xa
0455 #define BNX2FC_FLAG_ELS_TIMEOUT 0xb
0456 #define BNX2FC_FLAG_CMD_LOST 0xc
0457 #define BNX2FC_FLAG_SRR_SENT 0xd
0458 #define BNX2FC_FLAG_ISSUE_CLEANUP_REQ 0xe
0459 u8 rec_retry;
0460 u8 srr_retry;
0461 u32 srr_offset;
0462 u8 srr_rctl;
0463 u32 fcp_resid;
0464 u32 fcp_rsp_len;
0465 u32 fcp_sns_len;
0466 u8 cdb_status;
0467 u8 fcp_status;
0468 u8 fcp_rsp_code;
0469 u8 scsi_comp_flags;
0470 };
0471
0472 struct io_bdt {
0473 struct bnx2fc_cmd *io_req;
0474 struct fcoe_bd_ctx *bd_tbl;
0475 dma_addr_t bd_tbl_dma;
0476 u16 bd_valid;
0477 };
0478
0479 struct bnx2fc_work {
0480 struct list_head list;
0481 struct bnx2fc_rport *tgt;
0482 struct fcoe_task_ctx_entry *task;
0483 unsigned char rq_data[BNX2FC_RQ_BUF_SZ];
0484 u16 wqe;
0485 u8 num_rq;
0486 };
0487 struct bnx2fc_unsol_els {
0488 struct fc_lport *lport;
0489 struct fc_frame *fp;
0490 struct bnx2fc_hba *hba;
0491 struct work_struct unsol_els_work;
0492 };
0493
0494 struct bnx2fc_priv {
0495 struct bnx2fc_cmd *io_req;
0496 };
0497
0498 static inline struct bnx2fc_priv *bnx2fc_priv(struct scsi_cmnd *cmd)
0499 {
0500 return scsi_cmd_priv(cmd);
0501 }
0502
0503 struct bnx2fc_cmd *bnx2fc_cmd_alloc(struct bnx2fc_rport *tgt);
0504 struct bnx2fc_cmd *bnx2fc_elstm_alloc(struct bnx2fc_rport *tgt, int type);
0505 void bnx2fc_cmd_release(struct kref *ref);
0506 int bnx2fc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *sc_cmd);
0507 int bnx2fc_send_fw_fcoe_init_msg(struct bnx2fc_hba *hba);
0508 int bnx2fc_send_fw_fcoe_destroy_msg(struct bnx2fc_hba *hba);
0509 int bnx2fc_send_session_ofld_req(struct fcoe_port *port,
0510 struct bnx2fc_rport *tgt);
0511 int bnx2fc_send_session_enable_req(struct fcoe_port *port,
0512 struct bnx2fc_rport *tgt);
0513 int bnx2fc_send_session_disable_req(struct fcoe_port *port,
0514 struct bnx2fc_rport *tgt);
0515 int bnx2fc_send_session_destroy_req(struct bnx2fc_hba *hba,
0516 struct bnx2fc_rport *tgt);
0517 int bnx2fc_map_doorbell(struct bnx2fc_rport *tgt);
0518 void bnx2fc_indicate_kcqe(void *context, struct kcqe *kcq[],
0519 u32 num_cqe);
0520 int bnx2fc_setup_task_ctx(struct bnx2fc_hba *hba);
0521 void bnx2fc_free_task_ctx(struct bnx2fc_hba *hba);
0522 int bnx2fc_setup_fw_resc(struct bnx2fc_hba *hba);
0523 void bnx2fc_free_fw_resc(struct bnx2fc_hba *hba);
0524 struct bnx2fc_cmd_mgr *bnx2fc_cmd_mgr_alloc(struct bnx2fc_hba *hba);
0525 void bnx2fc_cmd_mgr_free(struct bnx2fc_cmd_mgr *cmgr);
0526 void bnx2fc_get_link_state(struct bnx2fc_hba *hba);
0527 char *bnx2fc_get_next_rqe(struct bnx2fc_rport *tgt, u8 num_items);
0528 void bnx2fc_return_rqe(struct bnx2fc_rport *tgt, u8 num_items);
0529 int bnx2fc_get_paged_crc_eof(struct sk_buff *skb, int tlen);
0530 int bnx2fc_send_rrq(struct bnx2fc_cmd *aborted_io_req);
0531 int bnx2fc_send_adisc(struct bnx2fc_rport *tgt, struct fc_frame *fp);
0532 int bnx2fc_send_logo(struct bnx2fc_rport *tgt, struct fc_frame *fp);
0533 int bnx2fc_send_rls(struct bnx2fc_rport *tgt, struct fc_frame *fp);
0534 int bnx2fc_initiate_cleanup(struct bnx2fc_cmd *io_req);
0535 int bnx2fc_initiate_abts(struct bnx2fc_cmd *io_req);
0536 void bnx2fc_cmd_timer_set(struct bnx2fc_cmd *io_req,
0537 unsigned int timer_msec);
0538 int bnx2fc_init_mp_req(struct bnx2fc_cmd *io_req);
0539 void bnx2fc_init_cleanup_task(struct bnx2fc_cmd *io_req,
0540 struct fcoe_task_ctx_entry *task,
0541 u16 orig_xid);
0542 void bnx2fc_init_seq_cleanup_task(struct bnx2fc_cmd *seq_clnup_req,
0543 struct fcoe_task_ctx_entry *task,
0544 struct bnx2fc_cmd *orig_io_req,
0545 u32 offset);
0546 void bnx2fc_init_mp_task(struct bnx2fc_cmd *io_req,
0547 struct fcoe_task_ctx_entry *task);
0548 void bnx2fc_init_task(struct bnx2fc_cmd *io_req,
0549 struct fcoe_task_ctx_entry *task);
0550 void bnx2fc_add_2_sq(struct bnx2fc_rport *tgt, u16 xid);
0551 void bnx2fc_ring_doorbell(struct bnx2fc_rport *tgt);
0552 int bnx2fc_eh_abort(struct scsi_cmnd *sc_cmd);
0553 int bnx2fc_eh_target_reset(struct scsi_cmnd *sc_cmd);
0554 int bnx2fc_eh_device_reset(struct scsi_cmnd *sc_cmd);
0555 void bnx2fc_rport_event_handler(struct fc_lport *lport,
0556 struct fc_rport_priv *rport,
0557 enum fc_rport_event event);
0558 void bnx2fc_process_scsi_cmd_compl(struct bnx2fc_cmd *io_req,
0559 struct fcoe_task_ctx_entry *task,
0560 u8 num_rq, unsigned char *rq_data);
0561 void bnx2fc_process_cleanup_compl(struct bnx2fc_cmd *io_req,
0562 struct fcoe_task_ctx_entry *task,
0563 u8 num_rq);
0564 void bnx2fc_process_abts_compl(struct bnx2fc_cmd *io_req,
0565 struct fcoe_task_ctx_entry *task,
0566 u8 num_rq);
0567 void bnx2fc_process_tm_compl(struct bnx2fc_cmd *io_req,
0568 struct fcoe_task_ctx_entry *task,
0569 u8 num_rq, unsigned char *rq_data);
0570 void bnx2fc_process_els_compl(struct bnx2fc_cmd *els_req,
0571 struct fcoe_task_ctx_entry *task,
0572 u8 num_rq);
0573 void bnx2fc_build_fcp_cmnd(struct bnx2fc_cmd *io_req,
0574 struct fcp_cmnd *fcp_cmnd);
0575
0576
0577
0578 void bnx2fc_flush_active_ios(struct bnx2fc_rport *tgt);
0579 struct fc_seq *bnx2fc_elsct_send(struct fc_lport *lport, u32 did,
0580 struct fc_frame *fp, unsigned int op,
0581 void (*resp)(struct fc_seq *,
0582 struct fc_frame *,
0583 void *),
0584 void *arg, u32 timeout);
0585 void bnx2fc_arm_cq(struct bnx2fc_rport *tgt);
0586 int bnx2fc_process_new_cqes(struct bnx2fc_rport *tgt);
0587 void bnx2fc_process_cq_compl(struct bnx2fc_rport *tgt, u16 wqe,
0588 unsigned char *rq_data, u8 num_rq,
0589 struct fcoe_task_ctx_entry *task);
0590 struct bnx2fc_rport *bnx2fc_tgt_lookup(struct fcoe_port *port,
0591 u32 port_id);
0592 void bnx2fc_process_l2_frame_compl(struct bnx2fc_rport *tgt,
0593 unsigned char *buf,
0594 u32 frame_len, u16 l2_oxid);
0595 int bnx2fc_send_stat_req(struct bnx2fc_hba *hba);
0596 int bnx2fc_post_io_req(struct bnx2fc_rport *tgt, struct bnx2fc_cmd *io_req);
0597 int bnx2fc_send_rec(struct bnx2fc_cmd *orig_io_req);
0598 int bnx2fc_send_srr(struct bnx2fc_cmd *orig_io_req, u32 offset, u8 r_ctl);
0599 void bnx2fc_process_seq_cleanup_compl(struct bnx2fc_cmd *seq_clnup_req,
0600 struct fcoe_task_ctx_entry *task,
0601 u8 rx_state);
0602 int bnx2fc_initiate_seq_cleanup(struct bnx2fc_cmd *orig_io_req, u32 offset,
0603 enum fc_rctl r_ctl);
0604
0605
0606 #include "bnx2fc_debug.h"
0607
0608 #endif