
type
   Psg_iovec = ^sg_iovec;
   sg_iovec = record
        iov_base : pointer;
        iov_len : size_t;
     end;
   sg_iovec_t = sg_iovec;
   Psg_iovec_t = ^sg_iovec_t;

   Psg_io_hdr = ^sg_io_hdr;
   sg_io_hdr = record
        interface_id : longint;
        dxfer_direction : longint;
        cmd_len : byte;
        mx_sb_len : byte;
        iovec_count : word;
        dxfer_len : dword;
        dxferp : pointer;
        cmdp : Pbyte;
        sbp : Pbyte;
        timeout : dword;
        flags : dword;
        pack_id : longint;
        usr_ptr : pointer;
        status : byte;
        masked_status : byte;
        msg_status : byte;
        sb_len_wr : byte;
        host_status : word;
        driver_status : word;
        resid : longint;
        duration : dword;
        info : dword;
     end;
   sg_io_hdr_t = sg_io_hdr;
   Psg_io_hdr_t = ^sg_io_hdr_t;

const
   SG_DXFER_NONE = -(1);
   SG_DXFER_TO_DEV = -(2);
   SG_DXFER_FROM_DEV = -(3);
   SG_DXFER_TO_FROM_DEV = -(4);
   SG_FLAG_DIRECT_IO = 1;
   SG_FLAG_LUN_INHIBIT = 2;
   SG_FLAG_NO_DXFER = $10000;
   SG_INFO_OK_MASK = $1;
   SG_INFO_OK = $0;
   SG_INFO_CHECK = $1;
   SG_INFO_DIRECT_IO_MASK = $6;
   SG_INFO_INDIRECT_IO = $0;
   SG_INFO_DIRECT_IO = $2;
   SG_INFO_MIXED_IO = $4;
type
   Psg_scsi_id = ^sg_scsi_id;
   sg_scsi_id = record
        host_no : longint;
        channel : longint;
        scsi_id : longint;
        lun : longint;
        scsi_type : longint;
        h_cmd_per_lun : smallint;
        d_queue_depth : smallint;
        unused : array[0..1] of longint;
     end;


   Psg_req_info = ^sg_req_info;
   sg_req_info = record
        req_state : char;
        orphan : char;
        sg_io_owned : char;
        problem : char;
        pack_id : longint;
        usr_ptr : pointer;
        duration : dword;
        unused : longint;
     end;
   sg_req_info_t = sg_req_info;
   Psg_req_info_t = ^sg_req_info_t;

const
   SG_EMULATED_HOST = $2203;
   SG_SET_TRANSFORM = $2204;
   SG_GET_TRANSFORM = $2205;
   SG_SET_RESERVED_SIZE = $2275;
   SG_GET_RESERVED_SIZE = $2272;
   SG_GET_SCSI_ID = $2276;
   SG_SET_FORCE_LOW_DMA = $2279;
   SG_GET_LOW_DMA = $227a;
   SG_SET_FORCE_PACK_ID = $227b;
   SG_GET_PACK_ID = $227c;
   SG_GET_NUM_WAITING = $227d;
   SG_GET_SG_TABLESIZE = $227F;
   SG_GET_VERSION_NUM = $2282;
   SG_SCSI_RESET = $2284;
   SG_SCSI_RESET_NOTHING = 0;
   SG_SCSI_RESET_DEVICE = 1;
   SG_SCSI_RESET_BUS = 2;
   SG_SCSI_RESET_HOST = 3;
   SG_IO = $2285;
   SG_GET_REQUEST_TABLE = $2286;
   SG_SET_KEEP_ORPHAN = $2287;
   SG_GET_KEEP_ORPHAN = $2288;
   SG_SCATTER_SZ = 8 * 4096;
   SG_DEFAULT_RETRIES = 1;
   SG_DEF_FORCE_LOW_DMA = 0;
   SG_DEF_FORCE_PACK_ID = 0;
   SG_DEF_KEEP_ORPHAN = 0;
   SG_DEF_RESERVED_SIZE = SG_SCATTER_SZ;
   SG_MAX_QUEUE = 16;
   SG_BIG_BUFF = SG_DEF_RESERVED_SIZE;

const
   SG_MAX_SENSE = 16;
type
   Psg_header = ^sg_header;
   sg_header = record
        pack_len : longint;
        reply_len : longint;
        pack_id : longint;
        result : longint;
        flag0 : cardinal;
        sense_buffer : array[0..(SG_MAX_SENSE)-1] of byte;
     end;

const
   SG_SET_TIMEOUT = $2201;
   SG_GET_TIMEOUT = $2202;
   SG_GET_COMMAND_Q = $2270;
   SG_SET_COMMAND_Q = $2271;
   SG_SET_DEBUG = $227e;
   SG_NEXT_CMD_LEN = $2283;
   SG_DEFAULT_TIMEOUT = 60 * HZ;
   SG_DEF_COMMAND_Q = 0;
   SG_DEF_UNDERRUN_FLAG = 0;

{ ---------------------------------------------------------------------
    Borland compatibility types
  ---------------------------------------------------------------------}

// Type  
