]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Include/IndustryStandard/Atapi.h
MdePkg: Fix ACPI NFIT GUID definitions
[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
b9349596 5Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR>\r
af2dc6a7 6This program and the accompanying materials are licensed and made available under \r
7the terms and conditions of the BSD License that accompanies this distribution. \r
8The 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
8bdadcc8 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
af2dc6a7 22/// ATA5_IDENTIFY_DATA is defined in ATA-5.\r
23/// (This structure is provided mainly for backward-compatibility support.\r
24/// Old drivers may reference fields that are marked "obsolete" in \r
25/// ATA_IDENTIFY_DATA, which currently conforms to ATA-8.) \r
81dac930 26///\r
27typedef struct { \r
af2dc6a7 28 UINT16 config; ///< General Configuration.\r
29 UINT16 cylinders; ///< Number of Cylinders.\r
81dac930 30 UINT16 reserved_2; \r
af2dc6a7 31 UINT16 heads; ///< Number of logical heads. \r
81dac930 32 UINT16 vendor_data1; \r
33 UINT16 vendor_data2; \r
34 UINT16 sectors_per_track; \r
35 UINT16 vendor_specific_7_9[3]; \r
36 CHAR8 SerialNo[20]; ///< ASCII \r
37 UINT16 vendor_specific_20_21[2]; \r
38 UINT16 ecc_bytes_available; \r
39 CHAR8 FirmwareVer[8]; ///< ASCII \r
40 CHAR8 ModelName[40]; ///< ASCII \r
41 UINT16 multi_sector_cmd_max_sct_cnt; \r
42 UINT16 reserved_48; \r
43 UINT16 capabilities; \r
44 UINT16 reserved_50; \r
45 UINT16 pio_cycle_timing; \r
46 UINT16 reserved_52; \r
47 UINT16 field_validity; \r
48 UINT16 current_cylinders; \r
49 UINT16 current_heads; \r
50 UINT16 current_sectors; \r
51 UINT16 CurrentCapacityLsb; \r
52 UINT16 CurrentCapacityMsb; \r
53 UINT16 reserved_59; \r
54 UINT16 user_addressable_sectors_lo; \r
55 UINT16 user_addressable_sectors_hi; \r
56 UINT16 reserved_62; \r
57 UINT16 multi_word_dma_mode; \r
58 UINT16 advanced_pio_modes; \r
59 UINT16 min_multi_word_dma_cycle_time; \r
60 UINT16 rec_multi_word_dma_cycle_time; \r
61 UINT16 min_pio_cycle_time_without_flow_control; \r
62 UINT16 min_pio_cycle_time_with_flow_control; \r
63 UINT16 reserved_69_79[11]; \r
64 UINT16 major_version_no; \r
65 UINT16 minor_version_no; \r
66 UINT16 command_set_supported_82; ///< word 82 \r
67 UINT16 command_set_supported_83; ///< word 83 \r
68 UINT16 command_set_feature_extn; ///< word 84 \r
69 UINT16 command_set_feature_enb_85; ///< word 85 \r
70 UINT16 command_set_feature_enb_86; ///< word 86 \r
71 UINT16 command_set_feature_default; ///< word 87 \r
72 UINT16 ultra_dma_mode; ///< word 88 \r
73 UINT16 reserved_89_127[39]; \r
74 UINT16 security_status; \r
75 UINT16 vendor_data_129_159[31]; \r
76 UINT16 reserved_160_255[96]; \r
4777d7fc 77} ATA5_IDENTIFY_DATA;\r
78\r
79///\r
af2dc6a7 80/// ATA_IDENTIFY_DATA strictly complies with ATA/ATAPI-8 Spec\r
4777d7fc 81/// to define the data returned by an ATA device upon successful\r
af2dc6a7 82/// completion of the ATA IDENTIFY_DEVICE command.\r
4777d7fc 83///\r
84typedef struct {\r
af2dc6a7 85 UINT16 config; ///< General Configuration.\r
4777d7fc 86 UINT16 obsolete_1;\r
af2dc6a7 87 UINT16 specific_config; ///< Specific Configuration.\r
4777d7fc 88 UINT16 obsolete_3;\r
89 UINT16 retired_4_5[2]; \r
90 UINT16 obsolete_6;\r
91 UINT16 cfa_reserved_7_8[2];\r
92 UINT16 retired_9; \r
93 CHAR8 SerialNo[20]; ///< word 10~19\r
94 UINT16 retired_20_21[2]; \r
95 UINT16 obsolete_22; \r
96 CHAR8 FirmwareVer[8]; ///< word 23~26\r
97 CHAR8 ModelName[40]; ///< word 27~46\r
98 UINT16 multi_sector_cmd_max_sct_cnt;\r
99 UINT16 trusted_computing_support; \r
100 UINT16 capabilities_49;\r
101 UINT16 capabilities_50;\r
102 UINT16 obsolete_51_52[2]; \r
103 UINT16 field_validity; \r
104 UINT16 obsolete_54_58[5]; \r
b9349596 105 UINT16 multi_sector_setting;\r
4777d7fc 106 UINT16 user_addressable_sectors_lo; \r
107 UINT16 user_addressable_sectors_hi; \r
108 UINT16 obsolete_62; \r
109 UINT16 multi_word_dma_mode; \r
110 UINT16 advanced_pio_modes; \r
111 UINT16 min_multi_word_dma_cycle_time; \r
112 UINT16 rec_multi_word_dma_cycle_time; \r
113 UINT16 min_pio_cycle_time_without_flow_control; \r
114 UINT16 min_pio_cycle_time_with_flow_control; \r
b9349596
FT
115 UINT16 additional_supported; ///< word 69\r
116 UINT16 reserved_70;\r
117 UINT16 reserved_71_74[4]; ///< Reserved for IDENTIFY PACKET DEVICE cmd.\r
4777d7fc 118 UINT16 queue_depth; \r
b9349596
FT
119 UINT16 serial_ata_capabilities;\r
120 UINT16 reserved_77; ///< Reserved for Serial ATA\r
121 UINT16 serial_ata_features_supported;\r
122 UINT16 serial_ata_features_enabled;\r
4777d7fc 123 UINT16 major_version_no; \r
124 UINT16 minor_version_no; \r
125 UINT16 command_set_supported_82; ///< word 82\r
126 UINT16 command_set_supported_83; ///< word 83\r
127 UINT16 command_set_feature_extn; ///< word 84\r
128 UINT16 command_set_feature_enb_85; ///< word 85\r
129 UINT16 command_set_feature_enb_86; ///< word 86\r
130 UINT16 command_set_feature_default; ///< word 87\r
131 UINT16 ultra_dma_mode; ///< word 88 \r
132 UINT16 time_for_security_erase_unit; \r
133 UINT16 time_for_enhanced_security_erase_unit;\r
134 UINT16 advanced_power_management_level;\r
135 UINT16 master_password_identifier;\r
136 UINT16 hardware_configuration_test_result;\r
b9349596 137 UINT16 obsolete_94;\r
4777d7fc 138 UINT16 stream_minimum_request_size;\r
139 UINT16 streaming_transfer_time_for_dma;\r
140 UINT16 streaming_access_latency_for_dma_and_pio;\r
141 UINT16 streaming_performance_granularity[2]; ///< word 98~99\r
142 UINT16 maximum_lba_for_48bit_addressing[4]; ///< word 100~103\r
143 UINT16 streaming_transfer_time_for_pio;\r
b9349596 144 UINT16 max_no_of_512byte_blocks_per_data_set_cmd;\r
4777d7fc 145 UINT16 phy_logic_sector_support; ///< word 106\r
146 UINT16 interseek_delay_for_iso7779;\r
147 UINT16 world_wide_name[4]; ///< word 108~111\r
148 UINT16 reserved_for_128bit_wwn_112_115[4];\r
149 UINT16 reserved_for_technical_report;\r
150 UINT16 logic_sector_size_lo; ///< word 117\r
151 UINT16 logic_sector_size_hi; ///< word 118\r
152 UINT16 features_and_command_sets_supported_ext; ///< word 119\r
153 UINT16 features_and_command_sets_enabled_ext; ///< word 120\r
710a3409 154 UINT16 reserved_121_126[6];\r
4777d7fc 155 UINT16 obsolete_127;\r
156 UINT16 security_status; ///< word 128\r
157 UINT16 vendor_specific_129_159[31]; \r
158 UINT16 cfa_power_mode; ///< word 160\r
b9349596
FT
159 UINT16 reserved_for_compactflash_161_167[7];\r
160 UINT16 device_nominal_form_factor;\r
161 UINT16 is_data_set_cmd_supported;\r
162 CHAR8 additional_product_identifier[8];\r
163 UINT16 reserved_174_175[2];\r
4777d7fc 164 CHAR8 media_serial_number[60]; ///< word 176~205\r
165 UINT16 sct_command_transport; ///< word 206\r
166 UINT16 reserved_207_208[2];\r
167 UINT16 alignment_logic_in_phy_blocks; ///< word 209\r
168 UINT16 write_read_verify_sector_count_mode3[2]; ///< word 210~211\r
169 UINT16 verify_sector_count_mode2[2];\r
170 UINT16 nv_cache_capabilities;\r
171 UINT16 nv_cache_size_in_logical_block_lsw; ///< word 215\r
172 UINT16 nv_cache_size_in_logical_block_msw; ///< word 216\r
b9349596
FT
173 UINT16 nominal_media_rotation_rate;\r
174 UINT16 reserved_218;\r
4777d7fc 175 UINT16 nv_cache_options; ///< word 219\r
176 UINT16 write_read_verify_mode; ///< word 220\r
177 UINT16 reserved_221;\r
178 UINT16 transport_major_revision_number;\r
179 UINT16 transport_minor_revision_number;\r
b9349596
FT
180 UINT16 reserved_224_229[6];\r
181 UINT64 extended_no_of_addressable_sectors;\r
4777d7fc 182 UINT16 min_number_per_download_microcode_mode3; ///< word 234\r
183 UINT16 max_number_per_download_microcode_mode3; ///< word 235\r
184 UINT16 reserved_236_254[19];\r
185 UINT16 integrity_word;\r
81dac930 186} ATA_IDENTIFY_DATA;\r
187\r
1bc5d021 188///\r
af2dc6a7 189/// ATAPI_IDENTIFY_DATA strictly complies with ATA/ATAPI-8 Spec\r
4777d7fc 190/// to define the data returned by an ATAPI device upon successful\r
af2dc6a7 191/// completion of the ATA IDENTIFY_PACKET_DEVICE command.\r
1bc5d021 192///\r
8bdadcc8 193typedef struct {\r
af2dc6a7 194 UINT16 config; ///< General Configuration.\r
4777d7fc 195 UINT16 reserved_1;\r
af2dc6a7 196 UINT16 specific_config; ///< Specific Configuration.\r
4777d7fc 197 UINT16 reserved_3_9[7];\r
198 CHAR8 SerialNo[20]; ///< word 10~19\r
199 UINT16 reserved_20_22[3];\r
200 CHAR8 FirmwareVer[8]; ///< word 23~26\r
201 CHAR8 ModelName[40]; ///< word 27~46\r
202 UINT16 reserved_47_48[2];\r
203 UINT16 capabilities_49;\r
204 UINT16 capabilities_50;\r
205 UINT16 obsolete_51;\r
206 UINT16 reserved_52;\r
207 UINT16 field_validity; ///< word 53\r
208 UINT16 reserved_54_61[8];\r
209 UINT16 dma_dir;\r
210 UINT16 multi_word_dma_mode; ///< word 63\r
211 UINT16 advanced_pio_modes; ///< word 64\r
212 UINT16 min_multi_word_dma_cycle_time;\r
213 UINT16 rec_multi_word_dma_cycle_time;\r
214 UINT16 min_pio_cycle_time_without_flow_control;\r
215 UINT16 min_pio_cycle_time_with_flow_control;\r
216 UINT16 reserved_69_70[2];\r
217 UINT16 obsolete_71_72[2];\r
218 UINT16 reserved_73_74[2];\r
b9349596
FT
219 UINT16 obsolete_75;\r
220 UINT16 serial_ata_capabilities;\r
221 UINT16 reserved_77; ///< Reserved for Serial ATA\r
222 UINT16 serial_ata_features_supported;\r
223 UINT16 serial_ata_features_enabled;\r
4777d7fc 224 UINT16 major_version_no; ///< word 80\r
225 UINT16 minor_version_no; ///< word 81\r
226 UINT16 cmd_set_support_82;\r
227 UINT16 cmd_set_support_83;\r
228 UINT16 cmd_feature_support;\r
229 UINT16 cmd_feature_enable_85;\r
230 UINT16 cmd_feature_enable_86;\r
231 UINT16 cmd_feature_default;\r
232 UINT16 ultra_dma_select;\r
233 UINT16 time_required_for_sec_erase; ///< word 89\r
234 UINT16 time_required_for_enhanced_sec_erase; ///< word 90\r
b9349596 235 UINT16 advanced_power_management_level;\r
4777d7fc 236 UINT16 master_pwd_revison_code;\r
237 UINT16 hardware_reset_result; ///< word 93\r
b9349596 238 UINT16 obsolete_94;\r
4777d7fc 239 UINT16 reserved_95_107[13];\r
240 UINT16 world_wide_name[4]; ///< word 108~111\r
241 UINT16 reserved_for_128bit_wwn_112_115[4];\r
b9349596
FT
242 UINT16 reserved_116_118[3]; \r
243 UINT16 command_and_feature_sets_supported; ///< word 119\r
244 UINT16 command_and_feature_sets_supported_enabled;\r
245 UINT16 reserved_121_124[4];\r
4777d7fc 246 UINT16 atapi_byte_count_0_behavior; ///< word 125\r
b9349596 247 UINT16 obsolete_126_127[2];\r
4777d7fc 248 UINT16 security_status;\r
b9349596
FT
249 UINT16 reserved_129_159[31];\r
250 UINT16 cfa_reserved_160_175[16];\r
251 UINT16 reserved_176_221[46];\r
252 UINT16 transport_major_version;\r
253 UINT16 transport_minor_version;\r
254 UINT16 reserved_224_254[31];\r
4777d7fc 255 UINT16 integrity_word;\r
8bdadcc8 256} ATAPI_IDENTIFY_DATA;\r
257\r
4777d7fc 258\r
37640ed3 259///\r
af2dc6a7 260/// Standard Quiry Data format, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 261///\r
8bdadcc8 262typedef struct {\r
263 UINT8 peripheral_type;\r
264 UINT8 RMB;\r
265 UINT8 version;\r
266 UINT8 response_data_format;\r
af2dc6a7 267 UINT8 addnl_length; ///< n - 4, Numbers of bytes following this one.\r
8bdadcc8 268 UINT8 reserved_5;\r
269 UINT8 reserved_6;\r
270 UINT8 reserved_7;\r
271 UINT8 vendor_info[8];\r
272 UINT8 product_id[16];\r
273 UINT8 product_revision_level[4];\r
37640ed3 274 UINT8 vendor_specific_36_55[55 - 36 + 1];\r
275 UINT8 reserved_56_95[95 - 56 + 1];\r
276 ///\r
af2dc6a7 277 /// Vendor-specific parameters fields. The sizeof (ATAPI_INQUIRY_DATA) is 254\r
37640ed3 278 /// since allocation_length is one byte in ATAPI_INQUIRY_CMD.\r
279 ///\r
53bbea41 280 UINT8 vendor_specific_96_253[253 - 96 + 1];\r
37640ed3 281} ATAPI_INQUIRY_DATA;\r
282\r
db835e01 283///\r
af2dc6a7 284/// Request Sense Standard Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
db835e01 285///\r
8bdadcc8 286typedef struct {\r
287 UINT8 error_code : 7;\r
288 UINT8 valid : 1;\r
289 UINT8 reserved_1;\r
290 UINT8 sense_key : 4;\r
37640ed3 291 UINT8 reserved_2 : 1;\r
292 UINT8 Vendor_specifc_1 : 3;\r
8bdadcc8 293 UINT8 vendor_specific_3;\r
294 UINT8 vendor_specific_4;\r
295 UINT8 vendor_specific_5;\r
296 UINT8 vendor_specific_6;\r
37640ed3 297 UINT8 addnl_sense_length; ///< n - 7\r
8bdadcc8 298 UINT8 vendor_specific_8;\r
299 UINT8 vendor_specific_9;\r
300 UINT8 vendor_specific_10;\r
301 UINT8 vendor_specific_11;\r
37640ed3 302 UINT8 addnl_sense_code; ///< mandatory\r
303 UINT8 addnl_sense_code_qualifier; ///< mandatory\r
304 UINT8 field_replaceable_unit_code; ///< optional\r
305 UINT8 sense_key_specific_15 : 7;\r
306 UINT8 SKSV : 1;\r
307 UINT8 sense_key_specific_16;\r
308 UINT8 sense_key_specific_17;\r
8bdadcc8 309} ATAPI_REQUEST_SENSE_DATA;\r
310\r
db835e01 311///\r
af2dc6a7 312/// READ CAPACITY Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 313///\r
8bdadcc8 314typedef struct {\r
315 UINT8 LastLba3;\r
316 UINT8 LastLba2;\r
317 UINT8 LastLba1;\r
318 UINT8 LastLba0;\r
319 UINT8 BlockSize3;\r
320 UINT8 BlockSize2;\r
321 UINT8 BlockSize1;\r
322 UINT8 BlockSize0;\r
323} ATAPI_READ_CAPACITY_DATA;\r
324\r
37640ed3 325///\r
db835e01 326/// Capacity List Header + Current/Maximum Capacity Descriptor,\r
af2dc6a7 327/// defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 328///\r
8bdadcc8 329typedef struct {\r
330 UINT8 reserved_0;\r
331 UINT8 reserved_1;\r
332 UINT8 reserved_2;\r
333 UINT8 Capacity_Length;\r
334 UINT8 LastLba3;\r
335 UINT8 LastLba2;\r
336 UINT8 LastLba1;\r
337 UINT8 LastLba0;\r
338 UINT8 DesCode : 2;\r
339 UINT8 reserved_9 : 6;\r
340 UINT8 BlockSize2;\r
341 UINT8 BlockSize1;\r
342 UINT8 BlockSize0;\r
343} ATAPI_READ_FORMAT_CAPACITY_DATA;\r
344\r
37640ed3 345///\r
af2dc6a7 346/// Test Unit Ready Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 347///\r
8bdadcc8 348typedef struct {\r
349 UINT8 opcode;\r
350 UINT8 reserved_1;\r
351 UINT8 reserved_2;\r
352 UINT8 reserved_3;\r
353 UINT8 reserved_4;\r
354 UINT8 reserved_5;\r
355 UINT8 reserved_6;\r
356 UINT8 reserved_7;\r
357 UINT8 reserved_8;\r
358 UINT8 reserved_9;\r
359 UINT8 reserved_10;\r
360 UINT8 reserved_11;\r
361} ATAPI_TEST_UNIT_READY_CMD;\r
362\r
37640ed3 363///\r
af2dc6a7 364/// INQUIRY Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 365///\r
8bdadcc8 366typedef struct {\r
367 UINT8 opcode;\r
37640ed3 368 UINT8 reserved_1 : 5;\r
369 UINT8 lun : 3;\r
370 UINT8 page_code; ///< defined in SFF8090i, V6\r
8bdadcc8 371 UINT8 reserved_3;\r
372 UINT8 allocation_length;\r
373 UINT8 reserved_5;\r
374 UINT8 reserved_6;\r
375 UINT8 reserved_7;\r
376 UINT8 reserved_8;\r
377 UINT8 reserved_9;\r
378 UINT8 reserved_10;\r
379 UINT8 reserved_11;\r
380} ATAPI_INQUIRY_CMD;\r
381\r
37640ed3 382///\r
af2dc6a7 383/// REQUEST SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 384///\r
8bdadcc8 385typedef struct {\r
386 UINT8 opcode;\r
37640ed3 387 UINT8 reserved_1 : 5;\r
388 UINT8 lun : 3;\r
8bdadcc8 389 UINT8 reserved_2;\r
390 UINT8 reserved_3;\r
391 UINT8 allocation_length;\r
392 UINT8 reserved_5;\r
393 UINT8 reserved_6;\r
394 UINT8 reserved_7;\r
395 UINT8 reserved_8;\r
396 UINT8 reserved_9;\r
397 UINT8 reserved_10;\r
398 UINT8 reserved_11;\r
399} ATAPI_REQUEST_SENSE_CMD;\r
400\r
37640ed3 401///\r
af2dc6a7 402/// READ (10) Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 403///\r
8bdadcc8 404typedef struct {\r
405 UINT8 opcode;\r
406 UINT8 reserved_1 : 5;\r
407 UINT8 lun : 3;\r
408 UINT8 Lba0;\r
409 UINT8 Lba1;\r
410 UINT8 Lba2;\r
411 UINT8 Lba3;\r
412 UINT8 reserved_6;\r
413 UINT8 TranLen0;\r
414 UINT8 TranLen1;\r
415 UINT8 reserved_9;\r
416 UINT8 reserved_10;\r
417 UINT8 reserved_11;\r
418} ATAPI_READ10_CMD;\r
419\r
37640ed3 420///\r
af2dc6a7 421/// READ Format Capacity Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 422///\r
8bdadcc8 423typedef struct {\r
424 UINT8 opcode;\r
37640ed3 425 UINT8 reserved_1 : 5;\r
426 UINT8 lun : 3;\r
8bdadcc8 427 UINT8 reserved_2;\r
428 UINT8 reserved_3;\r
429 UINT8 reserved_4;\r
430 UINT8 reserved_5;\r
431 UINT8 reserved_6;\r
432 UINT8 allocation_length_hi;\r
433 UINT8 allocation_length_lo;\r
434 UINT8 reserved_9;\r
435 UINT8 reserved_10;\r
436 UINT8 reserved_11;\r
437} ATAPI_READ_FORMAT_CAP_CMD;\r
438\r
37640ed3 439///\r
af2dc6a7 440/// MODE SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
37640ed3 441///\r
8bdadcc8 442typedef struct {\r
443 UINT8 opcode;\r
37640ed3 444 UINT8 reserved_1 : 5;\r
445 UINT8 lun : 3;\r
446 UINT8 page_code : 6;\r
447 UINT8 page_control : 2;\r
8bdadcc8 448 UINT8 reserved_3;\r
449 UINT8 reserved_4;\r
450 UINT8 reserved_5;\r
451 UINT8 reserved_6;\r
452 UINT8 parameter_list_length_hi;\r
453 UINT8 parameter_list_length_lo;\r
454 UINT8 reserved_9;\r
455 UINT8 reserved_10;\r
456 UINT8 reserved_11;\r
457} ATAPI_MODE_SENSE_CMD;\r
458\r
1bc5d021 459///\r
af2dc6a7 460/// ATAPI_PACKET_COMMAND is not defined in the ATA specification.\r
461/// We add it here for the convenience of ATA/ATAPI module writers. \r
1bc5d021 462///\r
8bdadcc8 463typedef union {\r
464 UINT16 Data16[6];\r
465 ATAPI_TEST_UNIT_READY_CMD TestUnitReady;\r
466 ATAPI_READ10_CMD Read10;\r
467 ATAPI_REQUEST_SENSE_CMD RequestSence;\r
468 ATAPI_INQUIRY_CMD Inquiry;\r
469 ATAPI_MODE_SENSE_CMD ModeSense;\r
470 ATAPI_READ_FORMAT_CAP_CMD ReadFormatCapacity;\r
471} ATAPI_PACKET_COMMAND;\r
472\r
766f4bc1 473#pragma pack()\r
474\r
8bdadcc8 475\r
476#define ATAPI_MAX_DMA_EXT_CMD_SECTORS 0x10000\r
477#define ATAPI_MAX_DMA_CMD_SECTORS 0x100\r
478\r
479//\r
480// ATA Packet Command Code\r
481//\r
81dac930 482#define ATA_CMD_SOFT_RESET 0x08 ///< defined from ATA-3\r
483#define ATA_CMD_PACKET 0xA0 ///< defined from ATA-3\r
484#define ATA_CMD_IDENTIFY_DEVICE 0xA1 ///< defined from ATA-3\r
485#define ATA_CMD_SERVICE 0xA2 ///< defined from ATA-3\r
486#define ATA_CMD_TEST_UNIT_READY 0x00 ///< defined from ATA-1\r
487#define ATA_CMD_REQUEST_SENSE 0x03 ///< defined from ATA-4\r
37640ed3 488#define ATA_CMD_INQUIRY 0x12 ///< defined in ATAPI Removable Rewritable Media Devcies\r
489#define ATA_CMD_READ_FORMAT_CAPACITY 0x23 ///< defined in ATAPI Removable Rewritable Media Devcies\r
490#define ATA_CMD_READ_CAPACITY 0x25 ///< defined in ATAPI Removable Rewritable Media Devcies\r
491#define ATA_CMD_READ_10 0x28 ///< defined in ATAPI Removable Rewritable Media Devcies\r
492#define ATA_CMD_WRITE_10 0x2A ///< defined in ATAPI Removable Rewritable Media Devcies\r
9dfbd9de 493#define ATA_CMD_READ_12 0xA8 ///< defined in ATAPI Removable Rewritable Media Devcies\r
494#define ATA_CMD_WRITE_12 0xAA ///< defined in ATAPI Removable Rewritable Media Devcies\r
495#define ATA_CMD_START_STOP_UNIT 0x1B ///< defined in ATAPI Removable Rewritable Media Devcies\r
496///\r
497/// Start/Stop and Eject Operations\r
498///\r
499///@{\r
500#define ATA_CMD_SUBOP_STOP_DISC 0x00 ///< Stop the Disc\r
501#define ATA_CMD_SUBOP_START_DISC 0x01 ///< Start the Disc and acquire the format type\r
502#define ATA_CMD_SUBOP_EJECT_DISC 0x02 ///< Eject the Disc if possible\r
503#define ATA_CMD_SUBOP_CLOSE_TRAY 0x03 ///< Load the Disc (Close Tray)\r
504///@}\r
8bdadcc8 505\r
506//\r
507// ATA Commands Code\r
508//\r
509\r
510//\r
511// Class 1: PIO Data-In Commands\r
512//\r
81dac930 513#define ATA_CMD_IDENTIFY_DRIVE 0xec ///< defined from ATA-3\r
514#define ATA_CMD_READ_BUFFER 0xe4 ///< defined from ATA-1\r
515#define ATA_CMD_READ_SECTORS 0x20 ///< defined from ATA-1 \r
516#define ATA_CMD_READ_SECTORS_WITH_RETRY 0x21 ///< defined from ATA-1, obsoleted from ATA-5\r
517#define ATA_CMD_READ_LONG 0x22 ///< defined from ATA-1, obsoleted from ATA-5\r
518#define ATA_CMD_READ_LONG_WITH_RETRY 0x23 ///< defined from ATA-1, obsoleted from ATA-5\r
519#define ATA_CMD_READ_SECTORS_EXT 0x24 ///< defined from ATA-6\r
8bdadcc8 520\r
8bdadcc8 521//\r
522// Class 2: PIO Data-Out Commands\r
523//\r
81dac930 524#define ATA_CMD_FORMAT_TRACK 0x50 ///< defined from ATA-1, obsoleted from ATA-4\r
525#define ATA_CMD_WRITE_BUFFER 0xe8 ///< defined from ATA-1 \r
526#define ATA_CMD_WRITE_SECTORS 0x30 ///< defined from ATA-1\r
527#define ATA_CMD_WRITE_SECTORS_WITH_RETRY 0x31 ///< defined from ATA-1, obsoleted from ATA-5\r
528#define ATA_CMD_WRITE_LONG 0x32 ///< defined from ATA-1, obsoleted from ATA-5\r
529#define ATA_CMD_WRITE_LONG_WITH_RETRY 0x33 ///< defined from ATA-1, obsoleted from ATA-5\r
530#define ATA_CMD_WRITE_VERIFY 0x3c ///< defined from ATA-1, obsoleted from ATA-5\r
531#define ATA_CMD_WRITE_SECTORS_EXT 0x34 ///< defined from ATA-6\r
8bdadcc8 532\r
533//\r
534// Class 3 No Data Command\r
535//\r
81dac930 536#define ATA_CMD_ACK_MEDIA_CHANGE 0xdb ///< defined from ATA-1, obsoleted from ATA-5 \r
537#define ATA_CMD_BOOT_POST_BOOT 0xdc ///< defined from ATA-1, obsoleted from ATA-3\r
538#define ATA_CMD_BOOT_PRE_BOOT 0xdd ///< defined from ATA-1, obsoleted from ATA-3\r
539#define ATA_CMD_CHECK_POWER_MODE 0x98 ///< defined from ATA-1, obsoleted from ATA-4\r
540#define ATA_CMD_CHECK_POWER_MODE_ALIAS 0xe5 ///< defined from ATA-1\r
541#define ATA_CMD_DOOR_LOCK 0xde ///< defined from ATA-1\r
542#define ATA_CMD_DOOR_UNLOCK 0xdf ///< defined from ATA-1\r
543#define ATA_CMD_EXEC_DRIVE_DIAG 0x90 ///< defined from ATA-1\r
544#define ATA_CMD_IDLE_ALIAS 0x97 ///< defined from ATA-1, obsoleted from ATA-4\r
545#define ATA_CMD_IDLE 0xe3 ///< defined from ATA-1\r
546#define ATA_CMD_IDLE_IMMEDIATE 0x95 ///< defined from ATA-1, obsoleted from ATA-4\r
547#define ATA_CMD_IDLE_IMMEDIATE_ALIAS 0xe1 ///< defined from ATA-1\r
548#define ATA_CMD_INIT_DRIVE_PARAM 0x91 ///< defined from ATA-1, obsoleted from ATA-6\r
549#define ATA_CMD_RECALIBRATE 0x10 ///< defined from ATA-1, obsoleted from ATA-4\r
550#define ATA_CMD_READ_DRIVE_STATE 0xe9 ///< defined from ATA-1, obsoleted from ATA-3\r
551#define ATA_CMD_SET_MULTIPLE_MODE 0xC6 ///< defined from ATA-2\r
552#define ATA_CMD_READ_VERIFY 0x40 ///< defined from ATA-1\r
553#define ATA_CMD_READ_VERIFY_WITH_RETRY 0x41 ///< defined from ATA-1, obsoleted from ATA-5\r
554#define ATA_CMD_SEEK 0x70 ///< defined from ATA-1\r
555#define ATA_CMD_SET_FEATURES 0xef ///< defined from ATA-1\r
556#define ATA_CMD_STANDBY 0x96 ///< defined from ATA-1, obsoleted from ATA-4\r
557#define ATA_CMD_STANDBY_ALIAS 0xe2 ///< defined from ATA-1\r
558#define ATA_CMD_STANDBY_IMMEDIATE 0x94 ///< defined from ATA-1, obsoleted from ATA-4\r
559#define ATA_CMD_STANDBY_IMMEDIATE_ALIAS 0xe0 ///< defined from ATA-1\r
a2461f6b 560//\r
561// S.M.A.R.T\r
562//\r
81dac930 563#define ATA_CMD_SMART 0xb0 ///< defined from ATA-3\r
564#define ATA_CONSTANT_C2 0xc2 ///< reserved\r
565#define ATA_CONSTANT_4F 0x4f ///< reserved\r
566#define ATA_SMART_ENABLE_OPERATION 0xd8 ///< reserved\r
567#define ATA_SMART_RETURN_STATUS 0xda ///< defined from ATA-3\r
8bdadcc8 568\r
a2461f6b 569//\r
570// Class 4: DMA Command\r
571//\r
81dac930 572#define ATA_CMD_READ_DMA 0xc8 ///< defined from ATA-1\r
573#define ATA_CMD_READ_DMA_WITH_RETRY 0xc9 ///< defined from ATA-1, obsoleted from ATA-5\r
574#define ATA_CMD_READ_DMA_EXT 0x25 ///< defined from ATA-6\r
575#define ATA_CMD_WRITE_DMA 0xca ///< defined from ATA-1\r
576#define ATA_CMD_WRITE_DMA_WITH_RETRY 0xcb ///< defined from ATA-1, obsoleted from ATA-\r
577#define ATA_CMD_WRITE_DMA_EXT 0x35 ///< defined from ATA-6\r
a2461f6b 578 \r
37640ed3 579///\r
af2dc6a7 580/// Default content of device control register, disable INT,\r
37640ed3 581/// Bit3 is set to 1 according ATA-1\r
582///\r
583#define ATA_DEFAULT_CTL (0x0a) \r
584///\r
af2dc6a7 585/// Default context of Device/Head Register,\r
586/// Bit7 and Bit5 are set to 1 for back-compatibilities.\r
37640ed3 587///\r
8bdadcc8 588#define ATA_DEFAULT_CMD (0xa0)\r
589\r
590#define ATAPI_MAX_BYTE_COUNT (0xfffe)\r
591\r
53bbea41 592#define ATA_REQUEST_SENSE_ERROR (0x70) ///< defined in SFF-8070i\r
593\r
a2461f6b 594//\r
595// Sense Key, Additional Sense Codes and Additional Sense Code Qualifier\r
596// defined in MultiMedia Commands (MMC, MMC-2) \r
597//\r
598// Sense Key \r
599//\r
8bdadcc8 600#define ATA_SK_NO_SENSE (0x0)\r
601#define ATA_SK_RECOVERY_ERROR (0x1)\r
602#define ATA_SK_NOT_READY (0x2)\r
603#define ATA_SK_MEDIUM_ERROR (0x3)\r
604#define ATA_SK_HARDWARE_ERROR (0x4)\r
605#define ATA_SK_ILLEGAL_REQUEST (0x5)\r
606#define ATA_SK_UNIT_ATTENTION (0x6)\r
607#define ATA_SK_DATA_PROTECT (0x7)\r
608#define ATA_SK_BLANK_CHECK (0x8)\r
609#define ATA_SK_VENDOR_SPECIFIC (0x9)\r
610#define ATA_SK_RESERVED_A (0xA)\r
611#define ATA_SK_ABORT (0xB)\r
612#define ATA_SK_RESERVED_C (0xC)\r
613#define ATA_SK_OVERFLOW (0xD)\r
614#define ATA_SK_MISCOMPARE (0xE)\r
615#define ATA_SK_RESERVED_F (0xF)\r
616\r
a2461f6b 617//\r
618// Additional Sense Codes\r
619//\r
8bdadcc8 620#define ATA_ASC_NOT_READY (0x04)\r
621#define ATA_ASC_MEDIA_ERR1 (0x10)\r
622#define ATA_ASC_MEDIA_ERR2 (0x11)\r
623#define ATA_ASC_MEDIA_ERR3 (0x14)\r
624#define ATA_ASC_MEDIA_ERR4 (0x30)\r
625#define ATA_ASC_MEDIA_UPSIDE_DOWN (0x06)\r
626#define ATA_ASC_INVALID_CMD (0x20)\r
627#define ATA_ASC_LBA_OUT_OF_RANGE (0x21)\r
628#define ATA_ASC_INVALID_FIELD (0x24)\r
629#define ATA_ASC_WRITE_PROTECTED (0x27)\r
630#define ATA_ASC_MEDIA_CHANGE (0x28)\r
af2dc6a7 631#define ATA_ASC_RESET (0x29) ///< Power On Reset or Bus Reset occurred.\r
8bdadcc8 632#define ATA_ASC_ILLEGAL_FIELD (0x26)\r
633#define ATA_ASC_NO_MEDIA (0x3A)\r
634#define ATA_ASC_ILLEGAL_MODE_FOR_THIS_TRACK (0x64)\r
635\r
636//\r
637// Additional Sense Code Qualifier\r
638//\r
639#define ATA_ASCQ_IN_PROGRESS (0x01)\r
640\r
a2461f6b 641//\r
642// Error Register\r
643//\r
81dac930 644#define ATA_ERRREG_BBK BIT7 ///< Bad block detected defined from ATA-1, obsoleted from ATA-2\r
645#define ATA_ERRREG_UNC BIT6 ///< Uncorrectable Data defined from ATA-1, obsoleted from ATA-4\r
646#define ATA_ERRREG_MC BIT5 ///< Media Change defined from ATA-1, obsoleted from ATA-4\r
647#define ATA_ERRREG_IDNF BIT4 ///< ID Not Found defined from ATA-1, obsoleted from ATA-4\r
648#define ATA_ERRREG_MCR BIT3 ///< Media Change Requested defined from ATA-1, obsoleted from ATA-4\r
649#define ATA_ERRREG_ABRT BIT2 ///< Aborted Command defined from ATA-1\r
650#define ATA_ERRREG_TK0NF BIT1 ///< Track 0 Not Found defined from ATA-1, obsoleted from ATA-4\r
651#define ATA_ERRREG_AMNF BIT0 ///< Address Mark Not Found defined from ATA-1, obsoleted from ATA-4\r
8bdadcc8 652\r
a2461f6b 653//\r
654// Status Register\r
655//\r
81dac930 656#define ATA_STSREG_BSY BIT7 ///< Controller Busy defined from ATA-1\r
657#define ATA_STSREG_DRDY BIT6 ///< Drive Ready defined from ATA-1\r
658#define ATA_STSREG_DWF BIT5 ///< Drive Write Fault defined from ATA-1, obsoleted from ATA-4\r
659#define ATA_STSREG_DF BIT5 ///< Drive Fault defined from ATA-6\r
660#define ATA_STSREG_DSC BIT4 ///< Disk Seek Complete defined from ATA-1, obsoleted from ATA-4\r
661#define ATA_STSREG_DRQ BIT3 ///< Data Request defined from ATA-1\r
662#define ATA_STSREG_CORR BIT2 ///< Corrected Data defined from ATA-1, obsoleted from ATA-4\r
663#define ATA_STSREG_IDX BIT1 ///< Index defined from ATA-1, obsoleted from ATA-4\r
664#define ATA_STSREG_ERR BIT0 ///< Error defined from ATA-1\r
8bdadcc8 665\r
a2461f6b 666//\r
667// Device Control Register\r
668//\r
af2dc6a7 669#define ATA_CTLREG_SRST BIT2 ///< Software Reset.\r
670#define ATA_CTLREG_IEN_L BIT1 ///< Interrupt Enable #.\r
8bdadcc8 671\r
672#endif\r
673\r