⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbmassstoragedata.h

📁 Next BIOS Source code : Extensible Firmware Interface
💻 H
字号:
/*++
Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
This software and associated documentation (if any) is furnished
under a license and may only be used or copied in accordance
with the terms of the license. Except as permitted by such
license, no part of this software or documentation may be
reproduced, stored in a retrieval system, or transmitted in any
form or by any means without the express written consent of
Intel Corporation.


Module Name:

    UsbMassStorageData.h

Abstract:

    Header file for USB Mass Storage Device related Data Structures

Revision History
++*/

#ifndef _USB_FLP_DATA_H
#define _USB_FLP_DATA_H

//
// bit definition 
//
#define bit(a)  1 << (a)

// timeout unit is in millisecond.
#define USBFLPTIMEOUT   2000
#define STALL_1_MILLI_SECOND  1000

//
// ATAPI Packet Command 
//
#pragma pack(1)

typedef struct{
    UINT8   opcode;
    UINT8   reserved_1;
    UINT8   reserved_2;
    UINT8   reserved_3;
    UINT8   reserved_4;
    UINT8   reserved_5;
    UINT8   reserved_6;
    UINT8   reserved_7;
    UINT8   reserved_8;
    UINT8   reserved_9;
    UINT8   reserved_10;
    UINT8   reserved_11;
}TEST_UNIT_READY_CMD;

typedef struct {
    UINT8   opcode;
    UINT8   reserved_1 : 4;
    UINT8   lun : 4;
    UINT8   page_code;
    UINT8   reserved_3;
    UINT8   allocation_length;
    UINT8   reserved_5;
    UINT8   reserved_6;
    UINT8   reserved_7;
    UINT8   reserved_8;
    UINT8   reserved_9;
    UINT8   reserved_10;
    UINT8   reserved_11;
} INQUIRY_CMD;


typedef struct { 
    UINT8   opcode;
    UINT8   reserved_1 : 4;
    UINT8   lun : 4;
    UINT8   reserved_2;
    UINT8   reserved_3;
    UINT8   allocation_length;
    UINT8   reserved_5;
    UINT8   reserved_6;
    UINT8   reserved_7;
    UINT8   reserved_8;
    UINT8   reserved_9;
    UINT8   reserved_10;
    UINT8   reserved_11;
} REQUEST_SENSE_CMD;

typedef struct {
    UINT8 opcode;
    UINT8 reserved_1 : 4;
    UINT8 lun : 4;
    UINT8 page_code : 6;
    UINT8 page_control : 2;
    UINT8 reserved_3;
    UINT8 reserved_4;
    UINT8 reserved_5;
    UINT8 reserved_6;
    UINT8 parameter_list_length_hi;
    UINT8 parameter_list_length_lo;
    UINT8 reserved_9;
    UINT8 reserved_10;
    UINT8 reserved_11;
} MODE_SENSE_CMD;

typedef struct {
    UINT8   opcode;
    UINT8   reserved_1 : 5 ;
    UINT8   lun : 3 ;
    UINT8   Lba0;
    UINT8   Lba1;
    UINT8   Lba2;
    UINT8   Lba3;
    UINT8   reserved_6;
    UINT8   TranLen0;
    UINT8   TranLen1;
    UINT8   reserved_9;
    UINT8   reserved_10;
    UINT8   reserved_11;
} READ10_CMD;

typedef struct {
  UINT8 opcode ;
  UINT8 reserved_1 ;
  UINT8 reserved_2 ;
  UINT8 reserved_3 ;
  UINT8 reserved_4 ;
  UINT8 reserved_5 ;
  UINT8 reserved_6 ;
  UINT8 allocation_length_hi ;
  UINT8 allocation_length_lo ;
  UINT8 reserved_9 ;
  UINT8 reserved_10 ;
  UINT8 reserved_11 ;
} READ_FORMAT_CAP_CMD ;

typedef union {
    UINT16                Data16[6];          
    TEST_UNIT_READY_CMD   TestUnitReady;
    READ10_CMD            Read10;
//    READ12_CMD            Read12;
    REQUEST_SENSE_CMD     RequestSense;
    INQUIRY_CMD           Inquiry;
    MODE_SENSE_CMD        ModeSense;
    READ_FORMAT_CAP_CMD   ReadFormatCapacity;
} ATAPI_PACKET_COMMAND;

#pragma pack()

