Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ata.h
Go to the documentation of this file.
1 
2 /*
3  * Copyright 2003-2004 Red Hat, Inc. All rights reserved.
4  * Copyright 2003-2004 Jeff Garzik
5  *
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2, or (at your option)
10  * any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; see the file COPYING. If not, write to
19  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  *
22  * libata documentation is available via 'make {ps|pdf}docs',
23  * as Documentation/DocBook/libata.*
24  *
25  * Hardware documentation available from http://www.t13.org/
26  *
27  */
28 
29 #ifndef __LINUX_ATA_H__
30 #define __LINUX_ATA_H__
31 
32 #include <linux/kernel.h>
33 #include <linux/string.h>
34 #include <linux/types.h>
35 #include <asm/byteorder.h>
36 
37 /* defines only for the constants which don't work well as enums */
38 #define ATA_DMA_BOUNDARY 0xffffUL
39 #define ATA_DMA_MASK 0xffffffffULL
40 
41 enum {
42  /* various global constants */
43  ATA_MAX_DEVICES = 2, /* per bus/port */
44  ATA_MAX_PRD = 256, /* we could make these 256/256 */
48  ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */
50 
51  ATA_ID_WORDS = 256,
92  ATA_ID_SPG = 98,
95  ATA_ID_WWN = 108,
96  ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */
98  ATA_ID_DLF = 128,
99  ATA_ID_CSFO = 129,
105  ATA_ID_PIO4 = (1 << 1),
106 
111 
113 
114  ATA_PIO0 = (1 << 0),
115  ATA_PIO1 = ATA_PIO0 | (1 << 1),
116  ATA_PIO2 = ATA_PIO1 | (1 << 2),
117  ATA_PIO3 = ATA_PIO2 | (1 << 3),
118  ATA_PIO4 = ATA_PIO3 | (1 << 4),
119  ATA_PIO5 = ATA_PIO4 | (1 << 5),
120  ATA_PIO6 = ATA_PIO5 | (1 << 6),
121 
122  ATA_PIO4_ONLY = (1 << 4),
123 
124  ATA_SWDMA0 = (1 << 0),
125  ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1),
126  ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2),
127 
128  ATA_SWDMA2_ONLY = (1 << 2),
129 
130  ATA_MWDMA0 = (1 << 0),
131  ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1),
132  ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2),
133  ATA_MWDMA3 = ATA_MWDMA2 | (1 << 3),
134  ATA_MWDMA4 = ATA_MWDMA3 | (1 << 4),
135 
136  ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2),
137  ATA_MWDMA2_ONLY = (1 << 2),
138 
139  ATA_UDMA0 = (1 << 0),
140  ATA_UDMA1 = ATA_UDMA0 | (1 << 1),
141  ATA_UDMA2 = ATA_UDMA1 | (1 << 2),
142  ATA_UDMA3 = ATA_UDMA2 | (1 << 3),
143  ATA_UDMA4 = ATA_UDMA3 | (1 << 4),
144  ATA_UDMA5 = ATA_UDMA4 | (1 << 5),
145  ATA_UDMA6 = ATA_UDMA5 | (1 << 6),
146  ATA_UDMA7 = ATA_UDMA6 | (1 << 7),
147  /* ATA_UDMA7 is just for completeness... doesn't exist (yet?). */
148 
149  ATA_UDMA24_ONLY = (1 << 2) | (1 << 4),
150 
151  ATA_UDMA_MASK_40C = ATA_UDMA2, /* udma0-2 */
152 
153  /* DMA-related */
156  ATA_PRD_EOT = (1 << 31), /* end-of-table flag */
157 
161  ATA_DMA_WR = (1 << 3),
162  ATA_DMA_START = (1 << 0),
163  ATA_DMA_INTR = (1 << 2),
164  ATA_DMA_ERR = (1 << 1),
165  ATA_DMA_ACTIVE = (1 << 0),
166 
167  /* bits in ATA command block registers */
168  ATA_HOB = (1 << 7), /* LBA48 selector */
169  ATA_NIEN = (1 << 1), /* disable-irq flag */
170  ATA_LBA = (1 << 6), /* LBA28 selector */
171  ATA_DEV1 = (1 << 4), /* Select Device 1 (slave) */
172  ATA_DEVICE_OBS = (1 << 7) | (1 << 5), /* obs bits in dev reg */
173  ATA_DEVCTL_OBS = (1 << 3), /* obsolete bit in devctl reg */
174  ATA_BUSY = (1 << 7), /* BSY status bit */
175  ATA_DRDY = (1 << 6), /* device ready */
176  ATA_DF = (1 << 5), /* device fault */
177  ATA_DSC = (1 << 4), /* drive seek complete */
178  ATA_DRQ = (1 << 3), /* data request i/o */
179  ATA_CORR = (1 << 2), /* corrected data error */
180  ATA_IDX = (1 << 1), /* index */
181  ATA_ERR = (1 << 0), /* have an error */
182  ATA_SRST = (1 << 2), /* software reset */
183  ATA_ICRC = (1 << 7), /* interface CRC error */
184  ATA_BBK = ATA_ICRC, /* pre-EIDE: block marked bad */
185  ATA_UNC = (1 << 6), /* uncorrectable media error */
186  ATA_MC = (1 << 5), /* media changed */
187  ATA_IDNF = (1 << 4), /* ID not found */
188  ATA_MCR = (1 << 3), /* media change requested */
189  ATA_ABORTED = (1 << 2), /* command aborted */
190  ATA_TRK0NF = (1 << 1), /* track 0 not found */
191  ATA_AMNF = (1 << 0), /* address mark not found */
192  ATAPI_LFS = 0xF0, /* last failed sense */
193  ATAPI_EOM = ATA_TRK0NF, /* end of media */
194  ATAPI_ILI = ATA_AMNF, /* illegal length indication */
195  ATAPI_IO = (1 << 1),
196  ATAPI_COD = (1 << 0),
197 
198  /* ATA command block registers */
199  ATA_REG_DATA = 0x00,
200  ATA_REG_ERR = 0x01,
202  ATA_REG_LBAL = 0x03,
203  ATA_REG_LBAM = 0x04,
204  ATA_REG_LBAH = 0x05,
207 
208  ATA_REG_FEATURE = ATA_REG_ERR, /* and their aliases */
214 
215  /* ATA device commands */
216  ATA_CMD_DEV_RESET = 0x08, /* ATAPI device reset */
217  ATA_CMD_CHK_POWER = 0xE5, /* check power mode */
218  ATA_CMD_STANDBY = 0xE2, /* place in standby power mode */
219  ATA_CMD_IDLE = 0xE3, /* place in idle power mode */
220  ATA_CMD_EDD = 0x90, /* execute device diagnostic */
222  ATA_CMD_NOP = 0x00,
228  ATA_CMD_READ = 0xC8,
286  ATA_CMD_DSM = 0x06,
293  /* marked obsolete in the ATA/ATAPI-7 spec */
295 
296  /* READ_LOG_EXT pages */
305 
306  /* READ/WRITE LONG (obsolete) */
311 
312  /* SETFEATURES stuff */
314  XFER_UDMA_7 = 0x47,
315  XFER_UDMA_6 = 0x46,
316  XFER_UDMA_5 = 0x45,
317  XFER_UDMA_4 = 0x44,
318  XFER_UDMA_3 = 0x43,
319  XFER_UDMA_2 = 0x42,
320  XFER_UDMA_1 = 0x41,
321  XFER_UDMA_0 = 0x40,
322  XFER_MW_DMA_4 = 0x24, /* CFA only */
323  XFER_MW_DMA_3 = 0x23, /* CFA only */
330  XFER_PIO_6 = 0x0E, /* CFA only */
331  XFER_PIO_5 = 0x0D, /* CFA only */
332  XFER_PIO_4 = 0x0C,
333  XFER_PIO_3 = 0x0B,
334  XFER_PIO_2 = 0x0A,
335  XFER_PIO_1 = 0x09,
336  XFER_PIO_0 = 0x08,
338 
339  SETFEATURES_WC_ON = 0x02, /* Enable write cache */
340  SETFEATURES_WC_OFF = 0x82, /* Disable write cache */
341 
342  /* Enable/Disable Automatic Acoustic Management */
345 
346  SETFEATURES_SPINUP = 0x07, /* Spin-up drive */
347 
348  SETFEATURES_SATA_ENABLE = 0x10, /* Enable use of SATA feature */
349  SETFEATURES_SATA_DISABLE = 0x90, /* Disable use of SATA feature */
350 
351  /* SETFEATURE Sector counts for SATA features */
352  SATA_FPDMA_OFFSET = 0x01, /* FPDMA non-zero buffer offsets */
353  SATA_FPDMA_AA = 0x02, /* FPDMA Setup FIS Auto-Activate */
354  SATA_DIPM = 0x03, /* Device Initiated Power Management */
355  SATA_FPDMA_IN_ORDER = 0x04, /* FPDMA in-order data delivery */
356  SATA_AN = 0x05, /* Asynchronous Notification */
357  SATA_SSP = 0x06, /* Software Settings Preservation */
358  SATA_DEVSLP = 0x09, /* Device Sleep */
359 
360  /* feature values for SET_MAX */
366 
367  /* feature values for DEVICE CONFIGURATION OVERLAY */
371  ATA_DCO_SET = 0xC3,
372 
373  /* feature values for SMART */
377 
378  /* feature values for Data Set Management */
379  ATA_DSM_TRIM = 0x01,
380 
381  /* password used in LBA Mid / LBA High for executing SMART commands */
384 
385  /* ATAPI stuff */
386  ATAPI_PKT_DMA = (1 << 0),
387  ATAPI_DMADIR = (1 << 2), /* ATAPI data dir:
388  0=to device, 1=to host */
390 
391  /* PMP stuff */
394 
403 
407 
408  SATA_PMP_FEAT_BIST = (1 << 0),
412 
413  /* cable types */
417  ATA_CBL_PATA40_SHORT = 3, /* 40 wire cable to high UDMA spec */
418  ATA_CBL_PATA_UNK = 4, /* don't know, maybe 80c? */
419  ATA_CBL_PATA_IGN = 5, /* don't know, ignore cable handling */
421 
422  /* SATA Status and Control Registers */
428 
429  /* SError bits */
430  SERR_DATA_RECOVERED = (1 << 0), /* recovered data error */
431  SERR_COMM_RECOVERED = (1 << 1), /* recovered comm failure */
432  SERR_DATA = (1 << 8), /* unrecovered data error */
433  SERR_PERSISTENT = (1 << 9), /* persistent data/comm error */
434  SERR_PROTOCOL = (1 << 10), /* protocol violation */
435  SERR_INTERNAL = (1 << 11), /* host internal error */
436  SERR_PHYRDY_CHG = (1 << 16), /* PHY RDY changed */
437  SERR_PHY_INT_ERR = (1 << 17), /* PHY internal error */
438  SERR_COMM_WAKE = (1 << 18), /* Comm wake */
439  SERR_10B_8B_ERR = (1 << 19), /* 10b to 8b decode error */
440  SERR_DISPARITY = (1 << 20), /* Disparity */
441  SERR_CRC = (1 << 21), /* CRC error */
442  SERR_HANDSHAKE = (1 << 22), /* Handshake error */
443  SERR_LINK_SEQ_ERR = (1 << 23), /* Link sequence error */
444  SERR_TRANS_ST_ERROR = (1 << 24), /* Transport state trans. error */
445  SERR_UNRECOG_FIS = (1 << 25), /* Unrecognized FIS */
446  SERR_DEV_XCHG = (1 << 26), /* device exchanged */
447 
448  /* struct ata_taskfile flags */
449  ATA_TFLAG_LBA48 = (1 << 0), /* enable 48-bit LBA and "HOB" */
450  ATA_TFLAG_ISADDR = (1 << 1), /* enable r/w to nsect/lba regs */
451  ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */
452  ATA_TFLAG_WRITE = (1 << 3), /* data dir: host->dev==1 (write) */
453  ATA_TFLAG_LBA = (1 << 4), /* enable LBA */
454  ATA_TFLAG_FUA = (1 << 5), /* enable FUA */
455  ATA_TFLAG_POLLING = (1 << 6), /* set nIEN to 1 and use polling */
456 
457  /* protocol flags */
458  ATA_PROT_FLAG_PIO = (1 << 0), /* is PIO */
459  ATA_PROT_FLAG_DMA = (1 << 1), /* is DMA */
461  ATA_PROT_FLAG_NCQ = (1 << 2), /* is NCQ */
462  ATA_PROT_FLAG_ATAPI = (1 << 3), /* is ATAPI */
463 };
464 
466  /* ATA taskfile protocols */
467  ATA_PROT_UNKNOWN, /* unknown/invalid */
468  ATA_PROT_NODATA, /* no data */
469  ATA_PROT_PIO, /* PIO data xfer */
470  ATA_PROT_DMA, /* DMA */
471  ATA_PROT_NCQ, /* NCQ */
472  ATAPI_PROT_NODATA, /* packet command, no data */
473  ATAPI_PROT_PIO, /* packet command, PIO data xfer*/
474  ATAPI_PROT_DMA, /* packet command with special DMA sauce */
475 };
476 
480 };
481 
482 /* core structures */
483 
487 };
488 
489 struct ata_taskfile {
490  unsigned long flags; /* ATA_TFLAG_xxx */
491  u8 protocol; /* ATA_PROT_xxx */
492 
493  u8 ctl; /* control reg */
494 
495  u8 hob_feature; /* additional data */
496  u8 hob_nsect; /* to support LBA48 */
500 
506 
508 
509  u8 command; /* IO operation */
510 };
511 
512 /*
513  * protocol tests
514  */
515 static inline unsigned int ata_prot_flags(u8 prot)
516 {
517  switch (prot) {
518  case ATA_PROT_NODATA:
519  return 0;
520  case ATA_PROT_PIO:
521  return ATA_PROT_FLAG_PIO;
522  case ATA_PROT_DMA:
523  return ATA_PROT_FLAG_DMA;
524  case ATA_PROT_NCQ:
526  case ATAPI_PROT_NODATA:
527  return ATA_PROT_FLAG_ATAPI;
528  case ATAPI_PROT_PIO:
530  case ATAPI_PROT_DMA:
532  }
533  return 0;
534 }
535 
536 static inline int ata_is_atapi(u8 prot)
537 {
538  return ata_prot_flags(prot) & ATA_PROT_FLAG_ATAPI;
539 }
540 
541 static inline int ata_is_nodata(u8 prot)
542 {
543  return !(ata_prot_flags(prot) & ATA_PROT_FLAG_DATA);
544 }
545 
546 static inline int ata_is_pio(u8 prot)
547 {
548  return ata_prot_flags(prot) & ATA_PROT_FLAG_PIO;
549 }
550 
551 static inline int ata_is_dma(u8 prot)
552 {
553  return ata_prot_flags(prot) & ATA_PROT_FLAG_DMA;
554 }
555 
556 static inline int ata_is_ncq(u8 prot)
557 {
558  return ata_prot_flags(prot) & ATA_PROT_FLAG_NCQ;
559 }
560 
561 static inline int ata_is_data(u8 prot)
562 {
563  return ata_prot_flags(prot) & ATA_PROT_FLAG_DATA;
564 }
565 
566 /*
567  * id tests
568  */
569 #define ata_id_is_ata(id) (((id)[ATA_ID_CONFIG] & (1 << 15)) == 0)
570 #define ata_id_has_lba(id) ((id)[ATA_ID_CAPABILITY] & (1 << 9))
571 #define ata_id_has_dma(id) ((id)[ATA_ID_CAPABILITY] & (1 << 8))
572 #define ata_id_has_ncq(id) ((id)[ATA_ID_SATA_CAPABILITY] & (1 << 8))
573 #define ata_id_queue_depth(id) (((id)[ATA_ID_QUEUE_DEPTH] & 0x1f) + 1)
574 #define ata_id_removeable(id) ((id)[ATA_ID_CONFIG] & (1 << 7))
575 #define ata_id_has_atapi_AN(id) \
576  ((((id)[ATA_ID_SATA_CAPABILITY] != 0x0000) && \
577  ((id)[ATA_ID_SATA_CAPABILITY] != 0xffff)) && \
578  ((id)[ATA_ID_FEATURE_SUPP] & (1 << 5)))
579 #define ata_id_has_fpdma_aa(id) \
580  ((((id)[ATA_ID_SATA_CAPABILITY] != 0x0000) && \
581  ((id)[ATA_ID_SATA_CAPABILITY] != 0xffff)) && \
582  ((id)[ATA_ID_FEATURE_SUPP] & (1 << 2)))
583 #define ata_id_iordy_disable(id) ((id)[ATA_ID_CAPABILITY] & (1 << 10))
584 #define ata_id_has_iordy(id) ((id)[ATA_ID_CAPABILITY] & (1 << 11))
585 #define ata_id_u32(id,n) \
586  (((u32) (id)[(n) + 1] << 16) | ((u32) (id)[(n)]))
587 #define ata_id_u64(id,n) \
588  ( ((u64) (id)[(n) + 3] << 48) | \
589  ((u64) (id)[(n) + 2] << 32) | \
590  ((u64) (id)[(n) + 1] << 16) | \
591  ((u64) (id)[(n) + 0]) )
592 
593 #define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20)
594 #define ata_id_has_da(id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4))
595 #define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8))
596 
597 static inline bool ata_id_has_hipm(const u16 *id)
598 {
600 
601  if (val == 0 || val == 0xffff)
602  return false;
603 
604  return val & (1 << 9);
605 }
606 
607 static inline bool ata_id_has_dipm(const u16 *id)
608 {
610 
611  if (val == 0 || val == 0xffff)
612  return false;
613 
614  return val & (1 << 3);
615 }
616 
617 
618 static inline bool ata_id_has_fua(const u16 *id)
619 {
620  if ((id[ATA_ID_CFSSE] & 0xC000) != 0x4000)
621  return false;
622  return id[ATA_ID_CFSSE] & (1 << 6);
623 }
624 
625 static inline bool ata_id_has_flush(const u16 *id)
626 {
627  if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
628  return false;
629  return id[ATA_ID_COMMAND_SET_2] & (1 << 12);
630 }
631 
632 static inline bool ata_id_flush_enabled(const u16 *id)
633 {
634  if (ata_id_has_flush(id) == 0)
635  return false;
636  if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
637  return false;
638  return id[ATA_ID_CFS_ENABLE_2] & (1 << 12);
639 }
640 
641 static inline bool ata_id_has_flush_ext(const u16 *id)
642 {
643  if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
644  return false;
645  return id[ATA_ID_COMMAND_SET_2] & (1 << 13);
646 }
647 
648 static inline bool ata_id_flush_ext_enabled(const u16 *id)
649 {
650  if (ata_id_has_flush_ext(id) == 0)
651  return false;
652  if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
653  return false;
654  /*
655  * some Maxtor disks have bit 13 defined incorrectly
656  * so check bit 10 too
657  */
658  return (id[ATA_ID_CFS_ENABLE_2] & 0x2400) == 0x2400;
659 }
660 
661 static inline u32 ata_id_logical_sector_size(const u16 *id)
662 {
663  /* T13/1699-D Revision 6a, Sep 6, 2008. Page 128.
664  * IDENTIFY DEVICE data, word 117-118.
665  * 0xd000 ignores bit 13 (logical:physical > 1)
666  */
667  if ((id[ATA_ID_SECTOR_SIZE] & 0xd000) == 0x5000)
668  return (((id[ATA_ID_LOGICAL_SECTOR_SIZE+1] << 16)
669  + id[ATA_ID_LOGICAL_SECTOR_SIZE]) * sizeof(u16)) ;
670  return ATA_SECT_SIZE;
671 }
672 
673 static inline u8 ata_id_log2_per_physical_sector(const u16 *id)
674 {
675  /* T13/1699-D Revision 6a, Sep 6, 2008. Page 128.
676  * IDENTIFY DEVICE data, word 106.
677  * 0xe000 ignores bit 12 (logical sector > 512 bytes)
678  */
679  if ((id[ATA_ID_SECTOR_SIZE] & 0xe000) == 0x6000)
680  return (id[ATA_ID_SECTOR_SIZE] & 0xf);
681  return 0;
682 }
683 
684 /* Offset of logical sectors relative to physical sectors.
685  *
686  * If device has more than one logical sector per physical sector
687  * (aka 512 byte emulation), vendors might offset the "sector 0" address
688  * so sector 63 is "naturally aligned" - e.g. FAT partition table.
689  * This avoids Read/Mod/Write penalties when using FAT partition table
690  * and updating "well aligned" (FS perspective) physical sectors on every
691  * transaction.
692  */
693 static inline u16 ata_id_logical_sector_offset(const u16 *id,
694  u8 log2_per_phys)
695 {
696  u16 word_209 = id[209];
697 
698  if ((log2_per_phys > 1) && (word_209 & 0xc000) == 0x4000) {
699  u16 first = word_209 & 0x3fff;
700  if (first > 0)
701  return (1 << log2_per_phys) - first;
702  }
703  return 0;
704 }
705 
706 static inline bool ata_id_has_lba48(const u16 *id)
707 {
708  if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
709  return false;
711  return false;
712  return id[ATA_ID_COMMAND_SET_2] & (1 << 10);
713 }
714 
715 static inline bool ata_id_lba48_enabled(const u16 *id)
716 {
717  if (ata_id_has_lba48(id) == 0)
718  return false;
719  if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
720  return false;
721  return id[ATA_ID_CFS_ENABLE_2] & (1 << 10);
722 }
723 
724 static inline bool ata_id_hpa_enabled(const u16 *id)
725 {
726  /* Yes children, word 83 valid bits cover word 82 data */
727  if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
728  return false;
729  /* And 87 covers 85-87 */
730  if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
731  return false;
732  /* Check command sets enabled as well as supported */
733  if ((id[ATA_ID_CFS_ENABLE_1] & (1 << 10)) == 0)
734  return false;
735  return id[ATA_ID_COMMAND_SET_1] & (1 << 10);
736 }
737 
738 static inline bool ata_id_has_wcache(const u16 *id)
739 {
740  /* Yes children, word 83 valid bits cover word 82 data */
741  if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
742  return false;
743  return id[ATA_ID_COMMAND_SET_1] & (1 << 5);
744 }
745 
746 static inline bool ata_id_has_pm(const u16 *id)
747 {
748  if ((id[ATA_ID_COMMAND_SET_2] & 0xC000) != 0x4000)
749  return false;
750  return id[ATA_ID_COMMAND_SET_1] & (1 << 3);
751 }
752 
753 static inline bool ata_id_rahead_enabled(const u16 *id)
754 {
755  if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
756  return false;
757  return id[ATA_ID_CFS_ENABLE_1] & (1 << 6);
758 }
759 
760 static inline bool ata_id_wcache_enabled(const u16 *id)
761 {
762  if ((id[ATA_ID_CSF_DEFAULT] & 0xC000) != 0x4000)
763  return false;
764  return id[ATA_ID_CFS_ENABLE_1] & (1 << 5);
765 }
766 
780 static inline unsigned int ata_id_major_version(const u16 *id)
781 {
782  unsigned int mver;
783 
784  if (id[ATA_ID_MAJOR_VER] == 0xFFFF)
785  return 0;
786 
787  for (mver = 14; mver >= 1; mver--)
788  if (id[ATA_ID_MAJOR_VER] & (1 << mver))
789  break;
790  return mver;
791 }
792 
793 static inline bool ata_id_is_sata(const u16 *id)
794 {
795  /*
796  * See if word 93 is 0 AND drive is at least ATA-5 compatible
797  * verifying that word 80 by casting it to a signed type --
798  * this trick allows us to filter out the reserved values of
799  * 0x0000 and 0xffff along with the earlier ATA revisions...
800  */
801  if (id[ATA_ID_HW_CONFIG] == 0 && (short)id[ATA_ID_MAJOR_VER] >= 0x0020)
802  return true;
803  return false;
804 }
805 
806 static inline bool ata_id_has_tpm(const u16 *id)
807 {
808  /* The TPM bits are only valid on ATA8 */
809  if (ata_id_major_version(id) < 8)
810  return false;
811  if ((id[48] & 0xC000) != 0x4000)
812  return false;
813  return id[48] & (1 << 0);
814 }
815 
816 static inline bool ata_id_has_dword_io(const u16 *id)
817 {
818  /* ATA 8 reuses this flag for "trusted" computing */
819  if (ata_id_major_version(id) > 7)
820  return false;
821  return id[ATA_ID_DWORD_IO] & (1 << 0);
822 }
823 
824 static inline bool ata_id_has_unload(const u16 *id)
825 {
826  if (ata_id_major_version(id) >= 7 &&
827  (id[ATA_ID_CFSSE] & 0xC000) == 0x4000 &&
828  id[ATA_ID_CFSSE] & (1 << 13))
829  return true;
830  return false;
831 }
832 
833 static inline bool ata_id_has_wwn(const u16 *id)
834 {
835  return (id[ATA_ID_CSF_DEFAULT] & 0xC100) == 0x4100;
836 }
837 
838 static inline int ata_id_form_factor(const u16 *id)
839 {
840  u16 val = id[168];
841 
842  if (ata_id_major_version(id) < 7 || val == 0 || val == 0xffff)
843  return 0;
844 
845  val &= 0xf;
846 
847  if (val > 5)
848  return 0;
849 
850  return val;
851 }
852 
853 static inline int ata_id_rotation_rate(const u16 *id)
854 {
855  u16 val = id[217];
856 
857  if (ata_id_major_version(id) < 7 || val == 0 || val == 0xffff)
858  return 0;
859 
860  if (val > 1 && val < 0x401)
861  return 0;
862 
863  return val;
864 }
865 
866 static inline bool ata_id_has_trim(const u16 *id)
867 {
868  if (ata_id_major_version(id) >= 7 &&
869  (id[ATA_ID_DATA_SET_MGMT] & 1))
870  return true;
871  return false;
872 }
873 
874 static inline bool ata_id_has_zero_after_trim(const u16 *id)
875 {
876  /* DSM supported, deterministic read, and read zero after trim set */
877  if (ata_id_has_trim(id) &&
878  (id[ATA_ID_ADDITIONAL_SUPP] & 0x4020) == 0x4020)
879  return true;
880 
881  return false;
882 }
883 
884 static inline bool ata_id_current_chs_valid(const u16 *id)
885 {
886  /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command
887  has not been issued to the device then the values of
888  id[ATA_ID_CUR_CYLS] to id[ATA_ID_CUR_SECTORS] are vendor specific. */
889  return (id[ATA_ID_FIELD_VALID] & 1) && /* Current translation valid */
890  id[ATA_ID_CUR_CYLS] && /* cylinders in current translation */
891  id[ATA_ID_CUR_HEADS] && /* heads in current translation */
892  id[ATA_ID_CUR_HEADS] <= 16 &&
893  id[ATA_ID_CUR_SECTORS]; /* sectors in current translation */
894 }
895 
896 static inline bool ata_id_is_cfa(const u16 *id)
897 {
898  if ((id[ATA_ID_CONFIG] == 0x848A) || /* Traditional CF */
899  (id[ATA_ID_CONFIG] == 0x844A)) /* Delkin Devices CF */
900  return true;
901  /*
902  * CF specs don't require specific value in the word 0 anymore and yet
903  * they forbid to report the ATA version in the word 80 and require the
904  * CFA feature set support to be indicated in the word 83 in this case.
905  * Unfortunately, some cards only follow either of this requirements,
906  * and while those that don't indicate CFA feature support need some
907  * sort of quirk list, it seems impractical for the ones that do...
908  */
909  return (id[ATA_ID_COMMAND_SET_2] & 0xC004) == 0x4004;
910 }
911 
912 static inline bool ata_id_is_ssd(const u16 *id)
913 {
914  return id[ATA_ID_ROT_SPEED] == 0x01;
915 }
916 
917 static inline bool ata_id_pio_need_iordy(const u16 *id, const u8 pio)
918 {
919  /* CF spec. r4.1 Table 22 says no IORDY on PIO5 and PIO6. */
920  if (pio > 4 && ata_id_is_cfa(id))
921  return false;
922  /* For PIO3 and higher it is mandatory. */
923  if (pio > 2)
924  return true;
925  /* Turn it on when possible. */
926  return ata_id_has_iordy(id);
927 }
928 
929 static inline bool ata_drive_40wire(const u16 *dev_id)
930 {
931  if (ata_id_is_sata(dev_id))
932  return false; /* SATA */
933  if ((dev_id[ATA_ID_HW_CONFIG] & 0xE000) == 0x6000)
934  return false; /* 80 wire */
935  return true;
936 }
937 
938 static inline bool ata_drive_40wire_relaxed(const u16 *dev_id)
939 {
940  if ((dev_id[ATA_ID_HW_CONFIG] & 0x2000) == 0x2000)
941  return false; /* 80 wire */
942  return true;
943 }
944 
945 static inline int atapi_cdb_len(const u16 *dev_id)
946 {
947  u16 tmp = dev_id[ATA_ID_CONFIG] & 0x3;
948  switch (tmp) {
949  case 0: return 12;
950  case 1: return 16;
951  default: return -1;
952  }
953 }
954 
955 static inline bool atapi_command_packet_set(const u16 *dev_id)
956 {
957  return (dev_id[ATA_ID_CONFIG] >> 8) & 0x1f;
958 }
959 
960 static inline bool atapi_id_dmadir(const u16 *dev_id)
961 {
962  return ata_id_major_version(dev_id) >= 7 && (dev_id[62] & 0x8000);
963 }
964 
965 /*
966  * ata_id_is_lba_capacity_ok() performs a sanity check on
967  * the claimed LBA capacity value for the device.
968  *
969  * Returns 1 if LBA capacity looks sensible, 0 otherwise.
970  *
971  * It is called only once for each device.
972  */
973 static inline bool ata_id_is_lba_capacity_ok(u16 *id)
974 {
975  unsigned long lba_sects, chs_sects, head, tail;
976 
977  /* No non-LBA info .. so valid! */
978  if (id[ATA_ID_CYLS] == 0)
979  return true;
980 
981  lba_sects = ata_id_u32(id, ATA_ID_LBA_CAPACITY);
982 
983  /*
984  * The ATA spec tells large drives to return
985  * C/H/S = 16383/16/63 independent of their size.
986  * Some drives can be jumpered to use 15 heads instead of 16.
987  * Some drives can be jumpered to use 4092 cyls instead of 16383.
988  */
989  if ((id[ATA_ID_CYLS] == 16383 ||
990  (id[ATA_ID_CYLS] == 4092 && id[ATA_ID_CUR_CYLS] == 16383)) &&
991  id[ATA_ID_SECTORS] == 63 &&
992  (id[ATA_ID_HEADS] == 15 || id[ATA_ID_HEADS] == 16) &&
993  (lba_sects >= 16383 * 63 * id[ATA_ID_HEADS]))
994  return true;
995 
996  chs_sects = id[ATA_ID_CYLS] * id[ATA_ID_HEADS] * id[ATA_ID_SECTORS];
997 
998  /* perform a rough sanity check on lba_sects: within 10% is OK */
999  if (lba_sects - chs_sects < chs_sects/10)
1000  return true;
1001 
1002  /* some drives have the word order reversed */
1003  head = (lba_sects >> 16) & 0xffff;
1004  tail = lba_sects & 0xffff;
1005  lba_sects = head | (tail << 16);
1006 
1007  if (lba_sects - chs_sects < chs_sects/10) {
1008  *(__le32 *)&id[ATA_ID_LBA_CAPACITY] = __cpu_to_le32(lba_sects);
1009  return true; /* LBA capacity is (now) good */
1010  }
1011 
1012  return false; /* LBA capacity value may be bad */
1013 }
1014 
1015 static inline void ata_id_to_hd_driveid(u16 *id)
1016 {
1017 #ifdef __BIG_ENDIAN
1018  /* accessed in struct hd_driveid as 8-bit values */
1024 
1025  /* as 32-bit values */
1027  *(u32 *)&id[ATA_ID_SPG] = ata_id_u32(id, ATA_ID_SPG);
1028 
1029  /* as 64-bit value */
1030  *(u64 *)&id[ATA_ID_LBA_CAPACITY_2] =
1032 #endif
1033 }
1034 
1035 /*
1036  * Write LBA Range Entries to the buffer that will cover the extent from
1037  * sector to sector + count. This is used for TRIM and for ADD LBA(S)
1038  * TO NV CACHE PINNED SET.
1039  */
1040 static inline unsigned ata_set_lba_range_entries(void *_buffer,
1041  unsigned buf_size, u64 sector, unsigned long count)
1042 {
1043  __le64 *buffer = _buffer;
1044  unsigned i = 0, used_bytes;
1045 
1046  while (i < buf_size / 8 ) { /* 6-byte LBA + 2-byte range per entry */
1047  u64 entry = sector |
1048  ((u64)(count > 0xffff ? 0xffff : count) << 48);
1049  buffer[i++] = __cpu_to_le64(entry);
1050  if (count <= 0xffff)
1051  break;
1052  count -= 0xffff;
1053  sector += 0xffff;
1054  }
1055 
1056  used_bytes = ALIGN(i * 8, 512);
1057  memset(buffer + i, 0, used_bytes - i * 8);
1058  return used_bytes;
1059 }
1060 
1061 static inline int is_multi_taskfile(struct ata_taskfile *tf)
1062 {
1063  return (tf->command == ATA_CMD_READ_MULTI) ||
1064  (tf->command == ATA_CMD_WRITE_MULTI) ||
1065  (tf->command == ATA_CMD_READ_MULTI_EXT) ||
1066  (tf->command == ATA_CMD_WRITE_MULTI_EXT) ||
1068 }
1069 
1070 static inline bool ata_ok(u8 status)
1071 {
1072  return ((status & (ATA_BUSY | ATA_DRDY | ATA_DF | ATA_DRQ | ATA_ERR))
1073  == ATA_DRDY);
1074 }
1075 
1076 static inline bool lba_28_ok(u64 block, u32 n_block)
1077 {
1078  /* check the ending block number: must be LESS THAN 0x0fffffff */
1079  return ((block + n_block) < ((1 << 28) - 1)) && (n_block <= 256);
1080 }
1081 
1082 static inline bool lba_48_ok(u64 block, u32 n_block)
1083 {
1084  /* check the ending block number */
1085  return ((block + n_block - 1) < ((u64)1 << 48)) && (n_block <= 65536);
1086 }
1087 
1088 #define sata_pmp_gscr_vendor(gscr) ((gscr)[SATA_PMP_GSCR_PROD_ID] & 0xffff)
1089 #define sata_pmp_gscr_devid(gscr) ((gscr)[SATA_PMP_GSCR_PROD_ID] >> 16)
1090 #define sata_pmp_gscr_rev(gscr) (((gscr)[SATA_PMP_GSCR_REV] >> 8) & 0xff)
1091 #define sata_pmp_gscr_ports(gscr) ((gscr)[SATA_PMP_GSCR_PORT_INFO] & 0xf)
1092 
1093 #endif /* __LINUX_ATA_H__ */