diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/libata.h | 92 |
1 files changed, 57 insertions, 35 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h index b0171e9accc4..cc6cc08e8010 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -120,10 +120,12 @@ enum { | |||
| 120 | ATA_SHT_USE_CLUSTERING = 1, | 120 | ATA_SHT_USE_CLUSTERING = 1, |
| 121 | 121 | ||
| 122 | /* struct ata_device stuff */ | 122 | /* struct ata_device stuff */ |
| 123 | ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */ | 123 | ATA_DFLAG_LBA = (1 << 0), /* device supports LBA */ |
| 124 | ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */ | 124 | ATA_DFLAG_LBA48 = (1 << 1), /* device supports LBA48 */ |
| 125 | ATA_DFLAG_LBA = (1 << 2), /* device supports LBA */ | 125 | ATA_DFLAG_CDB_INTR = (1 << 2), /* device asserts INTRQ when ready for CDB */ |
| 126 | ATA_DFLAG_CDB_INTR = (1 << 3), /* device asserts INTRQ when ready for CDB */ | 126 | ATA_DFLAG_CFG_MASK = (1 << 8) - 1, |
| 127 | |||
| 128 | ATA_DFLAG_PIO = (1 << 8), /* device currently in PIO mode */ | ||
| 127 | 129 | ||
| 128 | ATA_DEV_UNKNOWN = 0, /* unknown device */ | 130 | ATA_DEV_UNKNOWN = 0, /* unknown device */ |
| 129 | ATA_DEV_ATA = 1, /* ATA device */ | 131 | ATA_DEV_ATA = 1, /* ATA device */ |
| @@ -133,33 +135,35 @@ enum { | |||
| 133 | ATA_DEV_NONE = 5, /* no device */ | 135 | ATA_DEV_NONE = 5, /* no device */ |
| 134 | 136 | ||
| 135 | /* struct ata_port flags */ | 137 | /* struct ata_port flags */ |
| 136 | ATA_FLAG_SLAVE_POSS = (1 << 1), /* host supports slave dev */ | 138 | ATA_FLAG_SLAVE_POSS = (1 << 0), /* host supports slave dev */ |
| 137 | /* (doesn't imply presence) */ | 139 | /* (doesn't imply presence) */ |
| 138 | ATA_FLAG_PORT_DISABLED = (1 << 2), /* port is disabled, ignore it */ | 140 | ATA_FLAG_SATA = (1 << 1), |
| 139 | ATA_FLAG_SATA = (1 << 3), | 141 | ATA_FLAG_NO_LEGACY = (1 << 2), /* no legacy mode check */ |
| 140 | ATA_FLAG_NO_LEGACY = (1 << 4), /* no legacy mode check */ | 142 | ATA_FLAG_MMIO = (1 << 3), /* use MMIO, not PIO */ |
| 141 | ATA_FLAG_SRST = (1 << 5), /* (obsolete) use ATA SRST, not E.D.D. */ | 143 | ATA_FLAG_SRST = (1 << 4), /* (obsolete) use ATA SRST, not E.D.D. */ |
| 142 | ATA_FLAG_MMIO = (1 << 6), /* use MMIO, not PIO */ | 144 | ATA_FLAG_SATA_RESET = (1 << 5), /* (obsolete) use COMRESET */ |
| 143 | ATA_FLAG_SATA_RESET = (1 << 7), /* (obsolete) use COMRESET */ | 145 | ATA_FLAG_NO_ATAPI = (1 << 6), /* No ATAPI support */ |
| 144 | ATA_FLAG_PIO_DMA = (1 << 8), /* PIO cmds via DMA */ | 146 | ATA_FLAG_PIO_DMA = (1 << 7), /* PIO cmds via DMA */ |
| 145 | ATA_FLAG_PIO_POLLING = (1 << 9), /* use polling PIO if LLD | 147 | ATA_FLAG_PIO_LBA48 = (1 << 8), /* Host DMA engine is LBA28 only */ |
| 146 | * doesn't handle PIO interrupts */ | 148 | ATA_FLAG_IRQ_MASK = (1 << 9), /* Mask IRQ in PIO xfers */ |
| 147 | ATA_FLAG_DEBUGMSG = (1 << 10), | 149 | ATA_FLAG_PIO_POLLING = (1 << 10), /* use polling PIO if LLD |
| 148 | ATA_FLAG_NO_ATAPI = (1 << 11), /* No ATAPI support */ | 150 | * doesn't handle PIO interrupts */ |
| 149 | 151 | ||
| 150 | ATA_FLAG_SUSPENDED = (1 << 12), /* port is suspended */ | 152 | ATA_FLAG_DEBUGMSG = (1 << 17), |
| 151 | 153 | ATA_FLAG_FLUSH_PORT_TASK = (1 << 18), /* flush port task */ | |
| 152 | ATA_FLAG_PIO_LBA48 = (1 << 13), /* Host DMA engine is LBA28 only */ | 154 | |
| 153 | ATA_FLAG_IRQ_MASK = (1 << 14), /* Mask IRQ in PIO xfers */ | 155 | ATA_FLAG_DISABLED = (1 << 19), /* port is disabled, ignore it */ |
| 154 | 156 | ATA_FLAG_SUSPENDED = (1 << 20), /* port is suspended */ | |
| 155 | ATA_FLAG_FLUSH_PORT_TASK = (1 << 15), /* Flush port task */ | 157 | |
| 156 | ATA_FLAG_IN_EH = (1 << 16), /* EH in progress */ | 158 | /* bits 24:31 of ap->flags are reserved for LLDD specific flags */ |
| 157 | 159 | ||
| 158 | ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */ | 160 | /* struct ata_queued_cmd flags */ |
| 159 | ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */ | 161 | ATA_QCFLAG_ACTIVE = (1 << 0), /* cmd not yet ack'd to scsi lyer */ |
| 160 | ATA_QCFLAG_SINGLE = (1 << 4), /* no s/g, just a single buffer */ | 162 | ATA_QCFLAG_SG = (1 << 1), /* have s/g table? */ |
| 163 | ATA_QCFLAG_SINGLE = (1 << 2), /* no s/g, just a single buffer */ | ||
| 161 | ATA_QCFLAG_DMAMAP = ATA_QCFLAG_SG | ATA_QCFLAG_SINGLE, | 164 | ATA_QCFLAG_DMAMAP = ATA_QCFLAG_SG | ATA_QCFLAG_SINGLE, |
| 162 | ATA_QCFLAG_EH_SCHEDULED = (1 << 5), /* EH scheduled */ | 165 | ATA_QCFLAG_IO = (1 << 3), /* standard IO command */ |
| 166 | ATA_QCFLAG_EH_SCHEDULED = (1 << 4), /* EH scheduled */ | ||
| 163 | 167 | ||
| 164 | /* host set flags */ | 168 | /* host set flags */ |
| 165 | ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host_set only */ | 169 | ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host_set only */ |
| @@ -205,10 +209,13 @@ enum { | |||
| 205 | /* size of buffer to pad xfers ending on unaligned boundaries */ | 209 | /* size of buffer to pad xfers ending on unaligned boundaries */ |
| 206 | ATA_DMA_PAD_SZ = 4, | 210 | ATA_DMA_PAD_SZ = 4, |
| 207 | ATA_DMA_PAD_BUF_SZ = ATA_DMA_PAD_SZ * ATA_MAX_QUEUE, | 211 | ATA_DMA_PAD_BUF_SZ = ATA_DMA_PAD_SZ * ATA_MAX_QUEUE, |
| 208 | 212 | ||
| 209 | /* Masks for port functions */ | 213 | /* masks for port functions */ |
| 210 | ATA_PORT_PRIMARY = (1 << 0), | 214 | ATA_PORT_PRIMARY = (1 << 0), |
| 211 | ATA_PORT_SECONDARY = (1 << 1), | 215 | ATA_PORT_SECONDARY = (1 << 1), |
| 216 | |||
| 217 | /* how hard are we gonna try to probe/recover devices */ | ||
| 218 | ATA_PROBE_MAX_TRIES = 3, | ||
| 212 | }; | 219 | }; |
| 213 | 220 | ||
| 214 | enum hsm_task_states { | 221 | enum hsm_task_states { |
| @@ -394,6 +401,7 @@ struct ata_port { | |||
| 394 | unsigned int mwdma_mask; | 401 | unsigned int mwdma_mask; |
| 395 | unsigned int udma_mask; | 402 | unsigned int udma_mask; |
| 396 | unsigned int cbl; /* cable type; ATA_CBL_xxx */ | 403 | unsigned int cbl; /* cable type; ATA_CBL_xxx */ |
| 404 | unsigned int sata_spd_limit; /* SATA PHY speed limit */ | ||
| 397 | 405 | ||
| 398 | struct ata_device device[ATA_MAX_DEVICES]; | 406 | struct ata_device device[ATA_MAX_DEVICES]; |
| 399 | 407 | ||
| @@ -519,9 +527,6 @@ extern void ata_host_set_remove(struct ata_host_set *host_set); | |||
| 519 | extern int ata_scsi_detect(struct scsi_host_template *sht); | 527 | extern int ata_scsi_detect(struct scsi_host_template *sht); |
| 520 | extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg); | 528 | extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg); |
| 521 | extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)); | 529 | extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)); |
| 522 | extern int ata_scsi_error(struct Scsi_Host *host); | ||
| 523 | extern void ata_eh_qc_complete(struct ata_queued_cmd *qc); | ||
| 524 | extern void ata_eh_qc_retry(struct ata_queued_cmd *qc); | ||
| 525 | extern int ata_scsi_release(struct Scsi_Host *host); | 530 | extern int ata_scsi_release(struct Scsi_Host *host); |
| 526 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); | 531 | extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); |
| 527 | extern int ata_scsi_device_resume(struct scsi_device *); | 532 | extern int ata_scsi_device_resume(struct scsi_device *); |
| @@ -570,7 +575,6 @@ extern void ata_bmdma_stop(struct ata_queued_cmd *qc); | |||
| 570 | extern u8 ata_bmdma_status(struct ata_port *ap); | 575 | extern u8 ata_bmdma_status(struct ata_port *ap); |
| 571 | extern void ata_bmdma_irq_clear(struct ata_port *ap); | 576 | extern void ata_bmdma_irq_clear(struct ata_port *ap); |
| 572 | extern void __ata_qc_complete(struct ata_queued_cmd *qc); | 577 | extern void __ata_qc_complete(struct ata_queued_cmd *qc); |
| 573 | extern void ata_eng_timeout(struct ata_port *ap); | ||
| 574 | extern void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev, | 578 | extern void ata_scsi_simulate(struct ata_port *ap, struct ata_device *dev, |
| 575 | struct scsi_cmnd *cmd, | 579 | struct scsi_cmnd *cmd, |
| 576 | void (*done)(struct scsi_cmnd *)); | 580 | void (*done)(struct scsi_cmnd *)); |
| @@ -625,6 +629,14 @@ extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bit | |||
| 625 | extern unsigned long ata_pci_default_filter(const struct ata_port *, struct ata_device *, unsigned long); | 629 | extern unsigned long ata_pci_default_filter(const struct ata_port *, struct ata_device *, unsigned long); |
| 626 | #endif /* CONFIG_PCI */ | 630 | #endif /* CONFIG_PCI */ |
| 627 | 631 | ||
| 632 | /* | ||
| 633 | * EH | ||
| 634 | */ | ||
| 635 | extern int ata_scsi_error(struct Scsi_Host *host); | ||
| 636 | extern void ata_eng_timeout(struct ata_port *ap); | ||
| 637 | extern void ata_eh_qc_complete(struct ata_queued_cmd *qc); | ||
| 638 | extern void ata_eh_qc_retry(struct ata_queued_cmd *qc); | ||
| 639 | |||
| 628 | 640 | ||
| 629 | static inline int | 641 | static inline int |
| 630 | ata_sg_is_last(struct scatterlist *sg, struct ata_queued_cmd *qc) | 642 | ata_sg_is_last(struct scatterlist *sg, struct ata_queued_cmd *qc) |
| @@ -678,6 +690,11 @@ static inline unsigned int ata_class_disabled(unsigned int class) | |||
| 678 | return class == ATA_DEV_ATA_UNSUP || class == ATA_DEV_ATAPI_UNSUP; | 690 | return class == ATA_DEV_ATA_UNSUP || class == ATA_DEV_ATAPI_UNSUP; |
| 679 | } | 691 | } |
| 680 | 692 | ||
| 693 | static inline unsigned int ata_class_absent(unsigned int class) | ||
| 694 | { | ||
| 695 | return !ata_class_enabled(class) && !ata_class_disabled(class); | ||
| 696 | } | ||
| 697 | |||
| 681 | static inline unsigned int ata_dev_enabled(const struct ata_device *dev) | 698 | static inline unsigned int ata_dev_enabled(const struct ata_device *dev) |
| 682 | { | 699 | { |
| 683 | return ata_class_enabled(dev->class); | 700 | return ata_class_enabled(dev->class); |
| @@ -688,6 +705,11 @@ static inline unsigned int ata_dev_disabled(const struct ata_device *dev) | |||
| 688 | return ata_class_disabled(dev->class); | 705 | return ata_class_disabled(dev->class); |
| 689 | } | 706 | } |
| 690 | 707 | ||
| 708 | static inline unsigned int ata_dev_absent(const struct ata_device *dev) | ||
| 709 | { | ||
| 710 | return ata_class_absent(dev->class); | ||
| 711 | } | ||
| 712 | |||
| 691 | static inline u8 ata_chk_status(struct ata_port *ap) | 713 | static inline u8 ata_chk_status(struct ata_port *ap) |
| 692 | { | 714 | { |
| 693 | return ap->ops->check_status(ap); | 715 | return ap->ops->check_status(ap); |
