]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdePkg/Include/IndustryStandard/Atapi.h
MdePkg: Add HTTP 1.1 industry standard definitions.
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Atapi.h
... / ...
CommitLineData
1/** @file\r
2 This file contains just some basic definitions that are needed by drivers\r
3 that dealing with ATA/ATAPI interface.\r
4\r
5Copyright (c) 2007 - 2013, Intel Corporation. All rights reserved.<BR>\r
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
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#ifndef _ATAPI_H_\r
17#define _ATAPI_H_\r
18\r
19#pragma pack(1)\r
20\r
21///\r
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
26///\r
27typedef struct { \r
28 UINT16 config; ///< General Configuration.\r
29 UINT16 cylinders; ///< Number of Cylinders.\r
30 UINT16 reserved_2; \r
31 UINT16 heads; ///< Number of logical heads. \r
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
77} ATA5_IDENTIFY_DATA;\r
78\r
79///\r
80/// ATA_IDENTIFY_DATA strictly complies with ATA/ATAPI-8 Spec\r
81/// to define the data returned by an ATA device upon successful\r
82/// completion of the ATA IDENTIFY_DEVICE command.\r
83///\r
84typedef struct {\r
85 UINT16 config; ///< General Configuration.\r
86 UINT16 obsolete_1;\r
87 UINT16 specific_config; ///< Specific Configuration.\r
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
105 UINT16 multi_sector_setting;\r
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
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
118 UINT16 queue_depth; \r
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
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
137 UINT16 obsolete_94;\r
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
144 UINT16 max_no_of_512byte_blocks_per_data_set_cmd;\r
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
154 UINT16 reserved_121_126[6];\r
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
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
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
173 UINT16 nominal_media_rotation_rate;\r
174 UINT16 reserved_218;\r
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
180 UINT16 reserved_224_229[6];\r
181 UINT64 extended_no_of_addressable_sectors;\r
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
186} ATA_IDENTIFY_DATA;\r
187\r
188///\r
189/// ATAPI_IDENTIFY_DATA strictly complies with ATA/ATAPI-8 Spec\r
190/// to define the data returned by an ATAPI device upon successful\r
191/// completion of the ATA IDENTIFY_PACKET_DEVICE command.\r
192///\r
193typedef struct {\r
194 UINT16 config; ///< General Configuration.\r
195 UINT16 reserved_1;\r
196 UINT16 specific_config; ///< Specific Configuration.\r
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
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
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
235 UINT16 advanced_power_management_level;\r
236 UINT16 master_pwd_revison_code;\r
237 UINT16 hardware_reset_result; ///< word 93\r
238 UINT16 obsolete_94;\r
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
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
246 UINT16 atapi_byte_count_0_behavior; ///< word 125\r
247 UINT16 obsolete_126_127[2];\r
248 UINT16 security_status;\r
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
255 UINT16 integrity_word;\r
256} ATAPI_IDENTIFY_DATA;\r
257\r
258\r
259///\r
260/// Standard Quiry Data format, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
261///\r
262typedef struct {\r
263 UINT8 peripheral_type;\r
264 UINT8 RMB;\r
265 UINT8 version;\r
266 UINT8 response_data_format;\r
267 UINT8 addnl_length; ///< n - 4, Numbers of bytes following this one.\r
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
274 UINT8 vendor_specific_36_55[55 - 36 + 1];\r
275 UINT8 reserved_56_95[95 - 56 + 1];\r
276 ///\r
277 /// Vendor-specific parameters fields. The sizeof (ATAPI_INQUIRY_DATA) is 254\r
278 /// since allocation_length is one byte in ATAPI_INQUIRY_CMD.\r
279 ///\r
280 UINT8 vendor_specific_96_253[253 - 96 + 1];\r
281} ATAPI_INQUIRY_DATA;\r
282\r
283///\r
284/// Request Sense Standard Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
285///\r
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
291 UINT8 reserved_2 : 1;\r
292 UINT8 Vendor_specifc_1 : 3;\r
293 UINT8 vendor_specific_3;\r
294 UINT8 vendor_specific_4;\r
295 UINT8 vendor_specific_5;\r
296 UINT8 vendor_specific_6;\r
297 UINT8 addnl_sense_length; ///< n - 7\r
298 UINT8 vendor_specific_8;\r
299 UINT8 vendor_specific_9;\r
300 UINT8 vendor_specific_10;\r
301 UINT8 vendor_specific_11;\r
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
309} ATAPI_REQUEST_SENSE_DATA;\r
310\r
311///\r
312/// READ CAPACITY Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
313///\r
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
325///\r
326/// Capacity List Header + Current/Maximum Capacity Descriptor,\r
327/// defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
328///\r
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
345///\r
346/// Test Unit Ready Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
347///\r
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
363///\r
364/// INQUIRY Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
365///\r
366typedef struct {\r
367 UINT8 opcode;\r
368 UINT8 reserved_1 : 5;\r
369 UINT8 lun : 3;\r
370 UINT8 page_code; ///< defined in SFF8090i, V6\r
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
382///\r
383/// REQUEST SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
384///\r
385typedef struct {\r
386 UINT8 opcode;\r
387 UINT8 reserved_1 : 5;\r
388 UINT8 lun : 3;\r
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
401///\r
402/// READ (10) Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
403///\r
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
420///\r
421/// READ Format Capacity Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
422///\r
423typedef struct {\r
424 UINT8 opcode;\r
425 UINT8 reserved_1 : 5;\r
426 UINT8 lun : 3;\r
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
439///\r
440/// MODE SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).\r
441///\r
442typedef struct {\r
443 UINT8 opcode;\r
444 UINT8 reserved_1 : 5;\r
445 UINT8 lun : 3;\r
446 UINT8 page_code : 6;\r
447 UINT8 page_control : 2;\r
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
459///\r
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
462///\r
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
473#pragma pack()\r
474\r
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
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
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
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
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
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
520\r
521//\r
522// Class 2: PIO Data-Out Commands\r
523//\r
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
532\r
533//\r
534// Class 3 No Data Command\r
535//\r
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
560//\r
561// S.M.A.R.T\r
562//\r
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
568\r
569//\r
570// Class 4: DMA Command\r
571//\r
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
578 \r
579///\r
580/// Default content of device control register, disable INT,\r
581/// Bit3 is set to 1 according ATA-1\r
582///\r
583#define ATA_DEFAULT_CTL (0x0a) \r
584///\r
585/// Default context of Device/Head Register,\r
586/// Bit7 and Bit5 are set to 1 for back-compatibilities.\r
587///\r
588#define ATA_DEFAULT_CMD (0xa0)\r
589\r
590#define ATAPI_MAX_BYTE_COUNT (0xfffe)\r
591\r
592#define ATA_REQUEST_SENSE_ERROR (0x70) ///< defined in SFF-8070i\r
593\r
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
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
617//\r
618// Additional Sense Codes\r
619//\r
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
631#define ATA_ASC_RESET (0x29) ///< Power On Reset or Bus Reset occurred.\r
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
641//\r
642// Error Register\r
643//\r
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
652\r
653//\r
654// Status Register\r
655//\r
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
665\r
666//\r
667// Device Control Register\r
668//\r
669#define ATA_CTLREG_SRST BIT2 ///< Software Reset.\r
670#define ATA_CTLREG_IEN_L BIT1 ///< Interrupt Enable #.\r
671\r
672#endif\r
673\r