+++ /dev/null
-/*++\r
-Copyright (c) 2006 - 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-Module Name:\r
-\r
- UsbMassStorageData.h\r
-\r
-Abstract:\r
-\r
- Header file for USB Mass Storage Device related Data Structures\r
-\r
-Revision History\r
---*/\r
-\r
-#ifndef _USB_FLP_DATA_H\r
-#define _USB_FLP_DATA_H\r
-\r
-//\r
-// bit definition\r
-//\r
-#define bit(a) (1 << (a))\r
-\r
-//\r
-// timeout unit is in millisecond.\r
-//\r
-\r
-#define STALL_1_MILLI_SECOND 1000\r
-#define USBFLPTIMEOUT STALL_1_MILLI_SECOND\r
-#define USBDATATIMEOUT 2 * STALL_1_MILLI_SECOND\r
-//\r
-// ATAPI Packet Command\r
-//\r
-#pragma pack(1)\r
-\r
-typedef struct {\r
- UINT8 opcode;\r
- UINT8 reserved_1;\r
- UINT8 reserved_2;\r
- UINT8 reserved_3;\r
- UINT8 reserved_4;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 reserved_7;\r
- UINT8 reserved_8;\r
- UINT8 reserved_9;\r
- UINT8 reserved_10;\r
- UINT8 reserved_11;\r
-} TEST_UNIT_READY_CMD;\r
-\r
-typedef struct {\r
- UINT8 opcode;\r
- UINT8 reserved_1 : 4;\r
- UINT8 lun : 4;\r
- UINT8 page_code;\r
- UINT8 reserved_3;\r
- UINT8 allocation_length;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 reserved_7;\r
- UINT8 reserved_8;\r
- UINT8 reserved_9;\r
- UINT8 reserved_10;\r
- UINT8 reserved_11;\r
-} INQUIRY_CMD;\r
-\r
-typedef struct {\r
- UINT8 opcode;\r
- UINT8 reserved_1 : 4;\r
- UINT8 lun : 4;\r
- UINT8 reserved_2;\r
- UINT8 reserved_3;\r
- UINT8 allocation_length;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 reserved_7;\r
- UINT8 reserved_8;\r
- UINT8 reserved_9;\r
- UINT8 reserved_10;\r
- UINT8 reserved_11;\r
-} REQUEST_SENSE_CMD;\r
-\r
-typedef struct {\r
- UINT8 opcode;\r
- UINT8 reserved_1 : 4;\r
- UINT8 lun : 4;\r
- UINT8 page_code : 6;\r
- UINT8 page_control : 2;\r
- UINT8 reserved_3;\r
- UINT8 reserved_4;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 parameter_list_length_hi;\r
- UINT8 parameter_list_length_lo;\r
- UINT8 reserved_9;\r
- UINT8 reserved_10;\r
- UINT8 reserved_11;\r
-} MODE_SENSE_CMD_UFI;\r
-\r
-typedef struct {\r
- UINT8 opcode;\r
- UINT8 reserved_1 : 3;\r
- UINT8 dbd : 1;\r
- UINT8 reserved_2 : 1;\r
- UINT8 lun : 3;\r
- UINT8 page_code : 6;\r
- UINT8 page_control : 2;\r
- UINT8 reserved_3;\r
- UINT8 allocation_length;\r
- UINT8 control;\r
-} MODE_SENSE_CMD_SCSI;\r
-\r
-typedef struct {\r
- UINT8 opcode;\r
- UINT8 reserved_1 : 5;\r
- UINT8 lun : 3;\r
- UINT8 Lba0;\r
- UINT8 Lba1;\r
- UINT8 Lba2;\r
- UINT8 Lba3;\r
- UINT8 reserved_6;\r
- UINT8 TranLen0;\r
- UINT8 TranLen1;\r
- UINT8 reserved_9;\r
- UINT8 reserved_10;\r
- UINT8 reserved_11;\r
-} READ10_CMD;\r
-\r
-typedef struct {\r
- UINT8 opcode;\r
- UINT8 reserved_1;\r
- UINT8 reserved_2;\r
- UINT8 reserved_3;\r
- UINT8 reserved_4;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 allocation_length_hi;\r
- UINT8 allocation_length_lo;\r
- UINT8 reserved_9;\r
- UINT8 reserved_10;\r
- UINT8 reserved_11;\r
-} READ_FORMAT_CAP_CMD;\r
-\r
-typedef union {\r
- UINT16 Data16[6];\r
- TEST_UNIT_READY_CMD TestUnitReady;\r
- READ10_CMD Read10;\r
- REQUEST_SENSE_CMD RequestSense;\r
- INQUIRY_CMD Inquiry;\r
- MODE_SENSE_CMD_UFI ModeSenseUFI;\r
- READ_FORMAT_CAP_CMD ReadFormatCapacity;\r
- MODE_SENSE_CMD_SCSI ModeSenseSCSI;\r
-} ATAPI_PACKET_COMMAND;\r
-\r
-#pragma pack()\r
-//\r
-// Packet Command Code\r
-//\r
-#define TEST_UNIT_READY 0x00\r
-#define REZERO 0x01\r
-#define REQUEST_SENSE 0x03\r
-#define FORMAT_UNIT 0x04\r
-#define REASSIGN_BLOCKS 0x07\r
-#define INQUIRY 0x12\r
-#define START_STOP_UNIT 0x1B\r
-#define PREVENT_ALLOW_MEDIA_REMOVAL 0x1E\r
-#define READ_FORMAT_CAPACITY 0x23\r
-#define OLD_FORMAT_UNIT 0x24\r
-#define READ_CAPACITY 0x25\r
-#define READ_10 0x28\r
-#define WRITE_10 0x2A\r
-#define SEEK 0x2B\r
-#define SEND_DIAGNOSTICS 0x3D\r
-#define WRITE_VERIFY 0x2E\r
-#define VERIFY 0x2F\r
-#define READ_DEFECT_DATA 0x37\r
-#define WRITE_BUFFER 0x38\r
-#define READ_BUFFER 0x3C\r
-#define READ_LONG 0x3E\r
-#define WRITE_LONG 0x3F\r
-#define MODE_SELECT 0x55\r
-#define UFI_MODE_SENSE5A 0x5A\r
-#define SCSI_MODE_SENSE1A 0x1A\r
-#define READ_12 0xA8\r
-#define WRITE_12 0xAA\r
-#define MAX_ATAPI_BYTE_COUNT (0xfffe)\r
-\r
-//\r
-// Sense Key\r
-//\r
-#define REQUEST_SENSE_ERROR (0x70)\r
-#define SK_NO_SENSE (0x0)\r
-#define SK_RECOVERY_ERROR (0x1)\r
-#define SK_NOT_READY (0x2)\r
-#define SK_MEDIUM_ERROR (0x3)\r
-#define SK_HARDWARE_ERROR (0x4)\r
-#define SK_ILLEGAL_REQUEST (0x5)\r
-#define SK_UNIT_ATTENTION (0x6)\r
-#define SK_DATA_PROTECT (0x7)\r
-#define SK_BLANK_CHECK (0x8)\r
-#define SK_VENDOR_SPECIFIC (0x9)\r
-#define SK_RESERVED_A (0xA)\r
-#define SK_ABORT (0xB)\r
-#define SK_RESERVED_C (0xC)\r
-#define SK_OVERFLOW (0xD)\r
-#define SK_MISCOMPARE (0xE)\r
-#define SK_RESERVED_F (0xF)\r
-\r
-//\r
-// Additional Sense Codes\r
-//\r
-#define ASC_NOT_READY (0x04)\r
-#define ASC_MEDIA_ERR1 (0x10)\r
-#define ASC_MEDIA_ERR2 (0x11)\r
-#define ASC_MEDIA_ERR3 (0x14)\r
-#define ASC_MEDIA_ERR4 (0x30)\r
-#define ASC_MEDIA_UPSIDE_DOWN (0x06)\r
-#define ASC_INVALID_CMD (0x20)\r
-#define ASC_LBA_OUT_OF_RANGE (0x21)\r
-#define ASC_INVALID_FIELD (0x24)\r
-#define ASC_WRITE_PROTECTED (0x27)\r
-#define ASC_MEDIA_CHANGE (0x28)\r
-#define ASC_RESET (0x29) /* Power On Reset or Bus Reset occurred */\r
-#define ASC_ILLEGAL_FIELD (0x26)\r
-#define ASC_NO_MEDIA (0x3A)\r
-#define ASC_ILLEGAL_MODE_FOR_THIS_TRACK (0x64)\r
-#define ASC_LOGICAL_UNIT_STATUS (0x08)\r
-\r
-//\r
-// Additional Sense Code Qualifier\r
-//\r
-#define ASCQ_IN_PROGRESS (0x01)\r
-#define ASCQ_DEVICE_BUSY (0xff)\r
-#define ASCQ_LOGICAL_UNIT_FAILURE (0x00)\r
-#define ASCQ_LOGICAL_UNIT_TIMEOUT (0x01)\r
-#define ASCQ_LOGICAL_UNIT_OVERRUN (0x80)\r
-\r
-#define SETFEATURE TRUE\r
-#define CLEARFEATURE FALSE\r
-\r
-//\r
-// ATAPI Data structure\r
-//\r
-#pragma pack(1)\r
-\r
-typedef struct {\r
- UINT8 peripheral_type;\r
- UINT8 RMB;\r
- UINT8 version;\r
- UINT8 response_data_format;\r
- UINT8 addnl_length;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 reserved_7;\r
- UINT8 vendor_info[8];\r
- UINT8 product_id[12];\r
- UINT8 eeprom_product_code[4];\r
- UINT8 firmware_rev_level[4];\r
-} USB_INQUIRY_DATA;\r
-\r
-typedef struct {\r
- UINT8 error_code : 7;\r
- UINT8 valid : 1;\r
- UINT8 reserved_1;\r
- UINT8 sense_key : 4;\r
- UINT8 reserved_21 : 1;\r
- UINT8 ILI : 1;\r
- UINT8 reserved_22 : 2;\r
- UINT8 vendor_specific_3;\r
- UINT8 vendor_specific_4;\r
- UINT8 vendor_specific_5;\r
- UINT8 vendor_specific_6;\r
- UINT8 addnl_sense_length; // n - 7\r
- UINT8 vendor_specific_8;\r
- UINT8 vendor_specific_9;\r
- UINT8 vendor_specific_10;\r
- UINT8 vendor_specific_11;\r
- UINT8 addnl_sense_code; // mandatory\r
- UINT8 addnl_sense_code_qualifier; // mandatory\r
- UINT8 field_replaceable_unit_code; // optional\r
- UINT8 reserved_15;\r
- UINT8 reserved_16;\r
- UINT8 reserved_17;\r
- //\r
- // Followed by additional sense bytes : FIXME\r
- //\r
-} REQUEST_SENSE_DATA;\r
-\r
-typedef struct {\r
- UINT8 LastLba3;\r
- UINT8 LastLba2;\r
- UINT8 LastLba1;\r
- UINT8 LastLba0;\r
- UINT8 BlockSize3;\r
- UINT8 BlockSize2;\r
- UINT8 BlockSize1;\r
- UINT8 BlockSize0;\r
-} READ_CAPACITY_DATA;\r
-\r
-typedef struct {\r
- UINT8 reserved_0;\r
- UINT8 reserved_1;\r
- UINT8 reserved_2;\r
- UINT8 Capacity_Length;\r
- UINT8 LastLba3;\r
- UINT8 LastLba2;\r
- UINT8 LastLba1;\r
- UINT8 LastLba0;\r
- UINT8 DesCode : 2;\r
- UINT8 reserved_9 : 6;\r
- UINT8 BlockSize2;\r
- UINT8 BlockSize1;\r
- UINT8 BlockSize0;\r
-} READ_FORMAT_CAPACITY_DATA;\r
-\r
-typedef struct {\r
- UINT8 mode_data_len_hi;\r
- UINT8 mode_data_len_lo;\r
- UINT8 media_type_code;\r
- UINT8 reserved_3_0 : 4;\r
- UINT8 dpofua : 1;\r
- UINT8 reserved_3_1 : 2;\r
- UINT8 write_protected : 1;\r
- UINT8 reserved_4;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 reserved_7;\r
-} UFI_MODE_PARAMETER_HEADER;\r
-\r
-typedef struct {\r
- UINT8 mode_data_len;\r
- UINT8 media_type_code;\r
- UINT8 speed : 4;\r
- UINT8 buffered_mode : 3;\r
- UINT8 write_protected : 1;\r
- UINT8 block_descritptor_length;\r
-} SCSI_MODE_PARAMETER_HEADER6;\r
-\r
-typedef struct {\r
- UINT8 page_code : 6;\r
- UINT8 reserved_0 : 1;\r
- UINT8 parameter_savable : 1;\r
- UINT8 page_length;\r
- UINT8 transfer_rate_msb;\r
- UINT8 transfer_rate_lsb;\r
- UINT8 number_of_heads;\r
- UINT8 sectors_per_track;\r
- UINT8 databytes_per_sector_msb;\r
- UINT8 databytes_per_sector_lsb;\r
- UINT8 number_of_cylinders_msb;\r
- UINT8 number_of_cylinders_lsb;\r
- UINT8 reserved_10_18[9];\r
- UINT8 motor_on_delay;\r
- UINT8 motor_off_delay;\r
- UINT8 reserved_21_27[7];\r
- UINT8 medium_rotation_rate_msb;\r
- UINT8 medium_rotation_rate_lsb;\r
- UINT8 reserved_30_31[2];\r
-} FLEXIBLE_DISK_PAGE;\r
-\r
-typedef struct {\r
- UFI_MODE_PARAMETER_HEADER mode_param_header;\r
- FLEXIBLE_DISK_PAGE flex_disk_page;\r
-} UFI_MODE_PARAMETER_PAGE_5;\r
-\r
-typedef struct {\r
- UINT8 page_code : 6;\r
- UINT8 reserved_0 : 1;\r
- UINT8 parameter_savable : 1;\r
- UINT8 page_length;\r
- UINT8 reserved_2;\r
- UINT8 inactive_time_multplier : 4;\r
- UINT8 reserved_3 : 4;\r
- UINT8 software_write_protect : 1;\r
- UINT8 disable_media_access : 1;\r
- UINT8 reserved_4 : 6;\r
- UINT8 reserved_5;\r
- UINT8 reserved_6;\r
- UINT8 reserved_7;\r
-} TIMER_AND_PROTECT_PAGE;\r
-\r
-typedef struct {\r
- UFI_MODE_PARAMETER_HEADER mode_param_header;\r
- TIMER_AND_PROTECT_PAGE time_and_protect_page;\r
-} UFI_MODE_PARAMETER_PAGE_1C;\r
-\r
-#pragma pack()\r
-\r
-#endif\r