第 6 章. sg_io_hdr_t 结构体详解

目录
6.1. interface_id
6.2. dxfer_direction
6.3. cmd_len
6.4. mx_sb_len
6.5. iovec_count
6.6. dxfer_len
6.7. dxferp
6.8. cmdp
6.9. sbp
6.10. timeout
6.11. flags
6.12. pack_id
6.13. usr_ptr
6.14. status
6.15. masked_status
6.16. msg_status
6.17. sb_len_wr
6.18. host_status
6.19. driver_status
6.20. resid
6.21. duration
6.22. info

版本 3 SCSI 通用驱动程序的主要控制结构具有 "sg_io_hdr" 的结构标签名称和 "sg_io_hdr_t" 的 typedef 名称。该结构以简略形式显示如下。“[i]”表示输入值,“[o]”表示输出值。“[i->o]”表示从输入传递到输出的值,除了一种特殊情况外,驱动程序不使用该值。“[i->o]”成员旨在帮助应用程序将发送到 write() 的请求与 read() 接收的相应响应进行匹配。对于指针,“[*i]”表示用于从用户内存读取到驱动程序的指针,“[*o]”是指用于写入的指针,“[*io]”表示用于读取或写入的指针。
typedef struct sg_io_hdr
{
    int interface_id;           /* [i] 'S' (required) */
    int dxfer_direction;        /* [i] */
    unsigned char cmd_len;      /* [i] */
    unsigned char mx_sb_len;    /* [i] */
    unsigned short iovec_count; /* [i] */
    unsigned int dxfer_len;     /* [i] */
    void * dxferp;              /* [i], [*io] */
    unsigned char * cmdp;       /* [i], [*i]  */
    unsigned char * sbp;        /* [i], [*o]  */
    unsigned int timeout;       /* [i] unit: millisecs */
    unsigned int flags;         /* [i] */
    int pack_id;                /* [i->o] */
    void * usr_ptr;             /* [i->o] */
    unsigned char status;       /* [o] */
    unsigned char masked_status;/* [o] */
    unsigned char msg_status;   /* [o] */
    unsigned char sb_len_wr;    /* [o] */
    unsigned short host_status; /* [o] */
    unsigned short driver_status;/* [o] */
    int resid;                  /* [o] */
    unsigned int duration;      /* [o] */
    unsigned int info;          /* [o] */
} sg_io_hdr_t;  /* 64 bytes long (on i386) */