aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/sata_sil.c
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2007-08-06 05:36:23 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-12 14:55:30 -0400
commitf58229f8060055b08b34008ea08f31de1e2f003c (patch)
tree6ca5ef546671cb975ef3632fb032c238eaf1bb4c /drivers/ata/sata_sil.c
parent9af5c9c97dc9d599281778864c72b385f0c63341 (diff)
libata-link: implement and use link/device iterators
Multiple links and different number of devices per link should be considered to iterate over links and devices. This patch implements and uses link and device iterators - ata_port_for_each_link() and ata_link_for_each_dev() - and ata_link_max_devices(). This change makes a lot of functions iterate over only possible devices instead of from dev 0 to dev ATA_MAX_DEVICES. All such changes have been examined and nothing should be broken. While at it, add a separating comment before device helpers to distinguish them better from link helpers and others. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/sata_sil.c')
-rw-r--r--drivers/ata/sata_sil.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c
index 2ddbe4cc71e4..4c9295a49a49 100644
--- a/drivers/ata/sata_sil.c
+++ b/drivers/ata/sata_sil.c
@@ -303,22 +303,20 @@ static int sil_set_mode (struct ata_port *ap, struct ata_device **r_failed)
303 struct ata_device *dev; 303 struct ata_device *dev;
304 void __iomem *mmio_base = host->iomap[SIL_MMIO_BAR]; 304 void __iomem *mmio_base = host->iomap[SIL_MMIO_BAR];
305 void __iomem *addr = mmio_base + sil_port[ap->port_no].xfer_mode; 305 void __iomem *addr = mmio_base + sil_port[ap->port_no].xfer_mode;
306 u32 tmp, dev_mode[2]; 306 u32 tmp, dev_mode[2] = { };
307 unsigned int i;
308 int rc; 307 int rc;
309 308
310 rc = ata_do_set_mode(ap, r_failed); 309 rc = ata_do_set_mode(ap, r_failed);
311 if (rc) 310 if (rc)
312 return rc; 311 return rc;
313 312
314 for (i = 0; i < 2; i++) { 313 ata_link_for_each_dev(dev, &ap->link) {
315 dev = &ap->link.device[i];
316 if (!ata_dev_enabled(dev)) 314 if (!ata_dev_enabled(dev))
317 dev_mode[i] = 0; /* PIO0/1/2 */ 315 dev_mode[dev->devno] = 0; /* PIO0/1/2 */
318 else if (dev->flags & ATA_DFLAG_PIO) 316 else if (dev->flags & ATA_DFLAG_PIO)
319 dev_mode[i] = 1; /* PIO3/4 */ 317 dev_mode[dev->devno] = 1; /* PIO3/4 */
320 else 318 else
321 dev_mode[i] = 3; /* UDMA */ 319 dev_mode[dev->devno] = 3; /* UDMA */
322 /* value 2 indicates MDMA */ 320 /* value 2 indicates MDMA */
323 } 321 }
324 322