#ifndef __CSIO_SCSI_H__
#define __CSIO_SCSI_H__
#include <linux/spinlock_types.h>
#include <linux/completion.h>
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_device.h>
#include <scsi/scsi_host.h>
#include <scsi/scsi_eh.h>
#include <scsi/scsi_tcq.h>
#include <scsi/fc/fc_fcp.h>
#include "csio_defs.h"
#include "csio_wr.h"
extern struct scsi_host_template csio_fcoe_shost_template;
extern struct scsi_host_template csio_fcoe_shost_vport_template;
extern int csio_scsi_eqsize;
extern int csio_scsi_iqlen;
extern int csio_scsi_ioreqs;
extern uint32_t csio_max_scan_tmo;
extern uint32_t csio_delta_scan_tmo;
extern int csio_lun_qdepth;
#define CSIO_SCSI_MAX_SGE …
#define CSIO_SCSI_ABRT_TMO_MS …
#define CSIO_SCSI_LUNRST_TMO_MS …
#define CSIO_SCSI_TM_POLL_MS …
#define CSIO_SCSI_IQ_WRSZ …
#define CSIO_SCSI_IQSIZE …
#define CSIO_MAX_SNS_LEN …
#define CSIO_SCSI_RSP_LEN …
#define csio_scsi_cmnd(req) …
struct csio_scsi_stats { … };
struct csio_scsim { … };
enum csio_scsi_ev { … };
enum csio_scsi_lev { … };
struct csio_scsi_level_data { … };
struct csio_cmd_priv { … };
static inline struct csio_cmd_priv *csio_priv(struct scsi_cmnd *cmd)
{ … }
static inline struct csio_ioreq *
csio_get_scsi_ioreq(struct csio_scsim *scm)
{ … }
static inline void
csio_put_scsi_ioreq(struct csio_scsim *scm, struct csio_ioreq *ioreq)
{ … }
static inline void
csio_put_scsi_ioreq_list(struct csio_scsim *scm, struct list_head *reqlist,
int n)
{ … }
static inline struct csio_dma_buf *
csio_get_scsi_ddp(struct csio_scsim *scm)
{ … }
static inline void
csio_put_scsi_ddp(struct csio_scsim *scm, struct csio_dma_buf *ddp)
{ … }
static inline void
csio_put_scsi_ddp_list(struct csio_scsim *scm, struct list_head *reqlist,
int n)
{ … }
static inline void
csio_scsi_completed(struct csio_ioreq *ioreq, struct list_head *cbfn_q)
{ … }
static inline void
csio_scsi_aborted(struct csio_ioreq *ioreq, struct list_head *cbfn_q)
{ … }
static inline void
csio_scsi_closed(struct csio_ioreq *ioreq, struct list_head *cbfn_q)
{ … }
static inline void
csio_scsi_drvcleanup(struct csio_ioreq *ioreq)
{ … }
static inline int
csio_scsi_start_io(struct csio_ioreq *ioreq)
{ … }
static inline int
csio_scsi_start_tm(struct csio_ioreq *ioreq)
{ … }
static inline int
csio_scsi_abort(struct csio_ioreq *ioreq)
{ … }
static inline int
csio_scsi_close(struct csio_ioreq *ioreq)
{ … }
void csio_scsi_cleanup_io_q(struct csio_scsim *, struct list_head *);
int csio_scsim_cleanup_io(struct csio_scsim *, bool abort);
int csio_scsim_cleanup_io_lnode(struct csio_scsim *,
struct csio_lnode *);
struct csio_ioreq *csio_scsi_cmpl_handler(struct csio_hw *, void *, uint32_t,
struct csio_fl_dma_buf *,
void *, uint8_t **);
int csio_scsi_qconfig(struct csio_hw *);
int csio_scsim_init(struct csio_scsim *, struct csio_hw *);
void csio_scsim_exit(struct csio_scsim *);
#endif