#include "efct_driver.h"
#include "efct_hw.h"
#define enable_tsend_auto_resp(efct) …
#define enable_treceive_auto_resp(efct) …
#define SCSI_IOFMT …
#define scsi_io_printf(io, fmt, ...) …
#define EFCT_LOG_ENABLE_SCSI_TRACE(efct) …
#define scsi_io_trace(io, fmt, ...) …
struct efct_io *
efct_scsi_io_alloc(struct efct_node *node)
{ … }
void
_efct_scsi_io_free(struct kref *arg)
{ … }
void
efct_scsi_io_free(struct efct_io *io)
{ … }
static void
efct_target_io_cb(struct efct_hw_io *hio, u32 length, int status,
u32 ext_status, void *app)
{ … }
static int
efct_scsi_build_sgls(struct efct_hw *hw, struct efct_hw_io *hio,
struct efct_scsi_sgl *sgl, u32 sgl_count,
enum efct_hw_io_type type)
{ … }
static void efc_log_sgl(struct efct_io *io)
{ … }
static void
efct_scsi_check_pending_async_cb(struct efct_hw *hw, int status,
u8 *mqe, void *arg)
{ … }
static int
efct_scsi_io_dispatch_hw_io(struct efct_io *io, struct efct_hw_io *hio)
{ … }
static int
efct_scsi_io_dispatch_no_hw_io(struct efct_io *io)
{ … }
static struct efct_io *
efct_scsi_dispatch_pending(struct efct *efct)
{ … }
void
efct_scsi_check_pending(struct efct *efct)
{ … }
int
efct_scsi_io_dispatch(struct efct_io *io, void *cb)
{ … }
int
efct_scsi_io_dispatch_abort(struct efct_io *io, void *cb)
{ … }
static inline int
efct_scsi_xfer_data(struct efct_io *io, u32 flags,
struct efct_scsi_sgl *sgl, u32 sgl_count, u64 xwire_len,
enum efct_hw_io_type type, int enable_ar,
efct_scsi_io_cb_t cb, void *arg)
{ … }
int
efct_scsi_send_rd_data(struct efct_io *io, u32 flags,
struct efct_scsi_sgl *sgl, u32 sgl_count, u64 len,
efct_scsi_io_cb_t cb, void *arg)
{ … }
int
efct_scsi_recv_wr_data(struct efct_io *io, u32 flags,
struct efct_scsi_sgl *sgl, u32 sgl_count, u64 len,
efct_scsi_io_cb_t cb, void *arg)
{ … }
int
efct_scsi_send_resp(struct efct_io *io, u32 flags,
struct efct_scsi_cmd_resp *rsp,
efct_scsi_io_cb_t cb, void *arg)
{ … }
static int
efct_target_bls_resp_cb(struct efct_hw_io *hio, u32 length, int status,
u32 ext_status, void *app)
{ … }
static int
efct_target_send_bls_resp(struct efct_io *io,
efct_scsi_io_cb_t cb, void *arg)
{ … }
static int efct_bls_send_rjt_cb(struct efct_hw_io *hio, u32 length, int status,
u32 ext_status, void *app)
{ … }
struct efct_io *
efct_bls_send_rjt(struct efct_io *io, struct fc_frame_header *hdr)
{ … }
int
efct_scsi_send_tmf_resp(struct efct_io *io,
enum efct_scsi_tmf_resp rspcode,
u8 addl_rsp_info[3],
efct_scsi_io_cb_t cb, void *arg)
{ … }
static int
efct_target_abort_cb(struct efct_hw_io *hio, u32 length, int status,
u32 ext_status, void *app)
{ … }
int
efct_scsi_tgt_abort_io(struct efct_io *io, efct_scsi_io_cb_t cb, void *arg)
{ … }
void
efct_scsi_io_complete(struct efct_io *io)
{ … }