aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/piix.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/pci/piix.c')
-rw-r--r--drivers/ide/pci/piix.c46
1 files changed, 15 insertions, 31 deletions
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c
index fd8214a7ab98..38c91ba6497b 100644
--- a/drivers/ide/pci/piix.c
+++ b/drivers/ide/pci/piix.c
@@ -137,13 +137,14 @@ static u8 piix_dma_2_pio (u8 xfer_rate) {
137} 137}
138 138
139/** 139/**
140 * piix_tune_pio - tune PIIX for PIO mode 140 * piix_set_pio_mode - set host controller for PIO mode
141 * @drive: drive to tune 141 * @drive: drive
142 * @pio: desired PIO mode 142 * @pio: PIO mode number
143 * 143 *
144 * Set the interface PIO mode based upon the settings done by AMI BIOS. 144 * Set the interface PIO mode based upon the settings done by AMI BIOS.
145 */ 145 */
146static void piix_tune_pio (ide_drive_t *drive, u8 pio) 146
147static void piix_set_pio_mode(ide_drive_t *drive, const u8 pio)
147{ 148{
148 ide_hwif_t *hwif = HWIF(drive); 149 ide_hwif_t *hwif = HWIF(drive);
149 struct pci_dev *dev = hwif->pci_dev; 150 struct pci_dev *dev = hwif->pci_dev;
@@ -204,31 +205,15 @@ static void piix_tune_pio (ide_drive_t *drive, u8 pio)
204} 205}
205 206
206/** 207/**
207 * piix_set_pio_mode - set PIO mode 208 * piix_set_dma_mode - set host controller for DMA mode
208 * @drive: drive to tune 209 * @drive: drive
209 * @pio: desired PIO mode 210 * @speed: DMA mode
210 *
211 * Set the drive's PIO mode (might be useful if drive is not registered
212 * in CMOS for any reason).
213 */
214
215static void piix_set_pio_mode(ide_drive_t *drive, const u8 pio)
216{
217 piix_tune_pio(drive, pio);
218 (void) ide_config_drive_speed(drive, XFER_PIO_0 + pio);
219}
220
221/**
222 * piix_tune_chipset - tune a PIIX interface
223 * @drive: IDE drive to tune
224 * @speed: speed to configure
225 * 211 *
226 * Set a PIIX interface channel to the desired speeds. This involves 212 * Set a PIIX host controller to the desired DMA mode. This involves
227 * requires the right timing data into the PIIX configuration space 213 * programming the right timing data into the PCI configuration space.
228 * then setting the drive parameters appropriately
229 */ 214 */
230 215
231static int piix_tune_chipset(ide_drive_t *drive, const u8 speed) 216static void piix_set_dma_mode(ide_drive_t *drive, const u8 speed)
232{ 217{
233 ide_hwif_t *hwif = HWIF(drive); 218 ide_hwif_t *hwif = HWIF(drive);
234 struct pci_dev *dev = hwif->pci_dev; 219 struct pci_dev *dev = hwif->pci_dev;
@@ -259,7 +244,7 @@ static int piix_tune_chipset(ide_drive_t *drive, const u8 speed)
259 case XFER_MW_DMA_2: 244 case XFER_MW_DMA_2:
260 case XFER_MW_DMA_1: 245 case XFER_MW_DMA_1:
261 case XFER_SW_DMA_2: break; 246 case XFER_SW_DMA_2: break;
262 default: return -1; 247 default: return;
263 } 248 }
264 249
265 if (speed >= XFER_UDMA_0) { 250 if (speed >= XFER_UDMA_0) {
@@ -288,9 +273,7 @@ static int piix_tune_chipset(ide_drive_t *drive, const u8 speed)
288 pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag); 273 pci_write_config_byte(dev, 0x55, (u8) reg55 & ~w_flag);
289 } 274 }
290 275
291 piix_tune_pio(drive, piix_dma_2_pio(speed)); 276 piix_set_pio_mode(drive, piix_dma_2_pio(speed));
292
293 return ide_config_drive_speed(drive, speed);
294} 277}
295 278
296/** 279/**
@@ -448,7 +431,8 @@ static void __devinit init_hwif_piix(ide_hwif_t *hwif)
448 hwif->autodma = 0; 431 hwif->autodma = 0;
449 432
450 hwif->set_pio_mode = &piix_set_pio_mode; 433 hwif->set_pio_mode = &piix_set_pio_mode;
451 hwif->speedproc = &piix_tune_chipset; 434 hwif->set_dma_mode = &piix_set_dma_mode;
435
452 hwif->drives[0].autotune = 1; 436 hwif->drives[0].autotune = 1;
453 hwif->drives[1].autotune = 1; 437 hwif->drives[1].autotune = 1;
454 438