//
// Packet Command Code
//
#define TEST_UNIT_READY                 0x00
#define REZERO                          0x01
#define REQUEST_SENSE                   0x03
#define FORMAT_UNIT                     0x04
#define REASSIGN_BLOCKS                 0x07
#define INQUIRY                         0x12
#define START_STOP_UNIT                 0x1B
#define PREVENT_ALLOW_MEDIA_REMOVAL     0x1E
#define READ_FORMAT_CAPACITY            0x23
#define OLD_FORMAT_UNIT                 0x24
#define READ_CAPACITY                   0x25
#define READ_10                         0x28
#define WRITE_10                        0x2A
#define SEEK                            0x2B
#define SEND_DIAGNOSTICS                0x3D
#define WRITE_VERIFY                    0x2E
#define VERIFY                          0x2F
#define READ_DEFECT_DATA                0x37
#define WRITE_BUFFER                    0x38
#define READ_BUFFER                     0x3C
#define READ_LONG                       0x3E
#define WRITE_LONG                      0x3F
#define MODE_SELECT                     0x55
#define MODE_SENSE                      0x5A
#define READ_12                         0xA8
#define WRITE_12                        0xAA
#define MAX_ATAPI_BYTE_COUNT (0xfffe)

//
// Sense Key
//
#define REQUEST_SENSE_ERROR (0x70)
#define SK_NO_SENSE         (0x0)
#define SK_RECOVERY_ERROR   (0x1)
#define SK_NOT_READY        (0x2)
#define SK_MEDIUM_ERROR     (0x3)
#define SK_HARDWARE_ERROR   (0x4)
#define SK_ILLEGAL_REQUEST  (0x5)
#define SK_UNIT_ATTENTION   (0x6)
#define SK_DATA_PROTECT     (0x7)
#define SK_BLANK_CHECK      (0x8)
#define SK_VENDOR_SPECIFIC  (0x9)
#define SK_RESERVED_A       (0xA)
#define SK_ABORT            (0xB)
#define SK_RESERVED_C       (0xC)
#define SK_OVERFLOW         (0xD)
#define SK_MISCOMPARE       (0xE)
#define SK_RESERVED_F       (0xF)

//
// Additional Sense Codes 
//
#define ASC_NOT_READY         (0x04)
#define ASC_MEDIA_ERR1        (0x10)
#define ASC_MEDIA_ERR2        (0x11)
#define ASC_MEDIA_ERR3        (0x14)
#define ASC_MEDIA_ERR4        (0x30)
#define ASC_MEDIA_UPSIDE_DOWN (0x06)
#define ASC_INVALID_CMD       (0x20)
#define ASC_LBA_OUT_OF_RANGE  (0x21)
#define ASC_INVALID_FIELD     (0x24)
#define ASC_WRITE_PROTECTED   (0x27)
#define ASC_MEDIA_CHANGE      (0x28)
#define ASC_RESET             (0x29) /* Power On Reset or Bus Reset occurred */
#define ASC_ILLEGAL_FIELD     (0x26)
#define ASC_NO_MEDIA          (0x3A)
#define ASC_ILLEGAL_MODE_FOR_THIS_TRACK   (0x64)
#define ASC_LOGICAL_UNIT_STATUS   (0x08)

//
// Additional Sense Code Qualifier
//
#define ASCQ_IN_PROGRESS    (0x01)
#define ASCQ_DEVICE_BUSY    (0xff)
#define ASCQ_LOGICAL_UNIT_FAILURE   (0x00)
#define ASCQ_LOGICAL_UNIT_TIMEOUT   (0x01)
#define ASCQ_LOGICAL_UNIT_OVERRUN   (0x80)


#define SETFEATURE      TRUE
#define CLEARFEATURE    FALSE

//
//  ATAPI Data structure
//
#pragma pack(1)

