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); |