📄 scsi.h
字号:
wbus16:1, /* support for 16 bit wide scsi */ wbus32:1, /* support for 32 bit wide scsi */ reladr:1; /* support for relative address */ unsigned char vendor[8]; /* Vendor identification. */ unsigned char product[16]; /* Product identification */ unsigned char revision[4]; /* Revision level. */} INQUIRY_RET_STRUCT;#elsetypedef struct { /* Common returned data header */ unsigned char device; /* Device type code. */ unsigned char rmb:1, /* Removeable media. */ qualifier:7; /* Device type qualifier. */ unsigned char isiovers:2, /* ISO version. */ ecmavers:3, /* ECMA version. */ ansivers:3; /* ANSI version. */ unsigned char :4, /* Reserved */ format:4; /* Response format. */ unsigned char length; /* Additional Data length. */ unsigned char :8; /* Reserved */ unsigned char :8; /* Reserved */ unsigned char reladr:1, /* support for relative address */ wbus32:1, /* support for 32 bit wide scsi */ wbus16:1, /* support for 16 bit wide scsi */ sync:1, /* support for synchronous trans */ linked:1, /* support for linked commands */ res:1, /* reserved */ cmdque:1, /* support for command queuing */ stffre:1; /* support for soft reset alter */ unsigned char vendor[8]; /* Vendor identification. */ unsigned char product[16]; /* Product identification */ unsigned char revision[4]; /* Revision level. */} INQUIRY_RET_STRUCT;#endif/*---------------------------------------------------------------------*//* Device type codes. *//*---------------------------------------------------------------------*/#define TYPE_DIRECT 0x00 /* direct access (disk) */#define TYPE_SEQUENTIAL 0x01 /* sequential access (tape) */#define TYPE_PRINTER 0x02 /* printer */#define TYPE_PROCESSOR 0x03 /* processor board */#define TYPE_WORM 0x04 /* write once (optical disk) */#define TYPE_CDROM 0x05 /* cd rom */#define TYPE_SCANNER 0x06 /* scanner */#define TYPE_OMEM 0x07 /* optical memory (some disks) */#define TYPE_CHANGER 0x08 /* medium changer (jukeboxes) */#define TYPE_COMM 0x09 /* communication device */#define TYPE_UNKNOWN 0x1F /* unknown device type */#define TYPE_HOST 0xFF /* target id of host system *//***********************************************************************//* Format command -- *//***********************************************************************/#define FORMAT 0x04#define FORMAT_DLEN 0x6typedef struct { unsigned char code:8; /* Command number */ unsigned char lun:3, /* Logical unit number */ fmtdat:1, /* Format data provided */ clist:1, /* Complete list provided */ dfmt:3; /* Defects provide */ unsigned char pat; /* Pattern to write to disk */ unsigned char ileave[2]; /* Interleave factor */ unsigned char vu:2, /* Vendor unique */ :4, flag:1, /* Flagged command */ link:1; /* Linked command */ } FORMAT_STRUCT;/***********************************************************************//* Prevent/Allow Medium Removal -- Removable devices *//***********************************************************************/#define PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E#define PREVENT_ALLOW_MEDIUM_REMOVAL_DLEN 6 typedef struct { unsigned char code; unsigned char lun :3, :5; unsigned char reserved[2]; unsigned char :7, prevent :1; /* 0 - allowed 1 - prevented */ unsigned char vu :2, :4, flag :1, link :1; } PREVENT_ALLOW_MEDIUM_REMOVAL_STRUCT; /***********************************************************************//* Start/Stop Unit *//***********************************************************************/#define START_STOP_UNIT 0x1B#define START_STOP_DLEN 6typedef struct { unsigned char code; unsigned char lun :3, :4, immediate:1; /* 0 - wait for operation */ /* 1 - return w/o waiting */ unsigned char reserved[2]; unsigned char :6, load_eject:1, /* These two form one command */ start :1; /* 01 - Start spindle */ /* 00 - Stop spindle */ /* 11 - Load medium */ /* 10 - Stop and eject medium */ unsigned char vu :2, :4, flag :1, link :1; } START_STOP_UNIT_STRUCT;/***********************************************************************//* Mode Select command -- *//***********************************************************************/#define MODE_SELECT 0x15#define MODE_SELECT_DLEN 0x6typedef struct { unsigned char code; /* Command number. */ unsigned char lun:3, /* Logical Unit Number. */ pf:1, /* Page Format. */ :3, /* Reserved */ sp:1; /* Save Parameters. */ unsigned char res[2]; /* Reserved */ unsigned char dlen; /* Parameter List Length */ unsigned char vu:2, /* Vendor unique */ :4, /* Reserved */ flag:1, /* Flag command bit. */ link:1; /* Linked command bit. */ } MODE_SELECT_STRUCT;/***********************************************************************//* Mode Sense Command -- COMMON TO MOST DEVICES *//***********************************************************************/#define MODE_SENSE 0x1A#define MODE_SENSE_DLEN 0x06typedef struct { unsigned char code; /* Command number. */ unsigned char lun:3, /* Logical Unit Number. */ :5; /* Reserved */ unsigned char pcf:2, /* Page control field. */ page:6; /* Page code. */ unsigned char :8; unsigned char dlen; /* Bytes alloc. for data. */ unsigned char vu:2, /* Vendor unique */ :4, /* Reserved */ flag:1, /* Flag command bit. */ link:1; /* Linked command bit. */ } MODE_SENSE_STRUCT;/*---------------------------------------------------------------------*//* Mode sense page control field options. *//*---------------------------------------------------------------------*/#define CURRENT 0#define CHANGEABLE 1#define DEFAULT 2#define SAVED 3/***********************************************************************//* Mode Sense/Select page formats *//***********************************************************************/#ifdef MRItypedef packed struct#endif#ifdef GHS#pragma pack(1)typedef struct#endif#if _SDS#pragma maxalign(1)typedef struct#endif { unsigned char res[2]; unsigned char RSVD:1, buffered_mode:3, speed:4; unsigned char bdl; /* Block Descriptor Length always 8*/ unsigned char density_code; /* 0x00 default no error checking */ unsigned char number_of_blocks[3]; /* not used in select */ unsigned char res2; unsigned char block_length[3]; /* 0 variable or # of fixed bytes */ } TAPE_MODE_SELECT_HD;#ifdef GHS#pragma pack()#endif#if _SDS#pragma maxalign()#endif/*---------------------------------------------------------------------*//* Mode Header used for Sequential access devices (Tape Drives) *//*---------------------------------------------------------------------*//*---------------------------------------------------------------------*//* modeheader used for vendor specific floppy type for teac FC1 *//*---------------------------------------------------------------------*/struct header_descriptor{ unsigned char reserved0; unsigned char medium_type; unsigned char reserved1; unsigned char blk_descriptor_len; unsigned char density_code; unsigned char msb_blocks; /* # of logical blocks 0x00 - all */ unsigned char midsb_blocks; unsigned char lsb_blocks; unsigned char reservedr2; unsigned char msb_blklen; /* block lenght for medium */ unsigned char midsb_blklen; unsigned char lsb_blklen;};/*---------------------------------------------------------------------*//* Read-Write Error Recovery Page *//*---------------------------------------------------------------------*/#define RW_ERROR_RECOVERY_PC 0x01#define RW_ERROR_RECOVERY_DLEN 12typedef struct { unsigned char ps:1, /* Page saveable mode sense only */ :1, /* Reserved */ page_code:6; /* Page code (0x01) */ unsigned char page_length; /* Additional page length */ unsigned char awre:1, /* Auto write reallocation enable */ arre:1, /* Auto read reallocation enable */ tb:1, /* Transfer Block (on error) */ rc:1, /* Read continuous */ err:1, /* Enable early recovery */ per:1, /* Post error (of recovered err) */ dte:1, /* disable transfer on error */ dcr:1; /* disable correction */ unsigned char retry_count; /* times to retry operation */ unsigned char correction_span; /* max size of correction area */ unsigned char head_offset; /* head position after err rec */ unsigned char data_strobe_offset; /* data strobe position after err*/ unsigned char :8; /* Reserved */ unsigned char write_retry_count;/* Max retries to write data */ unsigned char :8; /* Reserved */ unsigned short recovery_time; /* milliseconds max recovery time */ } RW_ERROR_RECOVERY_STRUCT;/*---------------------------------------------------------------------*//* Disconnect-Reconnect page *//*---------------------------------------------------------------------*/#define DISCONNECT_RECONNECT_PC 0x02#define DISCONNECT_RECONNECT_DLEN 16typedef struct { unsigned char ps:1, /* Page saveable mode sense only */ :1, /* Reserved */ page_code:6; /* Page code (0x02) */ unsigned char page_length; /* Additional page length */ unsigned char buf_full_ratio; /* min in buf before reselection */ /* on read operation */ unsigned char buf_empty_ratio; /* min in buf before reselection */ /* on write operation */ unsigned short bus_inactive_lim;/* disconnect after no activity */ unsigned short disconnect_time_lim;/* min time to wait to reselect */ /* after disconnect */ unsigned short connect_time_lim;/* max time bus may be used */ /* before target must disconnect */ unsigned short max_burst_size; /* max data transfered by target */ /* before target must disconnect */ unsigned char :6, /* Reserved */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -