scsi_cmnd结构体
时间: 2023-06-22 14:34:57 浏览: 231
scsi_cmnd结构体是用于SCSI命令处理的数据结构,它在Linux内核中定义在<linux/scsi/scsi_cmnd.h>头文件中,其定义如下:
```
struct scsi_cmnd {
struct request *request; // 对应的请求描述符指针
unsigned char *cmnd; // SCSI命令块(SCB)的起始地址
unsigned int cmd_len; // SCSI命令块(SCB)的长度
unsigned char *sense_buffer;// 感知数据缓冲区的起始地址
unsigned int sense_len; // 感知数据缓冲区的长度
unsigned int result; // SCSI命令执行结果
unsigned long flags; // 命令的标志位
int retries; // 重试次数
void *host_scribble; // 指向主机驱动程序的私有数据结构
void *driver_data; // 指向设备驱动程序的私有数据结构
struct list_head list; // 用于将SCSI命令缓冲区链接起来的链表
unsigned char *cmnd_backup; // 指向SCSI命令块(SCB)的备份地址
unsigned int resid; // 命令未执行的块数
unsigned int underflow; // 数据传输过程中未传输的字节数
unsigned int total_xfer_len;// 数据传输总长度
unsigned int transfersize; // 单次数据传输的长度
unsigned char *buffer; // 指向数据缓冲区的起始地址
struct scatterlist *sglist; // 指向散列列表的指针
unsigned int sglen; // 散列列表中的块数
void (*scsi_done)(struct scsi_cmnd *); // SCSI命令完成时的回调函数
void *request_buffer; // 指向请求缓冲区的起始地址
dma_addr_t request_buffer_dma; // 请求缓冲区的DMA地址
int cmd_per_lun; // 每个逻辑单元号可以发送的命令数
int tag; // 命令标记,用于命令的排序
unsigned char *scsi_cmd_blk; // 指向SCSI命令块(SCB)的起始地址
unsigned int scsi_cmd_len; // SCSI命令块(SCB)的长度
struct device *device; // 指向SCSI设备的设备结构体指针
unsigned int retries_remaining; // 剩余重试次数
unsigned int timeout_per_command; // 命令超时时间
struct kref kref; // 引用计数结构体,用于管理SCSI命令的生命周期
};
```
其中,各字段的含义如下:
- request:指向请求描述符(request descriptor)的指针;
- cmnd:SCSI命令块(SCB)的起始地址;
- cmd_len:SCSI命令块(SCB)的长度;
- sense_buffer:感知数据缓冲区(sense data buffer)的起始地址;
- sense_len:感知数据缓冲区(sense data buffer)的长度;
- result:SCSI命令执行结果;
- flags:命令的标志位;
- retries:重试次数;
- host_scribble:指向主机驱动程序的私有数据结构;
- driver_data:指向设备驱动程序的私有数据结构;
- list:用于将SCSI命令缓冲区链接起来的链表;
- cmnd_backup:指向SCSI命令块(SCB)的备份地址;
- resid:命令未执行的块数;
- underflow:数据传输过程中未传输的字节数;
- total_xfer_len:数据传输总长度;
- transfersize:单次数据传输的长度;
- buffer:指向数据缓冲区的起始地址;
- sglist:指向散列列表的指针;
- sglen:散列列表中的块数;
- scsi_done:SCSI命令完成时的回调函数;
- request_buffer:指向请求缓冲区的起始地址;
- request_buffer_dma:请求缓冲区的DMA地址;
- cmd_per_lun:每个逻辑单元号可以发送的命令数;
- tag:命令标记,用于命令的排序;
- scsi_cmd_blk:指向SCSI命令块(SCB)的起始地址;
- scsi_cmd_len:SCSI命令块(SCB)的长度;
- device:指向SCSI设备的设备结构体指针;
- retries_remaining:剩余重试次数;
- timeout_per_command:命令超时时间;
- kref:引用计数结构体,用于管理SCSI命令的生命周期。
阅读全文