xref: /freebsd/sys/dev/isci/scil/intel_ata.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1f11c7f63SJim Harris /*-
2718cf2ccSPedro F. Giffuni  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
3718cf2ccSPedro F. Giffuni  *
4f11c7f63SJim Harris  * This file is provided under a dual BSD/GPLv2 license.  When using or
5f11c7f63SJim Harris  * redistributing this file, you may do so under either license.
6f11c7f63SJim Harris  *
7f11c7f63SJim Harris  * GPL LICENSE SUMMARY
8f11c7f63SJim Harris  *
9f11c7f63SJim Harris  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
10f11c7f63SJim Harris  *
11f11c7f63SJim Harris  * This program is free software; you can redistribute it and/or modify
12f11c7f63SJim Harris  * it under the terms of version 2 of the GNU General Public License as
13f11c7f63SJim Harris  * published by the Free Software Foundation.
14f11c7f63SJim Harris  *
15f11c7f63SJim Harris  * This program is distributed in the hope that it will be useful, but
16f11c7f63SJim Harris  * WITHOUT ANY WARRANTY; without even the implied warranty of
17f11c7f63SJim Harris  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18f11c7f63SJim Harris  * General Public License for more details.
19f11c7f63SJim Harris  *
20f11c7f63SJim Harris  * You should have received a copy of the GNU General Public License
21f11c7f63SJim Harris  * along with this program; if not, write to the Free Software
22f11c7f63SJim Harris  * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
23f11c7f63SJim Harris  * The full GNU General Public License is included in this distribution
24f11c7f63SJim Harris  * in the file called LICENSE.GPL.
25f11c7f63SJim Harris  *
26f11c7f63SJim Harris  * BSD LICENSE
27f11c7f63SJim Harris  *
28f11c7f63SJim Harris  * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
29f11c7f63SJim Harris  * All rights reserved.
30f11c7f63SJim Harris  *
31f11c7f63SJim Harris  * Redistribution and use in source and binary forms, with or without
32f11c7f63SJim Harris  * modification, are permitted provided that the following conditions
33f11c7f63SJim Harris  * are met:
34f11c7f63SJim Harris  *
35f11c7f63SJim Harris  *   * Redistributions of source code must retain the above copyright
36f11c7f63SJim Harris  *     notice, this list of conditions and the following disclaimer.
37f11c7f63SJim Harris  *   * Redistributions in binary form must reproduce the above copyright
38f11c7f63SJim Harris  *     notice, this list of conditions and the following disclaimer in
39f11c7f63SJim Harris  *     the documentation and/or other materials provided with the
40f11c7f63SJim Harris  *     distribution.
41f11c7f63SJim Harris  *
42f11c7f63SJim Harris  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43f11c7f63SJim Harris  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44f11c7f63SJim Harris  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45f11c7f63SJim Harris  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46f11c7f63SJim Harris  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47f11c7f63SJim Harris  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48f11c7f63SJim Harris  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49f11c7f63SJim Harris  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50f11c7f63SJim Harris  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51f11c7f63SJim Harris  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52f11c7f63SJim Harris  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53f11c7f63SJim Harris  */
54f11c7f63SJim Harris /**
55f11c7f63SJim Harris  * @file
56f11c7f63SJim Harris  * @brief This file defines all of the ATA related constants, enumerations,
57f11c7f63SJim Harris  *        and types.  Please note that this file does not necessarily contain
58f11c7f63SJim Harris  *        an exhaustive list of all constants, commands, sub-commands, etc.
59f11c7f63SJim Harris  */
60f11c7f63SJim Harris 
61f11c7f63SJim Harris #ifndef _ATA_H_
62f11c7f63SJim Harris #define _ATA_H_
63f11c7f63SJim Harris 
64f11c7f63SJim Harris #include <dev/isci/types.h>
65f11c7f63SJim Harris 
66f11c7f63SJim Harris /**
67f11c7f63SJim Harris  * @name ATA_COMMAND_CODES
68f11c7f63SJim Harris  *
69f11c7f63SJim Harris  * These constants depict the various ATA command codes defined
70f11c7f63SJim Harris  * in the ATA/ATAPI specification.
71f11c7f63SJim Harris  */
72f11c7f63SJim Harris /*@{*/
73f11c7f63SJim Harris #define ATA_IDENTIFY_DEVICE            0xEC
74f11c7f63SJim Harris #define ATA_CHECK_POWER_MODE           0xE5
75f11c7f63SJim Harris #define ATA_STANDBY                    0xE2
76f11c7f63SJim Harris #define ATA_STANDBY_IMMED              0xE0
77f11c7f63SJim Harris #define ATA_IDLE_IMMED                 0xE1
78f11c7f63SJim Harris #define ATA_IDLE                       0xE3
79f11c7f63SJim Harris #define ATA_FLUSH_CACHE                0xE7
80f11c7f63SJim Harris #define ATA_FLUSH_CACHE_EXT            0xEA
81f11c7f63SJim Harris #define ATA_READ_DMA_EXT               0x25
82f11c7f63SJim Harris #define ATA_READ_DMA                   0xC8
83f11c7f63SJim Harris #define ATA_READ_SECTORS_EXT           0x24
84f11c7f63SJim Harris #define ATA_READ_SECTORS               0x20
85f11c7f63SJim Harris #define ATA_WRITE_DMA_EXT              0x35
86f11c7f63SJim Harris #define ATA_WRITE_DMA                  0xCA
87f11c7f63SJim Harris #define ATA_WRITE_SECTORS_EXT          0x34
88f11c7f63SJim Harris #define ATA_WRITE_SECTORS              0x30
89f11c7f63SJim Harris #define ATA_WRITE_UNCORRECTABLE        0x45
90f11c7f63SJim Harris #define ATA_READ_VERIFY_SECTORS        0x40
91f11c7f63SJim Harris #define ATA_READ_VERIFY_SECTORS_EXT    0x42
92f11c7f63SJim Harris #define ATA_READ_BUFFER                0xE4
93f11c7f63SJim Harris #define ATA_WRITE_BUFFER               0xE8
94f11c7f63SJim Harris #define ATA_EXECUTE_DEVICE_DIAG        0x90
95f11c7f63SJim Harris #define ATA_SET_FEATURES               0xEF
96f11c7f63SJim Harris #define ATA_SMART                      0xB0
97f11c7f63SJim Harris #define ATA_PACKET_IDENTIFY            0xA1
98f11c7f63SJim Harris #define ATA_PACKET                     0xA0
99f11c7f63SJim Harris #define ATA_READ_FPDMA                 0x60
100f11c7f63SJim Harris #define ATA_WRITE_FPDMA                0x61
101f11c7f63SJim Harris #define ATA_READ_LOG_EXT               0x2F
102f11c7f63SJim Harris #define ATA_NOP                        0x00
103f11c7f63SJim Harris #define ATA_DEVICE_RESET               0x08
104f11c7f63SJim Harris #define ATA_MEDIA_EJECT                0xED
105f11c7f63SJim Harris #define ATA_SECURITY_UNLOCK            0xF2
106f11c7f63SJim Harris #define ATA_SECURITY_FREEZE_LOCK       0xF5
107f11c7f63SJim Harris #define ATA_DATA_SET_MANAGEMENT        0x06
108f11c7f63SJim Harris #define ATA_DOWNLOAD_MICROCODE         0x92
109f11c7f63SJim Harris #define ATA_WRITE_STREAM_DMA_EXT       0x3A
110f11c7f63SJim Harris #define ATA_READ_LOG_DMA_EXT           0x47
111f11c7f63SJim Harris #define ATA_READ_STREAM_DMA_EXT        0x2A
112f11c7f63SJim Harris #define ATA_WRITE_DMA_FUA              0x3D
113f11c7f63SJim Harris #define ATA_WRITE_LOG_DMA_EXT          0x57
114f11c7f63SJim Harris #define ATA_READ_DMA_QUEUED            0xC7
115f11c7f63SJim Harris #define ATA_READ_DMA_QUEUED_EXT        0x26
116f11c7f63SJim Harris #define ATA_WRITE_DMA_QUEUED           0xCC
117f11c7f63SJim Harris #define ATA_WRITE_DMA_QUEUED_EXT       0x36
118f11c7f63SJim Harris #define ATA_WRITE_DMA_QUEUED_FUA_EXT   0x3E
119f11c7f63SJim Harris #define ATA_READ_MULTIPLE              0xC4
120f11c7f63SJim Harris #define ATA_READ_MULTIPLE_EXT          0x29
121f11c7f63SJim Harris #define ATA_WRITE_MULTIPLE             0xC5
122f11c7f63SJim Harris #define ATA_WRITE_MULTIPLE_EXT         0x39
123f11c7f63SJim Harris #define ATA_WRITE_MULTIPLE_FUA_EXT     0xCE
124f11c7f63SJim Harris 
125f11c7f63SJim Harris 
126f11c7f63SJim Harris /*@}*/
127f11c7f63SJim Harris 
128f11c7f63SJim Harris /**
129f11c7f63SJim Harris  * @name ATA_SMART_SUB_COMMAND_CODES
130f11c7f63SJim Harris  *
131f11c7f63SJim Harris  * These constants define the ATA SMART command sub-codes that can be
132f11c7f63SJim Harris  * executed.
133f11c7f63SJim Harris  */
134f11c7f63SJim Harris /*@{*/
135f11c7f63SJim Harris #define ATA_SMART_SUB_CMD_ENABLE        0xD8
136f11c7f63SJim Harris #define ATA_SMART_SUB_CMD_DISABLE       0xD9
137f11c7f63SJim Harris #define ATA_SMART_SUB_CMD_RETURN_STATUS 0xDA
138f11c7f63SJim Harris #define ATA_SMART_SUB_CMD_READ_LOG      0xD5
139f11c7f63SJim Harris /*@}*/
140f11c7f63SJim Harris 
141f11c7f63SJim Harris /**
142f11c7f63SJim Harris  * @name ATA_SET_FEATURES_SUB_COMMAND_CODES
143f11c7f63SJim Harris  *
144f11c7f63SJim Harris  * These constants define the ATA SET FEATURES command sub-codes that can
145f11c7f63SJim Harris  * be executed.
146f11c7f63SJim Harris  */
147f11c7f63SJim Harris /*@{*/
148f11c7f63SJim Harris #define ATA_SET_FEATURES_SUB_CMD_ENABLE_CACHE       0x02
149f11c7f63SJim Harris #define ATA_SET_FEATURES_SUB_CMD_DISABLE_CACHE      0x82
150f11c7f63SJim Harris #define ATA_SET_FEATURES_SUB_CMD_DISABLE_READ_AHEAD 0x55
151f11c7f63SJim Harris #define ATA_SET_FEATURES_SUB_CMD_ENABLE_READ_AHEAD  0xAA
152f11c7f63SJim Harris #define ATA_SET_FEATURES_SUB_CMD_SET_TRANSFER_MODE  0x3
153f11c7f63SJim Harris /*@}*/
154f11c7f63SJim Harris 
155f11c7f63SJim Harris /**
156f11c7f63SJim Harris  * @name ATA_READ_LOG_EXT_PAGE_CODES
157f11c7f63SJim Harris  *
158f11c7f63SJim Harris  * This is a list of log page codes available for use.
159f11c7f63SJim Harris  */
160f11c7f63SJim Harris /*@{*/
161f11c7f63SJim Harris #define ATA_LOG_PAGE_NCQ_ERROR                  0x10
162f11c7f63SJim Harris #define ATA_LOG_PAGE_SMART_SELF_TEST            0x06
163f11c7f63SJim Harris #define ATA_LOG_PAGE_EXTENDED_SMART_SELF_TEST   0x07
164f11c7f63SJim Harris /*@}*/
165f11c7f63SJim Harris 
166f11c7f63SJim Harris /**
167f11c7f63SJim Harris  * @name ATA_LOG_PAGE_NCQ_ERROR_CONSTANTS
168f11c7f63SJim Harris  *
169f11c7f63SJim Harris  * These constants define standard values for use when requesting the NCQ
170f11c7f63SJim Harris  * error log page.
171f11c7f63SJim Harris  */
172f11c7f63SJim Harris /*@{*/
173f11c7f63SJim Harris #define ATA_LOG_PAGE_NCQ_ERROR_SECTOR        0
174f11c7f63SJim Harris #define ATA_LOG_PAGE_NCQ_ERROR_SECTOR_COUNT  1
175f11c7f63SJim Harris /*@}*/
176f11c7f63SJim Harris 
177f11c7f63SJim Harris /**
178f11c7f63SJim Harris  * @name ATA_STATUS_REGISTER_BITS
179f11c7f63SJim Harris  *
180f11c7f63SJim Harris  * The following are status register bit definitions per ATA/ATAPI-7.
181f11c7f63SJim Harris  */
182f11c7f63SJim Harris /*@{*/
183f11c7f63SJim Harris #define ATA_STATUS_REG_BSY_BIT          0x80
184f11c7f63SJim Harris #define ATA_STATUS_REG_DEVICE_FAULT_BIT 0x20
185f11c7f63SJim Harris #define ATA_STATUS_REG_ERROR_BIT        0x01
186f11c7f63SJim Harris /*@}*/
187f11c7f63SJim Harris 
188f11c7f63SJim Harris /**
189f11c7f63SJim Harris  * @name ATA_ERROR_REGISTER_BITS
190f11c7f63SJim Harris  *
191f11c7f63SJim Harris  * The following are error register bit definitions per ATA/ATAPI-7.
192f11c7f63SJim Harris  */
193f11c7f63SJim Harris /*@{*/
194f11c7f63SJim Harris #define ATA_ERROR_REG_NO_MEDIA_BIT              0x02
195f11c7f63SJim Harris #define ATA_ERROR_REG_ABORT_BIT                 0x04
196f11c7f63SJim Harris #define ATA_ERROR_REG_MEDIA_CHANGE_REQUEST_BIT  0x08
197f11c7f63SJim Harris #define ATA_ERROR_REG_ID_NOT_FOUND_BIT          0x10
198f11c7f63SJim Harris #define ATA_ERROR_REG_MEDIA_CHANGE_BIT          0x20
199f11c7f63SJim Harris #define ATA_ERROR_REG_UNCORRECTABLE_BIT         0x40
200f11c7f63SJim Harris #define ATA_ERROR_REG_WRITE_PROTECTED_BIT       0x40
201f11c7f63SJim Harris #define ATA_ERROR_REG_ICRC_BIT                  0x80
202f11c7f63SJim Harris /*@}*/
203f11c7f63SJim Harris 
204f11c7f63SJim Harris /**
205f11c7f63SJim Harris  * @name ATA_CONTROL_REGISTER_BITS
206f11c7f63SJim Harris  *
207f11c7f63SJim Harris  * The following are control register bit definitions per ATA/ATAPI-7
208f11c7f63SJim Harris  */
209f11c7f63SJim Harris /*@{*/
210f11c7f63SJim Harris #define ATA_CONTROL_REG_INTERRUPT_ENABLE_BIT 0x02
211f11c7f63SJim Harris #define ATA_CONTROL_REG_SOFT_RESET_BIT       0x04
212f11c7f63SJim Harris #define ATA_CONTROL_REG_HIGH_ORDER_BYTE_BIT  0x80
213f11c7f63SJim Harris /*@}*/
214f11c7f63SJim Harris 
215f11c7f63SJim Harris /**
216f11c7f63SJim Harris  * @name ATA_DEVICE_HEAD_REGISTER_BITS
217f11c7f63SJim Harris  *
218f11c7f63SJim Harris  * The following are device/head register bit definitions per ATA/ATAPI-7.
219f11c7f63SJim Harris  */
220f11c7f63SJim Harris /*@{*/
221f11c7f63SJim Harris #define ATA_DEV_HEAD_REG_LBA_MODE_ENABLE  0x40
222f11c7f63SJim Harris #define ATA_DEV_HEAD_REG_FUA_ENABLE       0x80
223f11c7f63SJim Harris /*@}*/
224f11c7f63SJim Harris 
225f11c7f63SJim Harris /**
226f11c7f63SJim Harris  * @name ATA_IDENTIFY_DEVICE_FIELD_LENGTHS
227f11c7f63SJim Harris  *
228f11c7f63SJim Harris  * The following constants define the number of bytes contained in various
229f11c7f63SJim Harris  * fields found in the IDENTIFY DEVICE data structure.
230f11c7f63SJim Harris  */
231f11c7f63SJim Harris /*@{*/
232f11c7f63SJim Harris #define ATA_IDENTIFY_SERIAL_NUMBER_LEN        20
233f11c7f63SJim Harris #define ATA_IDENTIFY_MODEL_NUMBER_LEN         40
234f11c7f63SJim Harris #define ATA_IDENTIFY_FW_REVISION_LEN          8
235f11c7f63SJim Harris #define ATA_IDENTIFY_48_LBA_LEN               8
236f11c7f63SJim Harris #define ATA_IDENTIFY_MEDIA_SERIAL_NUMBER_LEN  30
237f11c7f63SJim Harris #define ATA_IDENTIFY_WWN_LEN                  8
238f11c7f63SJim Harris /*@}*/
239f11c7f63SJim Harris 
240f11c7f63SJim Harris /**
241f11c7f63SJim Harris  * @name ATA_IDENTIFY_DEVICE_FIELD_MASKS
242f11c7f63SJim Harris  *
243f11c7f63SJim Harris  * The following constants define bit masks utilized to determine if a
244f11c7f63SJim Harris  * feature is supported/enabled or if a bit is simply set inside of the
245*17db4b52SGordon Bergling  * IDENTIFY DEVICE data structure.
246f11c7f63SJim Harris  */
247f11c7f63SJim Harris /*@{*/
248f11c7f63SJim Harris #define ATA_IDENTIFY_REMOVABLE_MEDIA_ENABLE              0x0080
249f11c7f63SJim Harris #define ATA_IDENTIFY_CAPABILITIES1_NORMAL_DMA_ENABLE     0x0100
250f11c7f63SJim Harris #define ATA_IDENTIFY_CAPABILITIES1_STANDBY_ENABLE        0x2000
251f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_SET_SUPPORTED0_SMART_ENABLE 0x0001
252f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_SET_SUPPORTED1_48BIT_ENABLE 0x0400
253f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_SET_WWN_SUPPORT_ENABLE      0x0100
254f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_SET_ENABLED0_SMART_ENABLE   0x0001
255f11c7f63SJim Harris #define ATA_IDENTIFY_SATA_CAPABILITIES_NCQ_ENABLE        0x0100
256f11c7f63SJim Harris #define ATA_IDENTIFY_NCQ_QUEUE_DEPTH_ENABLE              0x001F
257f11c7f63SJim Harris #define ATA_IDENTIFY_SECTOR_LARGER_THEN_512_ENABLE       0x0100
258f11c7f63SJim Harris #define ATA_IDENTIFY_LOGICAL_SECTOR_PER_PHYSICAL_SECTOR_MASK   0x000F
259f11c7f63SJim Harris #define ATA_IDENTIFY_LOGICAL_SECTOR_PER_PHYSICAL_SECTOR_ENABLE 0x2000
260f11c7f63SJim Harris #define ATA_IDENTIFY_WRITE_UNCORRECTABLE_SUPPORT         0x0004
261f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_SET_SMART_SELF_TEST_SUPPORTED     0x0002
262f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_SET_DSM_TRIM_SUPPORTED            0x0001
263f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_ADDL_SUPPORTED_DETERMINISTIC_READ 0x4000
264f11c7f63SJim Harris #define ATA_IDENTIFY_COMMAND_ADDL_SUPPORTED_READ_ZERO          0x0020
265f11c7f63SJim Harris /*@}*/
266f11c7f63SJim Harris 
267f11c7f63SJim Harris /**
268f11c7f63SJim Harris  * @name ATAPI_IDENTIFY_DEVICE_FIELD_MASKS
269f11c7f63SJim Harris  *
270f11c7f63SJim Harris  * These constants define the various bit definitions for the
271f11c7f63SJim Harris  * fields in the PACKET IDENTIFY DEVICE data structure.
272f11c7f63SJim Harris  */
273f11c7f63SJim Harris /*@{*/
274f11c7f63SJim Harris #define ATAPI_IDENTIFY_16BYTE_CMD_PCKT_ENABLE       0x01
275f11c7f63SJim Harris /*@}*/
276f11c7f63SJim Harris 
277f11c7f63SJim Harris /**
278f11c7f63SJim Harris  * @name ATA_PACKET_FEATURE_BITS
279f11c7f63SJim Harris  *
280f11c7f63SJim Harris  * These constants define the various bit definitions for the
281f11c7f63SJim Harris  * ATA PACKET feature register.
282f11c7f63SJim Harris  */
283f11c7f63SJim Harris /*@{*/
284f11c7f63SJim Harris #define ATA_PACKET_FEATURE_DMA     0x01
285f11c7f63SJim Harris #define ATA_PACKET_FEATURE_OVL     0x02
286f11c7f63SJim Harris #define ATA_PACKET_FEATURE_DMADIR  0x04
287f11c7f63SJim Harris /*@}*/
288f11c7f63SJim Harris 
289f11c7f63SJim Harris /**
290f11c7f63SJim Harris  * @name ATA_Device_Power_Mode_Values
291f11c7f63SJim Harris  *
292f11c7f63SJim Harris  * These constants define the power mode values returned by
293f11c7f63SJim Harris  * ATA_Check_Power_Mode
294f11c7f63SJim Harris  */
295f11c7f63SJim Harris /*@{*/
296f11c7f63SJim Harris #define ATA_STANDBY_POWER_MODE    0x00
297f11c7f63SJim Harris #define ATA_IDLE_POWER_MODE       0x80
298f11c7f63SJim Harris #define ATA_ACTIVE_POWER_MODE     0xFF
299f11c7f63SJim Harris /*@}*/
300f11c7f63SJim Harris 
301f11c7f63SJim Harris /**
3025e246cb8SEd Maste  * @name ATA_WRITE_UNCORRECTABLE feature field values
303f11c7f63SJim Harris  *
304f11c7f63SJim Harris  * These constants define the Write Uncorrectable feature values
305f11c7f63SJim Harris  * used with the SATI translation.
306f11c7f63SJim Harris  */
307f11c7f63SJim Harris /*@{*/
3085e246cb8SEd Maste #define ATA_WRITE_UNCORRECTABLE_PSEUDO    0x55
309f11c7f63SJim Harris #define ATA_WRITE_UNCORRECTABLE_FLAGGED   0xAA
310f11c7f63SJim Harris /*@}*/
311f11c7f63SJim Harris 
312f11c7f63SJim Harris 
313f11c7f63SJim Harris 
314f11c7f63SJim Harris /**
315f11c7f63SJim Harris  * @name ATA_SECURITY_STATUS field values
316f11c7f63SJim Harris  *
317f11c7f63SJim Harris  * These constants define the mask of the securityStatus field and the various bits within it
318f11c7f63SJim Harris  */
319f11c7f63SJim Harris /*@{*/
320f11c7f63SJim Harris #define ATA_SECURITY_STATUS_SUPPORTED      0x0001
321f11c7f63SJim Harris #define ATA_SECURITY_STATUS_ENABLED        0x0002
322f11c7f63SJim Harris #define ATA_SECURITY_STATUS_LOCKED         0x0004
323f11c7f63SJim Harris #define ATA_SECURITY_STATUS_FROZEN         0x0008
324f11c7f63SJim Harris #define ATA_SECURITY_STATUS_EXPIRED        0x0010
325f11c7f63SJim Harris #define ATA_SECURITY_STATUS_ERASESUPPORTED 0x0020
326f11c7f63SJim Harris #define ATA_SECURITY_STATUS_RESERVED       0xFEC0
327f11c7f63SJim Harris #define ATA_SECURITY_STATUS_SECURITYLEVEL  0x0100
328f11c7f63SJim Harris /*@}*/
329f11c7f63SJim Harris 
330f11c7f63SJim Harris /**
331f11c7f63SJim Harris  * @struct ATA_IDENTIFY_DEVICE
332f11c7f63SJim Harris  *
333f11c7f63SJim Harris  * @brief This structure depicts the ATA IDENTIFY DEVICE data format.
334f11c7f63SJim Harris  */
335f11c7f63SJim Harris typedef struct ATA_IDENTIFY_DEVICE_DATA
336f11c7f63SJim Harris {
337f11c7f63SJim Harris    U16   general_config_bits;                             // word  00
338f11c7f63SJim Harris    U16   obsolete0;                                       // word  01 (num cylinders)
339f11c7f63SJim Harris    U16   vendor_specific_config_bits;                     // word  02
340f11c7f63SJim Harris    U16   obsolete1;                                       // word  03 (num heads)
341f11c7f63SJim Harris    U16   retired1[2];                                     // words 04-05
342f11c7f63SJim Harris    U16   obsolete2;                                       // word  06 (sectors / track)
343f11c7f63SJim Harris    U16   reserved_for_compact_flash1[2];                  // words 07-08
344f11c7f63SJim Harris    U16   retired0;                                        // word  09
345f11c7f63SJim Harris    U8    serial_number[ATA_IDENTIFY_SERIAL_NUMBER_LEN];   // word 10-19
346f11c7f63SJim Harris    U16   retired2[2];                                     // words 20-21
347f11c7f63SJim Harris    U16   obsolete4;                                       // word  22
348f11c7f63SJim Harris    U8    firmware_revision[ATA_IDENTIFY_FW_REVISION_LEN]; // words 23-26
349f11c7f63SJim Harris    U8    model_number[ATA_IDENTIFY_MODEL_NUMBER_LEN];     // words 27-46
350f11c7f63SJim Harris    U16   max_sectors_per_multiple;                        // word  47
351f11c7f63SJim Harris    U16   reserved0;                                       // word  48
352f11c7f63SJim Harris    U16   capabilities1;                                   // word  49
353f11c7f63SJim Harris    U16   capabilities2;                                   // word  50
354f11c7f63SJim Harris    U16   obsolete5[2];                                    // words 51-52
355f11c7f63SJim Harris    U16   validity_bits;                                   // word  53
356f11c7f63SJim Harris    U16   obsolete6[5];                                    // words 54-58 Used to be:
357f11c7f63SJim Harris                                                           // current cylinders,
358f11c7f63SJim Harris                                                           // current heads,
359f11c7f63SJim Harris                                                           // current sectors/Track,
360f11c7f63SJim Harris                                                           // current capacity
361f11c7f63SJim Harris    U16   current_max_sectors_per_multiple;                // word  59
362f11c7f63SJim Harris    U8    total_num_sectors[4];                            // words 60-61
363f11c7f63SJim Harris    U16   obsolete7;                                       // word  62
364f11c7f63SJim Harris    U16   multi_word_dma_mode;                             // word  63
365f11c7f63SJim Harris    U16   pio_modes_supported;                             // word  64
366f11c7f63SJim Harris    U16   min_multiword_dma_transfer_cycle;                // word  65
367f11c7f63SJim Harris    U16   rec_min_multiword_dma_transfer_cycle;            // word  66
368f11c7f63SJim Harris    U16   min_pio_transfer_no_flow_ctrl;                   // word  67
369f11c7f63SJim Harris    U16   min_pio_transfer_with_flow_ctrl;                 // word  68
370f11c7f63SJim Harris    U16   additional_supported;                            // word  69
371f11c7f63SJim Harris    U16   reserved1;                                       // word  70
372f11c7f63SJim Harris    U16   reserved2[4];                                    // words 71-74
373f11c7f63SJim Harris    U16   queue_depth;                                     // word  75
374f11c7f63SJim Harris    U16   serial_ata_capabilities;                         // word  76
375f11c7f63SJim Harris    U16   serial_ata_reserved;                             // word  77
376f11c7f63SJim Harris    U16   serial_ata_features_supported;                   // word  78
377f11c7f63SJim Harris    U16   serial_ata_features_enabled;                     // word  79
378f11c7f63SJim Harris    U16   major_version_number;                            // word  80
379f11c7f63SJim Harris    U16   minor_version_number;                            // word  81
380f11c7f63SJim Harris    U16   command_set_supported0;                          // word  82
381f11c7f63SJim Harris    U16   command_set_supported1;                          // word  83
382f11c7f63SJim Harris    U16   command_set_supported_extention;                 // word  84
383f11c7f63SJim Harris    U16   command_set_enabled0;                            // word  85
384f11c7f63SJim Harris    U16   command_set_enabled1;                            // word  86
385f11c7f63SJim Harris    U16   command_set_default;                             // word  87
386f11c7f63SJim Harris    U16   ultra_dma_mode;                                  // word  88
387f11c7f63SJim Harris    U16   security_erase_completion_time;                  // word  89
388f11c7f63SJim Harris    U16   enhanced_security_erase_time;                    // word  90
389f11c7f63SJim Harris    U16   current_power_mgmt_value;                        // word  91
390f11c7f63SJim Harris    U16   master_password_revision;                        // word  92
391f11c7f63SJim Harris    U16   hardware_reset_result;                           // word  93
392f11c7f63SJim Harris    U16   current_acoustic_management_value;               // word  94
393f11c7f63SJim Harris    U16   stream_min_request_size;                         // word  95
394f11c7f63SJim Harris    U16   stream_transfer_time;                            // word  96
395f11c7f63SJim Harris    U16   stream_access_latency;                           // word  97
396f11c7f63SJim Harris    U16   stream_performance_granularity[2];               // words 98-99
397f11c7f63SJim Harris    U8    max_48bit_lba[ATA_IDENTIFY_48_LBA_LEN];          // words 100-103
398f11c7f63SJim Harris    U16   streaming_transfer_time;                         // word  104
399f11c7f63SJim Harris    U16   max_lba_range_entry_blocks;                      // word  105
400f11c7f63SJim Harris    U16   physical_logical_sector_info;                    // word  106
401f11c7f63SJim Harris    U16   acoustic_test_interseek_delay;                   // word  107
402f11c7f63SJim Harris    U8    world_wide_name[ATA_IDENTIFY_WWN_LEN];           // words 108-111
403f11c7f63SJim Harris    U8    reserved_for_wwn_extention[ATA_IDENTIFY_WWN_LEN];// words 112-115
404f11c7f63SJim Harris    U16   reserved4;                                       // word  116
405f11c7f63SJim Harris    U8    words_per_logical_sector[4];                     // words 117-118
406f11c7f63SJim Harris    U16   command_set_supported2;                          // word  119
407f11c7f63SJim Harris    U16   reserved5[7];                                    // words 120-126
408f11c7f63SJim Harris    U16   removable_media_status;                          // word  127
409f11c7f63SJim Harris    U16   security_status;                                 // word  128
410f11c7f63SJim Harris    U16   vendor_specific1[31];                            // words 129-159
411f11c7f63SJim Harris    U16   cfa_power_mode1;                                 // word  160
412f11c7f63SJim Harris    U16   reserved_for_compact_flash2[7];                  // words 161-167
413f11c7f63SJim Harris    U16   device_nominal_form_factor;                      // word  168
414f11c7f63SJim Harris    U16   data_set_management;                             // word  169
415f11c7f63SJim Harris    U16   reserved_for_compact_flash3[6];                  // words 170-175
416f11c7f63SJim Harris    U16   current_media_serial_number[ATA_IDENTIFY_MEDIA_SERIAL_NUMBER_LEN];//words 176-205
417f11c7f63SJim Harris    U16   reserved6[3];                                    // words 206-208
418f11c7f63SJim Harris    U16   logical_sector_alignment;                        // words 209
419f11c7f63SJim Harris    U16   reserved7[7];                                    // words 210-216
420f11c7f63SJim Harris    U16   nominal_media_rotation_rate;                     // word  217
421f11c7f63SJim Harris    U16   reserved8[16];                                   // words 218-233
422f11c7f63SJim Harris    U16   min_num_blocks_per_microcode;                    // word  234
423f11c7f63SJim Harris    U16   max_num_blocks_per_microcode;                    // word  235
424f11c7f63SJim Harris    U16   reserved9[19];                                   // words 236-254
425f11c7f63SJim Harris    U16   integrity_word;                                  // word  255
426f11c7f63SJim Harris 
427f11c7f63SJim Harris } ATA_IDENTIFY_DEVICE_DATA_T;
428f11c7f63SJim Harris 
429f11c7f63SJim Harris #define ATA_IDENTIFY_DEVICE_GET_OFFSET(field_name) \
430f11c7f63SJim Harris    ((POINTER_UINT)&(((ATA_IDENTIFY_DEVICE_DATA_T*)0)->field_name))
431f11c7f63SJim Harris #define ATA_IDENTIFY_DEVICE_WCE_ENABLE  0x20
432f11c7f63SJim Harris #define ATA_IDENTIFY_DEVICE_RA_ENABLE   0x40
433f11c7f63SJim Harris 
434f11c7f63SJim Harris /**
435f11c7f63SJim Harris  * @struct ATAPI_IDENTIFY_PACKET_DATA
436f11c7f63SJim Harris  *
437f11c7f63SJim Harris  * @brief The following structure depicts the ATA-ATAPI 7 version of the
438f11c7f63SJim Harris  *        IDENTIFY PACKET DEVICE data structure.
439f11c7f63SJim Harris  */
440f11c7f63SJim Harris typedef struct ATAPI_IDENTIFY_PACKET_DEVICE
441f11c7f63SJim Harris {
442f11c7f63SJim Harris    U16   generalConfigBits;                      // word  00
443f11c7f63SJim Harris    U16   reserved0;                              // word  01 (num cylinders)
444f11c7f63SJim Harris    U16   uniqueConfigBits;                       // word  02
445f11c7f63SJim Harris    U16   reserved1[7];                           // words 03 - 09
446f11c7f63SJim Harris    U8    serialNumber[ATA_IDENTIFY_SERIAL_NUMBER_LEN];  // word 10-19
447f11c7f63SJim Harris    U16   reserved2[3];                           // words 20-22
448f11c7f63SJim Harris    U8    firmwareRevision[ATA_IDENTIFY_FW_REVISION_LEN];// words 23-26
449f11c7f63SJim Harris    U8    modelNumber[ATA_IDENTIFY_MODEL_NUMBER_LEN];    // words 27-46
450f11c7f63SJim Harris    U16   reserved4[2];                           // words 47-48
451f11c7f63SJim Harris    U16   capabilities1;                          // word  49
452f11c7f63SJim Harris    U16   capabilities2;                          // word  50
453f11c7f63SJim Harris    U16   obsolete0[2];                           // words 51-52
454f11c7f63SJim Harris    U16   validityBits;                           // word  53
455f11c7f63SJim Harris    U16   reserved[8];                            // words 54-61
456f11c7f63SJim Harris 
457f11c7f63SJim Harris    U16   DMADIRBitRequired;                      // word  62, page2
458f11c7f63SJim Harris    U16   multiWordDmaMode;                       // word  63
459f11c7f63SJim Harris    U16   pioModesSupported;                      // word  64
460f11c7f63SJim Harris    U16   minMultiwordDmaTransferCycle;           // word  65
461f11c7f63SJim Harris    U16   recMinMultiwordDmaTransferCycle;        // word  66
462f11c7f63SJim Harris    U16   minPioTransferNoFlowCtrl;               // word  67
463f11c7f63SJim Harris    U16   minPioTransferWithFlowCtrl;             // word  68
464f11c7f63SJim Harris    U16   reserved6[2];                           // words 69-70
465f11c7f63SJim Harris    U16   nsFromPACKETReceiptToBusRelease;        // word  71
466f11c7f63SJim Harris    U16   nsFromSERVICEReceiptToBSYreset;         // wore  72
467f11c7f63SJim Harris    U16   reserved7[2];                           // words 73-74
468f11c7f63SJim Harris    U16   queueDepth;                             // word  75
469f11c7f63SJim Harris    U16   serialAtaCapabilities;                  // word  76
470f11c7f63SJim Harris    U16   serialAtaReserved;                      // word  77
471f11c7f63SJim Harris    U16   serialAtaFeaturesSupported;             // word  78
472f11c7f63SJim Harris    U16   serialAtaFeaturesEnabled;               // word  79
473f11c7f63SJim Harris 
474f11c7f63SJim Harris    U16   majorVersionNumber;                     // word  80, page3
475f11c7f63SJim Harris    U16   minorVersionNumber;                     // word  81
476f11c7f63SJim Harris    U16   commandSetSupported0;                   // word  82
477f11c7f63SJim Harris    U16   commandSetSupported1;                   // word  83
478f11c7f63SJim Harris 
479f11c7f63SJim Harris    U16   commandSetSupportedExtention;           // word  84, page4
480f11c7f63SJim Harris    U16   commandSetEnabled0;                     // word  85
481f11c7f63SJim Harris    U16   commandSetEnabled1;                     // word  86
482f11c7f63SJim Harris    U16   commandSetDefault;                      // word  87
483f11c7f63SJim Harris 
484f11c7f63SJim Harris    U16   ultraDmaMode;                           // word  88, page5
485f11c7f63SJim Harris    U16   reserved8[4];                           // words 89 - 92
486f11c7f63SJim Harris 
487f11c7f63SJim Harris    U16   hardwareResetResult;                    // word  93, page6
488f11c7f63SJim Harris    U16   currentAcousticManagementValue;         // word  94
489f11c7f63SJim Harris    U16   reserved9[30];                          // words 95-124
490f11c7f63SJim Harris    U16   ATAPIByteCount0Behavior;                // word  125
491f11c7f63SJim Harris    U16   obsolete1;                              // word  126
492f11c7f63SJim Harris    U16   removableMediaStatus;                   // word  127,
493f11c7f63SJim Harris 
494f11c7f63SJim Harris    U16   securityStatus;                         // word  128, page7
495f11c7f63SJim Harris    U16   vendorSpecific1[31];                    // words 129-159
496f11c7f63SJim Harris    U16   reservedForCompactFlash[16];            // words 160-175
497f11c7f63SJim Harris    U16   reserved10[79];                         // words 176-254
498f11c7f63SJim Harris    U16   integrityWord;                          // word  255
499f11c7f63SJim Harris } ATAPI_IDENTIFY_PACKET_DEVICE_T;
500f11c7f63SJim Harris 
501f11c7f63SJim Harris /**
502f11c7f63SJim Harris * @struct ATA_EXTENDED_SMART_SELF_TEST_LOG
503f11c7f63SJim Harris *
504f11c7f63SJim Harris * @brief The following structure depicts the ATA-8 version of the
505f11c7f63SJim Harris *        Extended SMART self test log page descriptor entry.
506f11c7f63SJim Harris */
507f11c7f63SJim Harris typedef union ATA_DESCRIPTOR_ENTRY
508f11c7f63SJim Harris {
509f11c7f63SJim Harris       struct DESCRIPTOR_ENTRY
510f11c7f63SJim Harris       {
511f11c7f63SJim Harris          U8 lba_field;
512f11c7f63SJim Harris          U8 status_byte;
513f11c7f63SJim Harris          U8 time_stamp_low;
514f11c7f63SJim Harris          U8 time_stamp_high;
515f11c7f63SJim Harris          U8 checkpoint_byte;
516f11c7f63SJim Harris          U8 failing_lba_low;
517f11c7f63SJim Harris          U8 failing_lba_mid;
518f11c7f63SJim Harris          U8 failing_lba_high;
519f11c7f63SJim Harris          U8 failing_lba_low_ext;
520f11c7f63SJim Harris          U8 failing_lba_mid_ext;
521f11c7f63SJim Harris          U8 failing_lba_high_ext;
522f11c7f63SJim Harris 
523f11c7f63SJim Harris          U8 vendor_specific1;
524f11c7f63SJim Harris          U8 vendor_specific2;
525f11c7f63SJim Harris          U8 vendor_specific3;
526f11c7f63SJim Harris          U8 vendor_specific4;
527f11c7f63SJim Harris          U8 vendor_specific5;
528f11c7f63SJim Harris          U8 vendor_specific6;
529f11c7f63SJim Harris          U8 vendor_specific7;
530f11c7f63SJim Harris          U8 vendor_specific8;
531f11c7f63SJim Harris          U8 vendor_specific9;
532f11c7f63SJim Harris          U8 vendor_specific10;
533f11c7f63SJim Harris          U8 vendor_specific11;
534f11c7f63SJim Harris          U8 vendor_specific12;
535f11c7f63SJim Harris          U8 vendor_specific13;
536f11c7f63SJim Harris          U8 vendor_specific14;
537f11c7f63SJim Harris          U8 vendor_specific15;
538f11c7f63SJim Harris       } DESCRIPTOR_ENTRY;
539f11c7f63SJim Harris 
540f11c7f63SJim Harris       U8 descriptor_entry[26];
541f11c7f63SJim Harris 
542f11c7f63SJim Harris } ATA_DESCRIPTOR_ENTRY_T;
543f11c7f63SJim Harris 
544f11c7f63SJim Harris /**
545f11c7f63SJim Harris * @struct ATA_EXTENDED_SMART_SELF_TEST_LOG
546f11c7f63SJim Harris *
547f11c7f63SJim Harris * @brief The following structure depicts the ATA-8 version of the
548f11c7f63SJim Harris *        SMART self test log page descriptor entry.
549f11c7f63SJim Harris */
550f11c7f63SJim Harris typedef union ATA_SMART_DESCRIPTOR_ENTRY
551f11c7f63SJim Harris {
552f11c7f63SJim Harris       struct SMART_DESCRIPTOR_ENTRY
553f11c7f63SJim Harris       {
554f11c7f63SJim Harris          U8 lba_field;
555f11c7f63SJim Harris          U8 status_byte;
556f11c7f63SJim Harris          U8 time_stamp_low;
557f11c7f63SJim Harris          U8 time_stamp_high;
558f11c7f63SJim Harris          U8 checkpoint_byte;
559f11c7f63SJim Harris          U8 failing_lba_low;
560f11c7f63SJim Harris          U8 failing_lba_mid;
561f11c7f63SJim Harris          U8 failing_lba_high;
562f11c7f63SJim Harris          U8 failing_lba_low_ext;
563f11c7f63SJim Harris 
564f11c7f63SJim Harris          U8 vendor_specific1;
565f11c7f63SJim Harris          U8 vendor_specific2;
566f11c7f63SJim Harris          U8 vendor_specific3;
567f11c7f63SJim Harris          U8 vendor_specific4;
568f11c7f63SJim Harris          U8 vendor_specific5;
569f11c7f63SJim Harris          U8 vendor_specific6;
570f11c7f63SJim Harris          U8 vendor_specific7;
571f11c7f63SJim Harris          U8 vendor_specific8;
572f11c7f63SJim Harris          U8 vendor_specific9;
573f11c7f63SJim Harris          U8 vendor_specific10;
574f11c7f63SJim Harris          U8 vendor_specific11;
575f11c7f63SJim Harris          U8 vendor_specific12;
576f11c7f63SJim Harris          U8 vendor_specific13;
577f11c7f63SJim Harris          U8 vendor_specific14;
578f11c7f63SJim Harris          U8 vendor_specific15;
579f11c7f63SJim Harris       } SMART_DESCRIPTOR_ENTRY;
580f11c7f63SJim Harris 
581f11c7f63SJim Harris       U8 smart_descriptor_entry[24];
582f11c7f63SJim Harris 
583f11c7f63SJim Harris } ATA_SMART_DESCRIPTOR_ENTRY_T;
584f11c7f63SJim Harris 
585f11c7f63SJim Harris /**
586f11c7f63SJim Harris * @struct ATA_EXTENDED_SMART_SELF_TEST_LOG
587f11c7f63SJim Harris *
588f11c7f63SJim Harris * @brief The following structure depicts the ATA-8 version of the
589f11c7f63SJim Harris *        Extended SMART self test log page.
590f11c7f63SJim Harris */
591f11c7f63SJim Harris typedef struct ATA_EXTENDED_SMART_SELF_TEST_LOG
592f11c7f63SJim Harris {
593f11c7f63SJim Harris    U8    self_test_log_data_structure_revision_number;   //byte 0
594f11c7f63SJim Harris    U8    reserved0;                                      //byte 1
595f11c7f63SJim Harris    U8    self_test_descriptor_index[2];                  //byte 2-3
596f11c7f63SJim Harris 
597f11c7f63SJim Harris    ATA_DESCRIPTOR_ENTRY_T descriptor_entrys[19];         //bytes 4-497
598f11c7f63SJim Harris 
599f11c7f63SJim Harris    U8    vendor_specific[2];                             //byte 498-499
600f11c7f63SJim Harris    U8    reserved1[11];                                  //byte 500-510
601f11c7f63SJim Harris    U8    data_structure_checksum;                        //byte 511
602f11c7f63SJim Harris 
603f11c7f63SJim Harris } ATA_EXTENDED_SMART_SELF_TEST_LOG_T;
604f11c7f63SJim Harris 
605f11c7f63SJim Harris /**
606f11c7f63SJim Harris * @struct ATA_EXTENDED_SMART_SELF_TEST_LOG
607f11c7f63SJim Harris *
608f11c7f63SJim Harris * @brief The following structure depicts the ATA-8 version of the
609f11c7f63SJim Harris *        SMART self test log page.
610f11c7f63SJim Harris */
611f11c7f63SJim Harris typedef struct ATA_SMART_SELF_TEST_LOG
612f11c7f63SJim Harris {
613f11c7f63SJim Harris    U8    self_test_log_data_structure_revision_number[2];   //bytes 0-1
614f11c7f63SJim Harris 
615f11c7f63SJim Harris    ATA_SMART_DESCRIPTOR_ENTRY_T descriptor_entrys[21];      //bytes 2-505
616f11c7f63SJim Harris 
617f11c7f63SJim Harris    U8    vendor_specific[2];                                //byte 506-507
618f11c7f63SJim Harris    U8    self_test_index;                                   //byte 508
619f11c7f63SJim Harris    U8    reserved1[2];                                      //byte 509-510
620f11c7f63SJim Harris    U8    data_structure_checksum;                           //byte 511
621f11c7f63SJim Harris 
622f11c7f63SJim Harris } ATA_SMART_SELF_TEST_LOG_T;
623f11c7f63SJim Harris 
624f11c7f63SJim Harris /**
625f11c7f63SJim Harris * @struct ATA_NCQ_COMMAND_ERROR_LOG
626f11c7f63SJim Harris *
627f11c7f63SJim Harris * @brief The following structure depicts the ATA-8 version of the
628f11c7f63SJim Harris *        NCQ command error log page.
629f11c7f63SJim Harris */
630f11c7f63SJim Harris typedef struct ATA_NCQ_COMMAND_ERROR_LOG
631f11c7f63SJim Harris {
632f11c7f63SJim Harris    U8    ncq_tag   : 5;
633f11c7f63SJim Harris    U8    reserved1 : 2;
634f11c7f63SJim Harris    U8    nq        : 1;
635f11c7f63SJim Harris    U8    reserved2;
636f11c7f63SJim Harris    U8    status;
637f11c7f63SJim Harris    U8    error;
638f11c7f63SJim Harris    U8    lba_7_0;
639f11c7f63SJim Harris    U8    lba_15_8;
640f11c7f63SJim Harris    U8    lba_23_16;
641f11c7f63SJim Harris    U8    device;
642f11c7f63SJim Harris    U8    lba_31_24;
643f11c7f63SJim Harris    U8    lba_39_32;
644f11c7f63SJim Harris    U8    lba_47_40;
645f11c7f63SJim Harris    U8    reserved3;
646f11c7f63SJim Harris    U8    count_7_0;
647f11c7f63SJim Harris    U8    count_15_8;
648f11c7f63SJim Harris    U8    reserved4[242];
649f11c7f63SJim Harris    U8    vendor_specific[255];
650f11c7f63SJim Harris    U8    checksum;
651f11c7f63SJim Harris } ATA_NCQ_COMMAND_ERROR_LOG_T;
652f11c7f63SJim Harris 
653f11c7f63SJim Harris #endif // _ATA_H_
654f11c7f63SJim Harris 
655