289 lines
9.2 KiB
C
289 lines
9.2 KiB
C
/*
|
|
* this header holds data structures as dictated by spec
|
|
*/
|
|
#ifndef HDREG_H
|
|
#define HDREG_H
|
|
|
|
struct hd_driveid {
|
|
unsigned short config; /* lots of obsolete bit flags */
|
|
unsigned short cyls; /* Obsolete, "physical" cyls */
|
|
unsigned short reserved2; /* reserved (word 2) */
|
|
unsigned short heads; /* Obsolete, "physical" heads */
|
|
unsigned short track_bytes; /* unformatted bytes per track */
|
|
unsigned short sector_bytes; /* unformatted bytes per sector */
|
|
unsigned short sectors; /* Obsolete, "physical" sectors per track */
|
|
unsigned short vendor0; /* vendor unique */
|
|
unsigned short vendor1; /* vendor unique */
|
|
unsigned short vendor2; /* Retired vendor unique */
|
|
unsigned char serial_no[20]; /* 0 = not_specified */
|
|
unsigned short buf_type; /* Retired */
|
|
unsigned short buf_size; /* Retired, 512 byte increments
|
|
* 0 = not_specified
|
|
*/
|
|
unsigned short ecc_bytes; /* for r/w long cmds; 0 = not_specified */
|
|
unsigned char fw_rev[8]; /* 0 = not_specified */
|
|
unsigned char model[40]; /* 0 = not_specified */
|
|
unsigned char max_multsect; /* 0=not_implemented */
|
|
unsigned char vendor3; /* vendor unique */
|
|
unsigned short dword_io; /* 0=not_implemented; 1=implemented */
|
|
unsigned char vendor4; /* vendor unique */
|
|
unsigned char capability; /* (upper byte of word 49)
|
|
* 3: IORDYsup
|
|
* 2: IORDYsw
|
|
* 1: LBA
|
|
* 0: DMA
|
|
*/
|
|
unsigned short reserved50; /* reserved (word 50) */
|
|
unsigned char vendor5; /* Obsolete, vendor unique */
|
|
unsigned char tPIO; /* Obsolete, 0=slow, 1=medium, 2=fast */
|
|
unsigned char vendor6; /* Obsolete, vendor unique */
|
|
unsigned char tDMA; /* Obsolete, 0=slow, 1=medium, 2=fast */
|
|
unsigned short field_valid; /* (word 53)
|
|
* 2: ultra_ok word 88
|
|
* 1: eide_ok words 64-70
|
|
* 0: cur_ok words 54-58
|
|
*/
|
|
unsigned short cur_cyls; /* Obsolete, logical cylinders */
|
|
unsigned short cur_heads; /* Obsolete, l heads */
|
|
unsigned short cur_sectors; /* Obsolete, l sectors per track */
|
|
unsigned short cur_capacity0; /* Obsolete, l total sectors on drive */
|
|
unsigned short cur_capacity1; /* Obsolete, (2 words, misaligned int) */
|
|
unsigned char multsect; /* current multiple sector count */
|
|
unsigned char multsect_valid; /* when (bit0==1) multsect is ok */
|
|
unsigned int lba_capacity; /* Obsolete, total number of sectors */
|
|
unsigned short dma_1word; /* Obsolete, single-word dma info */
|
|
unsigned short dma_mword; /* multiple-word dma info */
|
|
unsigned short eide_pio_modes; /* bits 0:mode3 1:mode4 */
|
|
unsigned short eide_dma_min; /* min mword dma cycle time (ns) */
|
|
unsigned short eide_dma_time; /* recommended mword dma cycle time (ns) */
|
|
unsigned short eide_pio; /* min cycle time (ns), no IORDY */
|
|
unsigned short eide_pio_iordy; /* min cycle time (ns), with IORDY */
|
|
unsigned short words69_70[2]; /* reserved words 69-70
|
|
* future command overlap and queuing
|
|
*/
|
|
/* HDIO_GET_IDENTITY currently returns only words 0 through 70 */
|
|
unsigned short words71_74[4]; /* reserved words 71-74
|
|
* for IDENTIFY PACKET DEVICE command
|
|
*/
|
|
unsigned short queue_depth; /* (word 75)
|
|
* 15:5 reserved
|
|
* 4:0 Maximum queue depth -1
|
|
*/
|
|
unsigned short words76_79[4]; /* reserved words 76-79 */
|
|
unsigned short major_rev_num; /* (word 80) */
|
|
unsigned short minor_rev_num; /* (word 81) */
|
|
unsigned short command_set_1; /* (word 82) supported
|
|
* 15: Obsolete
|
|
* 14: NOP command
|
|
* 13: READ_BUFFER
|
|
* 12: WRITE_BUFFER
|
|
* 11: Obsolete
|
|
* 10: Host Protected Area
|
|
* 9: DEVICE Reset
|
|
* 8: SERVICE Interrupt
|
|
* 7: Release Interrupt
|
|
* 6: look-ahead
|
|
* 5: write cache
|
|
* 4: PACKET Command
|
|
* 3: Power Management Feature Set
|
|
* 2: Removable Feature Set
|
|
* 1: Security Feature Set
|
|
* 0: SMART Feature Set
|
|
*/
|
|
unsigned short command_set_2; /* (word 83)
|
|
* 15: Shall be ZERO
|
|
* 14: Shall be ONE
|
|
* 13: FLUSH CACHE EXT
|
|
* 12: FLUSH CACHE
|
|
* 11: Device Configuration Overlay
|
|
* 10: 48-bit Address Feature Set
|
|
* 9: Automatic Acoustic Management
|
|
* 8: SET MAX security
|
|
* 7: reserved 1407DT PARTIES
|
|
* 6: SetF sub-command Power-Up
|
|
* 5: Power-Up in Standby Feature Set
|
|
* 4: Removable Media Notification
|
|
* 3: APM Feature Set
|
|
* 2: CFA Feature Set
|
|
* 1: READ/WRITE DMA QUEUED
|
|
* 0: Download MicroCode
|
|
*/
|
|
unsigned short cfsse; /* (word 84)
|
|
* cmd set-feature supported extensions
|
|
* 15: Shall be ZERO
|
|
* 14: Shall be ONE
|
|
* 13:6 reserved
|
|
* 5: General Purpose Logging
|
|
* 4: Streaming Feature Set
|
|
* 3: Media Card Pass Through
|
|
* 2: Media Serial Number Valid
|
|
* 1: SMART selt-test supported
|
|
* 0: SMART error logging
|
|
*/
|
|
unsigned short cfs_enable_1; /* (word 85)
|
|
* command set-feature enabled
|
|
* 15: Obsolete
|
|
* 14: NOP command
|
|
* 13: READ_BUFFER
|
|
* 12: WRITE_BUFFER
|
|
* 11: Obsolete
|
|
* 10: Host Protected Area
|
|
* 9: DEVICE Reset
|
|
* 8: SERVICE Interrupt
|
|
* 7: Release Interrupt
|
|
* 6: look-ahead
|
|
* 5: write cache
|
|
* 4: PACKET Command
|
|
* 3: Power Management Feature Set
|
|
* 2: Removable Feature Set
|
|
* 1: Security Feature Set
|
|
* 0: SMART Feature Set
|
|
*/
|
|
unsigned short cfs_enable_2; /* (word 86)
|
|
* command set-feature enabled
|
|
* 15: Shall be ZERO
|
|
* 14: Shall be ONE
|
|
* 13: FLUSH CACHE EXT
|
|
* 12: FLUSH CACHE
|
|
* 11: Device Configuration Overlay
|
|
* 10: 48-bit Address Feature Set
|
|
* 9: Automatic Acoustic Management
|
|
* 8: SET MAX security
|
|
* 7: reserved 1407DT PARTIES
|
|
* 6: SetF sub-command Power-Up
|
|
* 5: Power-Up in Standby Feature Set
|
|
* 4: Removable Media Notification
|
|
* 3: APM Feature Set
|
|
* 2: CFA Feature Set
|
|
* 1: READ/WRITE DMA QUEUED
|
|
* 0: Download MicroCode
|
|
*/
|
|
unsigned short csf_default; /* (word 87)
|
|
* command set-feature default
|
|
* 15: Shall be ZERO
|
|
* 14: Shall be ONE
|
|
* 13:6 reserved
|
|
* 5: General Purpose Logging enabled
|
|
* 4: Valid CONFIGURE STREAM executed
|
|
* 3: Media Card Pass Through enabled
|
|
* 2: Media Serial Number Valid
|
|
* 1: SMART selt-test supported
|
|
* 0: SMART error logging
|
|
*/
|
|
unsigned short dma_ultra; /* (word 88) */
|
|
unsigned short trseuc; /* time required for security erase */
|
|
unsigned short trsEuc; /* time required for enhanced erase */
|
|
unsigned short CurAPMvalues; /* current APM values */
|
|
unsigned short mprc; /* master password revision code */
|
|
unsigned short hw_config; /* hardware config (word 93)
|
|
* 15: Shall be ZERO
|
|
* 14: Shall be ONE
|
|
* 13:
|
|
* 12:
|
|
* 11:
|
|
* 10:
|
|
* 9:
|
|
* 8:
|
|
* 7:
|
|
* 6:
|
|
* 5:
|
|
* 4:
|
|
* 3:
|
|
* 2:
|
|
* 1:
|
|
* 0: Shall be ONE
|
|
*/
|
|
unsigned short acoustic; /* (word 94)
|
|
* 15:8 Vendor's recommended value
|
|
* 7:0 current value
|
|
*/
|
|
unsigned short msrqs; /* min stream request size */
|
|
unsigned short sxfert; /* stream transfer time */
|
|
unsigned short sal; /* stream access latency */
|
|
unsigned int spg; /* stream performance granularity */
|
|
unsigned long long lba_capacity_2;/* 48-bit total number of sectors */
|
|
unsigned short words104_125[22];/* reserved words 104-125 */
|
|
unsigned short last_lun; /* (word 126) */
|
|
unsigned short word127; /* (word 127) Feature Set
|
|
* Removable Media Notification
|
|
* 15:2 reserved
|
|
* 1:0 00 = not supported
|
|
* 01 = supported
|
|
* 10 = reserved
|
|
* 11 = reserved
|
|
*/
|
|
unsigned short dlf; /* (word 128)
|
|
* device lock function
|
|
* 15:9 reserved
|
|
* 8 security level 1:max 0:high
|
|
* 7:6 reserved
|
|
* 5 enhanced erase
|
|
* 4 expire
|
|
* 3 frozen
|
|
* 2 locked
|
|
* 1 en/disabled
|
|
* 0 capability
|
|
*/
|
|
unsigned short csfo; /* (word 129)
|
|
* current set features options
|
|
* 15:4 reserved
|
|
* 3: auto reassign
|
|
* 2: reverting
|
|
* 1: read-look-ahead
|
|
* 0: write cache
|
|
*/
|
|
unsigned short words130_155[26];/* reserved vendor words 130-155 */
|
|
unsigned short word156; /* reserved vendor word 156 */
|
|
unsigned short words157_159[3];/* reserved vendor words 157-159 */
|
|
unsigned short cfa_power; /* (word 160) CFA Power Mode
|
|
* 15 word 160 supported
|
|
* 14 reserved
|
|
* 13
|
|
* 12
|
|
* 11:0
|
|
*/
|
|
unsigned short words161_175[15];/* Reserved for CFA */
|
|
unsigned short words176_205[30];/* Current Media Serial Number */
|
|
unsigned short words206_254[49];/* reserved words 206-254 */
|
|
unsigned short integrity_word; /* (word 255)
|
|
* 15:8 Checksum
|
|
* 7:0 Signature
|
|
*/
|
|
};
|
|
|
|
struct request_sense {
|
|
#if defined(CONFIG_BIG_ENDIAN)
|
|
u8 valid : 1;
|
|
u8 error_code : 7;
|
|
#elif defined(CONFIG_LITTLE_ENDIAN)
|
|
u8 error_code : 7;
|
|
u8 valid : 1;
|
|
#endif
|
|
u8 segment_number;
|
|
#if defined(CONFIG_BIG_ENDIAN)
|
|
u8 reserved1 : 2;
|
|
u8 ili : 1;
|
|
u8 reserved2 : 1;
|
|
u8 sense_key : 4;
|
|
#elif defined(CONFIG_LITTLE_ENDIAN)
|
|
u8 sense_key : 4;
|
|
u8 reserved2 : 1;
|
|
u8 ili : 1;
|
|
u8 reserved1 : 2;
|
|
#endif
|
|
u8 information[4];
|
|
u8 add_sense_len;
|
|
u8 command_info[4];
|
|
u8 asc;
|
|
u8 ascq;
|
|
u8 fruc;
|
|
u8 sks[3];
|
|
u8 asb[46];
|
|
};
|
|
|
|
struct atapi_capacity {
|
|
u32 lba;
|
|
u32 block_size;
|
|
};
|
|
|
|
#endif
|