The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/isci/scil/intel_ata.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.