diff options
author | Tejun Heo <htejun@gmail.com> | 2007-12-18 02:33:05 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2008-01-23 05:24:12 -0500 |
commit | a0f79b929acaba10d4780acd2543eff20bf4b5b0 (patch) | |
tree | e637c1d9388a3991cd71c5be339c2ead59c460a2 /drivers/ata/pata_acpi.c | |
parent | 5df91a25df08d85700fef5fd59bb1873273e5ef5 (diff) |
libata: implement ata_timing_cycle2mode() and use it in libata-acpi and pata_acpi
libata-acpi is using separate timing tables for transfer modes
although libata-core has the complete ata_timing table. Implement
ata_timing_cycle2mode() to look for matching mode given transfer type
and cycle duration and use it in libata-acpi and pata_acpi to replace
private timing tables.
Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/pata_acpi.c')
-rw-r--r-- | drivers/ata/pata_acpi.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/ata/pata_acpi.c b/drivers/ata/pata_acpi.c index a4737a3d31cb..244098a80ce4 100644 --- a/drivers/ata/pata_acpi.c +++ b/drivers/ata/pata_acpi.c | |||
@@ -133,13 +133,14 @@ static void pacpi_set_piomode(struct ata_port *ap, struct ata_device *adev) | |||
133 | { | 133 | { |
134 | int unit = adev->devno; | 134 | int unit = adev->devno; |
135 | struct pata_acpi *acpi = ap->private_data; | 135 | struct pata_acpi *acpi = ap->private_data; |
136 | const struct ata_timing *t; | ||
136 | 137 | ||
137 | if (!(acpi->gtm.flags & 0x10)) | 138 | if (!(acpi->gtm.flags & 0x10)) |
138 | unit = 0; | 139 | unit = 0; |
139 | 140 | ||
140 | /* Now stuff the nS values into the structure */ | 141 | /* Now stuff the nS values into the structure */ |
141 | acpi->gtm.drive[unit].pio = | 142 | t = ata_timing_find_mode(adev->pio_mode); |
142 | ata_acpi_pio_cycle[adev->pio_mode - XFER_PIO_0]; | 143 | acpi->gtm.drive[unit].pio = t->cycle; |
143 | ata_acpi_stm(ap, &acpi->gtm); | 144 | ata_acpi_stm(ap, &acpi->gtm); |
144 | /* See what mode we actually got */ | 145 | /* See what mode we actually got */ |
145 | ata_acpi_gtm(ap, &acpi->gtm); | 146 | ata_acpi_gtm(ap, &acpi->gtm); |
@@ -155,18 +156,18 @@ static void pacpi_set_dmamode(struct ata_port *ap, struct ata_device *adev) | |||
155 | { | 156 | { |
156 | int unit = adev->devno; | 157 | int unit = adev->devno; |
157 | struct pata_acpi *acpi = ap->private_data; | 158 | struct pata_acpi *acpi = ap->private_data; |
159 | const struct ata_timing *t; | ||
158 | 160 | ||
159 | if (!(acpi->gtm.flags & 0x10)) | 161 | if (!(acpi->gtm.flags & 0x10)) |
160 | unit = 0; | 162 | unit = 0; |
161 | 163 | ||
162 | /* Now stuff the nS values into the structure */ | 164 | /* Now stuff the nS values into the structure */ |
165 | t = ata_timing_find_mode(adev->dma_mode); | ||
163 | if (adev->dma_mode >= XFER_UDMA_0) { | 166 | if (adev->dma_mode >= XFER_UDMA_0) { |
164 | acpi->gtm.drive[unit].dma = | 167 | acpi->gtm.drive[unit].dma = t->udma; |
165 | ata_acpi_udma_cycle[adev->dma_mode - XFER_UDMA_0]; | ||
166 | acpi->gtm.flags |= (1 << (2 * unit)); | 168 | acpi->gtm.flags |= (1 << (2 * unit)); |
167 | } else { | 169 | } else { |
168 | acpi->gtm.drive[unit].dma = | 170 | acpi->gtm.drive[unit].dma = t->cycle; |
169 | ata_acpi_mwdma_cycle[adev->dma_mode - XFER_MW_DMA_0]; | ||
170 | acpi->gtm.flags &= ~(1 << (2 * unit)); | 171 | acpi->gtm.flags &= ~(1 << (2 * unit)); |
171 | } | 172 | } |
172 | ata_acpi_stm(ap, &acpi->gtm); | 173 | ata_acpi_stm(ap, &acpi->gtm); |