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