1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   This file contains just some basic definitions that are needed by drivers
3*f334afcfSToomas Soome   that dealing with ATA/ATAPI interface.
4*f334afcfSToomas Soome 
5*f334afcfSToomas Soome Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
6*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent
7*f334afcfSToomas Soome 
8*f334afcfSToomas Soome **/
9*f334afcfSToomas Soome 
10*f334afcfSToomas Soome #ifndef _ATAPI_H_
11*f334afcfSToomas Soome #define _ATAPI_H_
12*f334afcfSToomas Soome 
13*f334afcfSToomas Soome #pragma pack(1)
14*f334afcfSToomas Soome 
15*f334afcfSToomas Soome ///
16*f334afcfSToomas Soome /// ATA5_IDENTIFY_DATA is defined in ATA-5.
17*f334afcfSToomas Soome /// (This structure is provided mainly for backward-compatibility support.
18*f334afcfSToomas Soome /// Old drivers may reference fields that are marked "obsolete" in
19*f334afcfSToomas Soome /// ATA_IDENTIFY_DATA, which currently conforms to ATA-8.)
20*f334afcfSToomas Soome ///
21*f334afcfSToomas Soome typedef struct {
22*f334afcfSToomas Soome   UINT16    config;           ///< General Configuration.
23*f334afcfSToomas Soome   UINT16    cylinders;        ///< Number of Cylinders.
24*f334afcfSToomas Soome   UINT16    reserved_2;
25*f334afcfSToomas Soome   UINT16    heads;            ///< Number of logical heads.
26*f334afcfSToomas Soome   UINT16    vendor_data1;
27*f334afcfSToomas Soome   UINT16    vendor_data2;
28*f334afcfSToomas Soome   UINT16    sectors_per_track;
29*f334afcfSToomas Soome   UINT16    vendor_specific_7_9[3];
30*f334afcfSToomas Soome   CHAR8     SerialNo[20];     ///< ASCII
31*f334afcfSToomas Soome   UINT16    vendor_specific_20_21[2];
32*f334afcfSToomas Soome   UINT16    ecc_bytes_available;
33*f334afcfSToomas Soome   CHAR8     FirmwareVer[8];   ///< ASCII
34*f334afcfSToomas Soome   CHAR8     ModelName[40];    ///< ASCII
35*f334afcfSToomas Soome   UINT16    multi_sector_cmd_max_sct_cnt;
36*f334afcfSToomas Soome   UINT16    reserved_48;
37*f334afcfSToomas Soome   UINT16    capabilities;
38*f334afcfSToomas Soome   UINT16    reserved_50;
39*f334afcfSToomas Soome   UINT16    pio_cycle_timing;
40*f334afcfSToomas Soome   UINT16    reserved_52;
41*f334afcfSToomas Soome   UINT16    field_validity;
42*f334afcfSToomas Soome   UINT16    current_cylinders;
43*f334afcfSToomas Soome   UINT16    current_heads;
44*f334afcfSToomas Soome   UINT16    current_sectors;
45*f334afcfSToomas Soome   UINT16    CurrentCapacityLsb;
46*f334afcfSToomas Soome   UINT16    CurrentCapacityMsb;
47*f334afcfSToomas Soome   UINT16    reserved_59;
48*f334afcfSToomas Soome   UINT16    user_addressable_sectors_lo;
49*f334afcfSToomas Soome   UINT16    user_addressable_sectors_hi;
50*f334afcfSToomas Soome   UINT16    reserved_62;
51*f334afcfSToomas Soome   UINT16    multi_word_dma_mode;
52*f334afcfSToomas Soome   UINT16    advanced_pio_modes;
53*f334afcfSToomas Soome   UINT16    min_multi_word_dma_cycle_time;
54*f334afcfSToomas Soome   UINT16    rec_multi_word_dma_cycle_time;
55*f334afcfSToomas Soome   UINT16    min_pio_cycle_time_without_flow_control;
56*f334afcfSToomas Soome   UINT16    min_pio_cycle_time_with_flow_control;
57*f334afcfSToomas Soome   UINT16    reserved_69_79[11];
58*f334afcfSToomas Soome   UINT16    major_version_no;
59*f334afcfSToomas Soome   UINT16    minor_version_no;
60*f334afcfSToomas Soome   UINT16    command_set_supported_82;    ///< word 82
61*f334afcfSToomas Soome   UINT16    command_set_supported_83;    ///< word 83
62*f334afcfSToomas Soome   UINT16    command_set_feature_extn;    ///< word 84
63*f334afcfSToomas Soome   UINT16    command_set_feature_enb_85;  ///< word 85
64*f334afcfSToomas Soome   UINT16    command_set_feature_enb_86;  ///< word 86
65*f334afcfSToomas Soome   UINT16    command_set_feature_default; ///< word 87
66*f334afcfSToomas Soome   UINT16    ultra_dma_mode;              ///< word 88
67*f334afcfSToomas Soome   UINT16    reserved_89_127[39];
68*f334afcfSToomas Soome   UINT16    security_status;
69*f334afcfSToomas Soome   UINT16    vendor_data_129_159[31];
70*f334afcfSToomas Soome   UINT16    reserved_160_255[96];
71*f334afcfSToomas Soome } ATA5_IDENTIFY_DATA;
72*f334afcfSToomas Soome 
73*f334afcfSToomas Soome ///
74*f334afcfSToomas Soome /// ATA_IDENTIFY_DATA strictly complies with ATA/ATAPI-8 Spec
75*f334afcfSToomas Soome /// to define the data returned by an ATA device upon successful
76*f334afcfSToomas Soome /// completion of the ATA IDENTIFY_DEVICE command.
77*f334afcfSToomas Soome ///
78*f334afcfSToomas Soome typedef struct {
79*f334afcfSToomas Soome   UINT16    config;                                ///< General Configuration.
80*f334afcfSToomas Soome   UINT16    obsolete_1;
81*f334afcfSToomas Soome   UINT16    specific_config;                       ///< Specific Configuration.
82*f334afcfSToomas Soome   UINT16    obsolete_3;
83*f334afcfSToomas Soome   UINT16    retired_4_5[2];
84*f334afcfSToomas Soome   UINT16    obsolete_6;
85*f334afcfSToomas Soome   UINT16    cfa_reserved_7_8[2];
86*f334afcfSToomas Soome   UINT16    retired_9;
87*f334afcfSToomas Soome   CHAR8     SerialNo[20];                          ///< word 10~19
88*f334afcfSToomas Soome   UINT16    retired_20_21[2];
89*f334afcfSToomas Soome   UINT16    obsolete_22;
90*f334afcfSToomas Soome   CHAR8     FirmwareVer[8];                        ///< word 23~26
91*f334afcfSToomas Soome   CHAR8     ModelName[40];                         ///< word 27~46
92*f334afcfSToomas Soome   UINT16    multi_sector_cmd_max_sct_cnt;
93*f334afcfSToomas Soome   UINT16    trusted_computing_support;
94*f334afcfSToomas Soome   UINT16    capabilities_49;
95*f334afcfSToomas Soome   UINT16    capabilities_50;
96*f334afcfSToomas Soome   UINT16    obsolete_51_52[2];
97*f334afcfSToomas Soome   UINT16    field_validity;
98*f334afcfSToomas Soome   UINT16    obsolete_54_58[5];
99*f334afcfSToomas Soome   UINT16    multi_sector_setting;
100*f334afcfSToomas Soome   UINT16    user_addressable_sectors_lo;
101*f334afcfSToomas Soome   UINT16    user_addressable_sectors_hi;
102*f334afcfSToomas Soome   UINT16    obsolete_62;
103*f334afcfSToomas Soome   UINT16    multi_word_dma_mode;
104*f334afcfSToomas Soome   UINT16    advanced_pio_modes;
105*f334afcfSToomas Soome   UINT16    min_multi_word_dma_cycle_time;
106*f334afcfSToomas Soome   UINT16    rec_multi_word_dma_cycle_time;
107*f334afcfSToomas Soome   UINT16    min_pio_cycle_time_without_flow_control;
108*f334afcfSToomas Soome   UINT16    min_pio_cycle_time_with_flow_control;
109*f334afcfSToomas Soome   UINT16    additional_supported;                  ///< word 69
110*f334afcfSToomas Soome   UINT16    reserved_70;
111*f334afcfSToomas Soome   UINT16    reserved_71_74[4];                     ///< Reserved for IDENTIFY PACKET DEVICE cmd.
112*f334afcfSToomas Soome   UINT16    queue_depth;
113*f334afcfSToomas Soome   UINT16    serial_ata_capabilities;
114*f334afcfSToomas Soome   UINT16    reserved_77;                           ///< Reserved for Serial ATA
115*f334afcfSToomas Soome   UINT16    serial_ata_features_supported;
116*f334afcfSToomas Soome   UINT16    serial_ata_features_enabled;
117*f334afcfSToomas Soome   UINT16    major_version_no;
118*f334afcfSToomas Soome   UINT16    minor_version_no;
119*f334afcfSToomas Soome   UINT16    command_set_supported_82;              ///< word 82
120*f334afcfSToomas Soome   UINT16    command_set_supported_83;              ///< word 83
121*f334afcfSToomas Soome   UINT16    command_set_feature_extn;              ///< word 84
122*f334afcfSToomas Soome   UINT16    command_set_feature_enb_85;            ///< word 85
123*f334afcfSToomas Soome   UINT16    command_set_feature_enb_86;            ///< word 86
124*f334afcfSToomas Soome   UINT16    command_set_feature_default;           ///< word 87
125*f334afcfSToomas Soome   UINT16    ultra_dma_mode;                        ///< word 88
126*f334afcfSToomas Soome   UINT16    time_for_security_erase_unit;
127*f334afcfSToomas Soome   UINT16    time_for_enhanced_security_erase_unit;
128*f334afcfSToomas Soome   UINT16    advanced_power_management_level;
129*f334afcfSToomas Soome   UINT16    master_password_identifier;
130*f334afcfSToomas Soome   UINT16    hardware_configuration_test_result;
131*f334afcfSToomas Soome   UINT16    obsolete_94;
132*f334afcfSToomas Soome   UINT16    stream_minimum_request_size;
133*f334afcfSToomas Soome   UINT16    streaming_transfer_time_for_dma;
134*f334afcfSToomas Soome   UINT16    streaming_access_latency_for_dma_and_pio;
135*f334afcfSToomas Soome   UINT16    streaming_performance_granularity[2];  ///< word 98~99
136*f334afcfSToomas Soome   UINT16    maximum_lba_for_48bit_addressing[4];   ///< word 100~103
137*f334afcfSToomas Soome   UINT16    streaming_transfer_time_for_pio;
138*f334afcfSToomas Soome   UINT16    max_no_of_512byte_blocks_per_data_set_cmd;
139*f334afcfSToomas Soome   UINT16    phy_logic_sector_support;              ///< word 106
140*f334afcfSToomas Soome   UINT16    interseek_delay_for_iso7779;
141*f334afcfSToomas Soome   UINT16    world_wide_name[4];                    ///< word 108~111
142*f334afcfSToomas Soome   UINT16    reserved_for_128bit_wwn_112_115[4];
143*f334afcfSToomas Soome   UINT16    reserved_for_technical_report;
144*f334afcfSToomas Soome   UINT16    logic_sector_size_lo;                    ///< word 117
145*f334afcfSToomas Soome   UINT16    logic_sector_size_hi;                    ///< word 118
146*f334afcfSToomas Soome   UINT16    features_and_command_sets_supported_ext; ///< word 119
147*f334afcfSToomas Soome   UINT16    features_and_command_sets_enabled_ext;   ///< word 120
148*f334afcfSToomas Soome   UINT16    reserved_121_126[6];
149*f334afcfSToomas Soome   UINT16    obsolete_127;
150*f334afcfSToomas Soome   UINT16    security_status;                       ///< word 128
151*f334afcfSToomas Soome   UINT16    vendor_specific_129_159[31];
152*f334afcfSToomas Soome   UINT16    cfa_power_mode;                        ///< word 160
153*f334afcfSToomas Soome   UINT16    reserved_for_compactflash_161_167[7];
154*f334afcfSToomas Soome   UINT16    device_nominal_form_factor;
155*f334afcfSToomas Soome   UINT16    is_data_set_cmd_supported;
156*f334afcfSToomas Soome   CHAR8     additional_product_identifier[8];
157*f334afcfSToomas Soome   UINT16    reserved_174_175[2];
158*f334afcfSToomas Soome   CHAR8     media_serial_number[60];               ///< word 176~205
159*f334afcfSToomas Soome   UINT16    sct_command_transport;                 ///< word 206
160*f334afcfSToomas Soome   UINT16    reserved_207_208[2];
161*f334afcfSToomas Soome   UINT16    alignment_logic_in_phy_blocks;           ///< word 209
162*f334afcfSToomas Soome   UINT16    write_read_verify_sector_count_mode3[2]; ///< word 210~211
163*f334afcfSToomas Soome   UINT16    verify_sector_count_mode2[2];
164*f334afcfSToomas Soome   UINT16    nv_cache_capabilities;
165*f334afcfSToomas Soome   UINT16    nv_cache_size_in_logical_block_lsw;    ///< word 215
166*f334afcfSToomas Soome   UINT16    nv_cache_size_in_logical_block_msw;    ///< word 216
167*f334afcfSToomas Soome   UINT16    nominal_media_rotation_rate;
168*f334afcfSToomas Soome   UINT16    reserved_218;
169*f334afcfSToomas Soome   UINT16    nv_cache_options;                      ///< word 219
170*f334afcfSToomas Soome   UINT16    write_read_verify_mode;                ///< word 220
171*f334afcfSToomas Soome   UINT16    reserved_221;
172*f334afcfSToomas Soome   UINT16    transport_major_revision_number;
173*f334afcfSToomas Soome   UINT16    transport_minor_revision_number;
174*f334afcfSToomas Soome   UINT16    reserved_224_229[6];
175*f334afcfSToomas Soome   UINT64    extended_no_of_addressable_sectors;
176*f334afcfSToomas Soome   UINT16    min_number_per_download_microcode_mode3; ///< word 234
177*f334afcfSToomas Soome   UINT16    max_number_per_download_microcode_mode3; ///< word 235
178*f334afcfSToomas Soome   UINT16    reserved_236_254[19];
179*f334afcfSToomas Soome   UINT16    integrity_word;
180*f334afcfSToomas Soome } ATA_IDENTIFY_DATA;
181*f334afcfSToomas Soome 
182*f334afcfSToomas Soome ///
183*f334afcfSToomas Soome /// ATAPI_IDENTIFY_DATA strictly complies with ATA/ATAPI-8 Spec
184*f334afcfSToomas Soome /// to define the data returned by an ATAPI device upon successful
185*f334afcfSToomas Soome /// completion of the ATA IDENTIFY_PACKET_DEVICE command.
186*f334afcfSToomas Soome ///
187*f334afcfSToomas Soome typedef struct {
188*f334afcfSToomas Soome   UINT16    config;                                ///< General Configuration.
189*f334afcfSToomas Soome   UINT16    reserved_1;
190*f334afcfSToomas Soome   UINT16    specific_config;                       ///< Specific Configuration.
191*f334afcfSToomas Soome   UINT16    reserved_3_9[7];
192*f334afcfSToomas Soome   CHAR8     SerialNo[20];                          ///< word 10~19
193*f334afcfSToomas Soome   UINT16    reserved_20_22[3];
194*f334afcfSToomas Soome   CHAR8     FirmwareVer[8];                        ///< word 23~26
195*f334afcfSToomas Soome   CHAR8     ModelName[40];                         ///< word 27~46
196*f334afcfSToomas Soome   UINT16    reserved_47_48[2];
197*f334afcfSToomas Soome   UINT16    capabilities_49;
198*f334afcfSToomas Soome   UINT16    capabilities_50;
199*f334afcfSToomas Soome   UINT16    obsolete_51;
200*f334afcfSToomas Soome   UINT16    reserved_52;
201*f334afcfSToomas Soome   UINT16    field_validity;                        ///< word 53
202*f334afcfSToomas Soome   UINT16    reserved_54_61[8];
203*f334afcfSToomas Soome   UINT16    dma_dir;
204*f334afcfSToomas Soome   UINT16    multi_word_dma_mode;                   ///< word 63
205*f334afcfSToomas Soome   UINT16    advanced_pio_modes;                    ///< word 64
206*f334afcfSToomas Soome   UINT16    min_multi_word_dma_cycle_time;
207*f334afcfSToomas Soome   UINT16    rec_multi_word_dma_cycle_time;
208*f334afcfSToomas Soome   UINT16    min_pio_cycle_time_without_flow_control;
209*f334afcfSToomas Soome   UINT16    min_pio_cycle_time_with_flow_control;
210*f334afcfSToomas Soome   UINT16    reserved_69_70[2];
211*f334afcfSToomas Soome   UINT16    obsolete_71_72[2];
212*f334afcfSToomas Soome   UINT16    reserved_73_74[2];
213*f334afcfSToomas Soome   UINT16    obsolete_75;
214*f334afcfSToomas Soome   UINT16    serial_ata_capabilities;
215*f334afcfSToomas Soome   UINT16    reserved_77;                           ///< Reserved for Serial ATA
216*f334afcfSToomas Soome   UINT16    serial_ata_features_supported;
217*f334afcfSToomas Soome   UINT16    serial_ata_features_enabled;
218*f334afcfSToomas Soome   UINT16    major_version_no;                      ///< word 80
219*f334afcfSToomas Soome   UINT16    minor_version_no;                      ///< word 81
220*f334afcfSToomas Soome   UINT16    cmd_set_support_82;
221*f334afcfSToomas Soome   UINT16    cmd_set_support_83;
222*f334afcfSToomas Soome   UINT16    cmd_feature_support;
223*f334afcfSToomas Soome   UINT16    cmd_feature_enable_85;
224*f334afcfSToomas Soome   UINT16    cmd_feature_enable_86;
225*f334afcfSToomas Soome   UINT16    cmd_feature_default;
226*f334afcfSToomas Soome   UINT16    ultra_dma_select;
227*f334afcfSToomas Soome   UINT16    time_required_for_sec_erase;           ///< word 89
228*f334afcfSToomas Soome   UINT16    time_required_for_enhanced_sec_erase;  ///< word 90
229*f334afcfSToomas Soome   UINT16    advanced_power_management_level;
230*f334afcfSToomas Soome   UINT16    master_pwd_revison_code;
231*f334afcfSToomas Soome   UINT16    hardware_reset_result;                 ///< word 93
232*f334afcfSToomas Soome   UINT16    obsolete_94;
233*f334afcfSToomas Soome   UINT16    reserved_95_107[13];
234*f334afcfSToomas Soome   UINT16    world_wide_name[4];                    ///< word 108~111
235*f334afcfSToomas Soome   UINT16    reserved_for_128bit_wwn_112_115[4];
236*f334afcfSToomas Soome   UINT16    reserved_116_118[3];
237*f334afcfSToomas Soome   UINT16    command_and_feature_sets_supported;    ///< word 119
238*f334afcfSToomas Soome   UINT16    command_and_feature_sets_supported_enabled;
239*f334afcfSToomas Soome   UINT16    reserved_121_124[4];
240*f334afcfSToomas Soome   UINT16    atapi_byte_count_0_behavior;           ///< word 125
241*f334afcfSToomas Soome   UINT16    obsolete_126_127[2];
242*f334afcfSToomas Soome   UINT16    security_status;
243*f334afcfSToomas Soome   UINT16    reserved_129_159[31];
244*f334afcfSToomas Soome   UINT16    cfa_reserved_160_175[16];
245*f334afcfSToomas Soome   UINT16    reserved_176_221[46];
246*f334afcfSToomas Soome   UINT16    transport_major_version;
247*f334afcfSToomas Soome   UINT16    transport_minor_version;
248*f334afcfSToomas Soome   UINT16    reserved_224_254[31];
249*f334afcfSToomas Soome   UINT16    integrity_word;
250*f334afcfSToomas Soome } ATAPI_IDENTIFY_DATA;
251*f334afcfSToomas Soome 
252*f334afcfSToomas Soome ///
253*f334afcfSToomas Soome /// Standard Quiry Data format, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
254*f334afcfSToomas Soome ///
255*f334afcfSToomas Soome typedef struct {
256*f334afcfSToomas Soome   UINT8    peripheral_type;
257*f334afcfSToomas Soome   UINT8    RMB;
258*f334afcfSToomas Soome   UINT8    version;
259*f334afcfSToomas Soome   UINT8    response_data_format;
260*f334afcfSToomas Soome   UINT8    addnl_length;  ///< n - 4, Numbers of bytes following this one.
261*f334afcfSToomas Soome   UINT8    reserved_5;
262*f334afcfSToomas Soome   UINT8    reserved_6;
263*f334afcfSToomas Soome   UINT8    reserved_7;
264*f334afcfSToomas Soome   UINT8    vendor_info[8];
265*f334afcfSToomas Soome   UINT8    product_id[16];
266*f334afcfSToomas Soome   UINT8    product_revision_level[4];
267*f334afcfSToomas Soome   UINT8    vendor_specific_36_55[55 - 36 + 1];
268*f334afcfSToomas Soome   UINT8    reserved_56_95[95 - 56 + 1];
269*f334afcfSToomas Soome   ///
270*f334afcfSToomas Soome   /// Vendor-specific parameters fields. The sizeof (ATAPI_INQUIRY_DATA) is 254
271*f334afcfSToomas Soome   /// since allocation_length is one byte in ATAPI_INQUIRY_CMD.
272*f334afcfSToomas Soome   ///
273*f334afcfSToomas Soome   UINT8    vendor_specific_96_253[253 - 96 + 1];
274*f334afcfSToomas Soome } ATAPI_INQUIRY_DATA;
275*f334afcfSToomas Soome 
276*f334afcfSToomas Soome ///
277*f334afcfSToomas Soome /// Request Sense Standard Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
278*f334afcfSToomas Soome ///
279*f334afcfSToomas Soome typedef struct {
280*f334afcfSToomas Soome   UINT8    error_code       : 7;
281*f334afcfSToomas Soome   UINT8    valid            : 1;
282*f334afcfSToomas Soome   UINT8    reserved_1;
283*f334afcfSToomas Soome   UINT8    sense_key        : 4;
284*f334afcfSToomas Soome   UINT8    reserved_2       : 1;
285*f334afcfSToomas Soome   UINT8    Vendor_specifc_1 : 3;
286*f334afcfSToomas Soome   UINT8    vendor_specific_3;
287*f334afcfSToomas Soome   UINT8    vendor_specific_4;
288*f334afcfSToomas Soome   UINT8    vendor_specific_5;
289*f334afcfSToomas Soome   UINT8    vendor_specific_6;
290*f334afcfSToomas Soome   UINT8    addnl_sense_length;        ///< n - 7
291*f334afcfSToomas Soome   UINT8    vendor_specific_8;
292*f334afcfSToomas Soome   UINT8    vendor_specific_9;
293*f334afcfSToomas Soome   UINT8    vendor_specific_10;
294*f334afcfSToomas Soome   UINT8    vendor_specific_11;
295*f334afcfSToomas Soome   UINT8    addnl_sense_code;            ///< mandatory
296*f334afcfSToomas Soome   UINT8    addnl_sense_code_qualifier;  ///< mandatory
297*f334afcfSToomas Soome   UINT8    field_replaceable_unit_code; ///< optional
298*f334afcfSToomas Soome   UINT8    sense_key_specific_15 : 7;
299*f334afcfSToomas Soome   UINT8    SKSV                  : 1;
300*f334afcfSToomas Soome   UINT8    sense_key_specific_16;
301*f334afcfSToomas Soome   UINT8    sense_key_specific_17;
302*f334afcfSToomas Soome } ATAPI_REQUEST_SENSE_DATA;
303*f334afcfSToomas Soome 
304*f334afcfSToomas Soome ///
305*f334afcfSToomas Soome /// READ CAPACITY Data, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
306*f334afcfSToomas Soome ///
307*f334afcfSToomas Soome typedef struct {
308*f334afcfSToomas Soome   UINT8    LastLba3;
309*f334afcfSToomas Soome   UINT8    LastLba2;
310*f334afcfSToomas Soome   UINT8    LastLba1;
311*f334afcfSToomas Soome   UINT8    LastLba0;
312*f334afcfSToomas Soome   UINT8    BlockSize3;
313*f334afcfSToomas Soome   UINT8    BlockSize2;
314*f334afcfSToomas Soome   UINT8    BlockSize1;
315*f334afcfSToomas Soome   UINT8    BlockSize0;
316*f334afcfSToomas Soome } ATAPI_READ_CAPACITY_DATA;
317*f334afcfSToomas Soome 
318*f334afcfSToomas Soome ///
319*f334afcfSToomas Soome /// Capacity List Header + Current/Maximum Capacity Descriptor,
320*f334afcfSToomas Soome /// defined in SFF-8070i(ATAPI Removable Rewritable Specification).
321*f334afcfSToomas Soome ///
322*f334afcfSToomas Soome typedef struct {
323*f334afcfSToomas Soome   UINT8    reserved_0;
324*f334afcfSToomas Soome   UINT8    reserved_1;
325*f334afcfSToomas Soome   UINT8    reserved_2;
326*f334afcfSToomas Soome   UINT8    Capacity_Length;
327*f334afcfSToomas Soome   UINT8    LastLba3;
328*f334afcfSToomas Soome   UINT8    LastLba2;
329*f334afcfSToomas Soome   UINT8    LastLba1;
330*f334afcfSToomas Soome   UINT8    LastLba0;
331*f334afcfSToomas Soome   UINT8    DesCode    : 2;
332*f334afcfSToomas Soome   UINT8    reserved_9 : 6;
333*f334afcfSToomas Soome   UINT8    BlockSize2;
334*f334afcfSToomas Soome   UINT8    BlockSize1;
335*f334afcfSToomas Soome   UINT8    BlockSize0;
336*f334afcfSToomas Soome } ATAPI_READ_FORMAT_CAPACITY_DATA;
337*f334afcfSToomas Soome 
338*f334afcfSToomas Soome ///
339*f334afcfSToomas Soome /// Test Unit Ready Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
340*f334afcfSToomas Soome ///
341*f334afcfSToomas Soome typedef struct {
342*f334afcfSToomas Soome   UINT8    opcode;
343*f334afcfSToomas Soome   UINT8    reserved_1;
344*f334afcfSToomas Soome   UINT8    reserved_2;
345*f334afcfSToomas Soome   UINT8    reserved_3;
346*f334afcfSToomas Soome   UINT8    reserved_4;
347*f334afcfSToomas Soome   UINT8    reserved_5;
348*f334afcfSToomas Soome   UINT8    reserved_6;
349*f334afcfSToomas Soome   UINT8    reserved_7;
350*f334afcfSToomas Soome   UINT8    reserved_8;
351*f334afcfSToomas Soome   UINT8    reserved_9;
352*f334afcfSToomas Soome   UINT8    reserved_10;
353*f334afcfSToomas Soome   UINT8    reserved_11;
354*f334afcfSToomas Soome } ATAPI_TEST_UNIT_READY_CMD;
355*f334afcfSToomas Soome 
356*f334afcfSToomas Soome ///
357*f334afcfSToomas Soome /// INQUIRY Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
358*f334afcfSToomas Soome ///
359*f334afcfSToomas Soome typedef struct {
360*f334afcfSToomas Soome   UINT8    opcode;
361*f334afcfSToomas Soome   UINT8    reserved_1 : 5;
362*f334afcfSToomas Soome   UINT8    lun        : 3;
363*f334afcfSToomas Soome   UINT8    page_code;     ///< defined in SFF8090i, V6
364*f334afcfSToomas Soome   UINT8    reserved_3;
365*f334afcfSToomas Soome   UINT8    allocation_length;
366*f334afcfSToomas Soome   UINT8    reserved_5;
367*f334afcfSToomas Soome   UINT8    reserved_6;
368*f334afcfSToomas Soome   UINT8    reserved_7;
369*f334afcfSToomas Soome   UINT8    reserved_8;
370*f334afcfSToomas Soome   UINT8    reserved_9;
371*f334afcfSToomas Soome   UINT8    reserved_10;
372*f334afcfSToomas Soome   UINT8    reserved_11;
373*f334afcfSToomas Soome } ATAPI_INQUIRY_CMD;
374*f334afcfSToomas Soome 
375*f334afcfSToomas Soome ///
376*f334afcfSToomas Soome /// REQUEST SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
377*f334afcfSToomas Soome ///
378*f334afcfSToomas Soome typedef struct {
379*f334afcfSToomas Soome   UINT8    opcode;
380*f334afcfSToomas Soome   UINT8    reserved_1 : 5;
381*f334afcfSToomas Soome   UINT8    lun        : 3;
382*f334afcfSToomas Soome   UINT8    reserved_2;
383*f334afcfSToomas Soome   UINT8    reserved_3;
384*f334afcfSToomas Soome   UINT8    allocation_length;
385*f334afcfSToomas Soome   UINT8    reserved_5;
386*f334afcfSToomas Soome   UINT8    reserved_6;
387*f334afcfSToomas Soome   UINT8    reserved_7;
388*f334afcfSToomas Soome   UINT8    reserved_8;
389*f334afcfSToomas Soome   UINT8    reserved_9;
390*f334afcfSToomas Soome   UINT8    reserved_10;
391*f334afcfSToomas Soome   UINT8    reserved_11;
392*f334afcfSToomas Soome } ATAPI_REQUEST_SENSE_CMD;
393*f334afcfSToomas Soome 
394*f334afcfSToomas Soome ///
395*f334afcfSToomas Soome /// READ (10) Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
396*f334afcfSToomas Soome ///
397*f334afcfSToomas Soome typedef struct {
398*f334afcfSToomas Soome   UINT8    opcode;
399*f334afcfSToomas Soome   UINT8    reserved_1 : 5;
400*f334afcfSToomas Soome   UINT8    lun        : 3;
401*f334afcfSToomas Soome   UINT8    Lba0;
402*f334afcfSToomas Soome   UINT8    Lba1;
403*f334afcfSToomas Soome   UINT8    Lba2;
404*f334afcfSToomas Soome   UINT8    Lba3;
405*f334afcfSToomas Soome   UINT8    reserved_6;
406*f334afcfSToomas Soome   UINT8    TranLen0;
407*f334afcfSToomas Soome   UINT8    TranLen1;
408*f334afcfSToomas Soome   UINT8    reserved_9;
409*f334afcfSToomas Soome   UINT8    reserved_10;
410*f334afcfSToomas Soome   UINT8    reserved_11;
411*f334afcfSToomas Soome } ATAPI_READ10_CMD;
412*f334afcfSToomas Soome 
413*f334afcfSToomas Soome ///
414*f334afcfSToomas Soome /// READ Format Capacity Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
415*f334afcfSToomas Soome ///
416*f334afcfSToomas Soome typedef struct {
417*f334afcfSToomas Soome   UINT8    opcode;
418*f334afcfSToomas Soome   UINT8    reserved_1 : 5;
419*f334afcfSToomas Soome   UINT8    lun        : 3;
420*f334afcfSToomas Soome   UINT8    reserved_2;
421*f334afcfSToomas Soome   UINT8    reserved_3;
422*f334afcfSToomas Soome   UINT8    reserved_4;
423*f334afcfSToomas Soome   UINT8    reserved_5;
424*f334afcfSToomas Soome   UINT8    reserved_6;
425*f334afcfSToomas Soome   UINT8    allocation_length_hi;
426*f334afcfSToomas Soome   UINT8    allocation_length_lo;
427*f334afcfSToomas Soome   UINT8    reserved_9;
428*f334afcfSToomas Soome   UINT8    reserved_10;
429*f334afcfSToomas Soome   UINT8    reserved_11;
430*f334afcfSToomas Soome } ATAPI_READ_FORMAT_CAP_CMD;
431*f334afcfSToomas Soome 
432*f334afcfSToomas Soome ///
433*f334afcfSToomas Soome /// MODE SENSE Command, defined in SFF-8070i(ATAPI Removable Rewritable Specification).
434*f334afcfSToomas Soome ///
435*f334afcfSToomas Soome typedef struct {
436*f334afcfSToomas Soome   UINT8    opcode;
437*f334afcfSToomas Soome   UINT8    reserved_1   : 5;
438*f334afcfSToomas Soome   UINT8    lun          : 3;
439*f334afcfSToomas Soome   UINT8    page_code    : 6;
440*f334afcfSToomas Soome   UINT8    page_control : 2;
441*f334afcfSToomas Soome   UINT8    reserved_3;
442*f334afcfSToomas Soome   UINT8    reserved_4;
443*f334afcfSToomas Soome   UINT8    reserved_5;
444*f334afcfSToomas Soome   UINT8    reserved_6;
445*f334afcfSToomas Soome   UINT8    parameter_list_length_hi;
446*f334afcfSToomas Soome   UINT8    parameter_list_length_lo;
447*f334afcfSToomas Soome   UINT8    reserved_9;
448*f334afcfSToomas Soome   UINT8    reserved_10;
449*f334afcfSToomas Soome   UINT8    reserved_11;
450*f334afcfSToomas Soome } ATAPI_MODE_SENSE_CMD;
451*f334afcfSToomas Soome 
452*f334afcfSToomas Soome ///
453*f334afcfSToomas Soome /// ATAPI_PACKET_COMMAND is not defined in the ATA specification.
454*f334afcfSToomas Soome /// We add it here for the convenience of ATA/ATAPI module writers.
455*f334afcfSToomas Soome ///
456*f334afcfSToomas Soome typedef union {
457*f334afcfSToomas Soome   UINT16                       Data16[6];
458*f334afcfSToomas Soome   ATAPI_TEST_UNIT_READY_CMD    TestUnitReady;
459*f334afcfSToomas Soome   ATAPI_READ10_CMD             Read10;
460*f334afcfSToomas Soome   ATAPI_REQUEST_SENSE_CMD      RequestSence;
461*f334afcfSToomas Soome   ATAPI_INQUIRY_CMD            Inquiry;
462*f334afcfSToomas Soome   ATAPI_MODE_SENSE_CMD         ModeSense;
463*f334afcfSToomas Soome   ATAPI_READ_FORMAT_CAP_CMD    ReadFormatCapacity;
464*f334afcfSToomas Soome } ATAPI_PACKET_COMMAND;
465*f334afcfSToomas Soome 
466*f334afcfSToomas Soome #pragma pack()
467*f334afcfSToomas Soome 
468*f334afcfSToomas Soome #define ATAPI_MAX_DMA_EXT_CMD_SECTORS  0x10000
469*f334afcfSToomas Soome #define ATAPI_MAX_DMA_CMD_SECTORS      0x100
470*f334afcfSToomas Soome 
471*f334afcfSToomas Soome //  ATA/ATAPI Signature equates
472*f334afcfSToomas Soome #define ATA_SIGNATURE       0x0101                                   ///< defined in ACS-3
473*f334afcfSToomas Soome #define ATAPI_SIGNATURE     0xeb14                                   ///< defined in ACS-3
474*f334afcfSToomas Soome #define ATAPI_SIGNATURE_32  0xeb140101                               ///< defined in ACS-3
475*f334afcfSToomas Soome 
476*f334afcfSToomas Soome //  Spin Up Configuration definitions
477*f334afcfSToomas Soome #define ATA_SPINUP_CFG_REQUIRED_IDD_INCOMPLETE      0x37c8       ///< defined in ACS-3
478*f334afcfSToomas Soome #define ATA_SPINUP_CFG_REQUIRED_IDD_COMPLETE        0x738c       ///< defined in ACS-3
479*f334afcfSToomas Soome #define ATA_SPINUP_CFG_NOT_REQUIRED_IDD_INCOMPLETE  0x8c73       ///< defined in ACS-3
480*f334afcfSToomas Soome #define ATA_SPINUP_CFG_NOT_REQUIRED_IDD_COMPLETE    0xc837       ///< defined in ACS-3
481*f334afcfSToomas Soome 
482*f334afcfSToomas Soome //
483*f334afcfSToomas Soome // ATA Packet Command Code
484*f334afcfSToomas Soome //
485*f334afcfSToomas Soome #define ATA_CMD_FORMAT_UNIT                  0x04              ///< defined in ATAPI Removable Rewritable Media Devices
486*f334afcfSToomas Soome #define ATA_CMD_SOFT_RESET                   0x08              ///< defined from ATA-3
487*f334afcfSToomas Soome #define ATA_CMD_PACKET                       0xA0              ///< defined from ATA-3
488*f334afcfSToomas Soome #define ATA_CMD_IDENTIFY_DEVICE              0xA1              ///< defined from ATA-3
489*f334afcfSToomas Soome #define ATA_CMD_SERVICE                      0xA2              ///< defined from ATA-3
490*f334afcfSToomas Soome #define ATA_CMD_TEST_UNIT_READY              0x00              ///< defined from ATA-1
491*f334afcfSToomas Soome #define ATA_CMD_REQUEST_SENSE                0x03              ///< defined from ATA-4
492*f334afcfSToomas Soome #define ATA_CMD_INQUIRY                      0x12              ///< defined in ATAPI Removable Rewritable Media Devices
493*f334afcfSToomas Soome #define ATA_CMD_READ_FORMAT_CAPACITY         0x23              ///< defined in ATAPI Removable Rewritable Media Devices
494*f334afcfSToomas Soome #define ATA_CMD_READ_CAPACITY                0x25              ///< defined in ATAPI Removable Rewritable Media Devices
495*f334afcfSToomas Soome #define ATA_CMD_READ_10                      0x28              ///< defined in ATAPI Removable Rewritable Media Devices
496*f334afcfSToomas Soome #define ATA_CMD_WRITE_10                     0x2A              ///< defined in ATAPI Removable Rewritable Media Devices
497*f334afcfSToomas Soome #define ATA_CMD_ATAPI_SEEK                   0x2B              ///< defined in ATAPI Removable Rewritable Media Devices
498*f334afcfSToomas Soome #define ATA_CMD_WRITE_AND_VERIFY             0x2E              ///< defined in ATAPI Removable Rewritable Media Devices
499*f334afcfSToomas Soome #define ATA_CMD_VERIFY                       0x2F              ///< defined in ATAPI Removable Rewritable Media Devices
500*f334afcfSToomas Soome #define ATA_CMD_READ_12                      0xA8              ///< defined in ATAPI Removable Rewritable Media Devices
501*f334afcfSToomas Soome #define ATA_CMD_WRITE_12                     0xAA              ///< defined in ATAPI Removable Rewritable Media Devices
502*f334afcfSToomas Soome #define ATA_CMD_START_STOP_UNIT              0x1B              ///< defined in ATAPI Removable Rewritable Media Devices
503*f334afcfSToomas Soome #define ATA_CMD_PREVENT_ALLOW_MEDIA_REMOVAL  0x1E              ///< defined in ATAPI Removable Rewritable Media Devices
504*f334afcfSToomas Soome #define ATA_CMD_MODE_SELECT                  0x55              ///< defined in ATAPI Removable Rewritable Media Devices
505*f334afcfSToomas Soome 
506*f334afcfSToomas Soome #define ATA_CMD_MODE_SENSE                          0x5A       ///< defined in ATAPI Removable Rewritable Media Devices
507*f334afcfSToomas Soome #define ATA_PAGE_CODE_READ_WRITE_ERROR              0x01       ///< defined in ATAPI Removable Rewritable Media Devices
508*f334afcfSToomas Soome #define ATA_PAGE_CODE_CACHING_PAGE                  0x08       ///< defined in ATAPI Removable Rewritable Media Devices
509*f334afcfSToomas Soome #define ATA_PAGE_CODE_REMOVABLE_BLOCK_CAPABILITIES  0x1B       ///< defined in ATAPI Removable Rewritable Media Devices
510*f334afcfSToomas Soome #define ATA_PAGE_CODE_TIMER_PROTECT_PAGE            0x1C       ///< defined in ATAPI Removable Rewritable Media Devices
511*f334afcfSToomas Soome #define ATA_PAGE_CODE_RETURN_ALL_PAGES              0x3F       ///< defined in ATAPI Removable Rewritable Media Devices
512*f334afcfSToomas Soome 
513*f334afcfSToomas Soome #define ATA_CMD_GET_CONFIGURATION         0x46                 ///< defined in ATAPI Multimedia Devices
514*f334afcfSToomas Soome #define ATA_GCCD_RT_FIELD_VALUE_ALL       0x00                 ///< defined in ATAPI Multimedia Devices
515*f334afcfSToomas Soome #define ATA_GCCD_RT_FIELD_VALUE_CURRENT   0x01                 ///< defined in ATAPI Multimedia Devices
516*f334afcfSToomas Soome #define ATA_GCCD_RT_FIELD_VALUE_SINGLE    0x02                 ///< defined in ATAPI Multimedia Devices
517*f334afcfSToomas Soome #define ATA_GCCD_RT_FIELD_VALUE_RESERVED  0x03                 ///< defined in ATAPI Multimedia Devices
518*f334afcfSToomas Soome 
519*f334afcfSToomas Soome #define ATA_FEATURE_LIST_PROFILE_LIST       0x0000                   ///< defined in ATAPI Multimedia Devices
520*f334afcfSToomas Soome #define ATA_FEATURE_LIST_CORE               0x0001                   ///< defined in ATAPI Multimedia Devices
521*f334afcfSToomas Soome #define ATA_FEATURE_LIST_MORPHING           0x0002                   ///< defined in ATAPI Multimedia Devices
522*f334afcfSToomas Soome #define ATA_FEATURE_LIST_REMOVEABLE_MEDIUM  0x0003                   ///< defined in ATAPI Multimedia Devices
523*f334afcfSToomas Soome #define ATA_FEATURE_LIST_WRITE_PROTECT      0x0004                   ///< defined in ATAPI Multimedia Devices
524*f334afcfSToomas Soome 
525*f334afcfSToomas Soome ///
526*f334afcfSToomas Soome /// Start/Stop and Eject Operations
527*f334afcfSToomas Soome ///
528*f334afcfSToomas Soome ///@{
529*f334afcfSToomas Soome #define ATA_CMD_SUBOP_STOP_DISC   0x00                         ///< Stop the Disc
530*f334afcfSToomas Soome #define ATA_CMD_SUBOP_START_DISC  0x01                         ///< Start the Disc and acquire the format type
531*f334afcfSToomas Soome #define ATA_CMD_SUBOP_EJECT_DISC  0x02                         ///< Eject the Disc if possible
532*f334afcfSToomas Soome #define ATA_CMD_SUBOP_CLOSE_TRAY  0x03                         ///< Load the Disc (Close Tray)
533*f334afcfSToomas Soome ///@}
534*f334afcfSToomas Soome 
535*f334afcfSToomas Soome //
536*f334afcfSToomas Soome // ATA Commands Code
537*f334afcfSToomas Soome //
538*f334afcfSToomas Soome 
539*f334afcfSToomas Soome //
540*f334afcfSToomas Soome // Class 1: PIO Data-In Commands
541*f334afcfSToomas Soome //
542*f334afcfSToomas Soome #define ATA_CMD_IDENTIFY_DRIVE           0xec                  ///< defined from ATA-3
543*f334afcfSToomas Soome #define ATA_CMD_READ_BUFFER              0xe4                  ///< defined from ATA-1
544*f334afcfSToomas Soome #define ATA_CMD_READ_SECTORS             0x20                  ///< defined from ATA-1
545*f334afcfSToomas Soome #define ATA_CMD_READ_SECTORS_WITH_RETRY  0x21                  ///< defined from ATA-1, obsoleted from ATA-5
546*f334afcfSToomas Soome #define ATA_CMD_READ_LONG                0x22                  ///< defined from ATA-1, obsoleted from ATA-5
547*f334afcfSToomas Soome #define ATA_CMD_READ_LONG_WITH_RETRY     0x23                  ///< defined from ATA-1, obsoleted from ATA-5
548*f334afcfSToomas Soome #define ATA_CMD_READ_SECTORS_EXT         0x24                  ///< defined from ATA-6
549*f334afcfSToomas Soome #define ATA_CMD_READ_MULTIPLE            0xc4                  ///< defined in ACS-3
550*f334afcfSToomas Soome #define ATA_CMD_READ_MULTIPLE_EXT        0x29                  ///< defined in ACS-3
551*f334afcfSToomas Soome #define ATA_CMD_READ_LOG_EXT             0x2f                  ///< defined in ACS-3
552*f334afcfSToomas Soome 
553*f334afcfSToomas Soome //
554*f334afcfSToomas Soome // Class 2: PIO Data-Out Commands
555*f334afcfSToomas Soome //
556*f334afcfSToomas Soome #define ATA_CMD_FORMAT_TRACK              0x50                ///< defined from ATA-1, obsoleted from ATA-4
557*f334afcfSToomas Soome #define ATA_CMD_WRITE_BUFFER              0xe8                ///< defined from ATA-1
558*f334afcfSToomas Soome #define ATA_CMD_WRITE_SECTORS             0x30                ///< defined from ATA-1
559*f334afcfSToomas Soome #define ATA_CMD_WRITE_SECTORS_WITH_RETRY  0x31                ///< defined from ATA-1, obsoleted from ATA-5
560*f334afcfSToomas Soome #define ATA_CMD_WRITE_LONG                0x32                ///< defined from ATA-1, obsoleted from ATA-5
561*f334afcfSToomas Soome #define ATA_CMD_WRITE_LONG_WITH_RETRY     0x33                ///< defined from ATA-1, obsoleted from ATA-5
562*f334afcfSToomas Soome #define ATA_CMD_WRITE_VERIFY              0x3c                ///< defined from ATA-1, obsoleted from ATA-5
563*f334afcfSToomas Soome #define ATA_CMD_WRITE_SECTORS_EXT         0x34                ///< defined from ATA-6
564*f334afcfSToomas Soome #define ATA_CMD_WRITE_MULTIPLE            0xc5                ///< defined in ACS-3
565*f334afcfSToomas Soome #define ATA_CMD_WRITE_MULTIPLE_EXT        0x39                ///< defined in ACS-3
566*f334afcfSToomas Soome 
567*f334afcfSToomas Soome //
568*f334afcfSToomas Soome // Class 3 No Data Command
569*f334afcfSToomas Soome //
570*f334afcfSToomas Soome #define ATA_CMD_ACK_MEDIA_CHANGE             0xdb             ///< defined from ATA-1, obsoleted from ATA-5
571*f334afcfSToomas Soome #define ATA_CMD_BOOT_POST_BOOT               0xdc             ///< defined from ATA-1, obsoleted from ATA-3
572*f334afcfSToomas Soome #define ATA_CMD_BOOT_PRE_BOOT                0xdd             ///< defined from ATA-1, obsoleted from ATA-3
573*f334afcfSToomas Soome #define ATA_CMD_CHECK_POWER_MODE             0x98             ///< defined from ATA-1, obsoleted from ATA-4
574*f334afcfSToomas Soome #define ATA_CMD_CHECK_POWER_MODE_ALIAS       0xe5             ///< defined from ATA-1
575*f334afcfSToomas Soome #define ATA_CMD_DOOR_LOCK                    0xde             ///< defined from ATA-1
576*f334afcfSToomas Soome #define ATA_CMD_DOOR_UNLOCK                  0xdf             ///< defined from ATA-1
577*f334afcfSToomas Soome #define ATA_CMD_EXEC_DRIVE_DIAG              0x90             ///< defined from ATA-1
578*f334afcfSToomas Soome #define ATA_CMD_IDLE_ALIAS                   0x97             ///< defined from ATA-1, obsoleted from ATA-4
579*f334afcfSToomas Soome #define ATA_CMD_IDLE                         0xe3             ///< defined from ATA-1
580*f334afcfSToomas Soome #define ATA_CMD_IDLE_IMMEDIATE               0x95             ///< defined from ATA-1, obsoleted from ATA-4
581*f334afcfSToomas Soome #define ATA_CMD_IDLE_IMMEDIATE_ALIAS         0xe1             ///< defined from ATA-1
582*f334afcfSToomas Soome #define ATA_CMD_INIT_DRIVE_PARAM             0x91             ///< defined from ATA-1, obsoleted from ATA-6
583*f334afcfSToomas Soome #define ATA_CMD_RECALIBRATE                  0x10             ///< defined from ATA-1, obsoleted from ATA-4
584*f334afcfSToomas Soome #define ATA_CMD_READ_DRIVE_STATE             0xe9             ///< defined from ATA-1, obsoleted from ATA-3
585*f334afcfSToomas Soome #define ATA_CMD_SET_MULTIPLE_MODE            0xC6             ///< defined from ATA-2
586*f334afcfSToomas Soome #define ATA_CMD_READ_VERIFY                  0x40             ///< defined from ATA-1
587*f334afcfSToomas Soome #define ATA_CMD_READ_VERIFY_WITH_RETRY       0x41             ///< defined from ATA-1, obsoleted from ATA-5
588*f334afcfSToomas Soome #define ATA_CMD_SEEK                         0x70             ///< defined from ATA-1
589*f334afcfSToomas Soome #define ATA_CMD_SET_FEATURES                 0xef             ///< defined from ATA-1
590*f334afcfSToomas Soome #define ATA_CMD_STANDBY                      0x96             ///< defined from ATA-1, obsoleted from ATA-4
591*f334afcfSToomas Soome #define ATA_CMD_STANDBY_ALIAS                0xe2             ///< defined from ATA-1
592*f334afcfSToomas Soome #define ATA_CMD_STANDBY_IMMEDIATE            0x94             ///< defined from ATA-1, obsoleted from ATA-4
593*f334afcfSToomas Soome #define ATA_CMD_STANDBY_IMMEDIATE_ALIAS      0xe0             ///< defined from ATA-1
594*f334afcfSToomas Soome #define ATA_CMD_SLEEP                        0xe6             ///< defined in ACS-3
595*f334afcfSToomas Soome #define ATA_CMD_READ_NATIVE_MAX_ADDRESS      0xf8             ///< defined in ATA-6
596*f334afcfSToomas Soome #define ATA_CMD_READ_NATIVE_MAX_ADDRESS_EXT  0x27             ///< defined in ATA-6
597*f334afcfSToomas Soome 
598*f334afcfSToomas Soome //
599*f334afcfSToomas Soome // Set Features Sub Command
600*f334afcfSToomas Soome //
601*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_VOLATILE_WRITE_CACHE          0x02      ///< defined in ACS-3
602*f334afcfSToomas Soome #define ATA_SUB_CMD_SET_TRANSFER_MODE                    0x03      ///< defined in ACS-3
603*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_APM                           0x05      ///< defined in ACS-3
604*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_PUIS                          0x06      ///< defined in ACS-3
605*f334afcfSToomas Soome #define ATA_SUB_CMD_PUIS_SET_DEVICE_SPINUP               0x07      ///< defined in ACS-3
606*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_WRITE_READ_VERIFY             0x0b      ///< defined in ACS-3
607*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_SATA_FEATURE                  0x10      ///< defined in ACS-3
608*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_MEDIA_STATUS_NOTIFICATION    0x31      ///< defined in ACS-3
609*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_FREE_FALL_CONTROL             0x41      ///< defined in ACS-3
610*f334afcfSToomas Soome #define ATA_SUB_CMD_ACOUSTIC_MANAGEMENT_ENABLE           0x42      ///< defined in ACS-3
611*f334afcfSToomas Soome #define ATA_SUB_CMD_SET_MAX_HOST_INTERFACE_SECTOR_TIMES  0x43      ///< defined in ACS-3
612*f334afcfSToomas Soome #define ATA_SUB_CMD_EXTENDED_POWER_CONDITIONS            0x4a      ///< defined in ACS-3
613*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_READ_LOOK_AHEAD              0x55      ///< defined in ACS-3
614*f334afcfSToomas Soome #define ATA_SUB_CMD_EN_DIS_DSN_FEATURE                   0x63      ///< defined in ACS-3
615*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_REVERT_TO_POWER_ON_DEFAULTS  0x66      ///< defined in ACS-3
616*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_VOLATILE_WRITE_CACHE         0x82      ///< defined in ACS-3
617*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_APM                          0x85      ///< defined in ACS-3
618*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_PUIS                         0x86      ///< defined in ACS-3
619*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_WRITE_READ_VERIFY            0x8b      ///< defined in ACS-3
620*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_SATA_FEATURE                 0x90      ///< defined in ACS-3
621*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_MEDIA_STATUS_NOTIFICATION     0x95      ///< defined in ACS-3
622*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_READ_LOOK_AHEAD               0xaa      ///< defined in ACS-3
623*f334afcfSToomas Soome #define ATA_SUB_CMD_DISABLE_FREE_FALL_CONTROL            0xc1      ///< defined in ACS-3
624*f334afcfSToomas Soome #define ATA_SUB_CMD_ACOUSTIC_MANAGEMENT_DISABLE          0xc2      ///< defined in ACS-3
625*f334afcfSToomas Soome #define ATA_SUB_CMD_EN_DIS_SENSE_DATA_REPORTING          0xc3      ///< defined in ACS-3
626*f334afcfSToomas Soome #define ATA_SUB_CMD_ENABLE_REVERT_TO_POWER_ON_DEFAULTS   0xcc      ///< defined in ACS-3
627*f334afcfSToomas Soome 
628*f334afcfSToomas Soome //
629*f334afcfSToomas Soome // S.M.A.R.T
630*f334afcfSToomas Soome //
631*f334afcfSToomas Soome #define ATA_CMD_SMART    0xb0                                 ///< defined from ATA-3
632*f334afcfSToomas Soome #define ATA_CONSTANT_C2  0xc2                                 ///< reserved
633*f334afcfSToomas Soome #define ATA_CONSTANT_4F  0x4f                                 ///< reserved
634*f334afcfSToomas Soome 
635*f334afcfSToomas Soome #define ATA_SMART_READ_DATA  0xd0                              ///< defined in ACS-3
636*f334afcfSToomas Soome 
637*f334afcfSToomas Soome #define ATA_SMART_AUTOSAVE         0xd2                       ///< defined in ACS-3
638*f334afcfSToomas Soome #define ATA_AUTOSAVE_DISABLE_ATTR  0x00
639*f334afcfSToomas Soome #define ATA_AUTOSAVE_ENABLE_ATTR   0xf1
640*f334afcfSToomas Soome 
641*f334afcfSToomas Soome #define ATA_SMART_EXECUTE_OFFLINE_IMMEDIATE            0xd4   ///< defined in ACS-3
642*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_OFFLINE_ROUTINE              0x00   ///< defined in ACS-3
643*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_OFFLINE_SHORT_SELFTEST       0x01   ///< defined in ACS-3
644*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_OFFLINE_EXTENDED_SELFTEST    0x02   ///< defined in ACS-3
645*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_OFFLINE_CONVEYANCE_SELFTEST  0x03   ///< defined in ACS-3
646*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_OFFLINE_SELECTIVE_SELFTEST   0x04   ///< defined in ACS-3
647*f334afcfSToomas Soome #define ATA_SMART_ABORT_SELF_TEST_SUBROUTINE           0x7f   ///< defined in ACS-3
648*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_CAPTIVE_SHORT_SELFTEST       0x81   ///< defined in ACS-3
649*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_CAPTIVE_EXTENDED_SELFTEST    0x82   ///< defined in ACS-3
650*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_CAPTIVE_CONVEYANCE_SELFTEST  0x83   ///< defined in ACS-3
651*f334afcfSToomas Soome #define ATA_EXECUTE_SMART_CAPTIVE_SELECTIVE_SELFTEST   0x84   ///< defined in ACS-3
652*f334afcfSToomas Soome 
653*f334afcfSToomas Soome #define ATA_SMART_READLOG            0xd5                     ///< defined in ACS-3
654*f334afcfSToomas Soome #define ATA_SMART_WRITELOG           0xd6                     ///< defined in ACS-3
655*f334afcfSToomas Soome #define ATA_SMART_ENABLE_OPERATION   0xd8                     ///< reserved
656*f334afcfSToomas Soome #define ATA_SMART_DISABLE_OPERATION  0xd9                     ///< defined in ACS-3
657*f334afcfSToomas Soome #define ATA_SMART_RETURN_STATUS      0xda                     ///< defined from ATA-3
658*f334afcfSToomas Soome 
659*f334afcfSToomas Soome #define ATA_SMART_THRESHOLD_NOT_EXCEEDED_VALUE  0xc24f              ///< defined in ACS-3
660*f334afcfSToomas Soome #define ATA_SMART_THRESHOLD_EXCEEDED_VALUE      0x2cf4              ///< defined in ACS-3
661*f334afcfSToomas Soome 
662*f334afcfSToomas Soome // SMART Log Definitions
663*f334afcfSToomas Soome #define ATA_SMART_LOG_DIRECTORY             0x00                  ///< defined in ACS-3
664*f334afcfSToomas Soome #define ATA_SMART_SUM_SMART_ERROR_LOG       0x01                  ///< defined in ACS-3
665*f334afcfSToomas Soome #define ATA_SMART_COMP_SMART_ERROR_LOG      0x02                  ///< defined in ACS-3
666*f334afcfSToomas Soome #define ATA_SMART_EXT_COMP_SMART_ERROR_LOG  0x03                  ///< defined in ACS-3
667*f334afcfSToomas Soome #define ATA_SMART_SMART_SELFTEST_LOG        0x06                  ///< defined in ACS-3
668*f334afcfSToomas Soome #define ATA_SMART_EXT_SMART_SELFTEST_LOG    0x07                  ///< defined in ACS-3
669*f334afcfSToomas Soome #define ATA_SMART_SELECTIVE_SELFTEST_LOG    0x09                  ///< defined in ACS-3
670*f334afcfSToomas Soome #define ATA_SMART_HOST_VENDOR_SPECIFIC      0x80                  ///< defined in ACS-3
671*f334afcfSToomas Soome #define ATA_SMART_DEVICE_VENDOR_SPECIFIC    0xa0                  ///< defined in ACS-3
672*f334afcfSToomas Soome 
673*f334afcfSToomas Soome //
674*f334afcfSToomas Soome // Class 4: DMA Command
675*f334afcfSToomas Soome //
676*f334afcfSToomas Soome #define ATA_CMD_READ_DMA              0xc8                     ///< defined from ATA-1
677*f334afcfSToomas Soome #define ATA_CMD_READ_DMA_WITH_RETRY   0xc9                     ///< defined from ATA-1, obsoleted from ATA-5
678*f334afcfSToomas Soome #define ATA_CMD_READ_DMA_EXT          0x25                     ///< defined from ATA-6
679*f334afcfSToomas Soome #define ATA_CMD_WRITE_DMA             0xca                     ///< defined from ATA-1
680*f334afcfSToomas Soome #define ATA_CMD_WRITE_DMA_WITH_RETRY  0xcb                     ///< defined from ATA-1, obsoleted from ATA-
681*f334afcfSToomas Soome #define ATA_CMD_WRITE_DMA_EXT         0x35                     ///< defined from ATA-6
682*f334afcfSToomas Soome 
683*f334afcfSToomas Soome //
684*f334afcfSToomas Soome //  ATA Security commands
685*f334afcfSToomas Soome //
686*f334afcfSToomas Soome #define ATA_CMD_SECURITY_SET_PASSWORD      0xf1               ///< defined in ACS-3
687*f334afcfSToomas Soome #define ATA_CMD_SECURITY_UNLOCK            0xf2               ///< defined in ACS-3
688*f334afcfSToomas Soome #define ATA_CMD_SECURITY_ERASE_PREPARE     0xf3               ///< defined in ACS-3
689*f334afcfSToomas Soome #define ATA_CMD_SECURITY_ERASE_UNIT        0xf4               ///< defined in ACS-3
690*f334afcfSToomas Soome #define ATA_CMD_SECURITY_FREEZE_LOCK       0xf5               ///< defined in ACS-3
691*f334afcfSToomas Soome #define ATA_CMD_SECURITY_DISABLE_PASSWORD  0xf6               ///< defined in ACS-3
692*f334afcfSToomas Soome 
693*f334afcfSToomas Soome #define ATA_SECURITY_BUFFER_LENGTH  512                          ///< defined in ACS-3
694*f334afcfSToomas Soome 
695*f334afcfSToomas Soome //
696*f334afcfSToomas Soome //  ATA Device Config Overlay
697*f334afcfSToomas Soome //
698*f334afcfSToomas Soome #define ATA_CMD_DEV_CONFIG_OVERLAY             0xb1            ///< defined from ATA-6
699*f334afcfSToomas Soome #define ATA_CMD_DEV_CONFIG_RESTORE_FEATURE     0xc0            ///< defined from ATA-6
700*f334afcfSToomas Soome #define ATA_CMD_DEV_CONFIG_FREEZELOCK_FEATURE  0xc1            ///< defined from ATA-6
701*f334afcfSToomas Soome #define ATA_CMD_DEV_CONFIG_IDENTIFY_FEATURE    0xc2            ///< defined from ATA-6
702*f334afcfSToomas Soome #define ATA_CMD_DEV_CONFIG_SET_FEATURE         0xc3            ///< defined from ATA-6
703*f334afcfSToomas Soome 
704*f334afcfSToomas Soome //
705*f334afcfSToomas Soome //  ATA Trusted Computing Feature Set Commands
706*f334afcfSToomas Soome //
707*f334afcfSToomas Soome #define ATA_CMD_TRUSTED_NON_DATA     0x5b                     ///< defined in ACS-3
708*f334afcfSToomas Soome #define ATA_CMD_TRUSTED_RECEIVE      0x5c                     ///< defined in ACS-3
709*f334afcfSToomas Soome #define ATA_CMD_TRUSTED_RECEIVE_DMA  0x5d                     ///< defined in ACS-3
710*f334afcfSToomas Soome #define ATA_CMD_TRUSTED_SEND         0x5e                     ///< defined in ACS-3
711*f334afcfSToomas Soome #define ATA_CMD_TRUSTED_SEND_DMA     0x5f                     ///< defined in ACS-3
712*f334afcfSToomas Soome 
713*f334afcfSToomas Soome //
714*f334afcfSToomas Soome //  ATA Trusted Receive Fields
715*f334afcfSToomas Soome //
716*f334afcfSToomas Soome #define ATA_TR_RETURN_SECURITY_PROTOCOL_INFORMATION  0x00     ///< defined in ACS-3
717*f334afcfSToomas Soome #define ATA_TR_SECURITY_PROTOCOL_JEDEC_RESERVED      0xec     ///< defined in ACS-3
718*f334afcfSToomas Soome #define ATA_TR_SECURITY_PROTOCOL_SDCARD_RESERVED     0xed     ///< defined in ACS-3
719*f334afcfSToomas Soome #define ATA_TR_SECURITY_PROTOCOL_IEEE1667_RESERVED   0xee     ///< defined in ACS-3
720*f334afcfSToomas Soome 
721*f334afcfSToomas Soome //
722*f334afcfSToomas Soome //  Equates used for Acoustic Flags
723*f334afcfSToomas Soome //
724*f334afcfSToomas Soome #define ATA_ACOUSTIC_LEVEL_BYPASS               0xff           ///< defined from ATA-6
725*f334afcfSToomas Soome #define ATA_ACOUSTIC_LEVEL_MAXIMUM_PERFORMANCE  0xfe           ///< defined from ATA-6
726*f334afcfSToomas Soome #define ATA_ACOUSTIC_LEVEL_QUIET                0x80           ///< defined from ATA-6
727*f334afcfSToomas Soome 
728*f334afcfSToomas Soome //
729*f334afcfSToomas Soome //  Equates used for DiPM Support
730*f334afcfSToomas Soome //
731*f334afcfSToomas Soome #define ATA_CMD_DIPM_SUB  0x03                                 // defined in ACS-3 : Count value in SetFeature identification : 03h  Device-initiated interface power state transitions
732*f334afcfSToomas Soome #define ATA_DIPM_ENABLE   0x10                                 // defined in ACS-3
733*f334afcfSToomas Soome #define ATA_DIPM_DISABLE  0x90                                 // defined in ACS-3
734*f334afcfSToomas Soome 
735*f334afcfSToomas Soome //
736*f334afcfSToomas Soome //  Equates used for DevSleep Support
737*f334afcfSToomas Soome //
738*f334afcfSToomas Soome #define ATA_CMD_DEVSLEEP_SUB  0x09                             // defined in SATA 3.2 Gold Spec :  Count value in SetFeature identification : 09h  Device Sleep
739*f334afcfSToomas Soome #define ATA_DEVSLEEP_ENABLE   0x10                             // defined in SATA 3.2 Gold Spec
740*f334afcfSToomas Soome #define ATA_DEVSLEEP_DISABLE  0x90                             // defined in SATA 3.2 Gold Spec
741*f334afcfSToomas Soome 
742*f334afcfSToomas Soome #define ATA_DEVSLP_EXIT_TIMEOUT            20                  // MDAT - 20 ms
743*f334afcfSToomas Soome #define ATA_DEVSLP_MINIMUM_DETECTION_TIME  10                  // DMDT - 10 us
744*f334afcfSToomas Soome #define ATA_DEVSLP_MINIMUM_ASSERTION_TIME  10                  // DETO - 10 ms
745*f334afcfSToomas Soome 
746*f334afcfSToomas Soome //
747*f334afcfSToomas Soome //  Set MAX Commands
748*f334afcfSToomas Soome //
749*f334afcfSToomas Soome #define ATA_CMD_SET_MAX_ADDRESS_EXT  0x37                      ///< defined from ATA-6
750*f334afcfSToomas Soome #define ATA_CMD_SET_MAX_ADDRESS      0xf9                      ///< defined from ATA-6
751*f334afcfSToomas Soome #define ATA_SET_MAX_SET_PASSWORD     0x01                      ///< defined from ATA-6
752*f334afcfSToomas Soome #define ATA_SET_MAX_LOCK             0x02                      ///< defined from ATA-6
753*f334afcfSToomas Soome #define ATA_SET_MAX_UNLOCK           0x03                      ///< defined from ATA-6
754*f334afcfSToomas Soome #define ATA_SET_MAX_FREEZE_LOCK      0x04                      ///< defined from ATA-6
755*f334afcfSToomas Soome 
756*f334afcfSToomas Soome ///
757*f334afcfSToomas Soome /// Default content of device control register, disable INT,
758*f334afcfSToomas Soome /// Bit3 is set to 1 according ATA-1
759*f334afcfSToomas Soome ///
760*f334afcfSToomas Soome #define ATA_DEFAULT_CTL  (0x0a)
761*f334afcfSToomas Soome ///
762*f334afcfSToomas Soome /// Default context of Device/Head Register,
763*f334afcfSToomas Soome /// Bit7 and Bit5 are set to 1 for back-compatibilities.
764*f334afcfSToomas Soome ///
765*f334afcfSToomas Soome #define ATA_DEFAULT_CMD  (0xa0)
766*f334afcfSToomas Soome 
767*f334afcfSToomas Soome #define ATAPI_MAX_BYTE_COUNT  (0xfffe)
768*f334afcfSToomas Soome 
769*f334afcfSToomas Soome #define ATA_REQUEST_SENSE_ERROR  (0x70)                        ///< defined in SFF-8070i
770*f334afcfSToomas Soome 
771*f334afcfSToomas Soome //
772*f334afcfSToomas Soome // Sense Key, Additional Sense Codes and Additional Sense Code Qualifier
773*f334afcfSToomas Soome // defined in MultiMedia Commands (MMC, MMC-2)
774*f334afcfSToomas Soome //
775*f334afcfSToomas Soome // Sense Key
776*f334afcfSToomas Soome //
777*f334afcfSToomas Soome #define ATA_SK_NO_SENSE         (0x0)
778*f334afcfSToomas Soome #define ATA_SK_RECOVERY_ERROR   (0x1)
779*f334afcfSToomas Soome #define ATA_SK_NOT_READY        (0x2)
780*f334afcfSToomas Soome #define ATA_SK_MEDIUM_ERROR     (0x3)
781*f334afcfSToomas Soome #define ATA_SK_HARDWARE_ERROR   (0x4)
782*f334afcfSToomas Soome #define ATA_SK_ILLEGAL_REQUEST  (0x5)
783*f334afcfSToomas Soome #define ATA_SK_UNIT_ATTENTION   (0x6)
784*f334afcfSToomas Soome #define ATA_SK_DATA_PROTECT     (0x7)
785*f334afcfSToomas Soome #define ATA_SK_BLANK_CHECK      (0x8)
786*f334afcfSToomas Soome #define ATA_SK_VENDOR_SPECIFIC  (0x9)
787*f334afcfSToomas Soome #define ATA_SK_RESERVED_A       (0xA)
788*f334afcfSToomas Soome #define ATA_SK_ABORT            (0xB)
789*f334afcfSToomas Soome #define ATA_SK_RESERVED_C       (0xC)
790*f334afcfSToomas Soome #define ATA_SK_OVERFLOW         (0xD)
791*f334afcfSToomas Soome #define ATA_SK_MISCOMPARE       (0xE)
792*f334afcfSToomas Soome #define ATA_SK_RESERVED_F       (0xF)
793*f334afcfSToomas Soome 
794*f334afcfSToomas Soome //
795*f334afcfSToomas Soome // Additional Sense Codes
796*f334afcfSToomas Soome //
797*f334afcfSToomas Soome #define ATA_ASC_NOT_READY                    (0x04)
798*f334afcfSToomas Soome #define ATA_ASC_MEDIA_ERR1                   (0x10)
799*f334afcfSToomas Soome #define ATA_ASC_MEDIA_ERR2                   (0x11)
800*f334afcfSToomas Soome #define ATA_ASC_MEDIA_ERR3                   (0x14)
801*f334afcfSToomas Soome #define ATA_ASC_MEDIA_ERR4                   (0x30)
802*f334afcfSToomas Soome #define ATA_ASC_MEDIA_UPSIDE_DOWN            (0x06)
803*f334afcfSToomas Soome #define ATA_ASC_INVALID_CMD                  (0x20)
804*f334afcfSToomas Soome #define ATA_ASC_LBA_OUT_OF_RANGE             (0x21)
805*f334afcfSToomas Soome #define ATA_ASC_INVALID_FIELD                (0x24)
806*f334afcfSToomas Soome #define ATA_ASC_WRITE_PROTECTED              (0x27)
807*f334afcfSToomas Soome #define ATA_ASC_MEDIA_CHANGE                 (0x28)
808*f334afcfSToomas Soome #define ATA_ASC_RESET                        (0x29)             ///< Power On Reset or Bus Reset occurred.
809*f334afcfSToomas Soome #define ATA_ASC_ILLEGAL_FIELD                (0x26)
810*f334afcfSToomas Soome #define ATA_ASC_NO_MEDIA                     (0x3A)
811*f334afcfSToomas Soome #define ATA_ASC_ILLEGAL_MODE_FOR_THIS_TRACK  (0x64)
812*f334afcfSToomas Soome 
813*f334afcfSToomas Soome //
814*f334afcfSToomas Soome // Additional Sense Code Qualifier
815*f334afcfSToomas Soome //
816*f334afcfSToomas Soome #define ATA_ASCQ_IN_PROGRESS  (0x01)
817*f334afcfSToomas Soome 
818*f334afcfSToomas Soome //
819*f334afcfSToomas Soome // Error Register
820*f334afcfSToomas Soome //
821*f334afcfSToomas Soome #define ATA_ERRREG_BBK    BIT7                                ///< Bad block detected      defined from ATA-1, obsoleted from ATA-2
822*f334afcfSToomas Soome #define ATA_ERRREG_UNC    BIT6                                ///< Uncorrectable Data      defined from ATA-1, obsoleted from ATA-4
823*f334afcfSToomas Soome #define ATA_ERRREG_MC     BIT5                                ///< Media Change            defined from ATA-1, obsoleted from ATA-4
824*f334afcfSToomas Soome #define ATA_ERRREG_IDNF   BIT4                                ///< ID Not Found            defined from ATA-1, obsoleted from ATA-4
825*f334afcfSToomas Soome #define ATA_ERRREG_MCR    BIT3                                ///< Media Change Requested  defined from ATA-1, obsoleted from ATA-4
826*f334afcfSToomas Soome #define ATA_ERRREG_ABRT   BIT2                                ///< Aborted Command         defined from ATA-1
827*f334afcfSToomas Soome #define ATA_ERRREG_TK0NF  BIT1                                ///< Track 0 Not Found       defined from ATA-1, obsoleted from ATA-4
828*f334afcfSToomas Soome #define ATA_ERRREG_AMNF   BIT0                                ///< Address Mark Not Found  defined from ATA-1, obsoleted from ATA-4
829*f334afcfSToomas Soome 
830*f334afcfSToomas Soome //
831*f334afcfSToomas Soome // Status Register
832*f334afcfSToomas Soome //
833*f334afcfSToomas Soome #define ATA_STSREG_BSY   BIT7                                 ///< Controller Busy         defined from ATA-1
834*f334afcfSToomas Soome #define ATA_STSREG_DRDY  BIT6                                 ///< Drive Ready             defined from ATA-1
835*f334afcfSToomas Soome #define ATA_STSREG_DWF   BIT5                                 ///< Drive Write Fault       defined from ATA-1, obsoleted from ATA-4
836*f334afcfSToomas Soome #define ATA_STSREG_DF    BIT5                                 ///< Drive Fault             defined from ATA-6
837*f334afcfSToomas Soome #define ATA_STSREG_DSC   BIT4                                 ///< Disk Seek Complete      defined from ATA-1, obsoleted from ATA-4
838*f334afcfSToomas Soome #define ATA_STSREG_DRQ   BIT3                                 ///< Data Request            defined from ATA-1
839*f334afcfSToomas Soome #define ATA_STSREG_CORR  BIT2                                 ///< Corrected Data          defined from ATA-1, obsoleted from ATA-4
840*f334afcfSToomas Soome #define ATA_STSREG_IDX   BIT1                                 ///< Index                   defined from ATA-1, obsoleted from ATA-4
841*f334afcfSToomas Soome #define ATA_STSREG_ERR   BIT0                                 ///< Error                   defined from ATA-1
842*f334afcfSToomas Soome 
843*f334afcfSToomas Soome //
844*f334afcfSToomas Soome // Device Control Register
845*f334afcfSToomas Soome //
846*f334afcfSToomas Soome #define ATA_CTLREG_SRST   BIT2                                ///< Software Reset.
847*f334afcfSToomas Soome #define ATA_CTLREG_IEN_L  BIT1                                ///< Interrupt Enable #.
848*f334afcfSToomas Soome 
849*f334afcfSToomas Soome #endif
850