Back to home page

OSCL-LXR

 
 

    


0001 /* bnx2fc.h: QLogic Linux FCoE offload driver.
0002  *
0003  * Copyright (c) 2008-2013 Broadcom Corporation
0004  * Copyright (c) 2014-2016 QLogic Corporation
0005  * Copyright (c) 2016-2017 Cavium Inc.
0006  *
0007  * This program is free software; you can redistribute it and/or modify
0008  * it under the terms of the GNU General Public License as published by
0009  * the Free Software Foundation.
0010  *
0011  * Written by: Bhanu Prakash Gollapudi (bprakash@broadcom.com)
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  /* secs */
0134 #define BNX2FC_IO_TIMEOUT       20000UL /* msecs */
0135 
0136 #define BNX2FC_WAIT_CNT         1200
0137 #define BNX2FC_FW_TIMEOUT       (3 * HZ)
0138 #define PORT_MAX            2
0139 
0140 /* FC FCP Status */
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 /* bnx2fc driver uses only one instance of fcoe_percpu_s */
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     /* xid resources */
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     /* Active list of offloaded sessions */
0228     struct bnx2fc_rport **tgt_ofld_list;
0229 
0230     /* statistics */
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     /*destroy handling */
0239     struct timer_list destroy_timer;
0240     wait_queue_head_t destroy_wait;
0241 
0242     /* linkdown handling */
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 /* bnx2fc command structure */
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; /* timer for ULP timeouts */
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; /* SCSI IO status */
0467     u8 fcp_status; /* FCP IO 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