Blame view
include/linux/ata.h
29.7 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 |
/* |
af36d7f0d [libata] license ... |
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
* Copyright 2003-2004 Red Hat, Inc. All rights reserved. * Copyright 2003-2004 Jeff Garzik * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * * * libata documentation is available via 'make {ps|pdf}docs', * as Documentation/DocBook/libata.* * * Hardware documentation available from http://www.t13.org/ * |
1da177e4c Linux-2.6.12-rc2 |
27 28 29 30 |
*/ #ifndef __LINUX_ATA_H__ #define __LINUX_ATA_H__ |
0c659b82d ata: Add TRIM inf... |
31 32 |
#include <linux/kernel.h> #include <linux/string.h> |
1da177e4c Linux-2.6.12-rc2 |
33 |
#include <linux/types.h> |
93734a234 ide: ide_id_to_hd... |
34 |
#include <asm/byteorder.h> |
1da177e4c Linux-2.6.12-rc2 |
35 36 37 38 39 40 41 42 43 44 |
/* defines only for the constants which don't work well as enums */ #define ATA_DMA_BOUNDARY 0xffffUL #define ATA_DMA_MASK 0xffffffffULL enum { /* various global constants */ ATA_MAX_DEVICES = 2, /* per bus/port */ ATA_MAX_PRD = 256, /* we could make these 256/256 */ ATA_SECT_SIZE = 512, |
18d6e9d51 libata: Limit max... |
45 |
ATA_MAX_SECTORS_128 = 128, |
8b881b041 [ATA] Increase lb... |
46 47 |
ATA_MAX_SECTORS = 256, ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */ |
f8d8e5799 libata: increase ... |
48 |
ATA_MAX_SECTORS_TAPE = 65535, |
1da177e4c Linux-2.6.12-rc2 |
49 50 |
ATA_ID_WORDS = 256, |
37014c640 ata: add missing ... |
51 52 53 54 |
ATA_ID_CONFIG = 0, ATA_ID_CYLS = 1, ATA_ID_HEADS = 3, ATA_ID_SECTORS = 6, |
a0cf733b3 libata: straighte... |
55 |
ATA_ID_SERNO = 10, |
37014c640 ata: add missing ... |
56 |
ATA_ID_BUF_SIZE = 21, |
a0cf733b3 libata: straighte... |
57 58 |
ATA_ID_FW_REV = 23, ATA_ID_PROD = 27, |
37014c640 ata: add missing ... |
59 60 61 |
ATA_ID_MAX_MULTSECT = 47, ATA_ID_DWORD_IO = 48, ATA_ID_CAPABILITY = 49, |
11e29e215 libata: handle ea... |
62 |
ATA_ID_OLD_PIO_MODES = 51, |
37014c640 ata: add missing ... |
63 |
ATA_ID_OLD_DMA_MODES = 52, |
11e29e215 libata: handle ea... |
64 |
ATA_ID_FIELD_VALID = 53, |
37014c640 ata: add missing ... |
65 66 67 68 69 70 |
ATA_ID_CUR_CYLS = 54, ATA_ID_CUR_HEADS = 55, ATA_ID_CUR_SECTORS = 56, ATA_ID_MULTSECT = 59, ATA_ID_LBA_CAPACITY = 60, ATA_ID_SWDMA_MODES = 62, |
1da177e4c Linux-2.6.12-rc2 |
71 |
ATA_ID_MWDMA_MODES = 63, |
11e29e215 libata: handle ea... |
72 73 |
ATA_ID_PIO_MODES = 64, ATA_ID_EIDE_DMA_MIN = 65, |
37014c640 ata: add missing ... |
74 |
ATA_ID_EIDE_DMA_TIME = 66, |
11e29e215 libata: handle ea... |
75 76 |
ATA_ID_EIDE_PIO = 67, ATA_ID_EIDE_PIO_IORDY = 68, |
e78db4dfb libata: Report ze... |
77 |
ATA_ID_ADDITIONAL_SUPP = 69, |
37014c640 ata: add missing ... |
78 |
ATA_ID_QUEUE_DEPTH = 75, |
11e29e215 libata: handle ea... |
79 |
ATA_ID_MAJOR_VER = 80, |
37014c640 ata: add missing ... |
80 81 82 83 84 85 86 87 88 89 |
ATA_ID_COMMAND_SET_1 = 82, ATA_ID_COMMAND_SET_2 = 83, ATA_ID_CFSSE = 84, ATA_ID_CFS_ENABLE_1 = 85, ATA_ID_CFS_ENABLE_2 = 86, ATA_ID_CSF_DEFAULT = 87, ATA_ID_UDMA_MODES = 88, ATA_ID_HW_CONFIG = 93, ATA_ID_SPG = 98, ATA_ID_LBA_CAPACITY_2 = 100, |
18f0f9785 libata: add trans... |
90 |
ATA_ID_SECTOR_SIZE = 106, |
6b3b9d73e libata: Include W... |
91 |
ATA_ID_WWN = 108, |
295124dce [libata] support ... |
92 |
ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */ |
37014c640 ata: add missing ... |
93 94 95 96 |
ATA_ID_LAST_LUN = 126, ATA_ID_DLF = 128, ATA_ID_CSFO = 129, ATA_ID_CFA_POWER = 160, |
d42ad15b7 ata: add CFA spec... |
97 98 |
ATA_ID_CFA_KEY_MGMT = 162, ATA_ID_CFA_MODES = 163, |
0c659b82d ata: Add TRIM inf... |
99 |
ATA_ID_DATA_SET_MGMT = 169, |
8bff7c6b0 libata: set queue... |
100 |
ATA_ID_ROT_SPEED = 217, |
1da177e4c Linux-2.6.12-rc2 |
101 |
ATA_ID_PIO4 = (1 << 1), |
a0cf733b3 libata: straighte... |
102 103 104 |
ATA_ID_SERNO_LEN = 20, ATA_ID_FW_REV_LEN = 8, ATA_ID_PROD_LEN = 40, |
6b3b9d73e libata: Include W... |
105 |
ATA_ID_WWN_LEN = 8, |
a0cf733b3 libata: straighte... |
106 |
|
1da177e4c Linux-2.6.12-rc2 |
107 |
ATA_PCI_CTL_OFS = 2, |
4099d1432 ide: add PIO masks |
108 109 110 111 112 113 114 115 |
ATA_PIO0 = (1 << 0), ATA_PIO1 = ATA_PIO0 | (1 << 1), ATA_PIO2 = ATA_PIO1 | (1 << 2), ATA_PIO3 = ATA_PIO2 | (1 << 3), ATA_PIO4 = ATA_PIO3 | (1 << 4), ATA_PIO5 = ATA_PIO4 | (1 << 5), ATA_PIO6 = ATA_PIO5 | (1 << 6), |
22ddbd1e0 include/linux/ata... |
116 |
ATA_PIO4_ONLY = (1 << 4), |
91a6d4ed3 ata: add ATA_MWDM... |
117 118 119 120 121 122 123 124 125 |
ATA_SWDMA0 = (1 << 0), ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1), ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2), ATA_SWDMA2_ONLY = (1 << 2), ATA_MWDMA0 = (1 << 0), ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1), ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2), |
22ddbd1e0 include/linux/ata... |
126 127 |
ATA_MWDMA3 = ATA_MWDMA2 | (1 << 3), ATA_MWDMA4 = ATA_MWDMA3 | (1 << 4), |
91a6d4ed3 ata: add ATA_MWDM... |
128 129 130 |
ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2), ATA_MWDMA2_ONLY = (1 << 2), |
1da177e4c Linux-2.6.12-rc2 |
131 132 133 134 135 136 137 138 139 |
ATA_UDMA0 = (1 << 0), ATA_UDMA1 = ATA_UDMA0 | (1 << 1), ATA_UDMA2 = ATA_UDMA1 | (1 << 2), ATA_UDMA3 = ATA_UDMA2 | (1 << 3), ATA_UDMA4 = ATA_UDMA3 | (1 << 4), ATA_UDMA5 = ATA_UDMA4 | (1 << 5), ATA_UDMA6 = ATA_UDMA5 | (1 << 6), ATA_UDMA7 = ATA_UDMA6 | (1 << 7), /* ATA_UDMA7 is just for completeness... doesn't exist (yet?). */ |
22ddbd1e0 include/linux/ata... |
140 |
ATA_UDMA24_ONLY = (1 << 2) | (1 << 4), |
1da177e4c Linux-2.6.12-rc2 |
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
ATA_UDMA_MASK_40C = ATA_UDMA2, /* udma0-2 */ /* DMA-related */ ATA_PRD_SZ = 8, ATA_PRD_TBL_SZ = (ATA_MAX_PRD * ATA_PRD_SZ), ATA_PRD_EOT = (1 << 31), /* end-of-table flag */ ATA_DMA_TABLE_OFS = 4, ATA_DMA_STATUS = 2, ATA_DMA_CMD = 0, ATA_DMA_WR = (1 << 3), ATA_DMA_START = (1 << 0), ATA_DMA_INTR = (1 << 2), ATA_DMA_ERR = (1 << 1), ATA_DMA_ACTIVE = (1 << 0), /* bits in ATA command block registers */ ATA_HOB = (1 << 7), /* LBA48 selector */ ATA_NIEN = (1 << 1), /* disable-irq flag */ ATA_LBA = (1 << 6), /* LBA28 selector */ ATA_DEV1 = (1 << 4), /* Select Device 1 (slave) */ ATA_DEVICE_OBS = (1 << 7) | (1 << 5), /* obs bits in dev reg */ ATA_DEVCTL_OBS = (1 << 3), /* obsolete bit in devctl reg */ ATA_BUSY = (1 << 7), /* BSY status bit */ ATA_DRDY = (1 << 6), /* device ready */ ATA_DF = (1 << 5), /* device fault */ |
b59116205 ata: add missing ... |
167 |
ATA_DSC = (1 << 4), /* drive seek complete */ |
1da177e4c Linux-2.6.12-rc2 |
168 |
ATA_DRQ = (1 << 3), /* data request i/o */ |
b59116205 ata: add missing ... |
169 170 |
ATA_CORR = (1 << 2), /* corrected data error */ ATA_IDX = (1 << 1), /* index */ |
1da177e4c Linux-2.6.12-rc2 |
171 172 |
ATA_ERR = (1 << 0), /* have an error */ ATA_SRST = (1 << 2), /* software reset */ |
9be1e979f [PATCH] libata-eh... |
173 |
ATA_ICRC = (1 << 7), /* interface CRC error */ |
b59116205 ata: add missing ... |
174 |
ATA_BBK = ATA_ICRC, /* pre-EIDE: block marked bad */ |
9be1e979f [PATCH] libata-eh... |
175 |
ATA_UNC = (1 << 6), /* uncorrectable media error */ |
b59116205 ata: add missing ... |
176 |
ATA_MC = (1 << 5), /* media changed */ |
9be1e979f [PATCH] libata-eh... |
177 |
ATA_IDNF = (1 << 4), /* ID not found */ |
b59116205 ata: add missing ... |
178 |
ATA_MCR = (1 << 3), /* media change requested */ |
1da177e4c Linux-2.6.12-rc2 |
179 |
ATA_ABORTED = (1 << 2), /* command aborted */ |
b59116205 ata: add missing ... |
180 181 182 183 184 185 186 |
ATA_TRK0NF = (1 << 1), /* track 0 not found */ ATA_AMNF = (1 << 0), /* address mark not found */ ATAPI_LFS = 0xF0, /* last failed sense */ ATAPI_EOM = ATA_TRK0NF, /* end of media */ ATAPI_ILI = ATA_AMNF, /* illegal length indication */ ATAPI_IO = (1 << 1), ATAPI_COD = (1 << 0), |
1da177e4c Linux-2.6.12-rc2 |
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
/* ATA command block registers */ ATA_REG_DATA = 0x00, ATA_REG_ERR = 0x01, ATA_REG_NSECT = 0x02, ATA_REG_LBAL = 0x03, ATA_REG_LBAM = 0x04, ATA_REG_LBAH = 0x05, ATA_REG_DEVICE = 0x06, ATA_REG_STATUS = 0x07, ATA_REG_FEATURE = ATA_REG_ERR, /* and their aliases */ ATA_REG_CMD = ATA_REG_STATUS, ATA_REG_BYTEL = ATA_REG_LBAM, ATA_REG_BYTEH = ATA_REG_LBAH, ATA_REG_DEVSEL = ATA_REG_DEVICE, ATA_REG_IRQ = ATA_REG_NSECT, /* ATA device commands */ |
ab2181cf3 [ATA] Add named c... |
206 |
ATA_CMD_DEV_RESET = 0x08, /* ATAPI device reset */ |
1da177e4c Linux-2.6.12-rc2 |
207 |
ATA_CMD_CHK_POWER = 0xE5, /* check power mode */ |
972dcafb6 [libata scsi] add... |
208 209 |
ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */ ATA_CMD_IDLE = 0xE3, /* place in idle power mode */ |
1da177e4c Linux-2.6.12-rc2 |
210 |
ATA_CMD_EDD = 0x90, /* execute device diagnostic */ |
6521148c6 libata: add comma... |
211 212 |
ATA_CMD_DOWNLOAD_MICRO = 0x92, ATA_CMD_NOP = 0x00, |
1da177e4c Linux-2.6.12-rc2 |
213 214 215 216 |
ATA_CMD_FLUSH = 0xE7, ATA_CMD_FLUSH_EXT = 0xEA, ATA_CMD_ID_ATA = 0xEC, ATA_CMD_ID_ATAPI = 0xA1, |
6521148c6 libata: add comma... |
217 |
ATA_CMD_SERVICE = 0xA2, |
1da177e4c Linux-2.6.12-rc2 |
218 219 |
ATA_CMD_READ = 0xC8, ATA_CMD_READ_EXT = 0x25, |
6521148c6 libata: add comma... |
220 221 222 |
ATA_CMD_READ_QUEUED = 0x26, ATA_CMD_READ_STREAM_EXT = 0x2B, ATA_CMD_READ_STREAM_DMA_EXT = 0x2A, |
1da177e4c Linux-2.6.12-rc2 |
223 224 |
ATA_CMD_WRITE = 0xCA, ATA_CMD_WRITE_EXT = 0x35, |
6521148c6 libata: add comma... |
225 226 227 |
ATA_CMD_WRITE_QUEUED = 0x36, ATA_CMD_WRITE_STREAM_EXT = 0x3B, ATA_CMD_WRITE_STREAM_DMA_EXT = 0x3A, |
9a3dccc42 [BLOCK] add FUA s... |
228 |
ATA_CMD_WRITE_FUA_EXT = 0x3D, |
6521148c6 libata: add comma... |
229 |
ATA_CMD_WRITE_QUEUED_FUA_EXT = 0x3E, |
88e490340 [PATCH] libata-nc... |
230 231 |
ATA_CMD_FPDMA_READ = 0x60, ATA_CMD_FPDMA_WRITE = 0x61, |
1da177e4c Linux-2.6.12-rc2 |
232 233 234 235 |
ATA_CMD_PIO_READ = 0x20, ATA_CMD_PIO_READ_EXT = 0x24, ATA_CMD_PIO_WRITE = 0x30, ATA_CMD_PIO_WRITE_EXT = 0x34, |
8cbd6df1f [PATCH] libata CH... |
236 237 238 239 |
ATA_CMD_READ_MULTI = 0xC4, ATA_CMD_READ_MULTI_EXT = 0x29, ATA_CMD_WRITE_MULTI = 0xC5, ATA_CMD_WRITE_MULTI_EXT = 0x39, |
9a3dccc42 [BLOCK] add FUA s... |
240 |
ATA_CMD_WRITE_MULTI_FUA_EXT = 0xCE, |
1da177e4c Linux-2.6.12-rc2 |
241 |
ATA_CMD_SET_FEATURES = 0xEF, |
2c3d2a46f libata passthru: ... |
242 |
ATA_CMD_SET_MULTI = 0xC6, |
1da177e4c Linux-2.6.12-rc2 |
243 244 245 |
ATA_CMD_PACKET = 0xA0, ATA_CMD_VERIFY = 0x40, ATA_CMD_VERIFY_EXT = 0x42, |
6521148c6 libata: add comma... |
246 |
ATA_CMD_WRITE_UNCORR_EXT = 0x45, |
2dcb407e6 [libata] checkpat... |
247 248 |
ATA_CMD_STANDBYNOW1 = 0xE0, ATA_CMD_IDLEIMMEDIATE = 0xE1, |
054a5fbac libata: track SLE... |
249 |
ATA_CMD_SLEEP = 0xE6, |
8bf62ecee [libata] C/H/S su... |
250 |
ATA_CMD_INIT_DEV_PARAMS = 0x91, |
b6782728d [PATCH] libata: A... |
251 252 |
ATA_CMD_READ_NATIVE_MAX = 0xF8, ATA_CMD_READ_NATIVE_MAX_EXT = 0x27, |
1e999736c libata: HPA support |
253 254 |
ATA_CMD_SET_MAX = 0xF9, ATA_CMD_SET_MAX_EXT = 0x37, |
6521148c6 libata: add comma... |
255 256 257 258 259 260 261 262 |
ATA_CMD_READ_LOG_EXT = 0x2F, ATA_CMD_WRITE_LOG_EXT = 0x3F, ATA_CMD_READ_LOG_DMA_EXT = 0x47, ATA_CMD_WRITE_LOG_DMA_EXT = 0x57, ATA_CMD_TRUSTED_RCV = 0x5C, ATA_CMD_TRUSTED_RCV_DMA = 0x5D, ATA_CMD_TRUSTED_SND = 0x5E, ATA_CMD_TRUSTED_SND_DMA = 0x5F, |
814600ee1 libata-link: add ... |
263 264 |
ATA_CMD_PMP_READ = 0xE4, ATA_CMD_PMP_WRITE = 0xE8, |
ce2e0abbd libata: add more ... |
265 |
ATA_CMD_CONF_OVERLAY = 0xB1, |
6521148c6 libata: add comma... |
266 267 268 269 |
ATA_CMD_SEC_SET_PASS = 0xF1, ATA_CMD_SEC_UNLOCK = 0xF2, ATA_CMD_SEC_ERASE_PREP = 0xF3, ATA_CMD_SEC_ERASE_UNIT = 0xF4, |
ce2e0abbd libata: add more ... |
270 |
ATA_CMD_SEC_FREEZE_LOCK = 0xF5, |
6521148c6 libata: add comma... |
271 272 |
ATA_CMD_SEC_DISABLE_PASS = 0xF6, ATA_CMD_CONFIG_STREAM = 0x51, |
476d9894d ata: add missing ... |
273 274 275 |
ATA_CMD_SMART = 0xB0, ATA_CMD_MEDIA_LOCK = 0xDE, ATA_CMD_MEDIA_UNLOCK = 0xDF, |
0c659b82d ata: Add TRIM inf... |
276 |
ATA_CMD_DSM = 0x06, |
6521148c6 libata: add comma... |
277 278 279 280 281 282 |
ATA_CMD_CHK_MED_CRD_TYP = 0xD1, ATA_CMD_CFA_REQ_EXT_ERR = 0x03, ATA_CMD_CFA_WRITE_NE = 0x38, ATA_CMD_CFA_TRANS_SECT = 0x87, ATA_CMD_CFA_ERASE = 0xC0, ATA_CMD_CFA_WRITE_MULT_NE = 0xCD, |
476d9894d ata: add missing ... |
283 284 |
/* marked obsolete in the ATA/ATAPI-7 spec */ ATA_CMD_RESTORE = 0x10, |
88e490340 [PATCH] libata-nc... |
285 286 287 |
/* READ_LOG_EXT pages */ ATA_LOG_SATA_NCQ = 0x10, |
1da177e4c Linux-2.6.12-rc2 |
288 |
|
5a5dbd18a libata: add suppo... |
289 290 291 292 293 |
/* READ/WRITE LONG (obsolete) */ ATA_CMD_READ_LONG = 0x22, ATA_CMD_READ_LONG_ONCE = 0x23, ATA_CMD_WRITE_LONG = 0x32, ATA_CMD_WRITE_LONG_ONCE = 0x33, |
1da177e4c Linux-2.6.12-rc2 |
294 295 296 297 298 299 300 301 302 303 |
/* SETFEATURES stuff */ SETFEATURES_XFER = 0x03, XFER_UDMA_7 = 0x47, XFER_UDMA_6 = 0x46, XFER_UDMA_5 = 0x45, XFER_UDMA_4 = 0x44, XFER_UDMA_3 = 0x43, XFER_UDMA_2 = 0x42, XFER_UDMA_1 = 0x41, XFER_UDMA_0 = 0x40, |
b352e57dc [PATCH] libata: A... |
304 305 |
XFER_MW_DMA_4 = 0x24, /* CFA only */ XFER_MW_DMA_3 = 0x23, /* CFA only */ |
1da177e4c Linux-2.6.12-rc2 |
306 307 308 |
XFER_MW_DMA_2 = 0x22, XFER_MW_DMA_1 = 0x21, XFER_MW_DMA_0 = 0x20, |
b4b52db71 [PATCH] ata: re-o... |
309 310 311 |
XFER_SW_DMA_2 = 0x12, XFER_SW_DMA_1 = 0x11, XFER_SW_DMA_0 = 0x10, |
b352e57dc [PATCH] libata: A... |
312 313 |
XFER_PIO_6 = 0x0E, /* CFA only */ XFER_PIO_5 = 0x0D, /* CFA only */ |
1da177e4c Linux-2.6.12-rc2 |
314 315 316 317 318 |
XFER_PIO_4 = 0x0C, XFER_PIO_3 = 0x0B, XFER_PIO_2 = 0x0A, XFER_PIO_1 = 0x09, XFER_PIO_0 = 0x08, |
1da177e4c Linux-2.6.12-rc2 |
319 |
XFER_PIO_SLOW = 0x00, |
3057ac3c1 [PATCH] Snoop SET... |
320 321 |
SETFEATURES_WC_ON = 0x02, /* Enable write cache */ SETFEATURES_WC_OFF = 0x82, /* Disable write cache */ |
476d9894d ata: add missing ... |
322 323 324 |
/* Enable/Disable Automatic Acoustic Management */ SETFEATURES_AAM_ON = 0x42, SETFEATURES_AAM_OFF = 0xC2, |
169439c2e libata: Handle dr... |
325 |
SETFEATURES_SPINUP = 0x07, /* Spin-up drive */ |
9f45cbd3f [libata] check fo... |
326 327 328 329 |
SETFEATURES_SATA_ENABLE = 0x10, /* Enable use of SATA feature */ SETFEATURES_SATA_DISABLE = 0x90, /* Disable use of SATA feature */ /* SETFEATURE Sector counts for SATA features */ |
fa5b561c4 libata: implement... |
330 |
SATA_FPDMA_OFFSET = 0x01, /* FPDMA non-zero buffer offsets */ |
f1bce7f80 libata: cosmetic ... |
331 332 |
SATA_FPDMA_AA = 0x02, /* FPDMA Setup FIS Auto-Activate */ SATA_DIPM = 0x03, /* Device Initiated Power Management */ |
fa5b561c4 libata: implement... |
333 |
SATA_FPDMA_IN_ORDER = 0x04, /* FPDMA in-order data delivery */ |
f1bce7f80 libata: cosmetic ... |
334 |
SATA_AN = 0x05, /* Asynchronous Notification */ |
fa5b561c4 libata: implement... |
335 |
SATA_SSP = 0x06, /* Software Settings Preservation */ |
9f45cbd3f [libata] check fo... |
336 |
|
ce2e0abbd libata: add more ... |
337 338 339 340 341 342 343 344 345 346 347 348 |
/* feature values for SET_MAX */ ATA_SET_MAX_ADDR = 0x00, ATA_SET_MAX_PASSWD = 0x01, ATA_SET_MAX_LOCK = 0x02, ATA_SET_MAX_UNLOCK = 0x03, ATA_SET_MAX_FREEZE_LOCK = 0x04, /* feature values for DEVICE CONFIGURATION OVERLAY */ ATA_DCO_RESTORE = 0xC0, ATA_DCO_FREEZE_LOCK = 0xC1, ATA_DCO_IDENTIFY = 0xC2, ATA_DCO_SET = 0xC3, |
476d9894d ata: add missing ... |
349 350 351 352 |
/* feature values for SMART */ ATA_SMART_ENABLE = 0xD8, ATA_SMART_READ_VALUES = 0xD0, ATA_SMART_READ_THRESHOLDS = 0xD1, |
0c659b82d ata: Add TRIM inf... |
353 354 |
/* feature values for Data Set Management */ ATA_DSM_TRIM = 0x01, |
476d9894d ata: add missing ... |
355 356 357 |
/* password used in LBA Mid / LBA High for executing SMART commands */ ATA_SMART_LBAM_PASS = 0x4F, ATA_SMART_LBAH_PASS = 0xC2, |
1da177e4c Linux-2.6.12-rc2 |
358 359 360 361 362 |
/* ATAPI stuff */ ATAPI_PKT_DMA = (1 << 0), ATAPI_DMADIR = (1 << 2), /* ATAPI data dir: 0=to device, 1=to host */ ATAPI_CDB_LEN = 16, |
814600ee1 libata-link: add ... |
363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 |
/* PMP stuff */ SATA_PMP_MAX_PORTS = 15, SATA_PMP_CTRL_PORT = 15, SATA_PMP_GSCR_DWORDS = 128, SATA_PMP_GSCR_PROD_ID = 0, SATA_PMP_GSCR_REV = 1, SATA_PMP_GSCR_PORT_INFO = 2, SATA_PMP_GSCR_ERROR = 32, SATA_PMP_GSCR_ERROR_EN = 33, SATA_PMP_GSCR_FEAT = 64, SATA_PMP_GSCR_FEAT_EN = 96, SATA_PMP_PSCR_STATUS = 0, SATA_PMP_PSCR_ERROR = 1, SATA_PMP_PSCR_CONTROL = 2, SATA_PMP_FEAT_BIST = (1 << 0), SATA_PMP_FEAT_PMREQ = (1 << 1), SATA_PMP_FEAT_DYNSSC = (1 << 2), SATA_PMP_FEAT_NOTIFY = (1 << 3), |
1da177e4c Linux-2.6.12-rc2 |
384 385 386 387 |
/* cable types */ ATA_CBL_NONE = 0, ATA_CBL_PATA40 = 1, ATA_CBL_PATA80 = 2, |
c88f90c37 libata: add ATA_C... |
388 389 390 391 |
ATA_CBL_PATA40_SHORT = 3, /* 40 wire cable to high UDMA spec */ ATA_CBL_PATA_UNK = 4, /* don't know, maybe 80c? */ ATA_CBL_PATA_IGN = 5, /* don't know, ignore cable handling */ ATA_CBL_SATA = 6, |
1da177e4c Linux-2.6.12-rc2 |
392 393 394 395 396 397 398 |
/* SATA Status and Control Registers */ SCR_STATUS = 0, SCR_ERROR = 1, SCR_CONTROL = 2, SCR_ACTIVE = 3, SCR_NOTIFICATION = 4, |
9be1e979f [PATCH] libata-eh... |
399 400 401 402 403 404 405 406 |
/* SError bits */ SERR_DATA_RECOVERED = (1 << 0), /* recovered data error */ SERR_COMM_RECOVERED = (1 << 1), /* recovered comm failure */ SERR_DATA = (1 << 8), /* unrecovered data error */ SERR_PERSISTENT = (1 << 9), /* persistent data/comm error */ SERR_PROTOCOL = (1 << 10), /* protocol violation */ SERR_INTERNAL = (1 << 11), /* host internal error */ SERR_PHYRDY_CHG = (1 << 16), /* PHY RDY changed */ |
1333e1943 libata: add human... |
407 408 409 410 411 412 413 414 415 |
SERR_PHY_INT_ERR = (1 << 17), /* PHY internal error */ SERR_COMM_WAKE = (1 << 18), /* Comm wake */ SERR_10B_8B_ERR = (1 << 19), /* 10b to 8b decode error */ SERR_DISPARITY = (1 << 20), /* Disparity */ SERR_CRC = (1 << 21), /* CRC error */ SERR_HANDSHAKE = (1 << 22), /* Handshake error */ SERR_LINK_SEQ_ERR = (1 << 23), /* Link sequence error */ SERR_TRANS_ST_ERROR = (1 << 24), /* Transport state trans. error */ SERR_UNRECOG_FIS = (1 << 25), /* Unrecognized FIS */ |
9be1e979f [PATCH] libata-eh... |
416 |
SERR_DEV_XCHG = (1 << 26), /* device exchanged */ |
1da177e4c Linux-2.6.12-rc2 |
417 418 419 420 421 |
/* struct ata_taskfile flags */ ATA_TFLAG_LBA48 = (1 << 0), /* enable 48-bit LBA and "HOB" */ ATA_TFLAG_ISADDR = (1 << 1), /* enable r/w to nsect/lba regs */ ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */ ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */ |
8bf62ecee [libata] C/H/S su... |
422 |
ATA_TFLAG_LBA = (1 << 4), /* enable LBA */ |
9a3dccc42 [BLOCK] add FUA s... |
423 |
ATA_TFLAG_FUA = (1 << 5), /* enable FUA */ |
ea9b395fe Merge branch 'ups... |
424 |
ATA_TFLAG_POLLING = (1 << 6), /* set nIEN to 1 and use polling */ |
405e66b38 libata: implement... |
425 426 427 428 429 430 431 |
/* protocol flags */ ATA_PROT_FLAG_PIO = (1 << 0), /* is PIO */ ATA_PROT_FLAG_DMA = (1 << 1), /* is DMA */ ATA_PROT_FLAG_DATA = ATA_PROT_FLAG_PIO | ATA_PROT_FLAG_DMA, ATA_PROT_FLAG_NCQ = (1 << 2), /* is NCQ */ ATA_PROT_FLAG_ATAPI = (1 << 3), /* is ATAPI */ |
1da177e4c Linux-2.6.12-rc2 |
432 433 434 435 436 437 |
}; enum ata_tf_protocols { /* ATA taskfile protocols */ ATA_PROT_UNKNOWN, /* unknown/invalid */ ATA_PROT_NODATA, /* no data */ |
1dce589c3 libata passthru: ... |
438 |
ATA_PROT_PIO, /* PIO data xfer */ |
1da177e4c Linux-2.6.12-rc2 |
439 |
ATA_PROT_DMA, /* DMA */ |
88e490340 [PATCH] libata-nc... |
440 |
ATA_PROT_NCQ, /* NCQ */ |
0dc36888d libata: rename AT... |
441 442 443 |
ATAPI_PROT_NODATA, /* packet command, no data */ ATAPI_PROT_PIO, /* packet command, PIO data xfer*/ ATAPI_PROT_DMA, /* packet command with special DMA sauce */ |
1da177e4c Linux-2.6.12-rc2 |
444 445 446 447 448 449 450 451 |
}; enum ata_ioctls { ATA_IOC_GET_IO32 = 0x309, ATA_IOC_SET_IO32 = 0x324, }; /* core structures */ |
f60d70113 libata-sff: prd i... |
452 |
struct ata_bmdma_prd { |
4ca4e4396 libata annotation... |
453 454 |
__le32 addr; __le32 flags_len; |
1da177e4c Linux-2.6.12-rc2 |
455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 |
}; struct ata_taskfile { unsigned long flags; /* ATA_TFLAG_xxx */ u8 protocol; /* ATA_PROT_xxx */ u8 ctl; /* control reg */ u8 hob_feature; /* additional data */ u8 hob_nsect; /* to support LBA48 */ u8 hob_lbal; u8 hob_lbam; u8 hob_lbah; u8 feature; u8 nsect; u8 lbal; u8 lbam; u8 lbah; u8 device; u8 command; /* IO operation */ }; |
405e66b38 libata: implement... |
479 480 481 482 483 484 485 486 487 488 489 490 491 492 |
/* * protocol tests */ static inline unsigned int ata_prot_flags(u8 prot) { switch (prot) { case ATA_PROT_NODATA: return 0; case ATA_PROT_PIO: return ATA_PROT_FLAG_PIO; case ATA_PROT_DMA: return ATA_PROT_FLAG_DMA; case ATA_PROT_NCQ: return ATA_PROT_FLAG_DMA | ATA_PROT_FLAG_NCQ; |
0dc36888d libata: rename AT... |
493 |
case ATAPI_PROT_NODATA: |
405e66b38 libata: implement... |
494 |
return ATA_PROT_FLAG_ATAPI; |
0dc36888d libata: rename AT... |
495 |
case ATAPI_PROT_PIO: |
405e66b38 libata: implement... |
496 |
return ATA_PROT_FLAG_ATAPI | ATA_PROT_FLAG_PIO; |
0dc36888d libata: rename AT... |
497 |
case ATAPI_PROT_DMA: |
405e66b38 libata: implement... |
498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 |
return ATA_PROT_FLAG_ATAPI | ATA_PROT_FLAG_DMA; } return 0; } static inline int ata_is_atapi(u8 prot) { return ata_prot_flags(prot) & ATA_PROT_FLAG_ATAPI; } static inline int ata_is_nodata(u8 prot) { return !(ata_prot_flags(prot) & ATA_PROT_FLAG_DATA); } static inline int ata_is_pio(u8 prot) { return ata_prot_flags(prot) & ATA_PROT_FLAG_PIO; } static inline int ata_is_dma(u8 prot) { return ata_prot_flags(prot) & ATA_PROT_FLAG_DMA; } static inline int ata_is_ncq(u8 prot) { return ata_prot_flags(prot) & ATA_PROT_FLAG_NCQ; } static inline int ata_is_data(u8 prot) { return ata_prot_flags(prot) & ATA_PROT_FLAG_DATA; } /* * id tests */ |
37014c640 ata: add missing ... |
536 537 538 |
#define ata_id_is_ata(id) (((id)[ATA_ID_CONFIG] & (1 << 15)) == 0) #define ata_id_has_lba(id) ((id)[ATA_ID_CAPABILITY] & (1 << 9)) #define ata_id_has_dma(id) ((id)[ATA_ID_CAPABILITY] & (1 << 8)) |
88e490340 [PATCH] libata-nc... |
539 |
#define ata_id_has_ncq(id) ((id)[76] & (1 << 8)) |
37014c640 ata: add missing ... |
540 541 |
#define ata_id_queue_depth(id) (((id)[ATA_ID_QUEUE_DEPTH] & 0x1f) + 1) #define ata_id_removeable(id) ((id)[ATA_ID_CONFIG] & (1 << 7)) |
854c73a2f libata: misc upda... |
542 |
#define ata_id_has_atapi_AN(id) \ |
9f45cbd3f [libata] check fo... |
543 544 |
( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ ((id)[78] & (1 << 5)) ) |
388539f3f [libata] add DMA ... |
545 546 547 |
#define ata_id_has_fpdma_aa(id) \ ( (((id)[76] != 0x0000) && ((id)[76] != 0xffff)) && \ ((id)[78] & (1 << 2)) ) |
37014c640 ata: add missing ... |
548 549 |
#define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10)) #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11)) |
1da177e4c Linux-2.6.12-rc2 |
550 551 552 553 554 555 556 |
#define ata_id_u32(id,n) \ (((u32) (id)[(n) + 1] << 16) | ((u32) (id)[(n)])) #define ata_id_u64(id,n) \ ( ((u64) (id)[(n) + 3] << 48) | \ ((u64) (id)[(n) + 2] << 32) | \ ((u64) (id)[(n) + 1] << 16) | \ ((u64) (id)[(n) + 0]) ) |
37014c640 ata: add missing ... |
557 |
#define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20) |
312f7da28 [PATCH] libata: i... |
558 |
|
ca77329fb [libata] Link pow... |
559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 |
static inline bool ata_id_has_hipm(const u16 *id) { u16 val = id[76]; if (val == 0 || val == 0xffff) return false; return val & (1 << 9); } static inline bool ata_id_has_dipm(const u16 *id) { u16 val = id[78]; if (val == 0 || val == 0xffff) return false; return val & (1 << 3); } |
ae8d4ee7f libata: Disable A... |
578 |
|
4dce8ba94 libata: Use 'bool... |
579 |
static inline bool ata_id_has_fua(const u16 *id) |
c7293870a libata: Strict ch... |
580 |
{ |
37014c640 ata: add missing ... |
581 |
if ((id[ATA_ID_CFSSE] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
582 |
return false; |
37014c640 ata: add missing ... |
583 |
return id[ATA_ID_CFSSE] & (1 << 6); |
c7293870a libata: Strict ch... |
584 |
} |
4dce8ba94 libata: Use 'bool... |
585 |
static inline bool ata_id_has_flush(const u16 *id) |
c7293870a libata: Strict ch... |
586 |
{ |
37014c640 ata: add missing ... |
587 |
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
588 |
return false; |
37014c640 ata: add missing ... |
589 |
return id[ATA_ID_COMMAND_SET_2] & (1 << 12); |
c7293870a libata: Strict ch... |
590 |
} |
4dce8ba94 libata: Use 'bool... |
591 |
static inline bool ata_id_flush_enabled(const u16 *id) |
4b58f17d7 ide: ide_id_has_f... |
592 593 |
{ if (ata_id_has_flush(id) == 0) |
4dce8ba94 libata: Use 'bool... |
594 |
return false; |
4b58f17d7 ide: ide_id_has_f... |
595 |
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
596 |
return false; |
4b58f17d7 ide: ide_id_has_f... |
597 598 |
return id[ATA_ID_CFS_ENABLE_2] & (1 << 12); } |
4dce8ba94 libata: Use 'bool... |
599 |
static inline bool ata_id_has_flush_ext(const u16 *id) |
c7293870a libata: Strict ch... |
600 |
{ |
37014c640 ata: add missing ... |
601 |
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
602 |
return false; |
37014c640 ata: add missing ... |
603 |
return id[ATA_ID_COMMAND_SET_2] & (1 << 13); |
c7293870a libata: Strict ch... |
604 |
} |
4dce8ba94 libata: Use 'bool... |
605 |
static inline bool ata_id_flush_ext_enabled(const u16 *id) |
ff2779b56 ide: ide_id_has_f... |
606 607 |
{ if (ata_id_has_flush_ext(id) == 0) |
4dce8ba94 libata: Use 'bool... |
608 |
return false; |
ff2779b56 ide: ide_id_has_f... |
609 |
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
610 |
return false; |
ff2779b56 ide: ide_id_has_f... |
611 612 613 614 615 616 |
/* * some Maxtor disks have bit 13 defined incorrectly * so check bit 10 too */ return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400; } |
295124dce [libata] support ... |
617 |
static inline u32 ata_id_logical_sector_size(const u16 *id) |
18f0f9785 libata: add trans... |
618 |
{ |
295124dce [libata] support ... |
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 |
/* T13/1699-D Revision 6a, Sep 6, 2008. Page 128. * IDENTIFY DEVICE data, word 117-118. * 0xd000 ignores bit 13 (logical:physical > 1) */ if ((id[ATA_ID_SECTOR_SIZE] & 0xd000) == 0x5000) return (((id[ATA_ID_LOGICAL_SECTOR_SIZE+1] << 16) + id[ATA_ID_LOGICAL_SECTOR_SIZE]) * sizeof(u16)) ; return ATA_SECT_SIZE; } static inline u8 ata_id_log2_per_physical_sector(const u16 *id) { /* T13/1699-D Revision 6a, Sep 6, 2008. Page 128. * IDENTIFY DEVICE data, word 106. * 0xe000 ignores bit 12 (logical sector > 512 bytes) */ if ((id[ATA_ID_SECTOR_SIZE] & 0xe000) == 0x6000) return (id[ATA_ID_SECTOR_SIZE] & 0xf); return 0; |
18f0f9785 libata: add trans... |
638 |
} |
295124dce [libata] support ... |
639 640 641 642 643 644 645 646 647 648 649 |
/* Offset of logical sectors relative to physical sectors. * * If device has more than one logical sector per physical sector * (aka 512 byte emulation), vendors might offset the "sector 0" address * so sector 63 is "naturally aligned" - e.g. FAT partition table. * This avoids Read/Mod/Write penalties when using FAT partition table * and updating "well aligned" (FS perspective) physical sectors on every * transaction. */ static inline u16 ata_id_logical_sector_offset(const u16 *id, u8 log2_per_phys) |
18f0f9785 libata: add trans... |
650 |
{ |
295124dce [libata] support ... |
651 652 653 654 655 656 657 658 |
u16 word_209 = id[209]; if ((log2_per_phys > 1) && (word_209 & 0xc000) == 0x4000) { u16 first = word_209 & 0x3fff; if (first > 0) return (1 << log2_per_phys) - first; } return 0; |
18f0f9785 libata: add trans... |
659 |
} |
4dce8ba94 libata: Use 'bool... |
660 |
static inline bool ata_id_has_lba48(const u16 *id) |
c7293870a libata: Strict ch... |
661 |
{ |
37014c640 ata: add missing ... |
662 |
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
663 |
return false; |
37014c640 ata: add missing ... |
664 |
if (!ata_id_u64(id, ATA_ID_LBA_CAPACITY_2)) |
4dce8ba94 libata: Use 'bool... |
665 |
return false; |
37014c640 ata: add missing ... |
666 |
return id[ATA_ID_COMMAND_SET_2] & (1 << 10); |
c7293870a libata: Strict ch... |
667 |
} |
4dce8ba94 libata: Use 'bool... |
668 |
static inline bool ata_id_lba48_enabled(const u16 *id) |
942dcd85b ide: idedisk_supp... |
669 670 |
{ if (ata_id_has_lba48(id) == 0) |
4dce8ba94 libata: Use 'bool... |
671 |
return false; |
942dcd85b ide: idedisk_supp... |
672 |
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
673 |
return false; |
942dcd85b ide: idedisk_supp... |
674 675 |
return id[ATA_ID_CFS_ENABLE_2] & (1 << 10); } |
4dce8ba94 libata: Use 'bool... |
676 |
static inline bool ata_id_hpa_enabled(const u16 *id) |
c7293870a libata: Strict ch... |
677 678 |
{ /* Yes children, word 83 valid bits cover word 82 data */ |
37014c640 ata: add missing ... |
679 |
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
680 |
return false; |
c7293870a libata: Strict ch... |
681 |
/* And 87 covers 85-87 */ |
37014c640 ata: add missing ... |
682 |
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
683 |
return false; |
c7293870a libata: Strict ch... |
684 |
/* Check command sets enabled as well as supported */ |
37014c640 ata: add missing ... |
685 |
if ((id[ATA_ID_CFS_ENABLE_1] & (1 << 10)) == 0) |
4dce8ba94 libata: Use 'bool... |
686 |
return false; |
37014c640 ata: add missing ... |
687 |
return id[ATA_ID_COMMAND_SET_1] & (1 << 10); |
c7293870a libata: Strict ch... |
688 |
} |
4dce8ba94 libata: Use 'bool... |
689 |
static inline bool ata_id_has_wcache(const u16 *id) |
c7293870a libata: Strict ch... |
690 691 |
{ /* Yes children, word 83 valid bits cover word 82 data */ |
37014c640 ata: add missing ... |
692 |
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
693 |
return false; |
37014c640 ata: add missing ... |
694 |
return id[ATA_ID_COMMAND_SET_1] & (1 << 5); |
c7293870a libata: Strict ch... |
695 |
} |
4dce8ba94 libata: Use 'bool... |
696 |
static inline bool ata_id_has_pm(const u16 *id) |
c7293870a libata: Strict ch... |
697 |
{ |
37014c640 ata: add missing ... |
698 |
if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
699 |
return false; |
37014c640 ata: add missing ... |
700 |
return id[ATA_ID_COMMAND_SET_1] & (1 << 3); |
c7293870a libata: Strict ch... |
701 |
} |
4dce8ba94 libata: Use 'bool... |
702 |
static inline bool ata_id_rahead_enabled(const u16 *id) |
c7293870a libata: Strict ch... |
703 |
{ |
37014c640 ata: add missing ... |
704 |
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
705 |
return false; |
37014c640 ata: add missing ... |
706 |
return id[ATA_ID_CFS_ENABLE_1] & (1 << 6); |
c7293870a libata: Strict ch... |
707 |
} |
4dce8ba94 libata: Use 'bool... |
708 |
static inline bool ata_id_wcache_enabled(const u16 *id) |
c7293870a libata: Strict ch... |
709 |
{ |
37014c640 ata: add missing ... |
710 |
if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
711 |
return false; |
37014c640 ata: add missing ... |
712 |
return id[ATA_ID_CFS_ENABLE_1] & (1 << 5); |
c7293870a libata: Strict ch... |
713 714 715 716 717 718 719 720 721 722 723 724 |
} /** * ata_id_major_version - get ATA level of drive * @id: Identify data * * Caveats: * ATA-1 considers identify optional * ATA-2 introduces mandatory identify * ATA-3 introduces word 80 and accurate reporting * * The practical impact of this is that ata_id_major_version cannot |
2dcb407e6 [libata] checkpat... |
725 |
* reliably report on drives below ATA3. |
c7293870a libata: Strict ch... |
726 |
*/ |
3d2ca9109 [PATCH] libata: s... |
727 728 729 |
static inline unsigned int ata_id_major_version(const u16 *id) { unsigned int mver; |
b352e57dc [PATCH] libata: A... |
730 731 |
if (id[ATA_ID_MAJOR_VER] == 0xFFFF) return 0; |
3d2ca9109 [PATCH] libata: s... |
732 733 734 735 736 |
for (mver = 14; mver >= 1; mver--) if (id[ATA_ID_MAJOR_VER] & (1 << mver)) break; return mver; } |
4dce8ba94 libata: Use 'bool... |
737 |
static inline bool ata_id_is_sata(const u16 *id) |
32d909115 libata: test majo... |
738 |
{ |
367d7e78d ide: ide_dev_is_s... |
739 740 741 742 743 744 745 |
/* * See if word 93 is 0 AND drive is at least ATA-5 compatible * verifying that word 80 by casting it to a signed type -- * this trick allows us to filter out the reserved values of * 0x0000 and 0xffff along with the earlier ATA revisions... */ if (id[ATA_ID_HW_CONFIG] == 0 && (short)id[ATA_ID_MAJOR_VER] >= 0x0020) |
4dce8ba94 libata: Use 'bool... |
746 747 |
return true; return false; |
32d909115 libata: test majo... |
748 |
} |
4dce8ba94 libata: Use 'bool... |
749 |
static inline bool ata_id_has_tpm(const u16 *id) |
ae8d4ee7f libata: Disable A... |
750 751 752 |
{ /* The TPM bits are only valid on ATA8 */ if (ata_id_major_version(id) < 8) |
4dce8ba94 libata: Use 'bool... |
753 |
return false; |
ae8d4ee7f libata: Disable A... |
754 |
if ((id[48] & 0xC000) != 0x4000) |
4dce8ba94 libata: Use 'bool... |
755 |
return false; |
ae8d4ee7f libata: Disable A... |
756 757 |
return id[48] & (1 << 0); } |
4dce8ba94 libata: Use 'bool... |
758 |
static inline bool ata_id_has_dword_io(const u16 *id) |
ae8d4ee7f libata: Disable A... |
759 760 761 |
{ /* ATA 8 reuses this flag for "trusted" computing */ if (ata_id_major_version(id) > 7) |
4dce8ba94 libata: Use 'bool... |
762 763 |
return false; return id[ATA_ID_DWORD_IO] & (1 << 0); |
ae8d4ee7f libata: Disable A... |
764 |
} |
4dce8ba94 libata: Use 'bool... |
765 |
static inline bool ata_id_has_unload(const u16 *id) |
ea6ce53cd [libata] Introduc... |
766 767 768 769 |
{ if (ata_id_major_version(id) >= 7 && (id[ATA_ID_CFSSE] & 0xC000) == 0x4000 && id[ATA_ID_CFSSE] & (1 << 13)) |
4dce8ba94 libata: Use 'bool... |
770 771 |
return true; return false; |
ea6ce53cd [libata] Introduc... |
772 |
} |
6b3b9d73e libata: Include W... |
773 774 775 776 |
static inline bool ata_id_has_wwn(const u16 *id) { return (id[ATA_ID_CSF_DEFAULT] & 0xC100) == 0x4100; } |
4bca32864 libata: Media rot... |
777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 |
static inline int ata_id_form_factor(const u16 *id) { u16 val = id[168]; if (ata_id_major_version(id) < 7 || val == 0 || val == 0xffff) return 0; val &= 0xf; if (val > 5) return 0; return val; } static inline int ata_id_rotation_rate(const u16 *id) { u16 val = id[217]; if (ata_id_major_version(id) < 7 || val == 0 || val == 0xffff) return 0; if (val > 1 && val < 0x401) return 0; return val; } |
4dce8ba94 libata: Use 'bool... |
804 |
static inline bool ata_id_has_trim(const u16 *id) |
0c659b82d ata: Add TRIM inf... |
805 806 807 |
{ if (ata_id_major_version(id) >= 7 && (id[ATA_ID_DATA_SET_MGMT] & 1)) |
4dce8ba94 libata: Use 'bool... |
808 809 |
return true; return false; |
0c659b82d ata: Add TRIM inf... |
810 |
} |
4dce8ba94 libata: Use 'bool... |
811 |
static inline bool ata_id_has_zero_after_trim(const u16 *id) |
e78db4dfb libata: Report ze... |
812 813 814 815 |
{ /* DSM supported, deterministic read, and read zero after trim set */ if (ata_id_has_trim(id) && (id[ATA_ID_ADDITIONAL_SUPP] & 0x4020) == 0x4020) |
4dce8ba94 libata: Use 'bool... |
816 |
return true; |
e78db4dfb libata: Report ze... |
817 |
|
4dce8ba94 libata: Use 'bool... |
818 |
return false; |
e78db4dfb libata: Report ze... |
819 |
} |
4dce8ba94 libata: Use 'bool... |
820 |
static inline bool ata_id_current_chs_valid(const u16 *id) |
8bf62ecee [libata] C/H/S su... |
821 |
{ |
9bec2e385 [libata] Trim tra... |
822 823 |
/* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command has not been issued to the device then the values of |
37014c640 ata: add missing ... |
824 825 826 827 828 829 |
id[ATA_ID_CUR_CYLS] to id[ATA_ID_CUR_SECTORS] are vendor specific. */ return (id[ATA_ID_FIELD_VALID] & 1) && /* Current translation valid */ id[ATA_ID_CUR_CYLS] && /* cylinders in current translation */ id[ATA_ID_CUR_HEADS] && /* heads in current translation */ id[ATA_ID_CUR_HEADS] <= 16 && id[ATA_ID_CUR_SECTORS]; /* sectors in current translation */ |
8bf62ecee [libata] C/H/S su... |
830 |
} |
4dce8ba94 libata: Use 'bool... |
831 |
static inline bool ata_id_is_cfa(const u16 *id) |
b352e57dc [PATCH] libata: A... |
832 |
{ |
4b7d1c050 ata: Detect Delki... |
833 834 |
if ((id[ATA_ID_CONFIG] == 0x848A) || /* Traditional CF */ (id[ATA_ID_CONFIG] == 0x844A)) /* Delkin Devices CF */ |
4dce8ba94 libata: Use 'bool... |
835 |
return true; |
2999b58b7 ide/libata: fix a... |
836 837 838 839 840 841 842 843 |
/* * CF specs don't require specific value in the word 0 anymore and yet * they forbid to report the ATA version in the word 80 and require the * CFA feature set support to be indicated in the word 83 in this case. * Unfortunately, some cards only follow either of this requirements, * and while those that don't indicate CFA feature support need some * sort of quirk list, it seems impractical for the ones that do... */ |
4dce8ba94 libata: Use 'bool... |
844 |
return (id[ATA_ID_COMMAND_SET_2] & 0xC004) == 0x4004; |
b352e57dc [PATCH] libata: A... |
845 |
} |
4dce8ba94 libata: Use 'bool... |
846 |
static inline bool ata_id_is_ssd(const u16 *id) |
8bff7c6b0 libata: set queue... |
847 848 849 |
{ return id[ATA_ID_ROT_SPEED] == 0x01; } |
4dce8ba94 libata: Use 'bool... |
850 |
static inline bool ata_id_pio_need_iordy(const u16 *id, const u8 pio) |
6dae44f9a ata: add ata_id_p... |
851 852 853 |
{ /* CF spec. r4.1 Table 22 says no IORDY on PIO5 and PIO6. */ if (pio > 4 && ata_id_is_cfa(id)) |
4dce8ba94 libata: Use 'bool... |
854 |
return false; |
6dae44f9a ata: add ata_id_p... |
855 856 |
/* For PIO3 and higher it is mandatory. */ if (pio > 2) |
4dce8ba94 libata: Use 'bool... |
857 |
return true; |
6dae44f9a ata: add ata_id_p... |
858 |
/* Turn it on when possible. */ |
4dce8ba94 libata: Use 'bool... |
859 |
return ata_id_has_iordy(id); |
6dae44f9a ata: add ata_id_p... |
860 |
} |
4dce8ba94 libata: Use 'bool... |
861 |
static inline bool ata_drive_40wire(const u16 *dev_id) |
fc085150b [PATCH] libata: a... |
862 |
{ |
32d909115 libata: test majo... |
863 |
if (ata_id_is_sata(dev_id)) |
4dce8ba94 libata: Use 'bool... |
864 |
return false; /* SATA */ |
37014c640 ata: add missing ... |
865 |
if ((dev_id[ATA_ID_HW_CONFIG] & 0xE000) == 0x6000) |
4dce8ba94 libata: Use 'bool... |
866 867 |
return false; /* 80 wire */ return true; |
fc085150b [PATCH] libata: a... |
868 |
} |
4dce8ba94 libata: Use 'bool... |
869 |
static inline bool ata_drive_40wire_relaxed(const u16 *dev_id) |
6bbfd53d4 libata: handle br... |
870 |
{ |
37014c640 ata: add missing ... |
871 |
if ((dev_id[ATA_ID_HW_CONFIG] & 0x2000) == 0x2000) |
4dce8ba94 libata: Use 'bool... |
872 873 |
return false; /* 80 wire */ return true; |
6bbfd53d4 libata: handle br... |
874 |
} |
057ace5e7 libata: const-ifi... |
875 |
static inline int atapi_cdb_len(const u16 *dev_id) |
1da177e4c Linux-2.6.12-rc2 |
876 |
{ |
37014c640 ata: add missing ... |
877 |
u16 tmp = dev_id[ATA_ID_CONFIG] & 0x3; |
1da177e4c Linux-2.6.12-rc2 |
878 879 880 881 882 883 |
switch (tmp) { case 0: return 12; case 1: return 16; default: return -1; } } |
4dce8ba94 libata: Use 'bool... |
884 |
static inline bool atapi_command_packet_set(const u16 *dev_id) |
f8d8e5799 libata: increase ... |
885 |
{ |
37014c640 ata: add missing ... |
886 |
return (dev_id[ATA_ID_CONFIG] >> 8) & 0x1f; |
f8d8e5799 libata: increase ... |
887 |
} |
4dce8ba94 libata: Use 'bool... |
888 |
static inline bool atapi_id_dmadir(const u16 *dev_id) |
911630063 libata: automatic... |
889 890 891 |
{ return ata_id_major_version(dev_id) >= 7 && (dev_id[62] & 0x8000); } |
a02227c97 ide: lba_capacity... |
892 893 894 895 896 897 898 899 |
/* * ata_id_is_lba_capacity_ok() performs a sanity check on * the claimed LBA capacity value for the device. * * Returns 1 if LBA capacity looks sensible, 0 otherwise. * * It is called only once for each device. */ |
4dce8ba94 libata: Use 'bool... |
900 |
static inline bool ata_id_is_lba_capacity_ok(u16 *id) |
a02227c97 ide: lba_capacity... |
901 902 903 904 905 |
{ unsigned long lba_sects, chs_sects, head, tail; /* No non-LBA info .. so valid! */ if (id[ATA_ID_CYLS] == 0) |
4dce8ba94 libata: Use 'bool... |
906 |
return true; |
a02227c97 ide: lba_capacity... |
907 908 909 910 911 912 913 914 915 916 917 918 919 920 |
lba_sects = ata_id_u32(id, ATA_ID_LBA_CAPACITY); /* * The ATA spec tells large drives to return * C/H/S = 16383/16/63 independent of their size. * Some drives can be jumpered to use 15 heads instead of 16. * Some drives can be jumpered to use 4092 cyls instead of 16383. */ if ((id[ATA_ID_CYLS] == 16383 || (id[ATA_ID_CYLS] == 4092 && id[ATA_ID_CUR_CYLS] == 16383)) && id[ATA_ID_SECTORS] == 63 && (id[ATA_ID_HEADS] == 15 || id[ATA_ID_HEADS] == 16) && (lba_sects >= 16383 * 63 * id[ATA_ID_HEADS])) |
4dce8ba94 libata: Use 'bool... |
921 |
return true; |
a02227c97 ide: lba_capacity... |
922 923 924 925 926 |
chs_sects = id[ATA_ID_CYLS] * id[ATA_ID_HEADS] * id[ATA_ID_SECTORS]; /* perform a rough sanity check on lba_sects: within 10% is OK */ if (lba_sects - chs_sects < chs_sects/10) |
4dce8ba94 libata: Use 'bool... |
927 |
return true; |
a02227c97 ide: lba_capacity... |
928 929 930 931 932 933 934 935 |
/* some drives have the word order reversed */ head = (lba_sects >> 16) & 0xffff; tail = lba_sects & 0xffff; lba_sects = head | (tail << 16); if (lba_sects - chs_sects < chs_sects/10) { *(__le32 *)&id[ATA_ID_LBA_CAPACITY] = __cpu_to_le32(lba_sects); |
4dce8ba94 libata: Use 'bool... |
936 |
return true; /* LBA capacity is (now) good */ |
a02227c97 ide: lba_capacity... |
937 |
} |
4dce8ba94 libata: Use 'bool... |
938 |
return false; /* LBA capacity value may be bad */ |
a02227c97 ide: lba_capacity... |
939 |
} |
93734a234 ide: ide_id_to_hd... |
940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 |
static inline void ata_id_to_hd_driveid(u16 *id) { #ifdef __BIG_ENDIAN /* accessed in struct hd_driveid as 8-bit values */ id[ATA_ID_MAX_MULTSECT] = __cpu_to_le16(id[ATA_ID_MAX_MULTSECT]); id[ATA_ID_CAPABILITY] = __cpu_to_le16(id[ATA_ID_CAPABILITY]); id[ATA_ID_OLD_PIO_MODES] = __cpu_to_le16(id[ATA_ID_OLD_PIO_MODES]); id[ATA_ID_OLD_DMA_MODES] = __cpu_to_le16(id[ATA_ID_OLD_DMA_MODES]); id[ATA_ID_MULTSECT] = __cpu_to_le16(id[ATA_ID_MULTSECT]); /* as 32-bit values */ *(u32 *)&id[ATA_ID_LBA_CAPACITY] = ata_id_u32(id, ATA_ID_LBA_CAPACITY); *(u32 *)&id[ATA_ID_SPG] = ata_id_u32(id, ATA_ID_SPG); /* as 64-bit value */ *(u64 *)&id[ATA_ID_LBA_CAPACITY_2] = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2); #endif } |
0c659b82d ata: Add TRIM inf... |
959 |
/* |
d0634c4ae libata: Clarify a... |
960 961 962 |
* Write LBA Range Entries to the buffer that will cover the extent from * sector to sector + count. This is used for TRIM and for ADD LBA(S) * TO NV CACHE PINNED SET. |
0c659b82d ata: Add TRIM inf... |
963 |
*/ |
d0634c4ae libata: Clarify a... |
964 965 |
static inline unsigned ata_set_lba_range_entries(void *_buffer, unsigned buf_size, u64 sector, unsigned long count) |
0c659b82d ata: Add TRIM inf... |
966 967 |
{ __le64 *buffer = _buffer; |
d0634c4ae libata: Clarify a... |
968 |
unsigned i = 0, used_bytes; |
0c659b82d ata: Add TRIM inf... |
969 |
|
d0634c4ae libata: Clarify a... |
970 |
while (i < buf_size / 8 ) { /* 6-byte LBA + 2-byte range per entry */ |
0c659b82d ata: Add TRIM inf... |
971 972 973 974 975 976 977 978 |
u64 entry = sector | ((u64)(count > 0xffff ? 0xffff : count) << 48); buffer[i++] = __cpu_to_le64(entry); if (count <= 0xffff) break; count -= 0xffff; sector += 0xffff; } |
d0634c4ae libata: Clarify a... |
979 980 981 |
used_bytes = ALIGN(i * 8, 512); memset(buffer + i, 0, used_bytes - i * 8); return used_bytes; |
0c659b82d ata: Add TRIM inf... |
982 |
} |
07f6f7d07 [PATCH] libata ir... |
983 984 985 986 987 |
static inline int is_multi_taskfile(struct ata_taskfile *tf) { return (tf->command == ATA_CMD_READ_MULTI) || (tf->command == ATA_CMD_WRITE_MULTI) || (tf->command == ATA_CMD_READ_MULTI_EXT) || |
c2956a3b0 [PATCH] libata-de... |
988 989 |
(tf->command == ATA_CMD_WRITE_MULTI_EXT) || (tf->command == ATA_CMD_WRITE_MULTI_FUA_EXT); |
07f6f7d07 [PATCH] libata ir... |
990 |
} |
4dce8ba94 libata: Use 'bool... |
991 |
static inline bool ata_ok(u8 status) |
1da177e4c Linux-2.6.12-rc2 |
992 993 994 995 |
{ return ((status & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ | ATA_ERR)) == ATA_DRDY); } |
4dce8ba94 libata: Use 'bool... |
996 |
static inline bool lba_28_ok(u64 block, u32 n_block) |
c6a33e246 [PATCH] libata CH... |
997 |
{ |
45c4d015a libata: Fix acces... |
998 999 |
/* check the ending block number: must be LESS THAN 0x0fffffff */ return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256); |
c6a33e246 [PATCH] libata CH... |
1000 |
} |
4dce8ba94 libata: Use 'bool... |
1001 |
static inline bool lba_48_ok(u64 block, u32 n_block) |
c6a33e246 [PATCH] libata CH... |
1002 1003 1004 1005 |
{ /* check the ending block number */ return ((block + n_block - 1) < ((u64)1 << 48)) && (n_block <= 65536); } |
814600ee1 libata-link: add ... |
1006 1007 1008 1009 |
#define sata_pmp_gscr_vendor(gscr) ((gscr)[SATA_PMP_GSCR_PROD_ID] & 0xffff) #define sata_pmp_gscr_devid(gscr) ((gscr)[SATA_PMP_GSCR_PROD_ID] >> 16) #define sata_pmp_gscr_rev(gscr) (((gscr)[SATA_PMP_GSCR_REV] >> 8) & 0xff) #define sata_pmp_gscr_ports(gscr) ((gscr)[SATA_PMP_GSCR_PORT_INFO] & 0xf) |
1da177e4c Linux-2.6.12-rc2 |
1010 |
#endif /* __LINUX_ATA_H__ */ |