]>
Commit | Line | Data |
---|---|---|
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 | 5 | Copyright (c) 2007 - 2009, Intel Corporation\r |
8bdadcc8 | 6 | All rights reserved. This program and the accompanying materials\r |
7 | are licensed and made available under the terms and conditions of the BSD License\r | |
8 | which accompanies this distribution. The full text of the license may be found at\r | |
9 | http://opensource.org/licenses/bsd-license.php\r | |
10 | \r | |
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
12 | WITHOUT 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 | |
24 | typedef 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 | 79 | typedef 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 | 144 | typedef 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 | 168 | typedef 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 | 196 | typedef 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 | 211 | typedef 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 | 230 | typedef 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 | 248 | typedef 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 | 267 | typedef 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 | 286 | typedef 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 | 305 | typedef 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 | 324 | typedef 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 | 345 | typedef 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 |