Author: axeld Date: 2010-04-22 15:44:24 +0200 (Thu, 22 Apr 2010) New Revision: 36415 Changeset: http://dev.haiku-os.org/changeset/36415/haiku Modified: haiku/trunk/headers/private/drivers/scsi_cmds.h Log: * Added opcode definitions for read/write-16 and the extended "read capacity 16" over service-action-in. * Minor cleanup. Modified: haiku/trunk/headers/private/drivers/scsi_cmds.h =================================================================== --- haiku/trunk/headers/private/drivers/scsi_cmds.h 2010-04-22 13:42:13 UTC (rev 36414) +++ haiku/trunk/headers/private/drivers/scsi_cmds.h 2010-04-22 13:44:24 UTC (rev 36415) @@ -1,5 +1,5 @@ /* - * Copyright 2004-2007, Haiku, Inc. All RightsReserved. + * Copyright 2004-2010, Haiku, Inc. All RightsReserved. * Copyright 2002/03, Thomas Kurschel. All rights reserved. * * Distributed under the terms of the MIT License. @@ -7,159 +7,205 @@ #ifndef _SCSI_CMDS_H #define _SCSI_CMDS_H -// SCSI commands and their data structures and constants +//! SCSI commands and their data structures and constants + #include <lendian_bitfield.h> -// always keep in mind that SCSI is big-endian !!! +// Always keep in mind that SCSI is big-endian! #define SCSI_STD_TIMEOUT 10 // SCSI device status (as the result of a command) -#define SCSI_STATUS_GOOD (0 << 1) -#define SCSI_STATUS_CHECK_CONDITION (1 << 1) // error occured -#define SCSI_STATUS_CONDITION_MET (2 << 1) // "found" for SEARCH DATA and PREFETCH -#define SCSI_STATUS_BUSY (4 << 1) // try again later (??? == QUEUE_FULL ???) -#define SCSI_STATUS_INTERMEDIATE (8 << 1) // used by linked command only -#define SCSI_STATUS_INTERMEDIATE_COND_MET (10 << 1) // ditto -#define SCSI_STATUS_RESERVATION_CONFLICT (12 << 1) // only if RESERVE/RELEASE is used -#define SCSI_STATUS_COMMAND_TERMINATED (17 << 1) // aborted by TERMINATE I/O PROCESS -#define SCSI_STATUS_QUEUE_FULL (20 << 1) // queue full +#define SCSI_STATUS_GOOD (0 << 1) +#define SCSI_STATUS_CHECK_CONDITION (1 << 1) // error occured +#define SCSI_STATUS_CONDITION_MET (2 << 1) + // "found" for SEARCH DATA and PREFETCH +#define SCSI_STATUS_BUSY (4 << 1) + // try again later (??? == QUEUE_FULL ???) +#define SCSI_STATUS_INTERMEDIATE (8 << 1) + // used by linked command only +#define SCSI_STATUS_INTERMEDIATE_COND_MET (10 << 1) // ditto +#define SCSI_STATUS_RESERVATION_CONFLICT (12 << 1) + // only if RESERVE/RELEASE is used +#define SCSI_STATUS_COMMAND_TERMINATED (17 << 1) + // aborted by TERMINATE I/O PROCESS +#define SCSI_STATUS_QUEUE_FULL (20 << 1) // queue full #define SCSI_STATUS_MASK 0xfe // SCSI sense key -#define SCSIS_KEY_NO_SENSE 0 -#define SCSIS_KEY_RECOVERED_ERROR 1 -#define SCSIS_KEY_NOT_READY 2 // operator intervention may be required -#define SCSIS_KEY_MEDIUM_ERROR 3 // can be set if source could be hardware error -#define SCSIS_KEY_HARDWARE_ERROR 4 -#define SCSIS_KEY_ILLEGAL_REQUEST 5 // invalid command -#define SCSIS_KEY_UNIT_ATTENTION 6 // medium changed or target reset -#define SCSIS_KEY_DATA_PROTECT 7 // data access forbidden -#define SCSIS_KEY_BLANK_CHECK 8 // tried to read blank or to write non-blank medium -#define SCSIS_KEY_VENDOR_SPECIFIC 9 -#define SCSIS_KEY_COPY_ABORTED 10 // error in COPY or COMPARE command -#define SCSIS_KEY_ABORTED_COMMAND 11 // aborted by target, retry *may* help -#define SCSIS_KEY_EQUAL 12 // during SEARCH: data found -#define SCSIS_KEY_VOLUME_OVERFLOW 13 // tried to write buffered data beyond end of medium -#define SCSIS_KEY_MISCOMPARE 14 -#define SCSIS_KEY_RESERVED 15 +#define SCSIS_KEY_NO_SENSE 0 +#define SCSIS_KEY_RECOVERED_ERROR 1 +#define SCSIS_KEY_NOT_READY 2 + // operator intervention may be required +#define SCSIS_KEY_MEDIUM_ERROR 3 + // can be set if source could be hardware error +#define SCSIS_KEY_HARDWARE_ERROR 4 +#define SCSIS_KEY_ILLEGAL_REQUEST 5 // invalid command +#define SCSIS_KEY_UNIT_ATTENTION 6 + // medium changed or target reset +#define SCSIS_KEY_DATA_PROTECT 7 // data access forbidden +#define SCSIS_KEY_BLANK_CHECK 8 + // tried to read blank or to write non-blank medium +#define SCSIS_KEY_VENDOR_SPECIFIC 9 +#define SCSIS_KEY_COPY_ABORTED 10 + // error in COPY or COMPARE command +#define SCSIS_KEY_ABORTED_COMMAND 11 + // aborted by target, retry *may* help +#define SCSIS_KEY_EQUAL 12 // during SEARCH: data found +#define SCSIS_KEY_VOLUME_OVERFLOW 13 + // tried to write buffered data beyond end of medium +#define SCSIS_KEY_MISCOMPARE 14 +#define SCSIS_KEY_RESERVED 15 // SCSI ASC and ASCQ data - (ASC << 8) | ASCQ // all codes with bit 7 of ASC or ASCQ set are vendor-specific -#define SCSIS_ASC_NO_SENSE 0x0000 -#define SCSIS_ASC_IO_PROC_TERMINATED 0x0006 -#define SCSIS_ASC_AUDIO_PLAYING 0x0011 -#define SCSIS_ASC_AUDIO_PAUSED 0x0012 -#define SCSIS_ASC_AUDIO_COMPLETED 0x0013 -#define SCSIS_ASC_AUDIO_ERROR 0x0014 // playing has stopped due to error -#define SCSIS_ASC_AUDIO_NO_STATUS 0x0015 -#define SCSIS_ASC_NO_INDEX 0x0100 // no index/sector signal -#define SCSIS_ASC_NO_SEEK_CMP 0x0200 // ??? -#define SCSIS_ASC_WRITE_FAULT 0x0300 -#define SCSIS_ASC_LUN_NOT_READY 0x0400 // LUN not ready, cause not reportable -#define SCSIS_ASC_LUN_BECOMING_READY 0x0401 // LUN in progress of becoming ready -#define SCSIS_ASC_LUN_NEED_INIT 0x0402 // LUN need initializing command -#define SCSIS_ASC_LUN_NEED_MANUAL_HELP 0x0403 // LUN needs manual intervention -#define SCSIS_ASC_LUN_FORMATTING 0x0404 // LUN format in progress -#define SCSIS_ASC_LUN_SEL_FAILED 0x0500 // LUN doesn't respond to selection -#define SCSIS_ASC_LUN_COM_FAILURE 0x0800 // LUN communication failure -#define SCSIS_ASC_LUN_TIMEOUT 0x0801 // LUN communication time-out -#define SCSIS_ASC_LUN_COM_PARITY 0x0802 // LUN communication parity failure -#define SCSIS_ASC_LUN_COM_CRC 0x0803 // LUN communication CRC failure (SCSI-3) -#define SCSIS_ASC_WRITE_ERR_AUTOREALLOC 0x0c01 // recovered by auto-reallocation +#define SCSIS_ASC_NO_SENSE 0x0000 +#define SCSIS_ASC_IO_PROC_TERMINATED 0x0006 +#define SCSIS_ASC_AUDIO_PLAYING 0x0011 +#define SCSIS_ASC_AUDIO_PAUSED 0x0012 +#define SCSIS_ASC_AUDIO_COMPLETED 0x0013 +#define SCSIS_ASC_AUDIO_ERROR 0x0014 + // playing has stopped due to error +#define SCSIS_ASC_AUDIO_NO_STATUS 0x0015 +#define SCSIS_ASC_NO_INDEX 0x0100 // no index/sector signal +#define SCSIS_ASC_NO_SEEK_CMP 0x0200 // ??? +#define SCSIS_ASC_WRITE_FAULT 0x0300 +#define SCSIS_ASC_LUN_NOT_READY 0x0400 + // LUN not ready, cause not reportable +#define SCSIS_ASC_LUN_BECOMING_READY 0x0401 + // LUN in progress of becoming ready +#define SCSIS_ASC_LUN_NEED_INIT 0x0402 + // LUN need initializing command +#define SCSIS_ASC_LUN_NEED_MANUAL_HELP 0x0403 + // LUN needs manual intervention +#define SCSIS_ASC_LUN_FORMATTING 0x0404 + // LUN format in progress +#define SCSIS_ASC_LUN_SEL_FAILED 0x0500 + // LUN doesn't respond to selection +#define SCSIS_ASC_LUN_COM_FAILURE 0x0800 // LUN communication failure +#define SCSIS_ASC_LUN_TIMEOUT 0x0801 + // LUN communication time-out +#define SCSIS_ASC_LUN_COM_PARITY 0x0802 + // LUN communication parity failure +#define SCSIS_ASC_LUN_COM_CRC 0x0803 + // LUN communication CRC failure (SCSI-3) +#define SCSIS_ASC_WRITE_ERR_AUTOREALLOC 0x0c01 + // recovered by auto-reallocation #define SCSIS_ASC_WRITE_ERR_AUTOREALLOC_FAILED 0x0c02 -#define SCSIS_ASC_ECC_ERROR 0x1000 -#define SCSIS_ASC_UNREC_READ_ERR 0x1100 // unrecovered read error -#define SCSIS_ASC_READ_RETRIES_EXH 0x1101 // read retries exhausted -#define SCSIS_ASC_UNREC_READ_ERR_AUTOREALLOC_FAILED 0x1104 // above + auto-reallocate failed -#define SCSIS_ASC_RECORD_NOT_FOUND 0x1401 -#define SCSIS_ASC_RANDOM_POS_ERROR 0x1500 // random positioning error -#define SCSIS_ASC_POSITIONING_ERR 0x1501 // mechanical positioning error -#define SCSIS_ASC_POS_ERR_ON_READ 0x1502 // positioning error detected by reading -#define SCSIS_ASC_DATA_RECOV_NO_ERR_CORR 0x1700 // recovered with no error correction applied -#define SCSIS_ASC_DATA_RECOV_WITH_RETRIES 0x1701 -#define SCSIS_ASC_DATA_RECOV_POS_HEAD_OFS 0x1702 // ?recovered with positive head offset -#define SCSIS_ASC_DATA_RECOV_NEG_HEAD_OFS 0x1703 // ?recovered with negative head offset -#define SCSIS_ASC_DATA_RECOV_WITH_RETRIES_CIRC 0x1704 // recovered with retries/CIRC -#define SCSIS_ASC_DATA_RECOV_PREV_SECT_ID 0x1705 // recovered using previous sector ID +#define SCSIS_ASC_ECC_ERROR 0x1000 +#define SCSIS_ASC_UNREC_READ_ERR 0x1100 // unrecovered read error +#define SCSIS_ASC_READ_RETRIES_EXH 0x1101 // read retries exhausted +#define SCSIS_ASC_UNREC_READ_ERR_AUTOREALLOC_FAILED 0x1104 + // above + auto-reallocate failed +#define SCSIS_ASC_RECORD_NOT_FOUND 0x1401 +#define SCSIS_ASC_RANDOM_POS_ERROR 0x1500 // random positioning error +#define SCSIS_ASC_POSITIONING_ERR 0x1501 + // mechanical positioning error +#define SCSIS_ASC_POS_ERR_ON_READ 0x1502 + // positioning error detected by reading +#define SCSIS_ASC_DATA_RECOV_NO_ERR_CORR 0x1700 + // recovered with no error correction applied +#define SCSIS_ASC_DATA_RECOV_WITH_RETRIES 0x1701 +#define SCSIS_ASC_DATA_RECOV_POS_HEAD_OFS 0x1702 + // ?recovered with positive head offset +#define SCSIS_ASC_DATA_RECOV_NEG_HEAD_OFS 0x1703 + // ?recovered with negative head offset +#define SCSIS_ASC_DATA_RECOV_WITH_RETRIES_CIRC 0x1704 + // recovered with retries/CIRC +#define SCSIS_ASC_DATA_RECOV_PREV_SECT_ID 0x1705 + // recovered using previous sector ID #define SCSIS_ASC_DATA_RECOV_NO_ECC_AUTOREALLOC 0x1706 #define SCSIS_ASC_DATA_RECOV_NO_ECC_REASSIGN 0x1707 // reassign recommended -#define SCSIS_ASC_DATA_RECOV_NO_ECC_REWRITE 0x1708 // rewrite recommended -#define SCSIS_ASC_DATA_RECOV_WITH_CORR 0x1800 // recovered using error correction -#define SCSIS_ASC_DATA_RECOV_WITH_CORR_RETRIES 0x1801 // used error correction and retries -#define SCSIS_ASC_DATA_RECOV_AUTOREALLOC 0x1802 -#define SCSIS_ASC_DATA_RECOV_CIRC 0x1803 // recovered using CIRC -#define SCSIS_ASC_DATA_RECOV_LEC 0x1804 // recovered using LEC -#define SCSIS_ASC_DATA_RECOV_REASSIGN 0x1805 // reassign recommended -#define SCSIS_ASC_DATA_RECOV_REWRITE 0x1806 // rewrite recommended -#define SCSIS_ASC_PARAM_LIST_LENGTH_ERR 0x1a00 // parameter list too short -#define SCSIS_ASC_ID_RECOV 0x1e00 // recoved ID with ECC -#define SCSIS_ASC_INV_OPCODE 0x2000 -#define SCSIS_ASC_LBA_OOR 0x2100 // LBA out of range -#define SCSIS_ASC_ILL_FUNCTION 0x2200 // better use 0x2000/0x2400/0x2600 instead -#define SCSIS_ASC_INV_CDB_FIELD 0x2400 -#define SCSIS_ASC_LUN_NOT_SUPPORTED 0x2500 -#define SCSIS_ASC_INV_PARAM_LIST_FIELD 0x2600 -#define SCSIS_ASC_PARAM_NOT_SUPPORTED 0x2601 -#define SCSIS_ASC_PARAM_VALUE_INV 0x2602 -#define SCSIS_ASC_WRITE_PROTECTED 0x2700 -#define SCSIS_ASC_MEDIUM_CHANGED 0x2800 -#define SCSIS_ASC_WAS_RESET 0x2900 // reset by power-on/bus reset/device reset -#define SCSIS_ASC_PARAMS_CHANGED 0x2a00 -#define SCSIS_ASC_MEDIUM_FORMAT_CORRUPTED 0x3100 -#define SCSIS_ASC_ROUNDED_PARAM 0x3700 // parameter got rounded -#define SCSIS_ASC_NO_MEDIUM 0x3a00 // medium not present -#define SCSIS_ASC_INTERNAL_FAILURE 0x4400 -#define SCSIS_ASC_SEL_FAILURE 0x4500 // select/reselect failure -#define SCSIS_ASC_UNSUCC_SOFT_RESET 0x4600 // unsuccessful soft reset -#define SCSIS_ASC_SCSI_PARITY_ERR 0x4700 // SCSI parity error -#define SCSIS_ASC_LOAD_EJECT_FAILED 0x5300 // media load or eject failed -#define SCSIS_ASC_REMOVAL_PREVENTED 0x5302 // medium removal prevented -#define SCSIS_ASC_REMOVAL_REQUESTED 0x5a01 // operator requests medium removal +#define SCSIS_ASC_DATA_RECOV_NO_ECC_REWRITE 0x1708 // rewrite recommended +#define SCSIS_ASC_DATA_RECOV_WITH_CORR 0x1800 + // recovered using error correction +#define SCSIS_ASC_DATA_RECOV_WITH_CORR_RETRIES 0x1801 + // used error correction and retries +#define SCSIS_ASC_DATA_RECOV_AUTOREALLOC 0x1802 +#define SCSIS_ASC_DATA_RECOV_CIRC 0x1803 // recovered using CIRC +#define SCSIS_ASC_DATA_RECOV_LEC 0x1804 // recovered using LEC +#define SCSIS_ASC_DATA_RECOV_REASSIGN 0x1805 // reassign recommended +#define SCSIS_ASC_DATA_RECOV_REWRITE 0x1806 // rewrite recommended +#define SCSIS_ASC_PARAM_LIST_LENGTH_ERR 0x1a00 // parameter list too short +#define SCSIS_ASC_ID_RECOV 0x1e00 // recoved ID with ECC +#define SCSIS_ASC_INV_OPCODE 0x2000 +#define SCSIS_ASC_LBA_OOR 0x2100 // LBA out of range +#define SCSIS_ASC_ILL_FUNCTION 0x2200 + // better use 0x2000/0x2400/0x2600 instead +#define SCSIS_ASC_INV_CDB_FIELD 0x2400 +#define SCSIS_ASC_LUN_NOT_SUPPORTED 0x2500 +#define SCSIS_ASC_INV_PARAM_LIST_FIELD 0x2600 +#define SCSIS_ASC_PARAM_NOT_SUPPORTED 0x2601 +#define SCSIS_ASC_PARAM_VALUE_INV 0x2602 +#define SCSIS_ASC_WRITE_PROTECTED 0x2700 +#define SCSIS_ASC_MEDIUM_CHANGED 0x2800 +#define SCSIS_ASC_WAS_RESET 0x2900 + // reset by power-on/bus reset/device reset +#define SCSIS_ASC_PARAMS_CHANGED 0x2a00 +#define SCSIS_ASC_MEDIUM_FORMAT_CORRUPTED 0x3100 +#define SCSIS_ASC_ROUNDED_PARAM 0x3700 // parameter got rounded +#define SCSIS_ASC_NO_MEDIUM 0x3a00 // medium not present +#define SCSIS_ASC_INTERNAL_FAILURE 0x4400 +#define SCSIS_ASC_SEL_FAILURE 0x4500 // select/reselect failure +#define SCSIS_ASC_UNSUCC_SOFT_RESET 0x4600 // unsuccessful soft reset +#define SCSIS_ASC_SCSI_PARITY_ERR 0x4700 // SCSI parity error +#define SCSIS_ASC_LOAD_EJECT_FAILED 0x5300 + // media load or eject failed +#define SCSIS_ASC_REMOVAL_PREVENTED 0x5302 // medium removal prevented +#define SCSIS_ASC_REMOVAL_REQUESTED 0x5a01 + // operator requests medium removal // some scsi op-codes -#define SCSI_OP_TEST_UNIT_READY 0x00 -#define SCSI_OP_REQUEST_SENSE 0x03 -#define SCSI_OP_FORMAT 0x04 -#define SCSI_OP_READ_6 0x08 -#define SCSI_OP_WRITE_6 0x0a -#define SCSI_OP_INQUIRY 0x12 -#define SCSI_OP_MODE_SELECT_6 0x15 -#define SCSI_OP_RESERVE 0x16 -#define SCSI_OP_RELEASE 0x17 -#define SCSI_OP_MODE_SENSE_6 0x1a -#define SCSI_OP_START_STOP 0x1b -#define SCSI_OP_RECEIVE_DIAGNOSTIC 0x1c -#define SCSI_OP_SEND_DIAGNOSTIC 0x1d -#define SCSI_OP_PREVENT_ALLOW 0x1e -#define SCSI_OP_READ_CAPACITY 0x25 -#define SCSI_OP_READ_10 0x28 -#define SCSI_OP_WRITE_10 0x2a -#define SCSI_OP_POSITION_TO_ELEMENT 0x2b -#define SCSI_OP_VERIFY 0x2f -#define SCSI_OP_SYNCHRONIZE_CACHE 0x35 -#define SCSI_OP_WRITE_BUFFER 0x3b -#define SCSI_OP_READ_BUFFER 0x3c -#define SCSI_OP_CHANGE_DEFINITION 0x40 -#define SCSI_OP_READ_SUB_CHANNEL 0x42 -#define SCSI_OP_READ_TOC 0x43 -#define SCSI_OP_PLAY_MSF 0x47 -#define SCSI_OP_PLAY_AUDIO_TRACK_INDEX 0x48 // obsolete, spec missing -#define SCSI_OP_PAUSE_RESUME 0x4b -#define SCSI_OP_STOP_PLAY 0x4e -#define SCSI_OP_MODE_SELECT_10 0x55 -#define SCSI_OP_MODE_SENSE_10 0x5A -#define SCSI_OP_MOVE_MEDIUM 0xa5 -#define SCSI_OP_READ_12 0xa8 -#define SCSI_OP_WRITE_12 0xaa -#define SCSI_OP_READ_ELEMENT_STATUS 0xb8 -#define SCSI_OP_SCAN 0xba -#define SCSI_OP_READ_CD 0xbe +#define SCSI_OP_TEST_UNIT_READY 0x00 +#define SCSI_OP_REQUEST_SENSE 0x03 +#define SCSI_OP_FORMAT 0x04 +#define SCSI_OP_READ_6 0x08 +#define SCSI_OP_WRITE_6 0x0a +#define SCSI_OP_INQUIRY 0x12 +#define SCSI_OP_MODE_SELECT_6 0x15 +#define SCSI_OP_RESERVE 0x16 +#define SCSI_OP_RELEASE 0x17 +#define SCSI_OP_MODE_SENSE_6 0x1a +#define SCSI_OP_START_STOP 0x1b +#define SCSI_OP_RECEIVE_DIAGNOSTIC 0x1c +#define SCSI_OP_SEND_DIAGNOSTIC 0x1d +#define SCSI_OP_PREVENT_ALLOW 0x1e +#define SCSI_OP_READ_CAPACITY 0x25 +#define SCSI_OP_READ_10 0x28 +#define SCSI_OP_WRITE_10 0x2a +#define SCSI_OP_POSITION_TO_ELEMENT 0x2b +#define SCSI_OP_VERIFY 0x2f +#define SCSI_OP_SYNCHRONIZE_CACHE 0x35 +#define SCSI_OP_WRITE_BUFFER 0x3b +#define SCSI_OP_READ_BUFFER 0x3c +#define SCSI_OP_CHANGE_DEFINITION 0x40 +#define SCSI_OP_READ_SUB_CHANNEL 0x42 +#define SCSI_OP_READ_TOC 0x43 +#define SCSI_OP_PLAY_MSF 0x47 +#define SCSI_OP_PLAY_AUDIO_TRACK_INDEX 0x48 // obsolete, spec missing +#define SCSI_OP_PAUSE_RESUME 0x4b +#define SCSI_OP_STOP_PLAY 0x4e +#define SCSI_OP_MODE_SELECT_10 0x55 +#define SCSI_OP_MODE_SENSE_10 0x5A +#define SCSI_OP_READ_16 0x88 +#define SCSI_OP_WRITE_16 0x8a +#define SCSI_OP_SERVICE_ACTION_IN 0x9e +#define SCSI_OP_SERVICE_ACTION_OUT 0x9f +#define SCSI_OP_MOVE_MEDIUM 0xa5 +#define SCSI_OP_READ_12 0xa8 +#define SCSI_OP_WRITE_12 0xaa +#define SCSI_OP_READ_ELEMENT_STATUS 0xb8 +#define SCSI_OP_SCAN 0xba +#define SCSI_OP_READ_CD 0xbe +// Service-Action-In defines +#define SCSI_SAI_READ_CAPACITY_16 0x10 + + // INQUIRY typedef struct scsi_cmd_inquiry { @@ -193,7 +239,7 @@ response_data_format : 4, // 2 = SCSI/2 compliant _res3_4 : 2, term_iop : 1, // 1 = supports TERMINATE I/O PROCESS - async_enc : 1 // processor devices only : + async_enc : 1 // processor devices only : // Asynchronous Event Notification Capable ); uint8 additional_length; // total (whished) length = this + 4 @@ -370,19 +416,19 @@ LBITFIELD8_5( sense_key : 4, res2_4 : 1, - ILI : 1, // incorrect length indicator - req. block + ILI : 1, // incorrect length indicator - req. block // length doesn't match physical block length EOM : 1, // serial devices only Filemark : 1 // optional for random access ); - + uint8 highest_inf; // device-type or command specific uint8 high_inf; // device-type 0, 4, 5, 7: block address uint8 mid_inf; // device-type 1, 2, 3: req length - act. length uint8 low_inf; // (and others for sequential dev. and COPY cmds - + uint8 add_sense_length; // total length = this + 7 - + uint8 highest_cmd_inf; uint8 high_cmd_inf; uint8 mid_cmd_inf; @@ -390,7 +436,7 @@ uint8 asc; uint8 ascq; // this can be zero if unsupported uint8 unit_code; // != 0 to specify internal device unit - + union { struct { LBITFIELD8_2( @@ -400,7 +446,7 @@ uint8 mid_key_spec; uint8 low_key_spec; } raw; - + // ILLEGAL REQUEST struct { LBITFIELD8_5( @@ -418,22 +464,22 @@ struct { LBITFIELD8_2( res15_0 : 7, - SKSV : 1 + SKSV : 1 ); uint8 high_retry_cnt; uint8 low_retry_cnt; } acc_error; - + // format progress (if sense key = NOT READY) struct { LBITFIELD8_2( res15_0 : 7, - SKSV : 1 + SKSV : 1 ); uint16 progress; // 0 = start, 0xffff = almost finished } format_progress; } sense_key_spec; - + // starting with offset 18 there are additional sense byte } _PACKED scsi_sense; @@ -625,13 +671,13 @@ UAAENP : 1, // unit attention AEN permission; true = send AEN, // false = generate UA condition (for everything but init.) RAENP : 1, // ready AEN permission; true = send async event notification - // (AEN) instead of generating an Unit Attention (UA) Condition + // (AEN) instead of generating an Unit Attention (UA) Condition // after initialization res4_3 : 4, EECA : 1 // enable Extended Contingent Allegiance ); uint8 res5; - uint8 high_AEN_holdoff; // ready AEN hold off period - delay in ms between + uint8 high_AEN_holdoff; // ready AEN hold off period - delay in ms between uint8 low_AEN_holdoff; // initialization and AEN } scsi_modepage_control; @@ -897,7 +943,7 @@ } _PACKED scsi_cmd_pause_resume; -// SCAN +// SCAN typedef struct scsi_cmd_scan { uint8 opcode; @@ -947,7 +993,7 @@ _res9_0 : 1, error_field : 2, edc_ecc : 1, // include EDC/ECC; includes 8 byte padding for Mode 1 format - user_data : 1, // if 1, include user data + user_data : 1, // if 1, include user data // (mode select block size is ignored) header_code : 2, sync : 1 // if 1, include sync field from sector @@ -962,7 +1008,7 @@ // possible values for header_code enum scsi_read_cd_header_code { scsi_read_cd_header_none = 0, - scsi_read_cd_header_hdr_only = 1, + scsi_read_cd_header_hdr_only = 1, scsi_read_cd_header_sub_header_only = 2, scsi_read_cd_header_all_headers = 3, }; @@ -994,9 +1040,10 @@ lun : 3 ); scsi_cd_lba lba; - uint8 _res2; + uint8 _res2; uint16 block_count; // big endian uint8 control; } _PACKED scsi_cmd_sync_cache; + #endif /* _SCSI_CMDS_H */