diff --git a/drivers/usbdev/usbdev_scsi.h b/drivers/usbdev/usbdev_scsi.h index e35d59781802e517d3962e3e829a712e1a0f01c4..c4e4a766e601ded6d8d155c81130ab924a8b8f26 100644 --- a/drivers/usbdev/usbdev_scsi.h +++ b/drivers/usbdev/usbdev_scsi.h @@ -518,27 +518,38 @@ #define SCSICMD_MODESENSE_PGCODEMASK 0x3f /* Bits 0-5: Page code */ #define SCSICMD_MODESENSE6_PCDEFAULT 0x80 /* Default values */ - -#define SCSIRESP_MODESENSE_PGCCODE_VENDOR 0x00 /* Vendor-specific */ -#define SCSIRESP_MODESENSE_PGCCODE_RWERROR 0x01 /* Read/Write error recovery mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_RECONNECT 0x02 /* Disconnect-reconnect mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_FORMATDEV 0x03 /* Format device mode page (obsolete) */ -#define SCSIRESP_MODESENSE_PGCCODE_RIGID 0x04 /* Rigid disk geometry mode page (obsolete) */ -#define SCSIRESP_MODESENSE_PGCCODE_FLEXIBLE 0x05 /* Flexible disk geometry mode page (obsolete) */ -#define SCSIRESP_MODESENSE_PGCCODE_VERIFY 0x07 /* Verify error recovery mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_CACHING 0x08 /* Caching mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_CONTROL 0x0a /* Control mode page (0x0a/0x00) */ -#define SCSIRESP_MODESENSE_PGCCODE_CONTROLEXT 0x0a /* Control extension mode page (0x0a/0x01) */ -#define SCSIRESP_MODESENSE_PGCCODE_MEDIUMTYPES 0x0b /* Medum types supported mode page (obsolete) */ -#define SCSIRESP_MODESENSE_PGCCODE_NP 0x0c /* Notch and partition mode page (obsolete) */ -#define SCSIRESP_MODESENSE_PGCCODE_XOR 0x10 /* XOR control mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_ES 0x14 /* Enclosure services mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_PSLUN 0x18 /* Protocol-specific LUN mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_PSPORT 0x19 /* Protocol-specific port mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_POWER 0x1a /* Power condition mode page */ -#define SCSIRESP_MODESENSE_PGCCODE_IE 0x1c /* Informational exceptions control mode page (0x1c/0x00) */ -#define SCSIRESP_MODESENSE_PGCCODE_BC 0x1c /* Background control mode page (0x1c/0x01) */ -#define SCSIRESP_MODESENSE_PGCCODE_RETURNALL 0x3f /* Return all mode pages */ + /* Direct-access device page codes */ +#define SCSIRESP_MODESENSE_PGCCODE_VENDOR 0x00 /* Vendor-specific */ +#define SCSIRESP_MODESENSE_PGCCODE_RWERROR 0x01 /* Read/Write error recovery mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_RECONNECT 0x02 /* Disconnect-reconnect mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_FORMATDEV 0x03 /* Format device mode page (obsolete) */ +#define SCSIRESP_MODESENSE_PGCCODE_RIGID 0x04 /* Rigid disk geometry mode page (obsolete) */ +#define SCSIRESP_MODESENSE_PGCCODE_FLEXIBLE 0x05 /* Flexible disk geometry mode page (obsolete) */ +#define SCSIRESP_MODESENSE_PGCCODE_VERIFY 0x07 /* Verify error recovery mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_CACHING 0x08 /* Caching mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_CONTROL 0x0a /* Control mode page (0x0a/0x00) */ +#define SCSIRESP_MODESENSE_PGCCODE_CONTROLEXT 0x0a /* Control extension mode page (0x0a/0x01) */ +#define SCSIRESP_MODESENSE_PGCCODE_MEDIUMTYPES 0x0b /* Medum types supported mode page (obsolete) */ +#define SCSIRESP_MODESENSE_PGCCODE_NP 0x0c /* Notch and partition mode page (obsolete) */ +#define SCSIRESP_MODESENSE_PGCCODE_XOR 0x10 /* XOR control mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_ES 0x14 /* Enclosure services mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_PSLUN 0x18 /* Protocol-specific LUN mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_PSPORT 0x19 /* Protocol-specific port mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_POWER 0x1a /* Power condition mode page */ +#define SCSIRESP_MODESENSE_PGCCODE_IE 0x1c /* Informational exceptions control mode page (0x1c/0x00) */ +#define SCSIRESP_MODESENSE_PGCCODE_BC 0x1c /* Background control mode page (0x1c/0x01) */ +#define SCSIRESP_MODESENSE_PGCCODE_RETURNALL 0x3f /* Return all mode pages */ + /* Direct-access caching mode page */ +#define SCSIRESP_CACHINGMODEPG_PS 0x80 /* Byte 0, Bit 7: PS */ +#define SCSIRESP_CACHINGMODEPG_SPF 0x60 /* Byte 0, Bit 6: SPF */ +#define SCSIRESP_CACHINGMODEPG_IC 0x80 /* Byte 2, Bit 7: IC */ +#define SCSIRESP_CACHINGMODEPG_ABPF 0x40 /* Byte 2, Bit 6: ABPF */ +#define SCSIRESP_CACHINGMODEPG_CAP 0x20 /* Byte 2, Bit 5: CAP */ +#define SCSIRESP_CACHINGMODEPG_DISC 0x10 /* Byte 2, Bit 4: DISC */ +#define SCSIRESP_CACHINGMODEPG_SIZE 0x08 /* Byte 2, Bit 3: SIZE */ +#define SCSIRESP_CACHINGMODEPG_WCE 0x04 /* Byte 2, Bit 2: Write cache enable (WCE) */ +#define SCSIRESP_CACHINGMODEPG_MF 0x02 /* Byte 2, Bit 1: MF */ +#define SCSIRESP_CACHINGMODEPG_RCD 0x01 /* Byte 2, Bit 0: Read cache disable (RCD) */ #define SCSIRESP_MODEPARMHDR_DAPARM_WP 0x80 /* Bit 7: WP (Direct-access block devices only) */ #define SCSIRESP_MODEPARMHDR_DAPARM_DBPFUA 0x10 /* Bit 4: DBOFUA (Direct-access block devices only) */ @@ -547,6 +558,11 @@ #define SCSIRESP_PAGEFMT_SPF 0x40 /* Bit 6: SPF */ #define SCSIRESP_PAGEFMT_PGCODEMASK 0x3f /* Bits 0-5: Page code */ +/* Prevent / Allow Medium Removal */ + +#define SCSICMD_PREVENTMEDIUMREMOVAL_TRANSPORT 0x01 /* Removal prohibited from data transport */ +#define SCSICMD_PREVENTMEDIUMREMOVAL_MCHANGER 0x02 /* Removal prohibited from medium changer */ + /* Read 6 */ #define SCSICMD_READ6_MSLBAMASK 0x1f @@ -568,31 +584,43 @@ /* Read 10 */ #define SCSICMD_READ10FLAGS_RDPROTECTMASK 0xe0 -#define SCSICMD_READ10FLAGS_DPO 0x10 +#define SCSICMD_READ10FLAGS_DPO 0x10 /* Disable Page Out */ #define SCSICMD_READ10FLAGS_FUA 0x08 #define SCSICMD_READ10FLAGS_FUANV 0x02 /* Write 10 */ #define SCSICMD_WRITE10FLAGS_WRPROTECTMASK 0xe0 -#define SCSICMD_WRITE10FLAGS_DPO 0x10 +#define SCSICMD_WRITE10FLAGS_DPO 0x10 /* Disable Page Out */ #define SCSICMD_WRITE10FLAGS_FUA 0x08 #define SCSICMD_WRITE10FLAGS_FUANV 0x02 +/* Verify 10 */ + +#define SCSICMD_VERIFY10_VRPROTECTMASK 0xe0 /* Byte 1: Bits 5-7: VRPROTECT */ +#define SCSICMD_VERIFY10_DPO 0x10 /* Byte 1: Bit 4: Disable Page Out (DPO) */ +#define SCSICMD_VERIFY10_BYTCHK 0x02 /* Byte 1: Bit 2: BytChk */ + /* Read 12 */ #define SCSICMD_READ12FLAGS_RDPROTECTMASK 0xe0 -#define SCSICMD_READ13FLAGS_DPO 0x10 +#define SCSICMD_READ13FLAGS_DPO 0x10 /* Disable Page Out */ #define SCSICMD_READ14FLAGS_FUA 0x08 #define SCSICMD_READ15FLAGS_FUANV 0x02 /* Write 12 */ #define SCSICMD_WRITE12FLAGS_WRPROTECTMASK 0xe0 -#define SCSICMD_WRITE12FLAGS_DPO 0x10 +#define SCSICMD_WRITE12FLAGS_DPO 0x10 /* Disable Page Out */ #define SCSICMD_WRITE12FLAGS_FUA 0x08 #define SCSICMD_WRITE12FLAGS_FUANV 0x02 +/* Verify 12 */ + +#define SCSICMD_VERIFY12_VRPROTECTMASK 0xe0 /* Byte 1: Bits 5-7: VRPROTECT */ +#define SCSICMD_VERIFY12_DPO 0x10 /* Byte 1: Bit 4: Disable Page Out (DPO) */ +#define SCSICMD_VERIFY12_BYTCHK 0x02 /* Byte 1: Bit 2: BytChk */ + /**************************************************************************** * Public Types ****************************************************************************/ @@ -723,28 +751,83 @@ struct scsiresp_subpageformat_s ubyte parms[1]; /* 4-n: Mode parameters */ }; +struct scsiresp_cachingmodepage_s +{ + ubyte pgcode; /* 0: Bit 7: PS; Bit 6: SPF, Bits 0-5: page code == 8 */ + ubyte len; /* 1: Page length (18) */ + ubyte flags1; /* 2: See SCSIRESP_CACHINGMODEPG_* definitions */ + ubyte priority; /* 3: Bits 4-7: Demand read retention priority; Bits 0-3: Write retention priority */ + ubyte dpflen[2]; /* 4-5: Disable prefetch transfer length */ + ubyte minpf[2]; /* 6-7: Minimum pre-fetch */ + ubyte maxpf[2]; /* 8-9: Maximum pre-fetch */ + ubyte maxpfc[2]; /* 10-11: Maximum pref-fetch ceiling */ + ubyte flags2; /* 12: See SCSIRESP_CACHINGMODEPG_* definitions */ + ubyte nsegments; /* 13: Number of cache segments */ + ubyte segsize[2]; /* 14-15: Cache segment size */ + ubyte reserved; /* 16: Reserved */ + ubyte obsolete[3]; /* 17-19: Obsolete */ +}; + /* Format structures for selected SCSI block commands */ struct scsicmd_read6_s { - ubyte opcode; /* 0x08 */ - ubyte mslba; /* Bits 5-7: reserved; Bits 0-6: MS Logical Block Address (LBA) */ - ubyte lslba[2]; /* LS Logical Block Address (LBA) */ - ubyte xferlen; /* Transfer length */ - ubyte control; /* Control */ + ubyte opcode; /* 0: 0x08 */ + ubyte mslba; /* 1: Bits 5-7: reserved; Bits 0-6: MS Logical Block Address (LBA) */ + ubyte lslba[2]; /* 2-3: LS Logical Block Address (LBA) */ + ubyte xferlen; /* 4: Transfer length */ + ubyte control; /* 5: Control */ }; #define SCSICMD_READ6_SIZEOF 6 struct scsicmd_write6_s { - ubyte opcode; /* 0x0a */ - ubyte mslba; /* Bits 5-7: reserved; Bits 0-6: MS Logical Block Address (LBA) */ - ubyte lslba[2]; /* LS Logical Block Address (LBA) */ - ubyte xferlen; /* Transfer length */ - ubyte control; /* Control */ + ubyte opcode; /* 0: 0x0a */ + ubyte mslba; /* 1: Bits 5-7: reserved; Bits 0-6: MS Logical Block Address (LBA) */ + ubyte lslba[2]; /* 2-3: LS Logical Block Address (LBA) */ + ubyte xferlen; /* 4: Transfer length */ + ubyte control; /* 5: Control */ }; #define SCSICMD_WRITE6_SIZEOF 6 +struct scsicmd_startstopunit_s +{ + ubyte opcode; /* 0: 0x1b */ + ubyte immed; /* 1: Bits 2-7: Reserved, Bit 0: Immed */ + ubyte reserved; /* 2: reserved */ + ubyte pcm; /* 3: Bits 4-7: Reserved, Bits 0-3: Power condition modifier */ + ubyte pc; /* 4: Bits 4-7: Power condition, Bit 2: NO_FLUSH, Bit 1: LOEJ, Bit 0: START */ + ubyte control; /* 5: Control */ +}; +#define SCSICMD_STARTSTOPUNIT_SIZEOF 6 + +struct scsicmd_preventmediumremoval_s +{ + ubyte opcode; /* 0: 0x1e */ + ubyte reserved[3]: /* 1-3: Reserved */ + ubyte prevent; /* 4: Bits 2-7: Reserved, Bits 0:1: prevent */ + ubyte control; /* 5: Control */ +}; +#define SCSICMD_PREVENTMEDIUMREMOVAL_SIZEOF 6 + +struct scsicmd_readcapacity10_s +{ + ubyte opcode; /* 0: 0x25 */ + ubyte reserved; /* 1: Bits 1-7: Reserved, Bit 0: Obsolete */ + ubyte lba[4]; /* 2-5: Logical block address (LBA) */ + ubyte reserved[2; /* 6-7: Reserved */ + ubyte pmi; /* 8: Bits 1-7 Reserved; Bit 0: PMI */ + ubyte control; /* 9: Control */ +}; +#define SCSICMD_READCAPACITY10_SIZEOF 10 + +struct scsiresp_readcapacity10_s +{ + ubyte lba[4]; /* 0-3: Returned logical block address (LBA) */ + ubyte blklen[4]; /* 4-7: Logical block length (in bytes) */ +}; +#define SCSIRESP_READCAPACITY10_SIZEOF 8 + struct scsicmd_read10_s { ubyte opcode; /* 0x28 */ @@ -767,6 +850,28 @@ struct scsicmd_write10_s }; #define SCSICMD_WRITE10_SIZEOF 10 +struct scsicmd_verify10_s +{ + ubyte opcode; /* 0: 0x2f */ + ubyte flags; /* 1: See SCSICMD_VERIFY10_* definitions */ + ubyte lba[4]; /* 2-5: Logical block address (LBA) */ + ubyte groupno; /* 6: Bit 7: restricted; Bits 5-6: Reserved, Bits 0-4: Group number */ + ubyte len[2]; /* 7-8: Verification length (in blocks) */ + ubyte control; /* 9: Control */ +}; +#define SCSICMD_VERIFY10_SIZEOF 10 + +struct scsicmd_synchronizecache10_s +{ + ubyte opcode; /* 0: 0x35 */ + ubyte flags; /* 1: See SCSICMD_SYNCHRONIZECACHE10_* definitions */ + ubyte lba[4]; /* 2-5: Logical block address (LBA) */ + ubyte groupno; /* 6: Bit 7: restricted; Bits 5-6: Reserved, Bits 0-4: Group number */ + ubyte len[2]; /* 7-8: Number of logical blocks */ + ubyte control; /* 9: Control */ +}; +#define SCSICMD_SYNCHRONIZECACHE10_SIZEOF 10 + struct scsicmd_modeselect10_s { ubyte opcode; /* 0: 0x55 */ @@ -799,6 +904,17 @@ struct scsicmd_modesense10_s }; #define SCSICMD_MODESENSE10_SIZEOF 10 +struct scsicmd_readcapacity16_s +{ + ubyte opcode; /* 0: 0x9e */ + ubyte action; /* 1: Bits 5-7: Reserved, Bits 0-4: Service action */ + ubyte lba[8]; /* 2-9: Logical block address (LBA) */ + ubyte len[4]; /* 10-13: Allocation length */ + ubyte reserved; /* 14: Reserved */ + ubyte control; /* 15: Control */ +}; +#define SCSICMD_READCAPACITY16_SIZEOF 16 + struct scsicmd_read12_s { ubyte opcode; /* 0xa8 */ @@ -821,6 +937,17 @@ struct scsicmd_write12_s }; #define SCSICMD_WRITE12_SIZEOF 12 +struct scsicmd_verify12_s +{ + ubyte opcode; /* 0: 0xaf */ + ubyte flags; /* 1: See SCSICMD_VERIFY12_* definitions */ + ubyte lba[4]; /* 2-5: Logical block address (LBA) */ + ubyte len[4]; /* 6-9: Verification length */ + ubyte groupno; /* 10: Bit 7: restricted; Bits 5-6: Reserved, Bits 0-4: Group number */ + ubyte control; /* 11: Control */ +}; +#define SCSICMD_VERIFY12_SIZEOF 12 + /**************************************************************************** * Public Functions ****************************************************************************/