#include <linux/mempool.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/workqueue.h>
#include <linux/pci.h>
#include <linux/scatterlist.h>
#include <linux/skbuff.h>
#include <linux/spinlock.h>
#include <linux/etherdevice.h>
#include <linux/if_ether.h>
#include <linux/if_vlan.h>
#include <linux/delay.h>
#include <linux/gfp.h>
#include <scsi/scsi.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_tcq.h>
#include <scsi/fc/fc_els.h>
#include <scsi/fc/fc_fcoe.h>
#include <scsi/libfc.h>
#include <scsi/fc_frame.h>
#include "fnic_io.h"
#include "fnic.h"
const char *fnic_state_str[] = …;
static const char *fnic_ioreq_state_str[] = …;
static const char *fcpio_status_str[] = …;
const char *fnic_state_to_str(unsigned int state)
{ … }
static const char *fnic_ioreq_state_to_str(unsigned int state)
{ … }
static const char *fnic_fcpio_status_to_str(unsigned int status)
{ … }
static void fnic_cleanup_io(struct fnic *fnic);
static void fnic_release_ioreq_buf(struct fnic *fnic,
struct fnic_io_req *io_req,
struct scsi_cmnd *sc)
{ … }
static int free_wq_copy_descs(struct fnic *fnic, struct vnic_wq_copy *wq, unsigned int hwq)
{ … }
void
__fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
unsigned long clearbits)
{ … }
int fnic_fw_reset_handler(struct fnic *fnic)
{ … }
int fnic_flogi_reg_handler(struct fnic *fnic, u32 fc_id)
{ … }
static inline int fnic_queue_wq_copy_desc(struct fnic *fnic,
struct vnic_wq_copy *wq,
struct fnic_io_req *io_req,
struct scsi_cmnd *sc,
int sg_count,
uint32_t mqtag,
uint16_t hwq)
{ … }
int fnic_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *sc)
{ … }
static int fnic_fcpio_fw_reset_cmpl_handler(struct fnic *fnic,
struct fcpio_fw_req *desc)
{ … }
static int fnic_fcpio_flogi_reg_cmpl_handler(struct fnic *fnic,
struct fcpio_fw_req *desc)
{ … }
static inline int is_ack_index_in_range(struct vnic_wq_copy *wq,
u16 request_out)
{ … }
static inline void fnic_fcpio_ack_handler(struct fnic *fnic,
unsigned int cq_index,
struct fcpio_fw_req *desc)
{ … }
static void fnic_fcpio_icmnd_cmpl_handler(struct fnic *fnic, unsigned int cq_index,
struct fcpio_fw_req *desc)
{ … }
static void fnic_fcpio_itmf_cmpl_handler(struct fnic *fnic, unsigned int cq_index,
struct fcpio_fw_req *desc)
{ … }
static int fnic_fcpio_cmpl_handler(struct vnic_dev *vdev,
unsigned int cq_index,
struct fcpio_fw_req *desc)
{ … }
int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do, unsigned int cq_index)
{ … }
static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data)
{ … }
static void fnic_cleanup_io(struct fnic *fnic)
{ … }
void fnic_wq_copy_cleanup_handler(struct vnic_wq_copy *wq,
struct fcpio_host_req *desc)
{ … }
static inline int fnic_queue_abort_io_req(struct fnic *fnic, int tag,
u32 task_req, u8 *fc_lun,
struct fnic_io_req *io_req,
unsigned int hwq)
{ … }
struct fnic_rport_abort_io_iter_data { … };
static bool fnic_rport_abort_io_iter(struct scsi_cmnd *sc, void *data)
{ … }
static void fnic_rport_exch_reset(struct fnic *fnic, u32 port_id)
{ … }
void fnic_terminate_rport_io(struct fc_rport *rport)
{ … }
int fnic_abort_cmd(struct scsi_cmnd *sc)
{ … }
static inline int fnic_queue_dr_io_req(struct fnic *fnic,
struct scsi_cmnd *sc,
struct fnic_io_req *io_req)
{ … }
struct fnic_pending_aborts_iter_data { … };
static bool fnic_pending_aborts_iter(struct scsi_cmnd *sc, void *data)
{ … }
static int fnic_clean_pending_aborts(struct fnic *fnic,
struct scsi_cmnd *lr_sc,
bool new_sc)
{ … }
int fnic_device_reset(struct scsi_cmnd *sc)
{ … }
int fnic_reset(struct Scsi_Host *shost)
{ … }
int fnic_host_reset(struct scsi_cmnd *sc)
{ … }
void fnic_scsi_abort_io(struct fc_lport *lp)
{ … }
void fnic_scsi_cleanup(struct fc_lport *lp)
{ … }
void fnic_empty_scsi_cleanup(struct fc_lport *lp)
{ … }
void fnic_exch_mgr_reset(struct fc_lport *lp, u32 sid, u32 did)
{ … }
static bool fnic_abts_pending_iter(struct scsi_cmnd *sc, void *data)
{ … }
int fnic_is_abts_pending(struct fnic *fnic, struct scsi_cmnd *lr_sc)
{ … }