aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-core.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-09-23 00:19:54 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-12 14:55:44 -0400
commit3af9a77af9e2b72366363864bfcd3d51465ff98a (patch)
treef6a311a56353cf81d34d64cf1a3f86aa6f659246 /drivers/ata/libata-core.c
parent3495de733633d24ee97852080b737b436c110d6e (diff)
libata-pmp: implement Port Multiplier support
Implement Port Multiplier support. To support PMP, a LLDD has to supply ops->pmp_read() and pmp_write(). If non-null, ->pmp_attach and ->pmp_detach are called on PMP attach and detach, respectively. ->pmp_read/write() can be called while the port is frozen, so they must be implemented by polling. This patch supplies several helpers to ease ->pmp_read/write() implementation. Also, irq_handler and error_handler must be PMP aware. Most of PMP aware EH can be done by calling ata_pmp_do_eh() with appropriate methods. PMP EH uses separate set of reset methods and this patch implements standard prereset, hardreset and postreset methods. This patch only implements PMP support. The next patch will integrate PMP into the reset of libata and thus enable PMP support. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r--drivers/ata/libata-core.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index eb9709864a21..9e7f55b71044 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3865,6 +3865,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
3865 { "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */ 3865 { "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */
3866 { "IOMEGA ZIP 250 ATAPI Floppy", 3866 { "IOMEGA ZIP 250 ATAPI Floppy",
3867 NULL, ATA_HORKAGE_NODMA }, 3867 NULL, ATA_HORKAGE_NODMA },
3868 /* Odd clown on sil3726/4726 PMPs */
3869 { "Config Disk", NULL, ATA_HORKAGE_NODMA |
3870 ATA_HORKAGE_SKIP_PM },
3868 3871
3869 /* Weird ATAPI devices */ 3872 /* Weird ATAPI devices */
3870 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, 3873 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
@@ -7251,6 +7254,14 @@ EXPORT_SYMBOL_GPL(ata_pci_default_filter);
7251EXPORT_SYMBOL_GPL(ata_pci_clear_simplex); 7254EXPORT_SYMBOL_GPL(ata_pci_clear_simplex);
7252#endif /* CONFIG_PCI */ 7255#endif /* CONFIG_PCI */
7253 7256
7257EXPORT_SYMBOL_GPL(sata_pmp_read_init_tf);
7258EXPORT_SYMBOL_GPL(sata_pmp_read_val);
7259EXPORT_SYMBOL_GPL(sata_pmp_write_init_tf);
7260EXPORT_SYMBOL_GPL(sata_pmp_std_prereset);
7261EXPORT_SYMBOL_GPL(sata_pmp_std_hardreset);
7262EXPORT_SYMBOL_GPL(sata_pmp_std_postreset);
7263EXPORT_SYMBOL_GPL(sata_pmp_do_eh);
7264
7254EXPORT_SYMBOL_GPL(__ata_ehi_push_desc); 7265EXPORT_SYMBOL_GPL(__ata_ehi_push_desc);
7255EXPORT_SYMBOL_GPL(ata_ehi_push_desc); 7266EXPORT_SYMBOL_GPL(ata_ehi_push_desc);
7256EXPORT_SYMBOL_GPL(ata_ehi_clear_desc); 7267EXPORT_SYMBOL_GPL(ata_ehi_clear_desc);