版本 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) */ |