aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-08-10 03:59:12 -0400
committerTejun Heo <htejun@gmail.com>2006-08-10 03:59:12 -0400
commitdd5b06c490de72440ec39f814de99a714a45a1a9 (patch)
tree7a4665f9b6fdb5a264c753b90a215e2953e2d0f7 /include/linux
parent2ec7df0457b710d9201f211dbccdbecf0ad38b7e (diff)
[PATCH] libata: implement dummy port
Implement dummy port which can be requested by setting appropriate bit in probe_ent->dummy_port_mask. The dummy port is used as placeholder for stolen legacy port. This allows libata to guarantee that index_of(ap) == ap->port_no == actual_device_port_no, and thus to remove error-prone ap->hard_port_no. As it's used only when one port of a legacy controller is reserved by some other entity (e.g. IDE), the focus is on keeping the added *code* complexity at minimum, so dummy port allocates all libata core resources and acts as a normal port. It just has all dummy port_ops. This patch only implements dummy port. The following patch will make libata use it for stolen legacy ports. Signed-off-by: Tejun Heo <htejun@gmail.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/libata.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 4504776570e4..30bfe8f1666e 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -353,6 +353,7 @@ struct ata_probe_ent {
353 struct ata_ioports port[ATA_MAX_PORTS]; 353 struct ata_ioports port[ATA_MAX_PORTS];
354 unsigned int n_ports; 354 unsigned int n_ports;
355 unsigned int hard_port_no; 355 unsigned int hard_port_no;
356 unsigned int dummy_port_mask;
356 unsigned int pio_mask; 357 unsigned int pio_mask;
357 unsigned int mwdma_mask; 358 unsigned int mwdma_mask;
358 unsigned int udma_mask; 359 unsigned int udma_mask;
@@ -652,6 +653,8 @@ extern const unsigned long sata_deb_timing_normal[];
652extern const unsigned long sata_deb_timing_hotplug[]; 653extern const unsigned long sata_deb_timing_hotplug[];
653extern const unsigned long sata_deb_timing_long[]; 654extern const unsigned long sata_deb_timing_long[];
654 655
656extern const struct ata_port_operations ata_dummy_port_ops;
657
655static inline const unsigned long * 658static inline const unsigned long *
656sata_ehc_deb_timing(struct ata_eh_context *ehc) 659sata_ehc_deb_timing(struct ata_eh_context *ehc)
657{ 660{
@@ -661,6 +664,11 @@ sata_ehc_deb_timing(struct ata_eh_context *ehc)
661 return sata_deb_timing_normal; 664 return sata_deb_timing_normal;
662} 665}
663 666
667static inline int ata_port_is_dummy(struct ata_port *ap)
668{
669 return ap->ops == &ata_dummy_port_ops;
670}
671
664extern void ata_port_probe(struct ata_port *); 672extern void ata_port_probe(struct ata_port *);
665extern void __sata_phy_reset(struct ata_port *ap); 673extern void __sata_phy_reset(struct ata_port *ap);
666extern void sata_phy_reset(struct ata_port *ap); 674extern void sata_phy_reset(struct ata_port *ap);