diff options
author | Tejun Heo <htejun@gmail.com> | 2007-08-06 05:36:23 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-10-12 14:55:30 -0400 |
commit | f58229f8060055b08b34008ea08f31de1e2f003c (patch) | |
tree | 6ca5ef546671cb975ef3632fb032c238eaf1bb4c /drivers/ata/sata_sil.c | |
parent | 9af5c9c97dc9d599281778864c72b385f0c63341 (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.c | 12 |
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 | ||