typedef struct {
    UINT8   peripheral_type;
    UINT8   RMB;
    UINT8   version;
    UINT8   response_data_format;
    UINT8   addnl_length;
    UINT8   reserved_5;
    UINT8   reserved_6;
    UINT8   reserved_7;
    UINT8   vendor_info[8];
    UINT8   product_id[12];
    UINT8   eeprom_product_code[4];
    UINT8   firmware_rev_level[4];
} USB_INQUIRY_DATA;
/*    
typedef struct {
    UINT8   peripheral_type;
    UINT8   RMB;
    UINT8   version;
    UINT8   response_data_format;
    UINT8   addnl_length;
    UINT8   reserved_5;
    UINT8   reserved_6;
    UINT8   reserved_7;
    UINT8   vendor_info[8];
    UINT8   product_id[12];
    UINT8   eeprom_product_code[4];
    UINT8   firmware_rev_level[4];
    UINT8   firmware_sub_rev_level[1];
    UINT8   reserved_37;
    UINT8   reserved_38;
    UINT8   reserved_39;
    UINT8   max_capacity_hi;
    UINT8   max_capacity_mid;
    UINT8   max_capacity_lo;
    UINT8   reserved_43_95[95-43+1];
    UINT8   vendor_id[20];
    UINT8   eeprom_drive_sno[12];
} INQUIRY_DATA;


typedef struct {
    UINT8   peripheral_type;
    UINT8   RMB;
    UINT8   version;
    UINT8   response_data_format;
    UINT8   addnl_length;
    UINT8   reserved_5;
    UINT8   reserved_6;
    UINT8   reserved_7;
    UINT8   vendor_info[8];
    UINT8   product_id[16];
    UINT8   product_revision_level[4];
    UINT8   vendor_specific[20];
    UINT8   reserved_56_95[40];
} CDROM_INQUIRY_DATA;
*/
typedef struct {    
    UINT8   error_code : 7;
    UINT8   valid : 1;
    UINT8   reserved_1;
    UINT8   sense_key: 4;
    UINT8   reserved_21:1;
    UINT8   ILI:1;
    UINT8   reserved_22 : 2;
   // UINT8   vendor_specific_2: 3;
    UINT8   vendor_specific_3;
    UINT8   vendor_specific_4;
    UINT8   vendor_specific_5;
    UINT8   vendor_specific_6;
    UINT8   addnl_sense_length; // n - 7
    UINT8   vendor_specific_8;
    UINT8   vendor_specific_9;
    UINT8   vendor_specific_10;
    UINT8   vendor_specific_11;
    UINT8   addnl_sense_code;       // mandatory
    UINT8   addnl_sense_code_qualifier;     // mandatory
    UINT8   field_replaceable_unit_code;        // optional
    UINT8   reserved_15;
    UINT8   reserved_16;
    UINT8   reserved_17;
    // Followed by additional sense bytes     : FIXME
} REQUEST_SENSE_DATA;

typedef struct {
    UINT8   LastLba3;
    UINT8   LastLba2;
    UINT8   LastLba1;
    UINT8   LastLba0;
    UINT8   BlockSize3;
    UINT8   BlockSize2;
    UINT8   BlockSize1;
    UINT8   BlockSize0;
} READ_CAPACITY_DATA;

typedef struct {
  UINT8 reserved_0 ;
  UINT8 reserved_1 ;
  UINT8 reserved_2 ;
  UINT8 Capacity_Length ;
  UINT8 LastLba3 ;
    UINT8   LastLba2 ;
    UINT8   LastLba1 ;
    UINT8   LastLba0 ;
  UINT8 DesCode:2 ;
    UINT8   reserved_9:6 ;
    UINT8   BlockSize2 ;
    UINT8   BlockSize1 ;
    UINT8   BlockSize0 ;
} READ_FORMAT_CAPACITY_DATA ;

typedef struct {
  UINT8   mode_data_len_hi;
  UINT8   mode_data_len_lo;
  UINT8   media_type_code;
  UINT8   reserved_3_0:4;
  UINT8   dpofua:1;
  UINT8   reserved_3_1:2;
  UINT8   write_protected:1;
  UINT8   reserved_4;
  UINT8   reserved_5;
  UINT8   reserved_6;
  UINT8   reserved_7;
} MODE_PARAMETER_HEADER;

typedef struct {
  UINT8   page_code:6;
  UINT8   reserved_0:1;
  UINT8   parameter_savable:1;
  UINT8   page_length;
  UINT8   transfer_rate_msb;
  UINT8   transfer_rate_lsb;
  UINT8   number_of_heads;
  UINT8   sectors_per_track;
  UINT8   databytes_per_sector_msb;
  UINT8   databytes_per_sector_lsb;
  UINT8   number_of_cylinders_msb;
  UINT8   number_of_cylinders_lsb;
  UINT8   reserved_10_18[9];
  UINT8   motor_on_delay;
  UINT8   motor_off_delay;
  UINT8   reserved_21_27[7];
  UINT8   medium_rotation_rate_msb;
  UINT8   medium_rotation_rate_lsb;
  UINT8   reserved_30_31[2];
} FLEXIBLE_DISK_PAGE;
typedef struct {
  MODE_PARAMETER_HEADER   mode_param_header;
  FLEXIBLE_DISK_PAGE      flex_disk_page;
} MODE_PARAMETER_PAGE_5;


typedef struct {
  UINT8   page_code:6;
  UINT8   reserved_0:1;
  UINT8   parameter_savable:1;
  UINT8   page_length;
  UINT8   reserved_2;
  UINT8   inactive_time_multplier:4;
  UINT8   reserved_3:4;
  UINT8   software_write_protect:1;
  UINT8   disable_media_access:1;
  UINT8   reserved_4:6;
  UINT8   reserved_5;
  UINT8   reserved_6;
  UINT8   reserved_7;
} TIMER_AND_PROTECT_PAGE;
typedef struct {
  MODE_PARAMETER_HEADER   mode_param_header;
  TIMER_AND_PROTECT_PAGE  time_and_protect_page;
} MODE_PARAMETER_PAGE_1C;
  
  
#pragma pack()

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -