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