<HTML ><HEAD ><TITLE >The sg_io_hdr_t structure in detail</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ "><LINK REL="HOME" TITLE="The Linux SCSI Generic (sg) HOWTO" HREF="index.html"><LINK REL="PREVIOUS" TITLE="Theory of operation" HREF="theory.html"><LINK REL="NEXT" TITLE="interface_id" HREF="x163.html"></HEAD ><BODY CLASS="CHAPTER" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >The Linux SCSI Generic (sg) HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="theory.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="x163.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="CHAPTER" ><H1 ><A NAME="SG_IO_HDR_T">Chapter 6. The sg_io_hdr_t structure in detail</H1 ><DIV CLASS="TOC" ><DL ><DT ><B >Table of Contents</B ></DT ><DT >6.1. <A HREF="x163.html" >interface_id</A ></DT ><DT >6.2. <A HREF="x166.html" >dxfer_direction</A ></DT ><DT >6.3. <A HREF="x184.html" >cmd_len</A ></DT ><DT >6.4. <A HREF="x189.html" >mx_sb_len</A ></DT ><DT >6.5. <A HREF="x192.html" >iovec_count</A ></DT ><DT >6.6. <A HREF="x198.html" >dxfer_len</A ></DT ><DT >6.7. <A HREF="x204.html" >dxferp</A ></DT ><DT >6.8. <A HREF="x209.html" >cmdp</A ></DT ><DT >6.9. <A HREF="x212.html" >sbp</A ></DT ><DT >6.10. <A HREF="x215.html" >timeout</A ></DT ><DT >6.11. <A HREF="x233.html" >flags</A ></DT ><DT >6.12. <A HREF="x249.html" >pack_id</A ></DT ><DT >6.13. <A HREF="x252.html" >usr_ptr</A ></DT ><DT >6.14. <A HREF="x255.html" >status</A ></DT ><DT >6.15. <A HREF="x260.html" >masked_status</A ></DT ><DT >6.16. <A HREF="x285.html" >msg_status</A ></DT ><DT >6.17. <A HREF="x288.html" >sb_len_wr</A ></DT ><DT >6.18. <A HREF="x291.html" >host_status</A ></DT ><DT >6.19. <A HREF="x322.html" >driver_status</A ></DT ><DT >6.20. <A HREF="x356.html" >resid</A ></DT ><DT >6.21. <A HREF="x361.html" >duration</A ></DT ><DT >6.22. <A HREF="x364.html" >info</A ></DT ></DL ></DIV ><P >The main control structure for the version 3 SCSI generic driver has a struct tag name of "sg_io_hdr" and a typedef name of "sg_io_hdr_t". The structure is shown in abridged form below. The "[i]" notation indicates an input value while "[o]" indicates a value that is output. The "[i->o]" indicates a value that is conveyed from input to output and apart from one special case, is not used by the driver. The "[i->o]" members are meant to aid an application matching the request sent to a write() to the corresponding response received by a read(). For pointers the "[*i]" indicates a pointer that is used for reading from user memory into the driver, "[*o]" is a pointer used for writing, and "[*io]" indicates a pointer used for either reading or writing. <TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="PROGRAMLISTING" >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) */</PRE ></FONT ></TD ></TR ></TABLE ></P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="theory.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="x163.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Theory of operation</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >interface_id</TD ></TR ></TABLE ></DIV ></BODY ></HTML >