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