mirror of
https://gitea.osmocom.org/sim-card/simtrace2.git
synced 2026-03-17 21:58:33 +03:00
Renamed main folder to firmware
This commit is contained in:
678
firmware/atmel_softpack_libraries/usb/include/SBC.h
Normal file
678
firmware/atmel_softpack_libraries/usb/include/SBC.h
Normal file
@@ -0,0 +1,678 @@
|
||||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* \section Purpose
|
||||
*
|
||||
* SCSI definitions.
|
||||
*
|
||||
* \section Usage
|
||||
*
|
||||
* -# After command block received, Access and decode the SCSI command block
|
||||
* with SBCCommand structure.
|
||||
*/
|
||||
|
||||
#ifndef SBC_H
|
||||
#define SBC_H
|
||||
|
||||
/** \addtogroup usbd_msd
|
||||
*@{
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Definitions
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
/** \addtogroup usbd_sbc_operation_codes SBC Operation Codes
|
||||
* @{
|
||||
* This page lists operation codes of commands described in the SBC-3
|
||||
* standard.
|
||||
*
|
||||
* \note That most commands are actually defined in other standards,
|
||||
* like SPC-4. Optional commands are not included here.
|
||||
*
|
||||
* \see sbc3r07.pdf - Section 5.1 - Table 12
|
||||
* \see spc4r06.pdf
|
||||
* \see SBCCommand
|
||||
*
|
||||
* \section Codes
|
||||
* - SBC_INQUIRY
|
||||
* - SBC_READ_10
|
||||
* - SBC_READ_CAPACITY_10
|
||||
* - SBC_REQUEST_SENSE
|
||||
* - SBC_TEST_UNIT_READY
|
||||
* - SBC_WRITE_10
|
||||
*
|
||||
* \section Optional Codes but required by Windows
|
||||
* - SBC_PREVENT_ALLOW_MEDIUM_REMOVAL
|
||||
* - SBC_MODE_SENSE_6
|
||||
* - SBC_VERIFY_10
|
||||
* - SBC_READ_FORMAT_CAPACITIES
|
||||
*/
|
||||
|
||||
/** Request information regarding parameters of the target and Logical Unit. */
|
||||
#define SBC_INQUIRY 0x12
|
||||
/** Request the transfer data to the host. */
|
||||
#define SBC_READ_10 0x28
|
||||
/** Request capacities of the currently installed medium. */
|
||||
#define SBC_READ_CAPACITY_10 0x25
|
||||
/** Request that the device server transfer sense data. */
|
||||
#define SBC_REQUEST_SENSE 0x03
|
||||
/** Check if the LUN is ready */
|
||||
#define SBC_TEST_UNIT_READY 0x00
|
||||
/** Request that the device write the data transferred by the host. */
|
||||
#define SBC_WRITE_10 0x2A
|
||||
|
||||
/** Request that the target enable or disable the removal of the medium in */
|
||||
/** the Logical Unit. */
|
||||
#define SBC_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E
|
||||
/** Report parameters. */
|
||||
#define SBC_MODE_SENSE_6 0x1A
|
||||
/** Request that the %device verify the data on the medium. */
|
||||
#define SBC_VERIFY_10 0x2F
|
||||
/** Request a list of the possible capacities that can be formatted on medium */
|
||||
#define SBC_READ_FORMAT_CAPACITIES 0x23
|
||||
/** @}*/
|
||||
|
||||
/** \addtogroup usbd_sbc_periph_quali SBC Periph. Qualifiers
|
||||
* @{
|
||||
* This page lists the peripheral qualifier values specified in the INQUIRY
|
||||
* data
|
||||
* \see spc4r06.pdf - Section 6.4.2 - Table 83
|
||||
* \see SBCInquiryData
|
||||
*
|
||||
* \section Qualifiers
|
||||
* - SBC_PERIPHERAL_DEVICE_CONNECTED
|
||||
* - SBC_PERIPHERAL_DEVICE_NOT_CONNECTED
|
||||
* - SBC_PERIPHERAL_DEVICE_NOT_SUPPORTED
|
||||
*/
|
||||
|
||||
#define SBC_PERIPHERAL_DEVICE_CONNECTED 0x00
|
||||
#define SBC_PERIPHERAL_DEVICE_NOT_CONNECTED 0x01
|
||||
#define SBC_PERIPHERAL_DEVICE_NOT_SUPPORTED 0x03
|
||||
/** @}*/
|
||||
|
||||
/** \addtogroup usbd_sbc_periph_types SBC Periph. Types
|
||||
* @{
|
||||
* This page lists peripheral device types specified in the INQUIRY data
|
||||
* \see spc4r06.pdf - Section 6.4.2 - Table 84
|
||||
* \see SBCInquiryData
|
||||
*
|
||||
* \section Types
|
||||
* - SBC_DIRECT_ACCESS_BLOCK_DEVICE
|
||||
* - SBC_SEQUENTIAL_ACCESS_DEVICE
|
||||
* - SBC_PRINTER_DEVICE
|
||||
* - SBC_PROCESSOR_DEVICE
|
||||
* - SBC_WRITE_ONCE_DEVICE
|
||||
* - SBC_CD_DVD_DEVICE
|
||||
* - SBC_SCANNER_DEVICE
|
||||
* - SBC_OPTICAL_MEMORY_DEVICE
|
||||
* - SBC_MEDIA_CHANGER_DEVICE
|
||||
* - SBC_COMMUNICATION_DEVICE
|
||||
* - SBC_STORAGE_ARRAY_CONTROLLER_DEVICE
|
||||
* - SBC_ENCLOSURE_SERVICES_DEVICE
|
||||
* - SBC_SIMPLIFIED_DIRECT_ACCESS_DEVICE
|
||||
* - SBC_OPTICAL_CARD_READER_WRITER_DEVICE
|
||||
* - SBC_BRIDGE_CONTROLLER_COMMANDS
|
||||
* - SBC_OBJECT_BASED_STORAGE_DEVICE
|
||||
*/
|
||||
|
||||
#define SBC_DIRECT_ACCESS_BLOCK_DEVICE 0x00
|
||||
#define SBC_SEQUENTIAL_ACCESS_DEVICE 0x01
|
||||
#define SBC_PRINTER_DEVICE 0x02
|
||||
#define SBC_PROCESSOR_DEVICE 0x03
|
||||
#define SBC_WRITE_ONCE_DEVICE 0x04
|
||||
#define SBC_CD_DVD_DEVICE 0x05
|
||||
#define SBC_SCANNER_DEVICE 0x06
|
||||
#define SBC_OPTICAL_MEMORY_DEVICE 0x07
|
||||
#define SBC_MEDIA_CHANGER_DEVICE 0x08
|
||||
#define SBC_COMMUNICATION_DEVICE 0x09
|
||||
#define SBC_STORAGE_ARRAY_CONTROLLER_DEVICE 0x0C
|
||||
#define SBC_ENCLOSURE_SERVICES_DEVICE 0x0D
|
||||
#define SBC_SIMPLIFIED_DIRECT_ACCESS_DEVICE 0x0E
|
||||
#define SBC_OPTICAL_CARD_READER_WRITER_DEVICE 0x0F
|
||||
#define SBC_BRIDGE_CONTROLLER_COMMANDS 0x10
|
||||
#define SBC_OBJECT_BASED_STORAGE_DEVICE 0x11
|
||||
/** @}*/
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
/** \brief Version value for the SBC-3 specification */
|
||||
/** \see spc4r06.pdf - Section 6.4.2 - Table 85 */
|
||||
#define SBC_SPC_VERSION_4 0x06
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
/** \brief Values for the TPGS field returned in INQUIRY data */
|
||||
/** \see spc4r06.pdf - Section 6.4.2 - Table 86 */
|
||||
#define SBC_TPGS_NONE 0x0
|
||||
#define SBC_TPGS_ASYMMETRIC 0x1
|
||||
#define SBC_TPGS_SYMMETRIC 0x2
|
||||
#define SBC_TPGS_BOTH 0x3
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
/** \brief Version descriptor value for the SBC-3 specification */
|
||||
/** \see spc4r06.pdf - Section 6.4.2 - Table 87 */
|
||||
#define SBC_VERSION_DESCRIPTOR_SBC_3 0x04C0
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
/** \addtogroup usbd_sbc_secse_codes SBC Sense Response Codes
|
||||
* @{
|
||||
* This page lists sense data response codes returned in REQUEST SENSE data
|
||||
* \see spc4r06.pdf - Section 4.5.1 - Table 12
|
||||
*
|
||||
* \section Codes
|
||||
* - SBC_SENSE_DATA_FIXED_CURRENT
|
||||
* - SBC_SENSE_DATA_FIXED_DEFERRED
|
||||
* - SBC_SENSE_DATA_DESCRIPTOR_CURRENT
|
||||
* - SBC_SENSE_DATA_DESCRIPTOR_DEFERRED
|
||||
*/
|
||||
|
||||
#define SBC_SENSE_DATA_FIXED_CURRENT 0x70
|
||||
#define SBC_SENSE_DATA_FIXED_DEFERRED 0x71
|
||||
#define SBC_SENSE_DATA_DESCRIPTOR_CURRENT 0x72
|
||||
#define SBC_SENSE_DATA_DESCRIPTOR_DEFERRED 0x73
|
||||
/** @}*/
|
||||
|
||||
/** \addtogroup usbd_sbc_sense_keys SBC Sense Keys
|
||||
* @{
|
||||
* This page lists sense key values returned in the REQUEST SENSE data
|
||||
* \see spc4r06.pdf - Section 4.5.6 - Table 27
|
||||
*
|
||||
* \section Keys
|
||||
* - SBC_SENSE_KEY_NO_SENSE
|
||||
* - SBC_SENSE_KEY_RECOVERED_ERROR
|
||||
* - SBC_SENSE_KEY_NOT_READY
|
||||
* - SBC_SENSE_KEY_MEDIUM_ERROR
|
||||
* - SBC_SENSE_KEY_HARDWARE_ERROR
|
||||
* - SBC_SENSE_KEY_ILLEGAL_REQUEST
|
||||
* - SBC_SENSE_KEY_UNIT_ATTENTION
|
||||
* - SBC_SENSE_KEY_DATA_PROTECT
|
||||
* - SBC_SENSE_KEY_BLANK_CHECK
|
||||
* - SBC_SENSE_KEY_VENDOR_SPECIFIC
|
||||
* - SBC_SENSE_KEY_COPY_ABORTED
|
||||
* - SBC_SENSE_KEY_ABORTED_COMMAND
|
||||
* - SBC_SENSE_KEY_VOLUME_OVERFLOW
|
||||
* - SBC_SENSE_KEY_MISCOMPARE
|
||||
*/
|
||||
|
||||
/** No specific sense key. Successful command. */
|
||||
#define SBC_SENSE_KEY_NO_SENSE 0x00
|
||||
/** Command completed succesfully with some recovery action by the %device. */
|
||||
#define SBC_SENSE_KEY_RECOVERED_ERROR 0x01
|
||||
/** The device can not be accessed. */
|
||||
#define SBC_SENSE_KEY_NOT_READY 0x02
|
||||
/** Command terminated with a error condition that was probably caused by a */
|
||||
/** flaw in the medium or an error in the recorded data. */
|
||||
#define SBC_SENSE_KEY_MEDIUM_ERROR 0x03
|
||||
/** Hardware failure while performing the command or during a self test. */
|
||||
#define SBC_SENSE_KEY_HARDWARE_ERROR 0x04
|
||||
/** Illegal parameter found in the command or additional parameters. */
|
||||
#define SBC_SENSE_KEY_ILLEGAL_REQUEST 0x05
|
||||
/** Removable medium may have been changed or the %device has been reset. */
|
||||
#define SBC_SENSE_KEY_UNIT_ATTENTION 0x06
|
||||
/** Write on a block that is protected. */
|
||||
#define SBC_SENSE_KEY_DATA_PROTECT 0x07
|
||||
/** Indicates that a write-once device or a sequential-access device */
|
||||
/** encountered blank medium or format-defined end-of-data indication while */
|
||||
/** reading or a write-once device encountered a non-blank medium while writing. */
|
||||
#define SBC_SENSE_KEY_BLANK_CHECK 0x08
|
||||
/** Reporting vendor specific conditions. */
|
||||
#define SBC_SENSE_KEY_VENDOR_SPECIFIC 0x09
|
||||
/** EXTENDED COPY command was aborted. */
|
||||
#define SBC_SENSE_KEY_COPY_ABORTED 0x0A
|
||||
/** Device aborted the command. */
|
||||
#define SBC_SENSE_KEY_ABORTED_COMMAND 0x0B
|
||||
/** A buffered peripheral device is overflow. */
|
||||
#define SBC_SENSE_KEY_VOLUME_OVERFLOW 0x0D
|
||||
/** The source data did not match the data read from the medium. */
|
||||
#define SBC_SENSE_KEY_MISCOMPARE 0x0E
|
||||
/** @}*/
|
||||
|
||||
/** \addtogroup usbd_sbc_sense_additionals SBC Sense Additionals
|
||||
* @{
|
||||
* This page lists additional sense code values returned in REQUEST SENSE data
|
||||
* \see spc4r06.pdf - Section 4.5.6 - Table 28
|
||||
*
|
||||
* \section Additional Codes
|
||||
* - SBC_ASC_LOGICAL_UNIT_NOT_READY
|
||||
* - SBC_ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE
|
||||
* - SBC_ASC_INVALID_FIELD_IN_CDB
|
||||
* - SBC_ASC_WRITE_PROTECTED
|
||||
* - SBC_ASC_FORMAT_CORRUPTED
|
||||
* - SBC_ASC_INVALID_COMMAND_OPERATION_CODE
|
||||
* - SBC_ASC_TOO_MUCH_WRITE_DATA
|
||||
* - SBC_ASC_NOT_READY_TO_READY_CHANGE
|
||||
* - SBC_ASC_MEDIUM_NOT_PRESENT
|
||||
*/
|
||||
|
||||
#define SBC_ASC_LOGICAL_UNIT_NOT_READY 0x04
|
||||
#define SBC_ASC_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x21
|
||||
#define SBC_ASC_INVALID_FIELD_IN_CDB 0x24
|
||||
#define SBC_ASC_WRITE_PROTECTED 0x27
|
||||
#define SBC_ASC_FORMAT_CORRUPTED 0x31
|
||||
#define SBC_ASC_INVALID_COMMAND_OPERATION_CODE 0x20
|
||||
#define SBC_ASC_TOO_MUCH_WRITE_DATA 0x26
|
||||
#define SBC_ASC_NOT_READY_TO_READY_CHANGE 0x28
|
||||
#define SBC_ASC_MEDIUM_NOT_PRESENT 0x3A
|
||||
/** @}*/
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
/** \brief MEDIUM TYPE field value for direct-access block devices */
|
||||
/** \see sbc3r06.pdf - Section 6.3.1 */
|
||||
#define SBC_MEDIUM_TYPE_DIRECT_ACCESS_BLOCK_DEVICE 0x00
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
/** \brief MRIE field values */
|
||||
/** \see sbc3r06.pdf - Section 7.4.11 - Table 286 */
|
||||
#define SBC_MRIE_NO_REPORTING 0x00
|
||||
#define SBC_MRIE_ASYNCHRONOUS 0x01
|
||||
#define SBC_MRIE_GENERATE_UNIT_ATTENTION 0x02
|
||||
#define SBC_MRIE_COND_GENERATE_RECOVERED_ERROR 0x03
|
||||
#define SBC_MRIE_UNCOND_GENERATE_RECOVERED_ERROR 0x04
|
||||
#define SBC_MRIE_GENERATE_NO_SENSE 0x05
|
||||
#define SBC_MRIE_ON_REQUEST 0x06
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
/*------------------------------------------------------------------------------ */
|
||||
/** \brief Supported mode pages */
|
||||
/** \see sbc3r06.pdf - Section 6.3.1 - Table 115 */
|
||||
#define SBC_PAGE_READ_WRITE_ERROR_RECOVERY 0x01
|
||||
#define SBC_PAGE_INFORMATIONAL_EXCEPTIONS_CONTROL 0x1C
|
||||
#define SBC_PAGE_RETURN_ALL 0x3F
|
||||
#define SBC_PAGE_VENDOR_SPECIFIC 0x00
|
||||
/*------------------------------------------------------------------------------ */
|
||||
|
||||
/** \addtogroup usbd_msd_endian_macros MSD Endian Macros
|
||||
* @{
|
||||
* This page lists the macros for endianness conversion.
|
||||
*
|
||||
* \section Macros
|
||||
* - WORDB
|
||||
* - DWORDB
|
||||
* - STORE_DWORDB
|
||||
* - STORE_WORDB
|
||||
*/
|
||||
|
||||
/** \brief Converts a byte array to a word value using the big endian format */
|
||||
#define WORDB(bytes) ((unsigned short) ((bytes[0] << 8) | bytes[1]))
|
||||
|
||||
/** \brief Converts a byte array to a dword value using the big endian format */
|
||||
#define DWORDB(bytes) ((unsigned int) ((bytes[0] << 24) | (bytes[1] << 16) \
|
||||
| (bytes[2] << 8) | bytes[3]))
|
||||
|
||||
/** \brief Stores a dword value in a byte array, in big endian format */
|
||||
#define STORE_DWORDB(dword, bytes) \
|
||||
bytes[0] = (unsigned char) (((dword) >> 24) & 0xFF); \
|
||||
bytes[1] = (unsigned char) (((dword) >> 16) & 0xFF); \
|
||||
bytes[2] = (unsigned char) (((dword) >> 8) & 0xFF); \
|
||||
bytes[3] = (unsigned char) ((dword) & 0xFF);
|
||||
|
||||
/** \brief Stores a word value in a byte array, in big endian format */
|
||||
#define STORE_WORDB(word, bytes) \
|
||||
bytes[0] = (unsigned char) (((word) >> 8) & 0xFF); \
|
||||
bytes[1] = (unsigned char) ((word) & 0xFF);
|
||||
/** @}*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Structures
|
||||
*------------------------------------------------------------------------------*/
|
||||
|
||||
#ifdef __ICCARM__ /* IAR */
|
||||
#pragma pack(1) /* IAR */
|
||||
#define __attribute__(...) /* IAR */
|
||||
#endif /* IAR */
|
||||
|
||||
/**
|
||||
* \typedef SBCInquiry
|
||||
* \brief Structure for the INQUIRY command
|
||||
* \see spc4r06.pdf - Section 6.4.1 - Table 81
|
||||
*/
|
||||
typedef struct _SBCInquiry {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x12 : SBC_INQUIRY */
|
||||
unsigned char isEVPD:1, /*!< Type of requested data */
|
||||
bReserved1:7; /*!< Reserved bits */
|
||||
unsigned char bPageCode; /*!< Specifies the VPD to return */
|
||||
unsigned char pAllocationLength[2]; /*!< Size of host buffer */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} __attribute__ ((packed)) SBCInquiry; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCInquiryData
|
||||
* \brief Standard INQUIRY data format returned by the device
|
||||
* \see spc4r06.pdf - Section 6.4.2 - Table 82
|
||||
*/
|
||||
typedef struct _SBCInquiryData {
|
||||
|
||||
unsigned char bPeripheralDeviceType:5, /*!< Peripheral device type */
|
||||
bPeripheralQualifier :3; /*!< Peripheral qualifier */
|
||||
unsigned char bReserved1:7, /*!< Reserved bits */
|
||||
isRMB :1; /*!< Is media removable ? */
|
||||
unsigned char bVersion; /*!< SPC version used */
|
||||
unsigned char bResponseDataFormat:4, /*!< Must be 0x2 */
|
||||
isHIGHSUP :1, /*!< Hierarchical addressing used ? */
|
||||
isNORMACA :1, /*!< ACA attribute supported ? */
|
||||
bObsolete1 :2; /*!< Obsolete bits */
|
||||
unsigned char bAdditionalLength; /*!< Length of remaining INQUIRY data */
|
||||
unsigned char isSCCS :1, /*!< Embedded SCC ? */
|
||||
isACC :1, /*!< Access control coordinator ? */
|
||||
bTPGS :2, /*!< Target port support group */
|
||||
is3PC :1, /*!< Third-party copy supported ? */
|
||||
bReserved2:2, /*!< Reserved bits */
|
||||
isProtect :1; /*!< Protection info supported ? */
|
||||
unsigned char bObsolete2:1, /*!< Obsolete bit */
|
||||
isEncServ :1, /*!< Embedded enclosure service comp? */
|
||||
isVS :1, /*!< ??? */
|
||||
isMultiP :1, /*!< Multi-port device ? */
|
||||
bObsolete3:3, /*!< Obsolete bits */
|
||||
bUnused1 :1; /*!< Unused feature */
|
||||
unsigned char bUnused2:6, /*!< Unused features */
|
||||
isCmdQue:1, /*!< Task management model supported ? */
|
||||
isVS2 :1; /*!< ??? */
|
||||
unsigned char pVendorID[8]; /*!< T10 vendor identification */
|
||||
unsigned char pProductID[16]; /*!< Vendor-defined product ID */
|
||||
unsigned char pProductRevisionLevel[4];/*!< Vendor-defined product revision */
|
||||
unsigned char pVendorSpecific[20]; /*!< Vendor-specific data */
|
||||
unsigned char bUnused3; /*!< Unused features */
|
||||
unsigned char bReserved3; /*!< Reserved bits */
|
||||
unsigned short pVersionDescriptors[8]; /*!< Standards the device complies to */
|
||||
unsigned char pReserved4[22]; /*!< Reserved bytes */
|
||||
|
||||
} __attribute__ ((packed)) SBCInquiryData; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCRead10
|
||||
* \brief Data structure for the READ (10) command
|
||||
* \see sbc3r07.pdf - Section 5.7 - Table 34
|
||||
*/
|
||||
typedef struct _SBCRead10 {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x28 : SBC_READ_10 */
|
||||
unsigned char bObsolete1:1, /*!< Obsolete bit */
|
||||
isFUA_NV:1, /*!< Cache control bit */
|
||||
bReserved1:1, /*!< Reserved bit */
|
||||
isFUA:1, /*!< Cache control bit */
|
||||
isDPO:1, /*!< Cache control bit */
|
||||
bRdProtect:3; /*!< Protection information to send */
|
||||
unsigned char pLogicalBlockAddress[4]; /*!< Index of first block to read */
|
||||
unsigned char bGroupNumber:5, /*!< Information grouping */
|
||||
bReserved2:3; /*!< Reserved bits */
|
||||
unsigned char pTransferLength[2]; /*!< Number of blocks to transmit */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} __attribute__ ((packed)) SBCRead10; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCReadCapacity10
|
||||
* \brief Structure for the READ CAPACITY (10) command
|
||||
* \see sbc3r07.pdf - Section 5.11.1 - Table 40
|
||||
*/
|
||||
typedef struct _SBCReadCapacity10 {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x25 : RBC_READ_CAPACITY */
|
||||
unsigned char bObsolete1:1, /*!< Obsolete bit */
|
||||
bReserved1:7; /*!< Reserved bits */
|
||||
unsigned char pLogicalBlockAddress[4]; /*!< Block to evaluate if PMI is set */
|
||||
unsigned char pReserved2[2]; /*!< Reserved bytes */
|
||||
unsigned char isPMI:1, /*!< Partial medium indicator bit */
|
||||
bReserved3:7; /*!< Reserved bits */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} SBCReadCapacity10;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* \brief Data returned by the device after a READ CAPACITY (10) command
|
||||
* \see sbc3r07.pdf - Section 5.11.2 - Table 41
|
||||
*------------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
|
||||
unsigned char pLogicalBlockAddress[4]; /*!< Address of last logical block */
|
||||
unsigned char pLogicalBlockLength[4]; /*!< Length of each logical block */
|
||||
|
||||
} SBCReadCapacity10Data;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* \brief Structure for the REQUEST SENSE command
|
||||
* \see spc4r06.pdf - Section 6.26 - Table 170
|
||||
*------------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x03 : SBC_REQUEST_SENSE */
|
||||
unsigned char isDesc :1, /*!< Type of information expected */
|
||||
bReserved1:7; /*!< Reserved bits */
|
||||
unsigned char pReserved2[2]; /*!< Reserved bytes */
|
||||
unsigned char bAllocationLength; /*!< Size of host buffer */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} SBCRequestSense;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* \brief Fixed format sense data returned after a REQUEST SENSE command has
|
||||
* been received with a DESC bit cleared.
|
||||
* \see spc4r06.pdf - Section 4.5.3 - Table 26
|
||||
*------------------------------------------------------------------------------*/
|
||||
typedef struct {
|
||||
|
||||
unsigned char bResponseCode:7, /*!< Sense data format */
|
||||
isValid :1; /*!< Information field is standard */
|
||||
unsigned char bObsolete1; /*!< Obsolete byte */
|
||||
unsigned char bSenseKey :4, /*!< Generic error information */
|
||||
bReserved1:1, /*!< Reserved bit */
|
||||
isILI :1, /*!< SSC */
|
||||
isEOM :1, /*!< SSC */
|
||||
isFilemark:1; /*!< SSC */
|
||||
unsigned char pInformation[4]; /*!< Command-specific */
|
||||
unsigned char bAdditionalSenseLength; /*!< sizeof(SBCRequestSense_data)-8 */
|
||||
unsigned char pCommandSpecificInformation[4]; /*!< Command-specific */
|
||||
unsigned char bAdditionalSenseCode; /*!< Additional error information */
|
||||
unsigned char bAdditionalSenseCodeQualifier; /*!< Further error information */
|
||||
unsigned char bFieldReplaceableUnitCode; /*!< Specific component code */
|
||||
unsigned char bSenseKeySpecific:7, /*!< Additional exception info */
|
||||
isSKSV :1; /*!< Is sense key specific valid? */
|
||||
unsigned char pSenseKeySpecific[2]; /*!< Additional exception info */
|
||||
|
||||
} SBCRequestSenseData;
|
||||
|
||||
/**
|
||||
* \brief SBCTestUnitReady
|
||||
* Data structure for the TEST UNIT READY command
|
||||
* \see spc4r06.pdf - Section 6.34 - Table 192
|
||||
*/
|
||||
typedef struct _SBCTestUnitReady {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x00 : SBC_TEST_UNIT_READY */
|
||||
unsigned char pReserved1[4]; /*!< Reserved bits */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} __attribute__ ((packed)) SBCTestUnitReady; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCWrite10
|
||||
* \brief Structure for the WRITE (10) command
|
||||
* \see sbc3r07.pdf - Section 5.26 - Table 70
|
||||
*/
|
||||
typedef struct _SBCWrite10 {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x2A : SBC_WRITE_10 */
|
||||
unsigned char bObsolete1:1, /*!< Obsolete bit */
|
||||
isFUA_NV:1, /*!< Cache control bit */
|
||||
bReserved1:1, /*!< Reserved bit */
|
||||
isFUA:1, /*!< Cache control bit */
|
||||
isDPO:1, /*!< Cache control bit */
|
||||
bWrProtect:3; /*!< Protection information to send */
|
||||
unsigned char pLogicalBlockAddress[4]; /*!< First block to write */
|
||||
unsigned char bGroupNumber:5, /*!< Information grouping */
|
||||
bReserved2:3; /*!< Reserved bits */
|
||||
unsigned char pTransferLength[2]; /*!< Number of blocks to write */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} SBCWrite10;
|
||||
|
||||
/**
|
||||
* \typedef SBCMediumRemoval
|
||||
* \brief Structure for the PREVENT/ALLOW MEDIUM REMOVAL command
|
||||
* \see sbc3r07.pdf - Section 5.5 - Table 30
|
||||
*/
|
||||
typedef struct _SBCMediumRemoval {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x1E : SBC_PREVENT_ALLOW_MEDIUM_REMOVAL */
|
||||
unsigned char pReserved1[3]; /*!< Reserved bytes */
|
||||
unsigned char bPrevent:2, /*!< Accept/prohibit removal */
|
||||
bReserved2:6; /*!< Reserved bits */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} __attribute__ ((packed)) SBCMediumRemoval; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCModeSense6
|
||||
* \brief Structure for the MODE SENSE (6) command
|
||||
* \see spc4r06 - Section 6.9.1 - Table 98
|
||||
*/
|
||||
typedef struct _SBCModeSense6 {
|
||||
|
||||
unsigned char bOperationCode; /*!< 0x1A : SBC_MODE_SENSE_6 */
|
||||
unsigned char bReserved1:3, /*!< Reserved bits */
|
||||
isDBD:1, /*!< Disable block descriptors bit */
|
||||
bReserved2:4; /*!< Reserved bits */
|
||||
unsigned char bPageCode:6, /*!< Mode page to return */
|
||||
bPC:2; /*!< Type of parameter values to return */
|
||||
unsigned char bSubpageCode; /*!< Mode subpage to return */
|
||||
unsigned char bAllocationLength; /*!< Host buffer allocated size */
|
||||
unsigned char bControl; /*!< 0x00 */
|
||||
|
||||
} __attribute__ ((packed)) SBCModeSense6; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCModeParameterHeader6
|
||||
* \brief Header for the data returned after a MODE SENSE (6) command
|
||||
* \see spc4r06.pdf - Section 7.4.3 - Table 268
|
||||
*/
|
||||
typedef struct _SBCModeParameterHeader6 {
|
||||
|
||||
unsigned char bModeDataLength; /*!< Length of mode data to follow */
|
||||
unsigned char bMediumType; /*!< Type of medium (SBC_MEDIUM_TYPE_DIRECT_ACCESS_BLOCK_DEVICE) */
|
||||
unsigned char bReserved1:4, /*!< Reserved bits */
|
||||
isDPOFUA:1, /*!< DPO/FUA bits supported ? */
|
||||
bReserved2:2, /*!< Reserved bits */
|
||||
isWP:1; /*!< Is medium write-protected ? */
|
||||
unsigned char bBlockDescriptorLength; /*!< Length of all block descriptors */
|
||||
|
||||
} __attribute__ ((packed)) SBCModeParameterHeader6; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCInformationalExceptionsControl
|
||||
* \brief Informational exceptions control mode page
|
||||
* \see spc4r06.pdf - Section 7.4.11 - Table 285
|
||||
*/
|
||||
typedef struct _SBCInformationalExceptionsControl {
|
||||
|
||||
unsigned char bPageCode:6, /*!< 0x1C : SBC_PAGE_INFORMATIONAL_EXCEPTIONS_CONTROL */
|
||||
isSPF:1, /*!< Page or subpage data format */
|
||||
isPS:1; /*!< Parameters saveable ? */
|
||||
unsigned char bPageLength; /*!< Length of page data (0x0A) */
|
||||
unsigned char isLogErr:1, /*!< Should informational exceptions be logged ? */
|
||||
isEBackErr:1, /*!< Enable background error bit */
|
||||
isTest:1, /*!< Create a device test failure ? */
|
||||
isDExcpt:1, /*!< Disable exception control bit */
|
||||
isEWasc:1, /*!< Report warnings ? */
|
||||
isEBF:1, /*!< Enable background function bit */
|
||||
bReserved1:1, /*!< Reserved bit */
|
||||
isPerf:1; /*!< Delay acceptable when treating exceptions ? */
|
||||
unsigned char bMRIE:4, /*!< Method of reporting informational exceptions */
|
||||
bReserved2:4; /*!< Reserved bits */
|
||||
unsigned char pIntervalTimer[4]; /*!< Error reporting period */
|
||||
unsigned char pReportCount[4]; /*!< Maximum number of time a report can be issued */
|
||||
|
||||
} __attribute__ ((packed)) SBCInformationalExceptionsControl; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCReadWriteErrorRecovery
|
||||
* \brief Read/write error recovery mode page
|
||||
* \see sbc3r07.pdf - Section 6.3.5 - Table 122
|
||||
*/
|
||||
typedef struct _SBCReadWriteErrorRecovery {
|
||||
|
||||
unsigned char bPageCode:6, /*!< 0x01 : SBC_PAGE_READ_WRITE_ERROR_RECOVERY */
|
||||
isSPF:1, /*!< Page or subpage data format */
|
||||
isPS:1; /*!< Parameters saveable ? */
|
||||
unsigned char bPageLength; /*!< Length of page data (0x0A) */
|
||||
unsigned char isDCR:1, /*!< Disable correction bit */
|
||||
isDTE:1, /*!< Data terminate on error bit */
|
||||
isPER:1, /*!< Post error bit */
|
||||
isEER:1, /*!< Enable early recovery bit */
|
||||
isRC:1, /*!< Read continuous bit */
|
||||
isTB:1, /*!< Transfer block bit */
|
||||
isARRE:1, /*!< Automatic read reallocation enabled bit */
|
||||
isAWRE:1; /*!< Automatic write reallocation enabled bit */
|
||||
unsigned char bReadRetryCount; /*!< Number of retries when reading */
|
||||
unsigned char pObsolete1[3]; /*!< Obsolete bytes */
|
||||
unsigned char bReserved1; /*!< Reserved byte */
|
||||
unsigned char bWriteRetryCount; /*!< Number of retries when writing */
|
||||
unsigned char bReserved2; /*!< Reserved byte */
|
||||
unsigned char pRecoveryTimeLimit[2]; /*!< Maximum time duration for error recovery */
|
||||
|
||||
} __attribute__ ((packed)) SBCReadWriteErrorRecovery; /* GCC */
|
||||
|
||||
/**
|
||||
* \typedef SBCCommand
|
||||
* \brief Generic structure for holding information about SBC commands
|
||||
* \see SBCInquiry
|
||||
* \see SBCRead10
|
||||
* \see SBCReadCapacity10
|
||||
* \see SBCRequestSense
|
||||
* \see SBCTestUnitReady
|
||||
* \see SBCWrite10
|
||||
* \see SBCMediumRemoval
|
||||
* \see SBCModeSense6
|
||||
*/
|
||||
typedef union _SBCCommand {
|
||||
|
||||
unsigned char bOperationCode; /*!< Operation code of the command */
|
||||
SBCInquiry inquiry; /*!< INQUIRY command */
|
||||
SBCRead10 read10; /*!< READ (10) command */
|
||||
SBCReadCapacity10 readCapacity10; /*!< READ CAPACITY (10) command */
|
||||
SBCRequestSense requestSense; /*!< REQUEST SENSE command */
|
||||
SBCTestUnitReady testUnitReady; /*!< TEST UNIT READY command */
|
||||
SBCWrite10 write10; /*!< WRITE (10) command */
|
||||
SBCMediumRemoval mediumRemoval; /*!< PREVENT/ALLOW MEDIUM REMOVAL command */
|
||||
SBCModeSense6 modeSense6; /*!< MODE SENSE (6) command */
|
||||
|
||||
} SBCCommand;
|
||||
|
||||
#ifdef __ICCARM__ /* IAR */
|
||||
#pragma pack() /* IAR */
|
||||
#endif /* IAR */
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif /*#ifndef SBC_H */
|
||||
|
||||
Reference in New Issue
Block a user