diff options
Diffstat (limited to 'drivers/ide/pci/siimage.c')
-rw-r--r-- | drivers/ide/pci/siimage.c | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index 908f37b4e0ee..391eea88c760 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
@@ -79,7 +79,7 @@ static int pdev_is_sata(struct pci_dev *pdev) | |||
79 | 79 | ||
80 | static inline int is_sata(ide_hwif_t *hwif) | 80 | static inline int is_sata(ide_hwif_t *hwif) |
81 | { | 81 | { |
82 | return pdev_is_sata(hwif->pci_dev); | 82 | return pdev_is_sata(to_pci_dev(hwif->dev)); |
83 | } | 83 | } |
84 | 84 | ||
85 | /** | 85 | /** |
@@ -140,13 +140,14 @@ static inline unsigned long siimage_seldev(ide_drive_t *drive, int r) | |||
140 | static u8 sil_pata_udma_filter(ide_drive_t *drive) | 140 | static u8 sil_pata_udma_filter(ide_drive_t *drive) |
141 | { | 141 | { |
142 | ide_hwif_t *hwif = drive->hwif; | 142 | ide_hwif_t *hwif = drive->hwif; |
143 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
143 | unsigned long base = (unsigned long) hwif->hwif_data; | 144 | unsigned long base = (unsigned long) hwif->hwif_data; |
144 | u8 mask = 0, scsc = 0; | 145 | u8 mask = 0, scsc = 0; |
145 | 146 | ||
146 | if (hwif->mmio) | 147 | if (hwif->mmio) |
147 | scsc = hwif->INB(base + 0x4A); | 148 | scsc = hwif->INB(base + 0x4A); |
148 | else | 149 | else |
149 | pci_read_config_byte(hwif->pci_dev, 0x8A, &scsc); | 150 | pci_read_config_byte(dev, 0x8A, &scsc); |
150 | 151 | ||
151 | if ((scsc & 0x30) == 0x10) /* 133 */ | 152 | if ((scsc & 0x30) == 0x10) /* 133 */ |
152 | mask = ATA_UDMA6; | 153 | mask = ATA_UDMA6; |
@@ -219,19 +220,21 @@ static void sil_set_pio_mode(ide_drive_t *drive, u8 pio) | |||
219 | mode |= (unit ? 0x10 : 0x01); | 220 | mode |= (unit ? 0x10 : 0x01); |
220 | hwif->OUTB(mode, base + addr_mask); | 221 | hwif->OUTB(mode, base + addr_mask); |
221 | } else { | 222 | } else { |
222 | pci_write_config_word(hwif->pci_dev, addr, speedp); | 223 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
223 | pci_write_config_word(hwif->pci_dev, tfaddr, speedt); | 224 | |
224 | pci_read_config_word(hwif->pci_dev, tfaddr-2, &speedp); | 225 | pci_write_config_word(dev, addr, speedp); |
226 | pci_write_config_word(dev, tfaddr, speedt); | ||
227 | pci_read_config_word(dev, tfaddr - 2, &speedp); | ||
225 | speedp &= ~0x200; | 228 | speedp &= ~0x200; |
226 | /* Set IORDY for mode 3 or 4 */ | 229 | /* Set IORDY for mode 3 or 4 */ |
227 | if (pio > 2) | 230 | if (pio > 2) |
228 | speedp |= 0x200; | 231 | speedp |= 0x200; |
229 | pci_write_config_word(hwif->pci_dev, tfaddr-2, speedp); | 232 | pci_write_config_word(dev, tfaddr - 2, speedp); |
230 | 233 | ||
231 | pci_read_config_byte(hwif->pci_dev, addr_mask, &mode); | 234 | pci_read_config_byte(dev, addr_mask, &mode); |
232 | mode &= ~(unit ? 0x30 : 0x03); | 235 | mode &= ~(unit ? 0x30 : 0x03); |
233 | mode |= (unit ? 0x10 : 0x01); | 236 | mode |= (unit ? 0x10 : 0x01); |
234 | pci_write_config_byte(hwif->pci_dev, addr_mask, mode); | 237 | pci_write_config_byte(dev, addr_mask, mode); |
235 | } | 238 | } |
236 | } | 239 | } |
237 | 240 | ||
@@ -250,6 +253,7 @@ static void sil_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
250 | u16 dma[] = { 0x2208, 0x10C2, 0x10C1 }; | 253 | u16 dma[] = { 0x2208, 0x10C2, 0x10C1 }; |
251 | 254 | ||
252 | ide_hwif_t *hwif = HWIF(drive); | 255 | ide_hwif_t *hwif = HWIF(drive); |
256 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
253 | u16 ultra = 0, multi = 0; | 257 | u16 ultra = 0, multi = 0; |
254 | u8 mode = 0, unit = drive->select.b.unit; | 258 | u8 mode = 0, unit = drive->select.b.unit; |
255 | unsigned long base = (unsigned long)hwif->hwif_data; | 259 | unsigned long base = (unsigned long)hwif->hwif_data; |
@@ -266,10 +270,10 @@ static void sil_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
266 | multi = hwif->INW(ma); | 270 | multi = hwif->INW(ma); |
267 | ultra = hwif->INW(ua); | 271 | ultra = hwif->INW(ua); |
268 | } else { | 272 | } else { |
269 | pci_read_config_byte(hwif->pci_dev, 0x8A, &scsc); | 273 | pci_read_config_byte(dev, 0x8A, &scsc); |
270 | pci_read_config_byte(hwif->pci_dev, addr_mask, &mode); | 274 | pci_read_config_byte(dev, addr_mask, &mode); |
271 | pci_read_config_word(hwif->pci_dev, ma, &multi); | 275 | pci_read_config_word(dev, ma, &multi); |
272 | pci_read_config_word(hwif->pci_dev, ua, &ultra); | 276 | pci_read_config_word(dev, ua, &ultra); |
273 | } | 277 | } |
274 | 278 | ||
275 | mode &= ~((unit) ? 0x30 : 0x03); | 279 | mode &= ~((unit) ? 0x30 : 0x03); |
@@ -293,9 +297,9 @@ static void sil_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
293 | hwif->OUTW(multi, ma); | 297 | hwif->OUTW(multi, ma); |
294 | hwif->OUTW(ultra, ua); | 298 | hwif->OUTW(ultra, ua); |
295 | } else { | 299 | } else { |
296 | pci_write_config_byte(hwif->pci_dev, addr_mask, mode); | 300 | pci_write_config_byte(dev, addr_mask, mode); |
297 | pci_write_config_word(hwif->pci_dev, ma, multi); | 301 | pci_write_config_word(dev, ma, multi); |
298 | pci_write_config_word(hwif->pci_dev, ua, ultra); | 302 | pci_write_config_word(dev, ua, ultra); |
299 | } | 303 | } |
300 | } | 304 | } |
301 | 305 | ||
@@ -303,6 +307,7 @@ static void sil_set_dma_mode(ide_drive_t *drive, const u8 speed) | |||
303 | static int siimage_io_ide_dma_test_irq (ide_drive_t *drive) | 307 | static int siimage_io_ide_dma_test_irq (ide_drive_t *drive) |
304 | { | 308 | { |
305 | ide_hwif_t *hwif = HWIF(drive); | 309 | ide_hwif_t *hwif = HWIF(drive); |
310 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
306 | u8 dma_altstat = 0; | 311 | u8 dma_altstat = 0; |
307 | unsigned long addr = siimage_selreg(hwif, 1); | 312 | unsigned long addr = siimage_selreg(hwif, 1); |
308 | 313 | ||
@@ -311,7 +316,7 @@ static int siimage_io_ide_dma_test_irq (ide_drive_t *drive) | |||
311 | return 1; | 316 | return 1; |
312 | 317 | ||
313 | /* return 1 if Device INTR asserted */ | 318 | /* return 1 if Device INTR asserted */ |
314 | pci_read_config_byte(hwif->pci_dev, addr, &dma_altstat); | 319 | pci_read_config_byte(dev, addr, &dma_altstat); |
315 | if (dma_altstat & 8) | 320 | if (dma_altstat & 8) |
316 | return 0; //return 1; | 321 | return 0; //return 1; |
317 | return 0; | 322 | return 0; |
@@ -377,13 +382,14 @@ static int siimage_mmio_ide_dma_test_irq (ide_drive_t *drive) | |||
377 | static int sil_sata_busproc(ide_drive_t * drive, int state) | 382 | static int sil_sata_busproc(ide_drive_t * drive, int state) |
378 | { | 383 | { |
379 | ide_hwif_t *hwif = HWIF(drive); | 384 | ide_hwif_t *hwif = HWIF(drive); |
385 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
380 | u32 stat_config = 0; | 386 | u32 stat_config = 0; |
381 | unsigned long addr = siimage_selreg(hwif, 0); | 387 | unsigned long addr = siimage_selreg(hwif, 0); |
382 | 388 | ||
383 | if (hwif->mmio) | 389 | if (hwif->mmio) |
384 | stat_config = readl((void __iomem *)addr); | 390 | stat_config = readl((void __iomem *)addr); |
385 | else | 391 | else |
386 | pci_read_config_dword(hwif->pci_dev, addr, &stat_config); | 392 | pci_read_config_dword(dev, addr, &stat_config); |
387 | 393 | ||
388 | switch (state) { | 394 | switch (state) { |
389 | case BUSSTATE_ON: | 395 | case BUSSTATE_ON: |
@@ -643,7 +649,7 @@ static unsigned int __devinit init_chipset_siimage(struct pci_dev *dev, const ch | |||
643 | 649 | ||
644 | static void __devinit init_mmio_iops_siimage(ide_hwif_t *hwif) | 650 | static void __devinit init_mmio_iops_siimage(ide_hwif_t *hwif) |
645 | { | 651 | { |
646 | struct pci_dev *dev = hwif->pci_dev; | 652 | struct pci_dev *dev = to_pci_dev(hwif->dev); |
647 | void *addr = pci_get_drvdata(dev); | 653 | void *addr = pci_get_drvdata(dev); |
648 | u8 ch = hwif->channel; | 654 | u8 ch = hwif->channel; |
649 | hw_regs_t hw; | 655 | hw_regs_t hw; |
@@ -756,12 +762,14 @@ static void __devinit sil_quirkproc(ide_drive_t *drive) | |||
756 | 762 | ||
757 | static void __devinit init_iops_siimage(ide_hwif_t *hwif) | 763 | static void __devinit init_iops_siimage(ide_hwif_t *hwif) |
758 | { | 764 | { |
765 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
766 | |||
759 | hwif->hwif_data = NULL; | 767 | hwif->hwif_data = NULL; |
760 | 768 | ||
761 | /* Pessimal until we finish probing */ | 769 | /* Pessimal until we finish probing */ |
762 | hwif->rqsize = 15; | 770 | hwif->rqsize = 15; |
763 | 771 | ||
764 | if (pci_get_drvdata(hwif->pci_dev) == NULL) | 772 | if (pci_get_drvdata(dev) == NULL) |
765 | return; | 773 | return; |
766 | 774 | ||
767 | init_mmio_iops_siimage(hwif); | 775 | init_mmio_iops_siimage(hwif); |
@@ -777,11 +785,12 @@ static void __devinit init_iops_siimage(ide_hwif_t *hwif) | |||
777 | 785 | ||
778 | static u8 __devinit ata66_siimage(ide_hwif_t *hwif) | 786 | static u8 __devinit ata66_siimage(ide_hwif_t *hwif) |
779 | { | 787 | { |
788 | struct pci_dev *dev = to_pci_dev(hwif->dev); | ||
780 | unsigned long addr = siimage_selreg(hwif, 0); | 789 | unsigned long addr = siimage_selreg(hwif, 0); |
781 | u8 ata66 = 0; | 790 | u8 ata66 = 0; |
782 | 791 | ||
783 | if (pci_get_drvdata(hwif->pci_dev) == NULL) | 792 | if (pci_get_drvdata(dev) == NULL) |
784 | pci_read_config_byte(hwif->pci_dev, addr, &ata66); | 793 | pci_read_config_byte(dev, addr, &ata66); |
785 | else | 794 | else |
786 | ata66 = hwif->INB(addr); | 795 | ata66 = hwif->INB(addr); |
787 | 796 | ||