]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/IndustryStandard/Atapi.h
Set correct workspace when workspace is not set.
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Atapi.h
CommitLineData
8bdadcc8 1/** @file\r
37640ed3 2 This file contains just some basic definitions that are needed by drivers\r
3 that dealing with ATA/ATAPI interface.\r
8bdadcc8 4\r
81dac930 5Copyright (c) 2007 - 2009, Intel Corporation\r
8bdadcc8 6All rights reserved. This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
42eedea9 16#ifndef _ATAPI_H_\r
17#define _ATAPI_H_\r
8bdadcc8 18\r
766f4bc1 19#pragma pack(1)\r
20\r
81dac930 21///\r
22/// ATA_IDENTIFY_DATA is defined in ATA-5\r
23///\r
24typedef struct { \r
25 UINT16 config; ///< General Configuration \r
26 UINT16 cylinders; ///< Number of Cylinders \r
27 UINT16 reserved_2; \r
28 UINT16 heads; ///< Number of logical heads \r
29 UINT16 vendor_data1; \r
30 UINT16 vendor_data2; \r
31 UINT16 sectors_per_track; \r
32 UINT16 vendor_specific_7_9[3]; \r
33 CHAR8 SerialNo[20]; ///< ASCII \r
34 UINT16 vendor_specific_20_21[2]; \r
35 UINT16 ecc_bytes_available; \r
36 CHAR8 FirmwareVer[8]; ///< ASCII \r
37 CHAR8 ModelName[40]; ///< ASCII \r
38 UINT16 multi_sector_cmd_max_sct_cnt; \r
39 UINT16 reserved_48; \r
40 UINT16 capabilities; \r
41 UINT16 reserved_50; \r
42 UINT16 pio_cycle_timing; \r
43 UINT16 reserved_52; \r
44 UINT16 field_validity; \r
45 UINT16 current_cylinders; \r
46 UINT16 current_heads; \r
47 UINT16 current_sectors; \r
48 UINT16 CurrentCapacityLsb; \r
49 UINT16 CurrentCapacityMsb; \r
50 UINT16 reserved_59; \r
51 UINT16 user_addressable_sectors_lo; \r
52 UINT16 user_addressable_sectors_hi; \r
53 UINT16 reserved_62; \r
54 UINT16 multi_word_dma_mode; \r
55 UINT16 advanced_pio_modes; \r
56 UINT16 min_multi_word_dma_cycle_time; \r
57 UINT16 rec_multi_word_dma_cycle_time; \r
58 UINT16 min_pio_cycle_time_without_flow_control; \r
59 UINT16 min_pio_cycle_time_with_flow_control; \r
60 UINT16 reserved_69_79[11]; \r
61 UINT16 major_version_no; \r
62 UINT16 minor_version_no; \r
63 UINT16 command_set_supported_82; ///< word 82 \r
64 UINT16 command_set_supported_83; ///< word 83 \r
65 UINT16 command_set_feature_extn; ///< word 84 \r
66 UINT16 command_set_feature_enb_85; ///< word 85 \r
67 UINT16 command_set_feature_enb_86; ///< word 86 \r
68 UINT16 command_set_feature_default; ///< word 87 \r
69 UINT16 ultra_dma_mode; ///< word 88 \r
70 UINT16 reserved_89_127[39]; \r
71 UINT16 security_status; \r
72 UINT16 vendor_data_129_159[31]; \r
73 UINT16 reserved_160_255[96]; \r
74} ATA_IDENTIFY_DATA;\r
75\r
1bc5d021 76///\r
77/// ATAPI_IDENTIFY_DATA is defined in ATA-6\r
78///\r
8bdadcc8 79typedef struct {\r
37640ed3 80 UINT16 config; ///< General Configuration\r
8bdadcc8 81 UINT16 obsolete_1;\r
82 UINT16 specific_config;\r
83 UINT16 obsolete_3;\r
84 UINT16 retired_4_5[2];\r
85 UINT16 obsolete_6;\r
86 UINT16 cfa_reserved_7_8[2];\r
87 UINT16 retired_9;\r
37640ed3 88 CHAR8 SerialNo[20]; ///< ASCII\r
8bdadcc8 89 UINT16 retired_20_21[2];\r
90 UINT16 obsolete_22;\r
37640ed3 91 CHAR8 FirmwareVer[8]; ///< ASCII\r
92 CHAR8 ModelName[40]; ///< ASCII\r
8bdadcc8 93 UINT16 multi_sector_cmd_max_sct_cnt;\r
94 UINT16 reserved_48;\r
95 UINT16 capabilities_49;\r
96 UINT16 capabilities_50;\r
97 UINT16 obsolete_51_52[2];\r
98 UINT16 field_validity;\r
99 UINT16 obsolete_54_58[5];\r
100 UINT16 mutil_sector_setting;\r
101 UINT16 user_addressable_sectors_lo;\r
102 UINT16 user_addressable_sectors_hi;\r
103 UINT16 obsolete_62;\r
104 UINT16 multi_word_dma_mode;\r
105 UINT16 advanced_pio_modes;\r
106 UINT16 min_multi_word_dma_cycle_time;\r
107 UINT16 rec_multi_word_dma_cycle_time;\r
108 UINT16 min_pio_cycle_time_without_flow_control;\r
109 UINT16 min_pio_cycle_time_with_flow_control;\r
110 UINT16 reserved_69_74[6];\r
111 UINT16 queue_depth;\r
112 UINT16 reserved_76_79[4];\r
113 UINT16 major_version_no;\r
114 UINT16 minor_version_no;\r
115 UINT16 cmd_set_support_82;\r
116 UINT16 cmd_set_support_83;\r
117 UINT16 cmd_feature_support;\r
118 UINT16 cmd_feature_enable_85;\r
119 UINT16 cmd_feature_enable_86;\r
120 UINT16 cmd_feature_default;\r
121 UINT16 ultra_dma_select;\r
122 UINT16 time_required_for_sec_erase;\r
123 UINT16 time_required_for_enhanced_sec_erase;\r
124 UINT16 current_advanced_power_mgmt_value;\r
125 UINT16 master_pwd_revison_code;\r
126 UINT16 hardware_reset_result;\r
127 UINT16 current_auto_acoustic_mgmt_value;\r
128 UINT16 reserved_95_99[5];\r
129 UINT16 max_user_lba_for_48bit_addr[4];\r
130 UINT16 reserved_104_126[23];\r
131 UINT16 removable_media_status_notification_support;\r
132 UINT16 security_status;\r
133 UINT16 vendor_data_129_159[31];\r
134 UINT16 cfa_power_mode;\r
135 UINT16 cfa_reserved_161_175[15];\r
136 UINT16 current_media_serial_no[30];\r
137 UINT16 reserved_206_254[49];\r
138 UINT16 integrity_word;\r
139} ATAPI_IDENTIFY_DATA;\r
140\r
37640ed3 141///\r
53bbea41 142/// Standard Quiry Data format, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 143///\r
8bdadcc8 144typedef struct {\r
145 UINT8 peripheral_type;\r
146 UINT8 RMB;\r
147 UINT8 version;\r
148 UINT8 response_data_format;\r
53bbea41 149 UINT8 addnl_length; ///< n - 4, Numbers of bytes following this one\r
8bdadcc8 150 UINT8 reserved_5;\r
151 UINT8 reserved_6;\r
152 UINT8 reserved_7;\r
153 UINT8 vendor_info[8];\r
154 UINT8 product_id[16];\r
155 UINT8 product_revision_level[4];\r
37640ed3 156 UINT8 vendor_specific_36_55[55 - 36 + 1];\r
157 UINT8 reserved_56_95[95 - 56 + 1];\r
158 ///\r
53bbea41 159 /// Vendor specific parameters fields, the sizeof (ATAPI_INQUIRY_DATA) is 254\r
37640ed3 160 /// since allocation_length is one byte in ATAPI_INQUIRY_CMD.\r
161 ///\r
53bbea41 162 UINT8 vendor_specific_96_253[253 - 96 + 1];\r
37640ed3 163} ATAPI_INQUIRY_DATA;\r
164\r
db835e01 165///\r
166/// Request Sense Standard Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
167///\r
8bdadcc8 168typedef struct {\r
169 UINT8 error_code : 7;\r
170 UINT8 valid : 1;\r
171 UINT8 reserved_1;\r
172 UINT8 sense_key : 4;\r
37640ed3 173 UINT8 reserved_2 : 1;\r
174 UINT8 Vendor_specifc_1 : 3;\r
8bdadcc8 175 UINT8 vendor_specific_3;\r
176 UINT8 vendor_specific_4;\r
177 UINT8 vendor_specific_5;\r
178 UINT8 vendor_specific_6;\r
37640ed3 179 UINT8 addnl_sense_length; ///< n - 7\r
8bdadcc8 180 UINT8 vendor_specific_8;\r
181 UINT8 vendor_specific_9;\r
182 UINT8 vendor_specific_10;\r
183 UINT8 vendor_specific_11;\r
37640ed3 184 UINT8 addnl_sense_code; ///< mandatory\r
185 UINT8 addnl_sense_code_qualifier; ///< mandatory\r
186 UINT8 field_replaceable_unit_code; ///< optional\r
187 UINT8 sense_key_specific_15 : 7;\r
188 UINT8 SKSV : 1;\r
189 UINT8 sense_key_specific_16;\r
190 UINT8 sense_key_specific_17;\r
8bdadcc8 191} ATAPI_REQUEST_SENSE_DATA;\r
192\r
db835e01 193///\r
427987f5 194/// READ CAPACITY Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 195///\r
8bdadcc8 196typedef struct {\r
197 UINT8 LastLba3;\r
198 UINT8 LastLba2;\r
199 UINT8 LastLba1;\r
200 UINT8 LastLba0;\r
201 UINT8 BlockSize3;\r
202 UINT8 BlockSize2;\r
203 UINT8 BlockSize1;\r
204 UINT8 BlockSize0;\r
205} ATAPI_READ_CAPACITY_DATA;\r
206\r
37640ed3 207///\r
db835e01 208/// Capacity List Header + Current/Maximum Capacity Descriptor,\r
427987f5 209/// defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 210///\r
8bdadcc8 211typedef struct {\r
212 UINT8 reserved_0;\r
213 UINT8 reserved_1;\r
214 UINT8 reserved_2;\r
215 UINT8 Capacity_Length;\r
216 UINT8 LastLba3;\r
217 UINT8 LastLba2;\r
218 UINT8 LastLba1;\r
219 UINT8 LastLba0;\r
220 UINT8 DesCode : 2;\r
221 UINT8 reserved_9 : 6;\r
222 UINT8 BlockSize2;\r
223 UINT8 BlockSize1;\r
224 UINT8 BlockSize0;\r
225} ATAPI_READ_FORMAT_CAPACITY_DATA;\r
226\r
37640ed3 227///\r
427987f5 228/// Test Unit Ready Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 229///\r
8bdadcc8 230typedef struct {\r
231 UINT8 opcode;\r
232 UINT8 reserved_1;\r
233 UINT8 reserved_2;\r
234 UINT8 reserved_3;\r
235 UINT8 reserved_4;\r
236 UINT8 reserved_5;\r
237 UINT8 reserved_6;\r
238 UINT8 reserved_7;\r
239 UINT8 reserved_8;\r
240 UINT8 reserved_9;\r
241 UINT8 reserved_10;\r
242 UINT8 reserved_11;\r
243} ATAPI_TEST_UNIT_READY_CMD;\r
244\r
37640ed3 245///\r
427987f5 246/// INQUIRY Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 247///\r
8bdadcc8 248typedef struct {\r
249 UINT8 opcode;\r
37640ed3 250 UINT8 reserved_1 : 5;\r
251 UINT8 lun : 3;\r
252 UINT8 page_code; ///< defined in SFF8090i, V6\r
8bdadcc8 253 UINT8 reserved_3;\r
254 UINT8 allocation_length;\r
255 UINT8 reserved_5;\r
256 UINT8 reserved_6;\r
257 UINT8 reserved_7;\r
258 UINT8 reserved_8;\r
259 UINT8 reserved_9;\r
260 UINT8 reserved_10;\r
261 UINT8 reserved_11;\r
262} ATAPI_INQUIRY_CMD;\r
263\r
37640ed3 264///\r
427987f5 265/// REQUEST SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 266///\r
8bdadcc8 267typedef struct {\r
268 UINT8 opcode;\r
37640ed3 269 UINT8 reserved_1 : 5;\r
270 UINT8 lun : 3;\r
8bdadcc8 271 UINT8 reserved_2;\r
272 UINT8 reserved_3;\r
273 UINT8 allocation_length;\r
274 UINT8 reserved_5;\r
275 UINT8 reserved_6;\r
276 UINT8 reserved_7;\r
277 UINT8 reserved_8;\r
278 UINT8 reserved_9;\r
279 UINT8 reserved_10;\r
280 UINT8 reserved_11;\r
281} ATAPI_REQUEST_SENSE_CMD;\r
282\r
37640ed3 283///\r
427987f5 284/// READ (10) Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 285///\r
8bdadcc8 286typedef struct {\r
287 UINT8 opcode;\r
288 UINT8 reserved_1 : 5;\r
289 UINT8 lun : 3;\r
290 UINT8 Lba0;\r
291 UINT8 Lba1;\r
292 UINT8 Lba2;\r
293 UINT8 Lba3;\r
294 UINT8 reserved_6;\r
295 UINT8 TranLen0;\r
296 UINT8 TranLen1;\r
297 UINT8 reserved_9;\r
298 UINT8 reserved_10;\r
299 UINT8 reserved_11;\r
300} ATAPI_READ10_CMD;\r
301\r
37640ed3 302///\r
427987f5 303/// READ Format Capacity Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 304///\r
8bdadcc8 305typedef struct {\r
306 UINT8 opcode;\r
37640ed3 307 UINT8 reserved_1 : 5;\r
308 UINT8 lun : 3;\r
8bdadcc8 309 UINT8 reserved_2;\r
310 UINT8 reserved_3;\r
311 UINT8 reserved_4;\r
312 UINT8 reserved_5;\r
313 UINT8 reserved_6;\r
314 UINT8 allocation_length_hi;\r
315 UINT8 allocation_length_lo;\r
316 UINT8 reserved_9;\r
317 UINT8 reserved_10;\r
318 UINT8 reserved_11;\r
319} ATAPI_READ_FORMAT_CAP_CMD;\r
320\r
37640ed3 321///\r
427987f5 322/// MODE SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification)\r
37640ed3 323///\r
8bdadcc8 324typedef struct {\r
325 UINT8 opcode;\r
37640ed3 326 UINT8 reserved_1 : 5;\r
327 UINT8 lun : 3;\r
328 UINT8 page_code : 6;\r
329 UINT8 page_control : 2;\r
8bdadcc8 330 UINT8 reserved_3;\r
331 UINT8 reserved_4;\r
332 UINT8 reserved_5;\r
333 UINT8 reserved_6;\r
334 UINT8 parameter_list_length_hi;\r
335 UINT8 parameter_list_length_lo;\r
336 UINT8 reserved_9;\r
337 UINT8 reserved_10;\r
338 UINT8 reserved_11;\r
339} ATAPI_MODE_SENSE_CMD;\r
340\r
1bc5d021 341///\r
342/// ATAPI_PACKET_COMMAND is not defined in ATA specification.\r
343/// We add it here for the convenience for ATA/ATAPI module writer. \r
344///\r
8bdadcc8 345typedef union {\r
346 UINT16 Data16[6];\r
347 ATAPI_TEST_UNIT_READY_CMD TestUnitReady;\r
348 ATAPI_READ10_CMD Read10;\r
349 ATAPI_REQUEST_SENSE_CMD RequestSence;\r
350 ATAPI_INQUIRY_CMD Inquiry;\r
351 ATAPI_MODE_SENSE_CMD ModeSense;\r
352 ATAPI_READ_FORMAT_CAP_CMD ReadFormatCapacity;\r
353} ATAPI_PACKET_COMMAND;\r
354\r
766f4bc1 355#pragma pack()\r
356\r
8bdadcc8 357\r
358#define ATAPI_MAX_DMA_EXT_CMD_SECTORS 0x10000\r
359#define ATAPI_MAX_DMA_CMD_SECTORS 0x100\r
360\r
361//\r
362// ATA Packet Command Code\r
363//\r
81dac930 364#define ATA_CMD_SOFT_RESET 0x08 ///< defined from ATA-3\r
365#define ATA_CMD_PACKET 0xA0 ///< defined from ATA-3\r
366#define ATA_CMD_IDENTIFY_DEVICE 0xA1 ///< defined from ATA-3\r
367#define ATA_CMD_SERVICE 0xA2 ///< defined from ATA-3\r
368#define ATA_CMD_TEST_UNIT_READY 0x00 ///< defined from ATA-1\r
369#define ATA_CMD_REQUEST_SENSE 0x03 ///< defined from ATA-4\r
37640ed3 370#define ATA_CMD_INQUIRY 0x12 ///< defined in ATAPI Removable Rewritable Media Devcies\r
371#define ATA_CMD_READ_FORMAT_CAPACITY 0x23 ///< defined in ATAPI Removable Rewritable Media Devcies\r
372#define ATA_CMD_READ_CAPACITY 0x25 ///< defined in ATAPI Removable Rewritable Media Devcies\r
373#define ATA_CMD_READ_10 0x28 ///< defined in ATAPI Removable Rewritable Media Devcies\r
374#define ATA_CMD_WRITE_10 0x2A ///< defined in ATAPI Removable Rewritable Media Devcies\r
8bdadcc8 375\r
376//\r
377// ATA Commands Code\r
378//\r
379\r
380//\r
381// Class 1: PIO Data-In Commands\r
382//\r
81dac930 383#define ATA_CMD_IDENTIFY_DRIVE 0xec ///< defined from ATA-3\r
384#define ATA_CMD_READ_BUFFER 0xe4 ///< defined from ATA-1\r
385#define ATA_CMD_READ_SECTORS 0x20 ///< defined from ATA-1 \r
386#define ATA_CMD_READ_SECTORS_WITH_RETRY 0x21 ///< defined from ATA-1, obsoleted from ATA-5\r
387#define ATA_CMD_READ_LONG 0x22 ///< defined from ATA-1, obsoleted from ATA-5\r
388#define ATA_CMD_READ_LONG_WITH_RETRY 0x23 ///< defined from ATA-1, obsoleted from ATA-5\r
389#define ATA_CMD_READ_SECTORS_EXT 0x24 ///< defined from ATA-6\r
8bdadcc8 390\r
8bdadcc8 391//\r
392// Class 2: PIO Data-Out Commands\r
393//\r
81dac930 394#define ATA_CMD_FORMAT_TRACK 0x50 ///< defined from ATA-1, obsoleted from ATA-4\r
395#define ATA_CMD_WRITE_BUFFER 0xe8 ///< defined from ATA-1 \r
396#define ATA_CMD_WRITE_SECTORS 0x30 ///< defined from ATA-1\r
397#define ATA_CMD_WRITE_SECTORS_WITH_RETRY 0x31 ///< defined from ATA-1, obsoleted from ATA-5\r
398#define ATA_CMD_WRITE_LONG 0x32 ///< defined from ATA-1, obsoleted from ATA-5\r
399#define ATA_CMD_WRITE_LONG_WITH_RETRY 0x33 ///< defined from ATA-1, obsoleted from ATA-5\r
400#define ATA_CMD_WRITE_VERIFY 0x3c ///< defined from ATA-1, obsoleted from ATA-5\r
401#define ATA_CMD_WRITE_SECTORS_EXT 0x34 ///< defined from ATA-6\r
8bdadcc8 402\r
403//\r
404// Class 3 No Data Command\r
405//\r
81dac930 406#define ATA_CMD_ACK_MEDIA_CHANGE 0xdb ///< defined from ATA-1, obsoleted from ATA-5 \r
407#define ATA_CMD_BOOT_POST_BOOT 0xdc ///< defined from ATA-1, obsoleted from ATA-3\r
408#define ATA_CMD_BOOT_PRE_BOOT 0xdd ///< defined from ATA-1, obsoleted from ATA-3\r
409#define ATA_CMD_CHECK_POWER_MODE 0x98 ///< defined from ATA-1, obsoleted from ATA-4\r
410#define ATA_CMD_CHECK_POWER_MODE_ALIAS 0xe5 ///< defined from ATA-1\r
411#define ATA_CMD_DOOR_LOCK 0xde ///< defined from ATA-1\r
412#define ATA_CMD_DOOR_UNLOCK 0xdf ///< defined from ATA-1\r
413#define ATA_CMD_EXEC_DRIVE_DIAG 0x90 ///< defined from ATA-1\r
414#define ATA_CMD_IDLE_ALIAS 0x97 ///< defined from ATA-1, obsoleted from ATA-4\r
415#define ATA_CMD_IDLE 0xe3 ///< defined from ATA-1\r
416#define ATA_CMD_IDLE_IMMEDIATE 0x95 ///< defined from ATA-1, obsoleted from ATA-4\r
417#define ATA_CMD_IDLE_IMMEDIATE_ALIAS 0xe1 ///< defined from ATA-1\r
418#define ATA_CMD_INIT_DRIVE_PARAM 0x91 ///< defined from ATA-1, obsoleted from ATA-6\r
419#define ATA_CMD_RECALIBRATE 0x10 ///< defined from ATA-1, obsoleted from ATA-4\r
420#define ATA_CMD_READ_DRIVE_STATE 0xe9 ///< defined from ATA-1, obsoleted from ATA-3\r
421#define ATA_CMD_SET_MULTIPLE_MODE 0xC6 ///< defined from ATA-2\r
422#define ATA_CMD_READ_VERIFY 0x40 ///< defined from ATA-1\r
423#define ATA_CMD_READ_VERIFY_WITH_RETRY 0x41 ///< defined from ATA-1, obsoleted from ATA-5\r
424#define ATA_CMD_SEEK 0x70 ///< defined from ATA-1\r
425#define ATA_CMD_SET_FEATURES 0xef ///< defined from ATA-1\r
426#define ATA_CMD_STANDBY 0x96 ///< defined from ATA-1, obsoleted from ATA-4\r
427#define ATA_CMD_STANDBY_ALIAS 0xe2 ///< defined from ATA-1\r
428#define ATA_CMD_STANDBY_IMMEDIATE 0x94 ///< defined from ATA-1, obsoleted from ATA-4\r
429#define ATA_CMD_STANDBY_IMMEDIATE_ALIAS 0xe0 ///< defined from ATA-1\r
a2461f6b 430//\r
431// S.M.A.R.T\r
432//\r
81dac930 433#define ATA_CMD_SMART 0xb0 ///< defined from ATA-3\r
434#define ATA_CONSTANT_C2 0xc2 ///< reserved\r
435#define ATA_CONSTANT_4F 0x4f ///< reserved\r
436#define ATA_SMART_ENABLE_OPERATION 0xd8 ///< reserved\r
437#define ATA_SMART_RETURN_STATUS 0xda ///< defined from ATA-3\r
8bdadcc8 438\r
a2461f6b 439//\r
440// Class 4: DMA Command\r
441//\r
81dac930 442#define ATA_CMD_READ_DMA 0xc8 ///< defined from ATA-1\r
443#define ATA_CMD_READ_DMA_WITH_RETRY 0xc9 ///< defined from ATA-1, obsoleted from ATA-5\r
444#define ATA_CMD_READ_DMA_EXT 0x25 ///< defined from ATA-6\r
445#define ATA_CMD_WRITE_DMA 0xca ///< defined from ATA-1\r
446#define ATA_CMD_WRITE_DMA_WITH_RETRY 0xcb ///< defined from ATA-1, obsoleted from ATA-\r
447#define ATA_CMD_WRITE_DMA_EXT 0x35 ///< defined from ATA-6\r
a2461f6b 448 \r
37640ed3 449///\r
450/// default content of device control register, disable INT,\r
451/// Bit3 is set to 1 according ATA-1\r
452///\r
453#define ATA_DEFAULT_CTL (0x0a) \r
454///\r
455/// default context of Device/Head Register,\r
456/// Bit7 and Bit5 are set to 1 for back-compatibilities\r
457///\r
8bdadcc8 458#define ATA_DEFAULT_CMD (0xa0)\r
459\r
460#define ATAPI_MAX_BYTE_COUNT (0xfffe)\r
461\r
53bbea41 462#define ATA_REQUEST_SENSE_ERROR (0x70) ///< defined in SFF-8070i\r
463\r
a2461f6b 464//\r
465// Sense Key, Additional Sense Codes and Additional Sense Code Qualifier\r
466// defined in MultiMedia Commands (MMC, MMC-2) \r
467//\r
468// Sense Key \r
469//\r
8bdadcc8 470#define ATA_SK_NO_SENSE (0x0)\r
471#define ATA_SK_RECOVERY_ERROR (0x1)\r
472#define ATA_SK_NOT_READY (0x2)\r
473#define ATA_SK_MEDIUM_ERROR (0x3)\r
474#define ATA_SK_HARDWARE_ERROR (0x4)\r
475#define ATA_SK_ILLEGAL_REQUEST (0x5)\r
476#define ATA_SK_UNIT_ATTENTION (0x6)\r
477#define ATA_SK_DATA_PROTECT (0x7)\r
478#define ATA_SK_BLANK_CHECK (0x8)\r
479#define ATA_SK_VENDOR_SPECIFIC (0x9)\r
480#define ATA_SK_RESERVED_A (0xA)\r
481#define ATA_SK_ABORT (0xB)\r
482#define ATA_SK_RESERVED_C (0xC)\r
483#define ATA_SK_OVERFLOW (0xD)\r
484#define ATA_SK_MISCOMPARE (0xE)\r
485#define ATA_SK_RESERVED_F (0xF)\r
486\r
a2461f6b 487//\r
488// Additional Sense Codes\r
489//\r
8bdadcc8 490#define ATA_ASC_NOT_READY (0x04)\r
491#define ATA_ASC_MEDIA_ERR1 (0x10)\r
492#define ATA_ASC_MEDIA_ERR2 (0x11)\r
493#define ATA_ASC_MEDIA_ERR3 (0x14)\r
494#define ATA_ASC_MEDIA_ERR4 (0x30)\r
495#define ATA_ASC_MEDIA_UPSIDE_DOWN (0x06)\r
496#define ATA_ASC_INVALID_CMD (0x20)\r
497#define ATA_ASC_LBA_OUT_OF_RANGE (0x21)\r
498#define ATA_ASC_INVALID_FIELD (0x24)\r
499#define ATA_ASC_WRITE_PROTECTED (0x27)\r
500#define ATA_ASC_MEDIA_CHANGE (0x28)\r
37640ed3 501#define ATA_ASC_RESET (0x29) ///< Power On Reset or Bus Reset occurred\r
8bdadcc8 502#define ATA_ASC_ILLEGAL_FIELD (0x26)\r
503#define ATA_ASC_NO_MEDIA (0x3A)\r
504#define ATA_ASC_ILLEGAL_MODE_FOR_THIS_TRACK (0x64)\r
505\r
506//\r
507// Additional Sense Code Qualifier\r
508//\r
509#define ATA_ASCQ_IN_PROGRESS (0x01)\r
510\r
a2461f6b 511//\r
512// Error Register\r
513//\r
81dac930 514#define ATA_ERRREG_BBK BIT7 ///< Bad block detected defined from ATA-1, obsoleted from ATA-2\r
515#define ATA_ERRREG_UNC BIT6 ///< Uncorrectable Data defined from ATA-1, obsoleted from ATA-4\r
516#define ATA_ERRREG_MC BIT5 ///< Media Change defined from ATA-1, obsoleted from ATA-4\r
517#define ATA_ERRREG_IDNF BIT4 ///< ID Not Found defined from ATA-1, obsoleted from ATA-4\r
518#define ATA_ERRREG_MCR BIT3 ///< Media Change Requested defined from ATA-1, obsoleted from ATA-4\r
519#define ATA_ERRREG_ABRT BIT2 ///< Aborted Command defined from ATA-1\r
520#define ATA_ERRREG_TK0NF BIT1 ///< Track 0 Not Found defined from ATA-1, obsoleted from ATA-4\r
521#define ATA_ERRREG_AMNF BIT0 ///< Address Mark Not Found defined from ATA-1, obsoleted from ATA-4\r
8bdadcc8 522\r
a2461f6b 523//\r
524// Status Register\r
525//\r
81dac930 526#define ATA_STSREG_BSY BIT7 ///< Controller Busy defined from ATA-1\r
527#define ATA_STSREG_DRDY BIT6 ///< Drive Ready defined from ATA-1\r
528#define ATA_STSREG_DWF BIT5 ///< Drive Write Fault defined from ATA-1, obsoleted from ATA-4\r
529#define ATA_STSREG_DF BIT5 ///< Drive Fault defined from ATA-6\r
530#define ATA_STSREG_DSC BIT4 ///< Disk Seek Complete defined from ATA-1, obsoleted from ATA-4\r
531#define ATA_STSREG_DRQ BIT3 ///< Data Request defined from ATA-1\r
532#define ATA_STSREG_CORR BIT2 ///< Corrected Data defined from ATA-1, obsoleted from ATA-4\r
533#define ATA_STSREG_IDX BIT1 ///< Index defined from ATA-1, obsoleted from ATA-4\r
534#define ATA_STSREG_ERR BIT0 ///< Error defined from ATA-1\r
8bdadcc8 535\r
a2461f6b 536//\r
537// Device Control Register\r
538//\r
37640ed3 539#define ATA_CTLREG_SRST BIT2 ///< Software Reset\r
540#define ATA_CTLREG_IEN_L BIT1 ///< Interrupt Enable #\r
8bdadcc8 541\r
542#endif\r
543\r