#ifndef _SCSI_SCSI_CMND_H
#define _SCSI_SCSI_CMND_H
#include <linux/dma-mapping.h>
#include <linux/blkdev.h>
#include <linux/t10-pi.h>
#include <linux/list.h>
#include <linux/types.h>
#include <linux/timer.h>
#include <linux/scatterlist.h>
#include <scsi/scsi_device.h>
struct Scsi_Host;
#define MAX_COMMAND_SIZE …
struct scsi_data_buffer { … };
struct scsi_pointer { … };
#define SCMD_TAGGED …
#define SCMD_INITIALIZED …
#define SCMD_LAST …
#define SCMD_FORCE_EH_SUCCESS …
#define SCMD_FAIL_IF_RECOVERING …
#define SCMD_PRESERVED_FLAGS …
#define SCMD_STATE_COMPLETE …
#define SCMD_STATE_INFLIGHT …
enum scsi_cmnd_submitter { … } __packed;
struct scsi_cmnd { … };
static inline struct request *scsi_cmd_to_rq(struct scsi_cmnd *scmd)
{ … }
static inline void *scsi_cmd_priv(struct scsi_cmnd *cmd)
{ … }
void scsi_done(struct scsi_cmnd *cmd);
void scsi_done_direct(struct scsi_cmnd *cmd);
extern void scsi_finish_command(struct scsi_cmnd *cmd);
extern void *scsi_kmap_atomic_sg(struct scatterlist *sg, int sg_count,
size_t *offset, size_t *len);
extern void scsi_kunmap_atomic_sg(void *virt);
blk_status_t scsi_alloc_sgtables(struct scsi_cmnd *cmd);
void scsi_free_sgtables(struct scsi_cmnd *cmd);
#ifdef CONFIG_SCSI_DMA
extern int scsi_dma_map(struct scsi_cmnd *cmd);
extern void scsi_dma_unmap(struct scsi_cmnd *cmd);
#else
static inline int scsi_dma_map(struct scsi_cmnd *cmd) { return -ENOSYS; }
static inline void scsi_dma_unmap(struct scsi_cmnd *cmd) { }
#endif
static inline unsigned scsi_sg_count(struct scsi_cmnd *cmd)
{ … }
static inline struct scatterlist *scsi_sglist(struct scsi_cmnd *cmd)
{ … }
static inline unsigned scsi_bufflen(struct scsi_cmnd *cmd)
{ … }
static inline void scsi_set_resid(struct scsi_cmnd *cmd, unsigned int resid)
{ … }
static inline unsigned int scsi_get_resid(struct scsi_cmnd *cmd)
{ … }
#define scsi_for_each_sg(cmd, sg, nseg, __i) …
static inline int scsi_sg_copy_from_buffer(struct scsi_cmnd *cmd,
const void *buf, int buflen)
{ … }
static inline int scsi_sg_copy_to_buffer(struct scsi_cmnd *cmd,
void *buf, int buflen)
{ … }
static inline sector_t scsi_get_sector(struct scsi_cmnd *scmd)
{ … }
static inline sector_t scsi_get_lba(struct scsi_cmnd *scmd)
{ … }
static inline unsigned int scsi_logical_block_count(struct scsi_cmnd *scmd)
{ … }
enum scsi_prot_operations { … };
static inline void scsi_set_prot_op(struct scsi_cmnd *scmd, unsigned char op)
{ … }
static inline unsigned char scsi_get_prot_op(struct scsi_cmnd *scmd)
{ … }
enum scsi_prot_flags { … };
enum scsi_prot_target_type { … };
static inline void scsi_set_prot_type(struct scsi_cmnd *scmd, unsigned char type)
{ … }
static inline unsigned char scsi_get_prot_type(struct scsi_cmnd *scmd)
{ … }
static inline u32 scsi_prot_ref_tag(struct scsi_cmnd *scmd)
{ … }
static inline unsigned int scsi_prot_interval(struct scsi_cmnd *scmd)
{ … }
static inline unsigned scsi_prot_sg_count(struct scsi_cmnd *cmd)
{ … }
static inline struct scatterlist *scsi_prot_sglist(struct scsi_cmnd *cmd)
{ … }
static inline struct scsi_data_buffer *scsi_prot(struct scsi_cmnd *cmd)
{ … }
#define scsi_for_each_prot_sg(cmd, sg, nseg, __i) …
static inline void set_status_byte(struct scsi_cmnd *cmd, char status)
{ … }
static inline u8 get_status_byte(struct scsi_cmnd *cmd)
{ … }
static inline void set_host_byte(struct scsi_cmnd *cmd, char status)
{ … }
static inline u8 get_host_byte(struct scsi_cmnd *cmd)
{ … }
static inline void scsi_msg_to_host_byte(struct scsi_cmnd *cmd, u8 msg)
{ … }
static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd)
{ … }
extern void scsi_build_sense(struct scsi_cmnd *scmd, int desc,
u8 key, u8 asc, u8 ascq);
struct request *scsi_alloc_request(struct request_queue *q, blk_opf_t opf,
blk_mq_req_flags_t flags);
#endif