aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ide/ide-dma.c23
-rw-r--r--drivers/ide/ide-lib.c6
-rw-r--r--drivers/ide/ide-probe.c4
-rw-r--r--drivers/ide/ide.c3
-rw-r--r--drivers/ide/pci/aec62xx.c8
-rw-r--r--drivers/ide/pci/alim15x3.c9
-rw-r--r--drivers/ide/pci/amd74xx.c7
-rw-r--r--drivers/ide/pci/atiixp.c9
-rw-r--r--drivers/ide/pci/cmd64x.c14
-rw-r--r--drivers/ide/pci/cs5520.c2
-rw-r--r--drivers/ide/pci/cs5535.c4
-rw-r--r--drivers/ide/pci/cy82c693.c5
-rw-r--r--drivers/ide/pci/delkin_cb.c2
-rw-r--r--drivers/ide/pci/hpt34x.c2
-rw-r--r--drivers/ide/pci/hpt366.c29
-rw-r--r--drivers/ide/pci/it8213.c7
-rw-r--r--drivers/ide/pci/it821x.c47
-rw-r--r--drivers/ide/pci/jmicron.c2
-rw-r--r--drivers/ide/pci/ns87415.c14
-rw-r--r--drivers/ide/pci/pdc202xx_new.c6
-rw-r--r--drivers/ide/pci/pdc202xx_old.c11
-rw-r--r--drivers/ide/pci/piix.c6
-rw-r--r--drivers/ide/pci/rz1000.c2
-rw-r--r--drivers/ide/pci/sc1200.c12
-rw-r--r--drivers/ide/pci/scc_pata.c13
-rw-r--r--drivers/ide/pci/serverworks.c18
-rw-r--r--drivers/ide/pci/sgiioc4.c16
-rw-r--r--drivers/ide/pci/siimage.c51
-rw-r--r--drivers/ide/pci/sis5513.c22
-rw-r--r--drivers/ide/pci/sl82c105.c17
-rw-r--r--drivers/ide/pci/slc90e66.c7
-rw-r--r--drivers/ide/pci/tc86c001.c3
-rw-r--r--drivers/ide/pci/triflex.c2
-rw-r--r--drivers/ide/pci/trm290.c2
-rw-r--r--drivers/ide/pci/via82cxxx.c12
-rw-r--r--drivers/ide/ppc/pmac.c10
-rw-r--r--drivers/ide/setup-pci.c6
-rw-r--r--include/linux/ide.h5
38 files changed, 236 insertions, 182 deletions
diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c
index 1ca1210ec1c0..782e5da01578 100644
--- a/drivers/ide/ide-dma.c
+++ b/drivers/ide/ide-dma.c
@@ -184,6 +184,7 @@ static int ide_dma_good_drive(ide_drive_t *drive)
184int ide_build_sglist(ide_drive_t *drive, struct request *rq) 184int ide_build_sglist(ide_drive_t *drive, struct request *rq)
185{ 185{
186 ide_hwif_t *hwif = HWIF(drive); 186 ide_hwif_t *hwif = HWIF(drive);
187 struct pci_dev *pdev = to_pci_dev(hwif->dev);
187 struct scatterlist *sg = hwif->sg_table; 188 struct scatterlist *sg = hwif->sg_table;
188 189
189 ide_map_sg(drive, rq); 190 ide_map_sg(drive, rq);
@@ -193,7 +194,7 @@ int ide_build_sglist(ide_drive_t *drive, struct request *rq)
193 else 194 else
194 hwif->sg_dma_direction = PCI_DMA_TODEVICE; 195 hwif->sg_dma_direction = PCI_DMA_TODEVICE;
195 196
196 return pci_map_sg(hwif->pci_dev, sg, hwif->sg_nents, hwif->sg_dma_direction); 197 return pci_map_sg(pdev, sg, hwif->sg_nents, hwif->sg_dma_direction);
197} 198}
198 199
199EXPORT_SYMBOL_GPL(ide_build_sglist); 200EXPORT_SYMBOL_GPL(ide_build_sglist);
@@ -306,11 +307,11 @@ EXPORT_SYMBOL_GPL(ide_build_dmatable);
306 307
307void ide_destroy_dmatable (ide_drive_t *drive) 308void ide_destroy_dmatable (ide_drive_t *drive)
308{ 309{
309 struct pci_dev *dev = HWIF(drive)->pci_dev; 310 ide_hwif_t *hwif = drive->hwif;
310 struct scatterlist *sg = HWIF(drive)->sg_table; 311 struct pci_dev *pdev = to_pci_dev(hwif->dev);
311 int nents = HWIF(drive)->sg_nents;
312 312
313 pci_unmap_sg(dev, sg, nents, HWIF(drive)->sg_dma_direction); 313 pci_unmap_sg(pdev, hwif->sg_table, hwif->sg_nents,
314 hwif->sg_dma_direction);
314} 315}
315 316
316EXPORT_SYMBOL_GPL(ide_destroy_dmatable); 317EXPORT_SYMBOL_GPL(ide_destroy_dmatable);
@@ -843,10 +844,10 @@ EXPORT_SYMBOL(ide_dma_timeout);
843static void ide_release_dma_engine(ide_hwif_t *hwif) 844static void ide_release_dma_engine(ide_hwif_t *hwif)
844{ 845{
845 if (hwif->dmatable_cpu) { 846 if (hwif->dmatable_cpu) {
846 pci_free_consistent(hwif->pci_dev, 847 struct pci_dev *pdev = to_pci_dev(hwif->dev);
847 PRD_ENTRIES * PRD_BYTES, 848
848 hwif->dmatable_cpu, 849 pci_free_consistent(pdev, PRD_ENTRIES * PRD_BYTES,
849 hwif->dmatable_dma); 850 hwif->dmatable_cpu, hwif->dmatable_dma);
850 hwif->dmatable_cpu = NULL; 851 hwif->dmatable_cpu = NULL;
851 } 852 }
852} 853}
@@ -874,7 +875,9 @@ int ide_release_dma(ide_hwif_t *hwif)
874 875
875static int ide_allocate_dma_engine(ide_hwif_t *hwif) 876static int ide_allocate_dma_engine(ide_hwif_t *hwif)
876{ 877{
877 hwif->dmatable_cpu = pci_alloc_consistent(hwif->pci_dev, 878 struct pci_dev *pdev = to_pci_dev(hwif->dev);
879
880 hwif->dmatable_cpu = pci_alloc_consistent(pdev,
878 PRD_ENTRIES * PRD_BYTES, 881 PRD_ENTRIES * PRD_BYTES,
879 &hwif->dmatable_dma); 882 &hwif->dmatable_dma);
880 883
diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c
index 9b44fbdfe41f..b42940d8bf70 100644
--- a/drivers/ide/ide-lib.c
+++ b/drivers/ide/ide-lib.c
@@ -358,8 +358,10 @@ void ide_toggle_bounce(ide_drive_t *drive, int on)
358 if (!PCI_DMA_BUS_IS_PHYS) { 358 if (!PCI_DMA_BUS_IS_PHYS) {
359 addr = BLK_BOUNCE_ANY; 359 addr = BLK_BOUNCE_ANY;
360 } else if (on && drive->media == ide_disk) { 360 } else if (on && drive->media == ide_disk) {
361 if (HWIF(drive)->pci_dev) 361 struct device *dev = drive->hwif->dev;
362 addr = HWIF(drive)->pci_dev->dma_mask; 362
363 if (dev && dev->dma_mask)
364 addr = *dev->dma_mask;
363 } 365 }
364 366
365 if (drive->queue) 367 if (drive->queue)
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index cdb81471102a..5141730dc960 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -622,8 +622,8 @@ static void hwif_register (ide_hwif_t *hwif)
622 strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE); 622 strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE);
623 hwif->gendev.driver_data = hwif; 623 hwif->gendev.driver_data = hwif;
624 if (hwif->gendev.parent == NULL) { 624 if (hwif->gendev.parent == NULL) {
625 if (hwif->pci_dev) 625 if (hwif->dev)
626 hwif->gendev.parent = &hwif->pci_dev->dev; 626 hwif->gendev.parent = hwif->dev;
627 else 627 else
628 /* Would like to do = &device_legacy */ 628 /* Would like to do = &device_legacy */
629 hwif->gendev.parent = NULL; 629 hwif->gendev.parent = NULL;
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 97894abd9ebc..9805c43dfd8a 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -405,8 +405,9 @@ static void ide_hwif_restore(ide_hwif_t *hwif, ide_hwif_t *tmp_hwif)
405 hwif->chipset = tmp_hwif->chipset; 405 hwif->chipset = tmp_hwif->chipset;
406 hwif->hold = tmp_hwif->hold; 406 hwif->hold = tmp_hwif->hold;
407 407
408 hwif->dev = tmp_hwif->dev;
409
408#ifdef CONFIG_BLK_DEV_IDEPCI 410#ifdef CONFIG_BLK_DEV_IDEPCI
409 hwif->pci_dev = tmp_hwif->pci_dev;
410 hwif->cds = tmp_hwif->cds; 411 hwif->cds = tmp_hwif->cds;
411#endif 412#endif
412 413
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c
index 15597597740f..28401701b8d0 100644
--- a/drivers/ide/pci/aec62xx.c
+++ b/drivers/ide/pci/aec62xx.c
@@ -90,7 +90,7 @@ static u8 pci_bus_clock_list_ultra (u8 speed, struct chipset_bus_clock_list_entr
90static void aec6210_set_mode(ide_drive_t *drive, const u8 speed) 90static void aec6210_set_mode(ide_drive_t *drive, const u8 speed)
91{ 91{
92 ide_hwif_t *hwif = HWIF(drive); 92 ide_hwif_t *hwif = HWIF(drive);
93 struct pci_dev *dev = hwif->pci_dev; 93 struct pci_dev *dev = to_pci_dev(hwif->dev);
94 u16 d_conf = 0; 94 u16 d_conf = 0;
95 u8 ultra = 0, ultra_conf = 0; 95 u8 ultra = 0, ultra_conf = 0;
96 u8 tmp0 = 0, tmp1 = 0, tmp2 = 0; 96 u8 tmp0 = 0, tmp1 = 0, tmp2 = 0;
@@ -116,7 +116,7 @@ static void aec6210_set_mode(ide_drive_t *drive, const u8 speed)
116static void aec6260_set_mode(ide_drive_t *drive, const u8 speed) 116static void aec6260_set_mode(ide_drive_t *drive, const u8 speed)
117{ 117{
118 ide_hwif_t *hwif = HWIF(drive); 118 ide_hwif_t *hwif = HWIF(drive);
119 struct pci_dev *dev = hwif->pci_dev; 119 struct pci_dev *dev = to_pci_dev(hwif->dev);
120 u8 unit = (drive->select.b.unit & 0x01); 120 u8 unit = (drive->select.b.unit & 0x01);
121 u8 tmp1 = 0, tmp2 = 0; 121 u8 tmp1 = 0, tmp2 = 0;
122 u8 ultra = 0, drive_conf = 0, ultra_conf = 0; 122 u8 ultra = 0, drive_conf = 0, ultra_conf = 0;
@@ -170,7 +170,7 @@ static unsigned int __devinit init_chipset_aec62xx(struct pci_dev *dev, const ch
170 170
171static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif) 171static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
172{ 172{
173 struct pci_dev *dev = hwif->pci_dev; 173 struct pci_dev *dev = to_pci_dev(hwif->dev);
174 174
175 hwif->set_pio_mode = &aec_set_pio_mode; 175 hwif->set_pio_mode = &aec_set_pio_mode;
176 176
@@ -188,7 +188,7 @@ static void __devinit init_hwif_aec62xx(ide_hwif_t *hwif)
188 if (hwif->cbl != ATA_CBL_PATA40_SHORT) { 188 if (hwif->cbl != ATA_CBL_PATA40_SHORT) {
189 u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01; 189 u8 ata66 = 0, mask = hwif->channel ? 0x02 : 0x01;
190 190
191 pci_read_config_byte(hwif->pci_dev, 0x49, &ata66); 191 pci_read_config_byte(dev, 0x49, &ata66);
192 192
193 hwif->cbl = (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; 193 hwif->cbl = (ata66 & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
194 } 194 }
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c
index 0b65a2c9308f..88148404d918 100644
--- a/drivers/ide/pci/alim15x3.c
+++ b/drivers/ide/pci/alim15x3.c
@@ -293,7 +293,7 @@ static int ali_get_info (char *buffer, char **addr, off_t offset, int count)
293static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio) 293static void ali_set_pio_mode(ide_drive_t *drive, const u8 pio)
294{ 294{
295 ide_hwif_t *hwif = HWIF(drive); 295 ide_hwif_t *hwif = HWIF(drive);
296 struct pci_dev *dev = hwif->pci_dev; 296 struct pci_dev *dev = to_pci_dev(hwif->dev);
297 int s_time, a_time, c_time; 297 int s_time, a_time, c_time;
298 u8 s_clc, a_clc, r_clc; 298 u8 s_clc, a_clc, r_clc;
299 unsigned long flags; 299 unsigned long flags;
@@ -396,7 +396,7 @@ static u8 ali_udma_filter(ide_drive_t *drive)
396static void ali_set_dma_mode(ide_drive_t *drive, const u8 speed) 396static void ali_set_dma_mode(ide_drive_t *drive, const u8 speed)
397{ 397{
398 ide_hwif_t *hwif = HWIF(drive); 398 ide_hwif_t *hwif = HWIF(drive);
399 struct pci_dev *dev = hwif->pci_dev; 399 struct pci_dev *dev = to_pci_dev(hwif->dev);
400 u8 speed1 = speed; 400 u8 speed1 = speed;
401 u8 unit = (drive->select.b.unit & 0x01); 401 u8 unit = (drive->select.b.unit & 0x01);
402 u8 tmpbyte = 0x00; 402 u8 tmpbyte = 0x00;
@@ -625,7 +625,7 @@ static int ali_cable_override(struct pci_dev *pdev)
625 625
626static u8 __devinit ata66_ali15x3(ide_hwif_t *hwif) 626static u8 __devinit ata66_ali15x3(ide_hwif_t *hwif)
627{ 627{
628 struct pci_dev *dev = hwif->pci_dev; 628 struct pci_dev *dev = to_pci_dev(hwif->dev);
629 unsigned long flags; 629 unsigned long flags;
630 u8 cbl = ATA_CBL_PATA40, tmpbyte; 630 u8 cbl = ATA_CBL_PATA40, tmpbyte;
631 631
@@ -688,12 +688,13 @@ static void __devinit init_hwif_common_ali15x3 (ide_hwif_t *hwif)
688 688
689static void __devinit init_hwif_ali15x3 (ide_hwif_t *hwif) 689static void __devinit init_hwif_ali15x3 (ide_hwif_t *hwif)
690{ 690{
691 struct pci_dev *dev = to_pci_dev(hwif->dev);
691 u8 ideic, inmir; 692 u8 ideic, inmir;
692 s8 irq_routing_table[] = { -1, 9, 3, 10, 4, 5, 7, 6, 693 s8 irq_routing_table[] = { -1, 9, 3, 10, 4, 5, 7, 6,
693 1, 11, 0, 12, 0, 14, 0, 15 }; 694 1, 11, 0, 12, 0, 14, 0, 15 };
694 int irq = -1; 695 int irq = -1;
695 696
696 if (hwif->pci_dev->device == PCI_DEVICE_ID_AL_M5229) 697 if (dev->device == PCI_DEVICE_ID_AL_M5229)
697 hwif->irq = hwif->channel ? 15 : 14; 698 hwif->irq = hwif->channel ? 15 : 14;
698 699
699 if (isa_dev) { 700 if (isa_dev) {
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c
index 2e8cbcaf3ef5..ebc16deffe16 100644
--- a/drivers/ide/pci/amd74xx.c
+++ b/drivers/ide/pci/amd74xx.c
@@ -86,6 +86,7 @@ static void amd_set_speed(struct pci_dev *dev, u8 dn, u8 udma_mask,
86static void amd_set_drive(ide_drive_t *drive, const u8 speed) 86static void amd_set_drive(ide_drive_t *drive, const u8 speed)
87{ 87{
88 ide_hwif_t *hwif = drive->hwif; 88 ide_hwif_t *hwif = drive->hwif;
89 struct pci_dev *dev = to_pci_dev(hwif->dev);
89 ide_drive_t *peer = hwif->drives + (~drive->dn & 1); 90 ide_drive_t *peer = hwif->drives + (~drive->dn & 1);
90 struct ide_timing t, p; 91 struct ide_timing t, p;
91 int T, UT; 92 int T, UT;
@@ -104,7 +105,7 @@ static void amd_set_drive(ide_drive_t *drive, const u8 speed)
104 if (speed == XFER_UDMA_5 && amd_clock <= 33333) t.udma = 1; 105 if (speed == XFER_UDMA_5 && amd_clock <= 33333) t.udma = 1;
105 if (speed == XFER_UDMA_6 && amd_clock <= 33333) t.udma = 15; 106 if (speed == XFER_UDMA_6 && amd_clock <= 33333) t.udma = 15;
106 107
107 amd_set_speed(hwif->pci_dev, drive->dn, udma_mask, &t); 108 amd_set_speed(dev, drive->dn, udma_mask, &t);
108} 109}
109 110
110/* 111/*
@@ -202,8 +203,10 @@ static unsigned int __devinit init_chipset_amd74xx(struct pci_dev *dev,
202 203
203static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif) 204static void __devinit init_hwif_amd74xx(ide_hwif_t *hwif)
204{ 205{
206 struct pci_dev *dev = to_pci_dev(hwif->dev);
207
205 if (hwif->irq == 0) /* 0 is bogus but will do for now */ 208 if (hwif->irq == 0) /* 0 is bogus but will do for now */
206 hwif->irq = pci_get_legacy_ide_irq(hwif->pci_dev, hwif->channel); 209 hwif->irq = pci_get_legacy_ide_irq(dev, hwif->channel);
207 210
208 hwif->set_pio_mode = &amd_set_pio_mode; 211 hwif->set_pio_mode = &amd_set_pio_mode;
209 hwif->set_dma_mode = &amd_set_drive; 212 hwif->set_dma_mode = &amd_set_drive;
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c
index 491871984aaa..ab856d3583e1 100644
--- a/drivers/ide/pci/atiixp.c
+++ b/drivers/ide/pci/atiixp.c
@@ -55,7 +55,7 @@ static DEFINE_SPINLOCK(atiixp_lock);
55 55
56static void atiixp_set_pio_mode(ide_drive_t *drive, const u8 pio) 56static void atiixp_set_pio_mode(ide_drive_t *drive, const u8 pio)
57{ 57{
58 struct pci_dev *dev = drive->hwif->pci_dev; 58 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
59 unsigned long flags; 59 unsigned long flags;
60 int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8; 60 int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8;
61 u32 pio_timing_data; 61 u32 pio_timing_data;
@@ -88,7 +88,7 @@ static void atiixp_set_pio_mode(ide_drive_t *drive, const u8 pio)
88 88
89static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed) 89static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed)
90{ 90{
91 struct pci_dev *dev = drive->hwif->pci_dev; 91 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
92 unsigned long flags; 92 unsigned long flags;
93 int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8; 93 int timing_shift = (drive->dn & 2) ? 16 : 0 + (drive->dn & 1) ? 0 : 8;
94 u32 tmp32; 94 u32 tmp32;
@@ -133,9 +133,8 @@ static void atiixp_set_dma_mode(ide_drive_t *drive, const u8 speed)
133 133
134static void __devinit init_hwif_atiixp(ide_hwif_t *hwif) 134static void __devinit init_hwif_atiixp(ide_hwif_t *hwif)
135{ 135{
136 u8 udma_mode = 0; 136 struct pci_dev *pdev = to_pci_dev(hwif->dev);
137 u8 ch = hwif->channel; 137 u8 udma_mode = 0, ch = hwif->channel;
138 struct pci_dev *pdev = hwif->pci_dev;
139 138
140 hwif->set_pio_mode = &atiixp_set_pio_mode; 139 hwif->set_pio_mode = &atiixp_set_pio_mode;
141 hwif->set_dma_mode = &atiixp_set_dma_mode; 140 hwif->set_dma_mode = &atiixp_set_dma_mode;
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c
index effd79a715b0..70265d5c59ba 100644
--- a/drivers/ide/pci/cmd64x.c
+++ b/drivers/ide/pci/cmd64x.c
@@ -71,7 +71,7 @@ static u8 quantize_timing(int timing, int quant)
71 */ 71 */
72static void program_cycle_times (ide_drive_t *drive, int cycle_time, int active_time) 72static void program_cycle_times (ide_drive_t *drive, int cycle_time, int active_time)
73{ 73{
74 struct pci_dev *dev = HWIF(drive)->pci_dev; 74 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
75 int clock_time = 1000 / system_bus_clock(); 75 int clock_time = 1000 / system_bus_clock();
76 u8 cycle_count, active_count, recovery_count, drwtim; 76 u8 cycle_count, active_count, recovery_count, drwtim;
77 static const u8 recovery_values[] = 77 static const u8 recovery_values[] =
@@ -118,7 +118,7 @@ static void program_cycle_times (ide_drive_t *drive, int cycle_time, int active_
118static void cmd64x_tune_pio(ide_drive_t *drive, const u8 pio) 118static void cmd64x_tune_pio(ide_drive_t *drive, const u8 pio)
119{ 119{
120 ide_hwif_t *hwif = HWIF(drive); 120 ide_hwif_t *hwif = HWIF(drive);
121 struct pci_dev *dev = hwif->pci_dev; 121 struct pci_dev *dev = to_pci_dev(hwif->dev);
122 unsigned int cycle_time; 122 unsigned int cycle_time;
123 u8 setup_count, arttim = 0; 123 u8 setup_count, arttim = 0;
124 124
@@ -183,7 +183,7 @@ static void cmd64x_set_pio_mode(ide_drive_t *drive, const u8 pio)
183static void cmd64x_set_dma_mode(ide_drive_t *drive, const u8 speed) 183static void cmd64x_set_dma_mode(ide_drive_t *drive, const u8 speed)
184{ 184{
185 ide_hwif_t *hwif = HWIF(drive); 185 ide_hwif_t *hwif = HWIF(drive);
186 struct pci_dev *dev = hwif->pci_dev; 186 struct pci_dev *dev = to_pci_dev(hwif->dev);
187 u8 unit = drive->dn & 0x01; 187 u8 unit = drive->dn & 0x01;
188 u8 regU = 0, pciU = hwif->channel ? UDIDETCR1 : UDIDETCR0; 188 u8 regU = 0, pciU = hwif->channel ? UDIDETCR1 : UDIDETCR0;
189 189
@@ -245,7 +245,7 @@ static int cmd648_ide_dma_end (ide_drive_t *drive)
245static int cmd64x_ide_dma_end (ide_drive_t *drive) 245static int cmd64x_ide_dma_end (ide_drive_t *drive)
246{ 246{
247 ide_hwif_t *hwif = HWIF(drive); 247 ide_hwif_t *hwif = HWIF(drive);
248 struct pci_dev *dev = hwif->pci_dev; 248 struct pci_dev *dev = to_pci_dev(hwif->dev);
249 int irq_reg = hwif->channel ? ARTTIM23 : CFR; 249 int irq_reg = hwif->channel ? ARTTIM23 : CFR;
250 u8 irq_mask = hwif->channel ? ARTTIM23_INTR_CH1 : 250 u8 irq_mask = hwif->channel ? ARTTIM23_INTR_CH1 :
251 CFR_INTR_CH0; 251 CFR_INTR_CH0;
@@ -285,7 +285,7 @@ static int cmd648_ide_dma_test_irq (ide_drive_t *drive)
285static int cmd64x_ide_dma_test_irq (ide_drive_t *drive) 285static int cmd64x_ide_dma_test_irq (ide_drive_t *drive)
286{ 286{
287 ide_hwif_t *hwif = HWIF(drive); 287 ide_hwif_t *hwif = HWIF(drive);
288 struct pci_dev *dev = hwif->pci_dev; 288 struct pci_dev *dev = to_pci_dev(hwif->dev);
289 int irq_reg = hwif->channel ? ARTTIM23 : CFR; 289 int irq_reg = hwif->channel ? ARTTIM23 : CFR;
290 u8 irq_mask = hwif->channel ? ARTTIM23_INTR_CH1 : 290 u8 irq_mask = hwif->channel ? ARTTIM23_INTR_CH1 :
291 CFR_INTR_CH0; 291 CFR_INTR_CH0;
@@ -375,7 +375,7 @@ static unsigned int __devinit init_chipset_cmd64x(struct pci_dev *dev, const cha
375 375
376static u8 __devinit ata66_cmd64x(ide_hwif_t *hwif) 376static u8 __devinit ata66_cmd64x(ide_hwif_t *hwif)
377{ 377{
378 struct pci_dev *dev = hwif->pci_dev; 378 struct pci_dev *dev = to_pci_dev(hwif->dev);
379 u8 bmidecsr = 0, mask = hwif->channel ? 0x02 : 0x01; 379 u8 bmidecsr = 0, mask = hwif->channel ? 0x02 : 0x01;
380 380
381 switch (dev->device) { 381 switch (dev->device) {
@@ -390,7 +390,7 @@ static u8 __devinit ata66_cmd64x(ide_hwif_t *hwif)
390 390
391static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif) 391static void __devinit init_hwif_cmd64x(ide_hwif_t *hwif)
392{ 392{
393 struct pci_dev *dev = hwif->pci_dev; 393 struct pci_dev *dev = to_pci_dev(hwif->dev);
394 394
395 hwif->set_pio_mode = &cmd64x_set_pio_mode; 395 hwif->set_pio_mode = &cmd64x_set_pio_mode;
396 hwif->set_dma_mode = &cmd64x_set_dma_mode; 396 hwif->set_dma_mode = &cmd64x_set_dma_mode;
diff --git a/drivers/ide/pci/cs5520.c b/drivers/ide/pci/cs5520.c
index 6ec00b8d7ec1..9e01c6dc758e 100644
--- a/drivers/ide/pci/cs5520.c
+++ b/drivers/ide/pci/cs5520.c
@@ -69,7 +69,7 @@ static struct pio_clocks cs5520_pio_clocks[]={
69static void cs5520_set_pio_mode(ide_drive_t *drive, const u8 pio) 69static void cs5520_set_pio_mode(ide_drive_t *drive, const u8 pio)
70{ 70{
71 ide_hwif_t *hwif = HWIF(drive); 71 ide_hwif_t *hwif = HWIF(drive);
72 struct pci_dev *pdev = hwif->pci_dev; 72 struct pci_dev *pdev = to_pci_dev(hwif->dev);
73 int controller = drive->dn > 1 ? 1 : 0; 73 int controller = drive->dn > 1 ? 1 : 0;
74 74
75 /* FIXME: if DMA = 1 do we need to set the DMA bit here ? */ 75 /* FIXME: if DMA = 1 do we need to set the DMA bit here ? */
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c
index 50b3d7791f55..e44011481fa6 100644
--- a/drivers/ide/pci/cs5535.c
+++ b/drivers/ide/pci/cs5535.c
@@ -177,13 +177,15 @@ static u8 __devinit cs5535_cable_detect(struct pci_dev *dev)
177 */ 177 */
178static void __devinit init_hwif_cs5535(ide_hwif_t *hwif) 178static void __devinit init_hwif_cs5535(ide_hwif_t *hwif)
179{ 179{
180 struct pci_dev *dev = to_pci_dev(hwif->dev);
181
180 hwif->set_pio_mode = &cs5535_set_pio_mode; 182 hwif->set_pio_mode = &cs5535_set_pio_mode;
181 hwif->set_dma_mode = &cs5535_set_dma_mode; 183 hwif->set_dma_mode = &cs5535_set_dma_mode;
182 184
183 if (hwif->dma_base == 0) 185 if (hwif->dma_base == 0)
184 return; 186 return;
185 187
186 hwif->cbl = cs5535_cable_detect(hwif->pci_dev); 188 hwif->cbl = cs5535_cable_detect(dev);
187} 189}
188 190
189static const struct ide_port_info cs5535_chipset __devinitdata = { 191static const struct ide_port_info cs5535_chipset __devinitdata = {
diff --git a/drivers/ide/pci/cy82c693.c b/drivers/ide/pci/cy82c693.c
index 3ec4c659a37d..d43c52da4906 100644
--- a/drivers/ide/pci/cy82c693.c
+++ b/drivers/ide/pci/cy82c693.c
@@ -228,7 +228,7 @@ static void cy82c693_set_dma_mode(ide_drive_t *drive, const u8 mode)
228static void cy82c693_set_pio_mode(ide_drive_t *drive, const u8 pio) 228static void cy82c693_set_pio_mode(ide_drive_t *drive, const u8 pio)
229{ 229{
230 ide_hwif_t *hwif = HWIF(drive); 230 ide_hwif_t *hwif = HWIF(drive);
231 struct pci_dev *dev = hwif->pci_dev; 231 struct pci_dev *dev = to_pci_dev(hwif->dev);
232 pio_clocks_t pclk; 232 pio_clocks_t pclk;
233 unsigned int addrCtrl; 233 unsigned int addrCtrl;
234 234
@@ -397,8 +397,9 @@ static void __devinit init_hwif_cy82c693(ide_hwif_t *hwif)
397static void __devinit init_iops_cy82c693(ide_hwif_t *hwif) 397static void __devinit init_iops_cy82c693(ide_hwif_t *hwif)
398{ 398{
399 static ide_hwif_t *primary; 399 static ide_hwif_t *primary;
400 struct pci_dev *dev = to_pci_dev(hwif->dev);
400 401
401 if (PCI_FUNC(hwif->pci_dev->devfn) == 1) 402 if (PCI_FUNC(dev->devfn) == 1)
402 primary = hwif; 403 primary = hwif;
403 else { 404 else {
404 hwif->mate = primary; 405 hwif->mate = primary;
diff --git a/drivers/ide/pci/delkin_cb.c b/drivers/ide/pci/delkin_cb.c
index 26aa492071bb..81d0bf6fcc60 100644
--- a/drivers/ide/pci/delkin_cb.c
+++ b/drivers/ide/pci/delkin_cb.c
@@ -87,7 +87,7 @@ delkin_cb_probe (struct pci_dev *dev, const struct pci_device_id *id)
87 return -ENODEV; 87 return -ENODEV;
88 } 88 }
89 pci_set_drvdata(dev, hwif); 89 pci_set_drvdata(dev, hwif);
90 hwif->pci_dev = dev; 90 hwif->dev = &dev->dev;
91 drive = &hwif->drives[0]; 91 drive = &hwif->drives[0];
92 if (drive->present) { 92 if (drive->present) {
93 drive->io_32bit = 1; 93 drive->io_32bit = 1;
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c
index 48a9ff2e8c33..7f6abc68c0bb 100644
--- a/drivers/ide/pci/hpt34x.c
+++ b/drivers/ide/pci/hpt34x.c
@@ -45,7 +45,7 @@
45 45
46static void hpt34x_set_mode(ide_drive_t *drive, const u8 speed) 46static void hpt34x_set_mode(ide_drive_t *drive, const u8 speed)
47{ 47{
48 struct pci_dev *dev = HWIF(drive)->pci_dev; 48 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
49 u32 reg1= 0, tmp1 = 0, reg2 = 0, tmp2 = 0; 49 u32 reg1= 0, tmp1 = 0, reg2 = 0, tmp2 = 0;
50 u8 hi_speed, lo_speed; 50 u8 hi_speed, lo_speed;
51 51
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c
index d33a3f9c12b7..7429a55c164e 100644
--- a/drivers/ide/pci/hpt366.c
+++ b/drivers/ide/pci/hpt366.c
@@ -626,7 +626,8 @@ static int check_in_drive_list(ide_drive_t *drive, const char **list)
626static u8 hpt3xx_udma_filter(ide_drive_t *drive) 626static u8 hpt3xx_udma_filter(ide_drive_t *drive)
627{ 627{
628 ide_hwif_t *hwif = HWIF(drive); 628 ide_hwif_t *hwif = HWIF(drive);
629 struct hpt_info *info = pci_get_drvdata(hwif->pci_dev); 629 struct pci_dev *dev = to_pci_dev(hwif->dev);
630 struct hpt_info *info = pci_get_drvdata(dev);
630 u8 mask = hwif->ultra_mask; 631 u8 mask = hwif->ultra_mask;
631 632
632 switch (info->chip_type) { 633 switch (info->chip_type) {
@@ -665,7 +666,8 @@ static u8 hpt3xx_udma_filter(ide_drive_t *drive)
665static u8 hpt3xx_mdma_filter(ide_drive_t *drive) 666static u8 hpt3xx_mdma_filter(ide_drive_t *drive)
666{ 667{
667 ide_hwif_t *hwif = HWIF(drive); 668 ide_hwif_t *hwif = HWIF(drive);
668 struct hpt_info *info = pci_get_drvdata(hwif->pci_dev); 669 struct pci_dev *dev = to_pci_dev(hwif->dev);
670 struct hpt_info *info = pci_get_drvdata(dev);
669 671
670 switch (info->chip_type) { 672 switch (info->chip_type) {
671 case HPT372 : 673 case HPT372 :
@@ -699,7 +701,7 @@ static u32 get_speed_setting(u8 speed, struct hpt_info *info)
699 701
700static void hpt3xx_set_mode(ide_drive_t *drive, const u8 speed) 702static void hpt3xx_set_mode(ide_drive_t *drive, const u8 speed)
701{ 703{
702 struct pci_dev *dev = HWIF(drive)->pci_dev; 704 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
703 struct hpt_info *info = pci_get_drvdata(dev); 705 struct hpt_info *info = pci_get_drvdata(dev);
704 struct hpt_timings *t = info->timings; 706 struct hpt_timings *t = info->timings;
705 u8 itr_addr = 0x40 + (drive->dn * 4); 707 u8 itr_addr = 0x40 + (drive->dn * 4);
@@ -742,7 +744,7 @@ static void hpt3xx_quirkproc(ide_drive_t *drive)
742static void hpt3xx_maskproc(ide_drive_t *drive, int mask) 744static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
743{ 745{
744 ide_hwif_t *hwif = HWIF(drive); 746 ide_hwif_t *hwif = HWIF(drive);
745 struct pci_dev *dev = hwif->pci_dev; 747 struct pci_dev *dev = to_pci_dev(hwif->dev);
746 struct hpt_info *info = pci_get_drvdata(dev); 748 struct hpt_info *info = pci_get_drvdata(dev);
747 749
748 if (drive->quirk_list) { 750 if (drive->quirk_list) {
@@ -774,7 +776,7 @@ static void hpt3xx_maskproc(ide_drive_t *drive, int mask)
774 */ 776 */
775static void hpt366_dma_lost_irq(ide_drive_t *drive) 777static void hpt366_dma_lost_irq(ide_drive_t *drive)
776{ 778{
777 struct pci_dev *dev = HWIF(drive)->pci_dev; 779 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
778 u8 mcr1 = 0, mcr3 = 0, scr1 = 0; 780 u8 mcr1 = 0, mcr3 = 0, scr1 = 0;
779 781
780 pci_read_config_byte(dev, 0x50, &mcr1); 782 pci_read_config_byte(dev, 0x50, &mcr1);
@@ -790,18 +792,20 @@ static void hpt366_dma_lost_irq(ide_drive_t *drive)
790static void hpt370_clear_engine(ide_drive_t *drive) 792static void hpt370_clear_engine(ide_drive_t *drive)
791{ 793{
792 ide_hwif_t *hwif = HWIF(drive); 794 ide_hwif_t *hwif = HWIF(drive);
795 struct pci_dev *dev = to_pci_dev(hwif->dev);
793 796
794 pci_write_config_byte(hwif->pci_dev, hwif->select_data, 0x37); 797 pci_write_config_byte(dev, hwif->select_data, 0x37);
795 udelay(10); 798 udelay(10);
796} 799}
797 800
798static void hpt370_irq_timeout(ide_drive_t *drive) 801static void hpt370_irq_timeout(ide_drive_t *drive)
799{ 802{
800 ide_hwif_t *hwif = HWIF(drive); 803 ide_hwif_t *hwif = HWIF(drive);
804 struct pci_dev *dev = to_pci_dev(hwif->dev);
801 u16 bfifo = 0; 805 u16 bfifo = 0;
802 u8 dma_cmd; 806 u8 dma_cmd;
803 807
804 pci_read_config_word(hwif->pci_dev, hwif->select_data + 2, &bfifo); 808 pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
805 printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff); 809 printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff);
806 810
807 /* get DMA command mode */ 811 /* get DMA command mode */
@@ -844,10 +848,11 @@ static void hpt370_dma_timeout(ide_drive_t *drive)
844static int hpt374_ide_dma_test_irq(ide_drive_t *drive) 848static int hpt374_ide_dma_test_irq(ide_drive_t *drive)
845{ 849{
846 ide_hwif_t *hwif = HWIF(drive); 850 ide_hwif_t *hwif = HWIF(drive);
851 struct pci_dev *dev = to_pci_dev(hwif->dev);
847 u16 bfifo = 0; 852 u16 bfifo = 0;
848 u8 dma_stat; 853 u8 dma_stat;
849 854
850 pci_read_config_word(hwif->pci_dev, hwif->select_data + 2, &bfifo); 855 pci_read_config_word(dev, hwif->select_data + 2, &bfifo);
851 if (bfifo & 0x1FF) { 856 if (bfifo & 0x1FF) {
852// printk("%s: %d bytes in FIFO\n", drive->name, bfifo); 857// printk("%s: %d bytes in FIFO\n", drive->name, bfifo);
853 return 0; 858 return 0;
@@ -867,7 +872,7 @@ static int hpt374_ide_dma_test_irq(ide_drive_t *drive)
867static int hpt374_ide_dma_end(ide_drive_t *drive) 872static int hpt374_ide_dma_end(ide_drive_t *drive)
868{ 873{
869 ide_hwif_t *hwif = HWIF(drive); 874 ide_hwif_t *hwif = HWIF(drive);
870 struct pci_dev *dev = hwif->pci_dev; 875 struct pci_dev *dev = to_pci_dev(hwif->dev);
871 u8 mcr = 0, mcr_addr = hwif->select_data; 876 u8 mcr = 0, mcr_addr = hwif->select_data;
872 u8 bwsr = 0, mask = hwif->channel ? 0x02 : 0x01; 877 u8 bwsr = 0, mask = hwif->channel ? 0x02 : 0x01;
873 878
@@ -942,7 +947,7 @@ static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq)
942static int hpt3xx_busproc(ide_drive_t *drive, int state) 947static int hpt3xx_busproc(ide_drive_t *drive, int state)
943{ 948{
944 ide_hwif_t *hwif = HWIF(drive); 949 ide_hwif_t *hwif = HWIF(drive);
945 struct pci_dev *dev = hwif->pci_dev; 950 struct pci_dev *dev = to_pci_dev(hwif->dev);
946 u8 mcr_addr = hwif->select_data + 2; 951 u8 mcr_addr = hwif->select_data + 2;
947 u8 resetmask = hwif->channel ? 0x80 : 0x40; 952 u8 resetmask = hwif->channel ? 0x80 : 0x40;
948 u8 bsr2 = 0; 953 u8 bsr2 = 0;
@@ -1278,7 +1283,7 @@ static unsigned int __devinit init_chipset_hpt366(struct pci_dev *dev, const cha
1278 1283
1279static void __devinit init_hwif_hpt366(ide_hwif_t *hwif) 1284static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1280{ 1285{
1281 struct pci_dev *dev = hwif->pci_dev; 1286 struct pci_dev *dev = to_pci_dev(hwif->dev);
1282 struct hpt_info *info = pci_get_drvdata(dev); 1287 struct hpt_info *info = pci_get_drvdata(dev);
1283 int serialize = HPT_SERIALIZE_IO; 1288 int serialize = HPT_SERIALIZE_IO;
1284 u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02; 1289 u8 scr1 = 0, ata66 = hwif->channel ? 0x01 : 0x02;
@@ -1393,7 +1398,7 @@ static void __devinit init_hwif_hpt366(ide_hwif_t *hwif)
1393 1398
1394static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase) 1399static void __devinit init_dma_hpt366(ide_hwif_t *hwif, unsigned long dmabase)
1395{ 1400{
1396 struct pci_dev *dev = hwif->pci_dev; 1401 struct pci_dev *dev = to_pci_dev(hwif->dev);
1397 u8 masterdma = 0, slavedma = 0; 1402 u8 masterdma = 0, slavedma = 0;
1398 u8 dma_new = 0, dma_old = 0; 1403 u8 dma_new = 0, dma_old = 0;
1399 unsigned long flags; 1404 unsigned long flags;
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c
index 2a0f45c4f4c4..df74e588a530 100644
--- a/drivers/ide/pci/it8213.c
+++ b/drivers/ide/pci/it8213.c
@@ -28,7 +28,7 @@
28static void it8213_set_pio_mode(ide_drive_t *drive, const u8 pio) 28static void it8213_set_pio_mode(ide_drive_t *drive, const u8 pio)
29{ 29{
30 ide_hwif_t *hwif = HWIF(drive); 30 ide_hwif_t *hwif = HWIF(drive);
31 struct pci_dev *dev = hwif->pci_dev; 31 struct pci_dev *dev = to_pci_dev(hwif->dev);
32 int is_slave = drive->dn & 1; 32 int is_slave = drive->dn & 1;
33 int master_port = 0x40; 33 int master_port = 0x40;
34 int slave_port = 0x44; 34 int slave_port = 0x44;
@@ -85,7 +85,7 @@ static void it8213_set_pio_mode(ide_drive_t *drive, const u8 pio)
85static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed) 85static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed)
86{ 86{
87 ide_hwif_t *hwif = HWIF(drive); 87 ide_hwif_t *hwif = HWIF(drive);
88 struct pci_dev *dev = hwif->pci_dev; 88 struct pci_dev *dev = to_pci_dev(hwif->dev);
89 u8 maslave = 0x40; 89 u8 maslave = 0x40;
90 int a_speed = 3 << (drive->dn * 4); 90 int a_speed = 3 << (drive->dn * 4);
91 int u_flag = 1 << drive->dn; 91 int u_flag = 1 << drive->dn;
@@ -152,6 +152,7 @@ static void it8213_set_dma_mode(ide_drive_t *drive, const u8 speed)
152 152
153static void __devinit init_hwif_it8213(ide_hwif_t *hwif) 153static void __devinit init_hwif_it8213(ide_hwif_t *hwif)
154{ 154{
155 struct pci_dev *dev = to_pci_dev(hwif->dev);
155 u8 reg42h = 0; 156 u8 reg42h = 0;
156 157
157 hwif->set_dma_mode = &it8213_set_dma_mode; 158 hwif->set_dma_mode = &it8213_set_dma_mode;
@@ -160,7 +161,7 @@ static void __devinit init_hwif_it8213(ide_hwif_t *hwif)
160 if (!hwif->dma_base) 161 if (!hwif->dma_base)
161 return; 162 return;
162 163
163 pci_read_config_byte(hwif->pci_dev, 0x42, &reg42h); 164 pci_read_config_byte(dev, 0x42, &reg42h);
164 165
165 if (hwif->cbl != ATA_CBL_PATA40_SHORT) 166 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
166 hwif->cbl = (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; 167 hwif->cbl = (reg42h & 0x02) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c
index e610a5340fdc..c0797b82ce78 100644
--- a/drivers/ide/pci/it821x.c
+++ b/drivers/ide/pci/it821x.c
@@ -113,7 +113,8 @@ static int it8212_noraid;
113 113
114static void it821x_program(ide_drive_t *drive, u16 timing) 114static void it821x_program(ide_drive_t *drive, u16 timing)
115{ 115{
116 ide_hwif_t *hwif = drive->hwif; 116 ide_hwif_t *hwif = drive->hwif;
117 struct pci_dev *dev = to_pci_dev(hwif->dev);
117 struct it821x_dev *itdev = ide_get_hwifdata(hwif); 118 struct it821x_dev *itdev = ide_get_hwifdata(hwif);
118 int channel = hwif->channel; 119 int channel = hwif->channel;
119 u8 conf; 120 u8 conf;
@@ -123,7 +124,8 @@ static void it821x_program(ide_drive_t *drive, u16 timing)
123 conf = timing >> 8; 124 conf = timing >> 8;
124 else 125 else
125 conf = timing & 0xFF; 126 conf = timing & 0xFF;
126 pci_write_config_byte(hwif->pci_dev, 0x54 + 4 * channel, conf); 127
128 pci_write_config_byte(dev, 0x54 + 4 * channel, conf);
127} 129}
128 130
129/** 131/**
@@ -137,7 +139,8 @@ static void it821x_program(ide_drive_t *drive, u16 timing)
137 139
138static void it821x_program_udma(ide_drive_t *drive, u16 timing) 140static void it821x_program_udma(ide_drive_t *drive, u16 timing)
139{ 141{
140 ide_hwif_t *hwif = drive->hwif; 142 ide_hwif_t *hwif = drive->hwif;
143 struct pci_dev *dev = to_pci_dev(hwif->dev);
141 struct it821x_dev *itdev = ide_get_hwifdata(hwif); 144 struct it821x_dev *itdev = ide_get_hwifdata(hwif);
142 int channel = hwif->channel; 145 int channel = hwif->channel;
143 int unit = drive->select.b.unit; 146 int unit = drive->select.b.unit;
@@ -148,11 +151,12 @@ static void it821x_program_udma(ide_drive_t *drive, u16 timing)
148 conf = timing >> 8; 151 conf = timing >> 8;
149 else 152 else
150 conf = timing & 0xFF; 153 conf = timing & 0xFF;
151 if(itdev->timing10 == 0) 154
152 pci_write_config_byte(hwif->pci_dev, 0x56 + 4 * channel + unit, conf); 155 if (itdev->timing10 == 0)
156 pci_write_config_byte(dev, 0x56 + 4 * channel + unit, conf);
153 else { 157 else {
154 pci_write_config_byte(hwif->pci_dev, 0x56 + 4 * channel, conf); 158 pci_write_config_byte(dev, 0x56 + 4 * channel, conf);
155 pci_write_config_byte(hwif->pci_dev, 0x56 + 4 * channel + 1, conf); 159 pci_write_config_byte(dev, 0x56 + 4 * channel + 1, conf);
156 } 160 }
157} 161}
158 162
@@ -167,6 +171,7 @@ static void it821x_program_udma(ide_drive_t *drive, u16 timing)
167static void it821x_clock_strategy(ide_drive_t *drive) 171static void it821x_clock_strategy(ide_drive_t *drive)
168{ 172{
169 ide_hwif_t *hwif = drive->hwif; 173 ide_hwif_t *hwif = drive->hwif;
174 struct pci_dev *dev = to_pci_dev(hwif->dev);
170 struct it821x_dev *itdev = ide_get_hwifdata(hwif); 175 struct it821x_dev *itdev = ide_get_hwifdata(hwif);
171 176
172 u8 unit = drive->select.b.unit; 177 u8 unit = drive->select.b.unit;
@@ -205,10 +210,11 @@ static void it821x_clock_strategy(ide_drive_t *drive)
205 itdev->clock_mode = ATA_50; 210 itdev->clock_mode = ATA_50;
206 sel = 1; 211 sel = 1;
207 } 212 }
208 pci_read_config_byte(hwif->pci_dev, 0x50, &v); 213
214 pci_read_config_byte(dev, 0x50, &v);
209 v &= ~(1 << (1 + hwif->channel)); 215 v &= ~(1 << (1 + hwif->channel));
210 v |= sel << (1 + hwif->channel); 216 v |= sel << (1 + hwif->channel);
211 pci_write_config_byte(hwif->pci_dev, 0x50, v); 217 pci_write_config_byte(dev, 0x50, v);
212 218
213 /* 219 /*
214 * Reprogram the UDMA/PIO of the pair drive for the switch 220 * Reprogram the UDMA/PIO of the pair drive for the switch
@@ -282,7 +288,8 @@ static void it821x_set_pio_mode(ide_drive_t *drive, const u8 pio)
282 288
283static void it821x_tune_mwdma (ide_drive_t *drive, byte mode_wanted) 289static void it821x_tune_mwdma (ide_drive_t *drive, byte mode_wanted)
284{ 290{
285 ide_hwif_t *hwif = drive->hwif; 291 ide_hwif_t *hwif = drive->hwif;
292 struct pci_dev *dev = to_pci_dev(hwif->dev);
286 struct it821x_dev *itdev = (void *)ide_get_hwifdata(hwif); 293 struct it821x_dev *itdev = (void *)ide_get_hwifdata(hwif);
287 int unit = drive->select.b.unit; 294 int unit = drive->select.b.unit;
288 int channel = hwif->channel; 295 int channel = hwif->channel;
@@ -297,12 +304,12 @@ static void it821x_tune_mwdma (ide_drive_t *drive, byte mode_wanted)
297 itdev->udma[unit] = UDMA_OFF; 304 itdev->udma[unit] = UDMA_OFF;
298 305
299 /* UDMA bits off - Revision 0x10 do them in pairs */ 306 /* UDMA bits off - Revision 0x10 do them in pairs */
300 pci_read_config_byte(hwif->pci_dev, 0x50, &conf); 307 pci_read_config_byte(dev, 0x50, &conf);
301 if(itdev->timing10) 308 if (itdev->timing10)
302 conf |= channel ? 0x60: 0x18; 309 conf |= channel ? 0x60: 0x18;
303 else 310 else
304 conf |= 1 << (3 + 2 * channel + unit); 311 conf |= 1 << (3 + 2 * channel + unit);
305 pci_write_config_byte(hwif->pci_dev, 0x50, conf); 312 pci_write_config_byte(dev, 0x50, conf);
306 313
307 it821x_clock_strategy(drive); 314 it821x_clock_strategy(drive);
308 /* FIXME: do we need to program this ? */ 315 /* FIXME: do we need to program this ? */
@@ -320,7 +327,8 @@ static void it821x_tune_mwdma (ide_drive_t *drive, byte mode_wanted)
320 327
321static void it821x_tune_udma (ide_drive_t *drive, byte mode_wanted) 328static void it821x_tune_udma (ide_drive_t *drive, byte mode_wanted)
322{ 329{
323 ide_hwif_t *hwif = drive->hwif; 330 ide_hwif_t *hwif = drive->hwif;
331 struct pci_dev *dev = to_pci_dev(hwif->dev);
324 struct it821x_dev *itdev = ide_get_hwifdata(hwif); 332 struct it821x_dev *itdev = ide_get_hwifdata(hwif);
325 int unit = drive->select.b.unit; 333 int unit = drive->select.b.unit;
326 int channel = hwif->channel; 334 int channel = hwif->channel;
@@ -337,12 +345,12 @@ static void it821x_tune_udma (ide_drive_t *drive, byte mode_wanted)
337 itdev->udma[unit] |= 0x8080; /* UDMA 5/6 select on */ 345 itdev->udma[unit] |= 0x8080; /* UDMA 5/6 select on */
338 346
339 /* UDMA on. Again revision 0x10 must do the pair */ 347 /* UDMA on. Again revision 0x10 must do the pair */
340 pci_read_config_byte(hwif->pci_dev, 0x50, &conf); 348 pci_read_config_byte(dev, 0x50, &conf);
341 if(itdev->timing10) 349 if (itdev->timing10)
342 conf &= channel ? 0x9F: 0xE7; 350 conf &= channel ? 0x9F: 0xE7;
343 else 351 else
344 conf &= ~ (1 << (3 + 2 * channel + unit)); 352 conf &= ~ (1 << (3 + 2 * channel + unit));
345 pci_write_config_byte(hwif->pci_dev, 0x50, conf); 353 pci_write_config_byte(dev, 0x50, conf);
346 354
347 it821x_clock_strategy(drive); 355 it821x_clock_strategy(drive);
348 it821x_program_udma(drive, itdev->udma[unit]); 356 it821x_program_udma(drive, itdev->udma[unit]);
@@ -520,6 +528,7 @@ static void __devinit it821x_quirkproc(ide_drive_t *drive)
520 528
521static void __devinit init_hwif_it821x(ide_hwif_t *hwif) 529static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
522{ 530{
531 struct pci_dev *dev = to_pci_dev(hwif->dev);
523 struct it821x_dev *idev = kzalloc(sizeof(struct it821x_dev), GFP_KERNEL); 532 struct it821x_dev *idev = kzalloc(sizeof(struct it821x_dev), GFP_KERNEL);
524 u8 conf; 533 u8 conf;
525 534
@@ -532,7 +541,7 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
532 541
533 ide_set_hwifdata(hwif, idev); 542 ide_set_hwifdata(hwif, idev);
534 543
535 pci_read_config_byte(hwif->pci_dev, 0x50, &conf); 544 pci_read_config_byte(dev, 0x50, &conf);
536 if (conf & 1) { 545 if (conf & 1) {
537 idev->smart = 1; 546 idev->smart = 1;
538 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; 547 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
@@ -555,7 +564,7 @@ static void __devinit init_hwif_it821x(ide_hwif_t *hwif)
555 * this is necessary. 564 * this is necessary.
556 */ 565 */
557 566
558 pci_read_config_byte(hwif->pci_dev, 0x08, &conf); 567 pci_read_config_byte(dev, 0x08, &conf);
559 if (conf == 0x10) { 568 if (conf == 0x10) {
560 idev->timing10 = 1; 569 idev->timing10 = 1;
561 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA; 570 hwif->host_flags |= IDE_HFLAG_NO_ATAPI_DMA;
diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c
index 0083eaf89c77..8b40f6479c55 100644
--- a/drivers/ide/pci/jmicron.c
+++ b/drivers/ide/pci/jmicron.c
@@ -30,7 +30,7 @@ typedef enum {
30 30
31static u8 __devinit ata66_jmicron(ide_hwif_t *hwif) 31static u8 __devinit ata66_jmicron(ide_hwif_t *hwif)
32{ 32{
33 struct pci_dev *pdev = hwif->pci_dev; 33 struct pci_dev *pdev = to_pci_dev(hwif->dev);
34 34
35 u32 control; 35 u32 control;
36 u32 control5; 36 u32 control5;
diff --git a/drivers/ide/pci/ns87415.c b/drivers/ide/pci/ns87415.c
index d4df4642dbb5..bd05a4aae61b 100644
--- a/drivers/ide/pci/ns87415.c
+++ b/drivers/ide/pci/ns87415.c
@@ -71,10 +71,9 @@ static u8 superio_ide_inb (unsigned long port)
71 71
72static void __devinit superio_ide_init_iops (struct hwif_s *hwif) 72static void __devinit superio_ide_init_iops (struct hwif_s *hwif)
73{ 73{
74 struct pci_dev *pdev = to_pci_dev(hwif->dev);
74 u32 base, dmabase; 75 u32 base, dmabase;
75 u8 tmp; 76 u8 port = hwif->channel, tmp;
76 struct pci_dev *pdev = hwif->pci_dev;
77 u8 port = hwif->channel;
78 77
79 base = pci_resource_start(pdev, port * 2) & ~3; 78 base = pci_resource_start(pdev, port * 2) & ~3;
80 dmabase = pci_resource_start(pdev, 4) & ~3; 79 dmabase = pci_resource_start(pdev, 4) & ~3;
@@ -93,10 +92,11 @@ static void __devinit superio_ide_init_iops (struct hwif_s *hwif)
93 92
94static void __devinit init_iops_ns87415(ide_hwif_t *hwif) 93static void __devinit init_iops_ns87415(ide_hwif_t *hwif)
95{ 94{
96 if (PCI_SLOT(hwif->pci_dev->devfn) == 0xE) { 95 struct pci_dev *dev = to_pci_dev(hwif->dev);
96
97 if (PCI_SLOT(dev->devfn) == 0xE)
97 /* Built-in - assume it's under superio. */ 98 /* Built-in - assume it's under superio. */
98 superio_ide_init_iops(hwif); 99 superio_ide_init_iops(hwif);
99 }
100} 100}
101#endif 101#endif
102 102
@@ -110,8 +110,8 @@ static unsigned int ns87415_count = 0, ns87415_control[MAX_HWIFS] = { 0 };
110static void ns87415_prepare_drive (ide_drive_t *drive, unsigned int use_dma) 110static void ns87415_prepare_drive (ide_drive_t *drive, unsigned int use_dma)
111{ 111{
112 ide_hwif_t *hwif = HWIF(drive); 112 ide_hwif_t *hwif = HWIF(drive);
113 struct pci_dev *dev = to_pci_dev(hwif->dev);
113 unsigned int bit, other, new, *old = (unsigned int *) hwif->select_data; 114 unsigned int bit, other, new, *old = (unsigned int *) hwif->select_data;
114 struct pci_dev *dev = hwif->pci_dev;
115 unsigned long flags; 115 unsigned long flags;
116 116
117 local_irq_save(flags); 117 local_irq_save(flags);
@@ -189,7 +189,7 @@ static int ns87415_ide_dma_setup(ide_drive_t *drive)
189 189
190static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif) 190static void __devinit init_hwif_ns87415 (ide_hwif_t *hwif)
191{ 191{
192 struct pci_dev *dev = hwif->pci_dev; 192 struct pci_dev *dev = to_pci_dev(hwif->dev);
193 unsigned int ctrl, using_inta; 193 unsigned int ctrl, using_inta;
194 u8 progif; 194 u8 progif;
195#ifdef __sparc_v9__ 195#ifdef __sparc_v9__
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c
index 89d2363a1ebd..bb29db03540e 100644
--- a/drivers/ide/pci/pdc202xx_new.c
+++ b/drivers/ide/pci/pdc202xx_new.c
@@ -149,6 +149,7 @@ static struct udma_timing {
149static void pdcnew_set_dma_mode(ide_drive_t *drive, const u8 speed) 149static void pdcnew_set_dma_mode(ide_drive_t *drive, const u8 speed)
150{ 150{
151 ide_hwif_t *hwif = HWIF(drive); 151 ide_hwif_t *hwif = HWIF(drive);
152 struct pci_dev *dev = to_pci_dev(hwif->dev);
152 u8 adj = (drive->dn & 1) ? 0x08 : 0x00; 153 u8 adj = (drive->dn & 1) ? 0x08 : 0x00;
153 154
154 /* 155 /*
@@ -159,7 +160,7 @@ static void pdcnew_set_dma_mode(ide_drive_t *drive, const u8 speed)
159 * As we set up the PLL to output 133 MHz for UltraDMA/133 capable 160 * As we set up the PLL to output 133 MHz for UltraDMA/133 capable
160 * chips, we must override the default register settings... 161 * chips, we must override the default register settings...
161 */ 162 */
162 if (max_dma_rate(hwif->pci_dev) == 4) { 163 if (max_dma_rate(dev) == 4) {
163 u8 mode = speed & 0x07; 164 u8 mode = speed & 0x07;
164 165
165 if (speed >= XFER_UDMA_0) { 166 if (speed >= XFER_UDMA_0) {
@@ -186,9 +187,10 @@ static void pdcnew_set_dma_mode(ide_drive_t *drive, const u8 speed)
186static void pdcnew_set_pio_mode(ide_drive_t *drive, const u8 pio) 187static void pdcnew_set_pio_mode(ide_drive_t *drive, const u8 pio)
187{ 188{
188 ide_hwif_t *hwif = drive->hwif; 189 ide_hwif_t *hwif = drive->hwif;
190 struct pci_dev *dev = to_pci_dev(hwif->dev);
189 u8 adj = (drive->dn & 1) ? 0x08 : 0x00; 191 u8 adj = (drive->dn & 1) ? 0x08 : 0x00;
190 192
191 if (max_dma_rate(hwif->pci_dev) == 4) { 193 if (max_dma_rate(dev) == 4) {
192 set_indexed_reg(hwif, 0x0c + adj, pio_timings[pio].reg0c); 194 set_indexed_reg(hwif, 0x0c + adj, pio_timings[pio].reg0c);
193 set_indexed_reg(hwif, 0x0d + adj, pio_timings[pio].reg0d); 195 set_indexed_reg(hwif, 0x0d + adj, pio_timings[pio].reg0d);
194 set_indexed_reg(hwif, 0x13 + adj, pio_timings[pio].reg13); 196 set_indexed_reg(hwif, 0x13 + adj, pio_timings[pio].reg13);
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c
index ea66383c5579..df1c5fa44a7c 100644
--- a/drivers/ide/pci/pdc202xx_old.c
+++ b/drivers/ide/pci/pdc202xx_old.c
@@ -66,7 +66,7 @@ static void pdc_old_disable_66MHz_clock(ide_hwif_t *);
66static void pdc202xx_set_mode(ide_drive_t *drive, const u8 speed) 66static void pdc202xx_set_mode(ide_drive_t *drive, const u8 speed)
67{ 67{
68 ide_hwif_t *hwif = HWIF(drive); 68 ide_hwif_t *hwif = HWIF(drive);
69 struct pci_dev *dev = hwif->pci_dev; 69 struct pci_dev *dev = to_pci_dev(hwif->dev);
70 u8 drive_pci = 0x60 + (drive->dn << 2); 70 u8 drive_pci = 0x60 + (drive->dn << 2);
71 71
72 u8 AP = 0, BP = 0, CP = 0; 72 u8 AP = 0, BP = 0, CP = 0;
@@ -144,9 +144,10 @@ static void pdc202xx_set_pio_mode(ide_drive_t *drive, const u8 pio)
144 144
145static u8 pdc202xx_old_cable_detect (ide_hwif_t *hwif) 145static u8 pdc202xx_old_cable_detect (ide_hwif_t *hwif)
146{ 146{
147 struct pci_dev *dev = to_pci_dev(hwif->dev);
147 u16 CIS = 0, mask = (hwif->channel) ? (1<<11) : (1<<10); 148 u16 CIS = 0, mask = (hwif->channel) ? (1<<11) : (1<<10);
148 149
149 pci_read_config_word(hwif->pci_dev, 0x50, &CIS); 150 pci_read_config_word(dev, 0x50, &CIS);
150 151
151 return (CIS & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; 152 return (CIS & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80;
152} 153}
@@ -305,12 +306,14 @@ static unsigned int __devinit init_chipset_pdc202xx(struct pci_dev *dev,
305 306
306static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif) 307static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
307{ 308{
309 struct pci_dev *dev = to_pci_dev(hwif->dev);
310
308 hwif->set_pio_mode = &pdc202xx_set_pio_mode; 311 hwif->set_pio_mode = &pdc202xx_set_pio_mode;
309 hwif->set_dma_mode = &pdc202xx_set_mode; 312 hwif->set_dma_mode = &pdc202xx_set_mode;
310 313
311 hwif->quirkproc = &pdc202xx_quirkproc; 314 hwif->quirkproc = &pdc202xx_quirkproc;
312 315
313 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246) 316 if (dev->device != PCI_DEVICE_ID_PROMISE_20246)
314 hwif->resetproc = &pdc202xx_reset; 317 hwif->resetproc = &pdc202xx_reset;
315 318
316 if (hwif->dma_base == 0) 319 if (hwif->dma_base == 0)
@@ -319,7 +322,7 @@ static void __devinit init_hwif_pdc202xx(ide_hwif_t *hwif)
319 hwif->dma_lost_irq = &pdc202xx_dma_lost_irq; 322 hwif->dma_lost_irq = &pdc202xx_dma_lost_irq;
320 hwif->dma_timeout = &pdc202xx_dma_timeout; 323 hwif->dma_timeout = &pdc202xx_dma_timeout;
321 324
322 if (hwif->pci_dev->device != PCI_DEVICE_ID_PROMISE_20246) { 325 if (dev->device != PCI_DEVICE_ID_PROMISE_20246) {
323 if (hwif->cbl != ATA_CBL_PATA40_SHORT) 326 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
324 hwif->cbl = pdc202xx_old_cable_detect(hwif); 327 hwif->cbl = pdc202xx_old_cable_detect(hwif);
325 328
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c
index 70dc8792b44c..715cfd201847 100644
--- a/drivers/ide/pci/piix.c
+++ b/drivers/ide/pci/piix.c
@@ -71,7 +71,7 @@ static int no_piix_dma;
71static void piix_set_pio_mode(ide_drive_t *drive, const u8 pio) 71static void piix_set_pio_mode(ide_drive_t *drive, const u8 pio)
72{ 72{
73 ide_hwif_t *hwif = HWIF(drive); 73 ide_hwif_t *hwif = HWIF(drive);
74 struct pci_dev *dev = hwif->pci_dev; 74 struct pci_dev *dev = to_pci_dev(hwif->dev);
75 int is_slave = drive->dn & 1; 75 int is_slave = drive->dn & 1;
76 int master_port = hwif->channel ? 0x42 : 0x40; 76 int master_port = hwif->channel ? 0x42 : 0x40;
77 int slave_port = 0x44; 77 int slave_port = 0x44;
@@ -140,7 +140,7 @@ static void piix_set_pio_mode(ide_drive_t *drive, const u8 pio)
140static void piix_set_dma_mode(ide_drive_t *drive, const u8 speed) 140static void piix_set_dma_mode(ide_drive_t *drive, const u8 speed)
141{ 141{
142 ide_hwif_t *hwif = HWIF(drive); 142 ide_hwif_t *hwif = HWIF(drive);
143 struct pci_dev *dev = hwif->pci_dev; 143 struct pci_dev *dev = to_pci_dev(hwif->dev);
144 u8 maslave = hwif->channel ? 0x42 : 0x40; 144 u8 maslave = hwif->channel ? 0x42 : 0x40;
145 int a_speed = 3 << (drive->dn * 4); 145 int a_speed = 3 << (drive->dn * 4);
146 int u_flag = 1 << drive->dn; 146 int u_flag = 1 << drive->dn;
@@ -260,7 +260,7 @@ static const struct ich_laptop ich_laptop[] = {
260 260
261static u8 __devinit piix_cable_detect(ide_hwif_t *hwif) 261static u8 __devinit piix_cable_detect(ide_hwif_t *hwif)
262{ 262{
263 struct pci_dev *pdev = hwif->pci_dev; 263 struct pci_dev *pdev = to_pci_dev(hwif->dev);
264 const struct ich_laptop *lap = &ich_laptop[0]; 264 const struct ich_laptop *lap = &ich_laptop[0];
265 u8 reg54h = 0, mask = hwif->channel ? 0xc0 : 0x30; 265 u8 reg54h = 0, mask = hwif->channel ? 0xc0 : 0x30;
266 266
diff --git a/drivers/ide/pci/rz1000.c b/drivers/ide/pci/rz1000.c
index 6b10ae260fa2..1d3b2f3a8cbb 100644
--- a/drivers/ide/pci/rz1000.c
+++ b/drivers/ide/pci/rz1000.c
@@ -32,8 +32,8 @@
32 32
33static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif) 33static void __devinit init_hwif_rz1000 (ide_hwif_t *hwif)
34{ 34{
35 struct pci_dev *dev = to_pci_dev(hwif->dev);
35 u16 reg; 36 u16 reg;
36 struct pci_dev *dev = hwif->pci_dev;
37 37
38 if (!pci_read_config_word (dev, 0x40, &reg) && 38 if (!pci_read_config_word (dev, 0x40, &reg) &&
39 !pci_write_config_word(dev, 0x40, reg & 0xdfff)) { 39 !pci_write_config_word(dev, 0x40, reg & 0xdfff)) {
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c
index 32fdf53379f5..c2eac1c69ae8 100644
--- a/drivers/ide/pci/sc1200.c
+++ b/drivers/ide/pci/sc1200.c
@@ -87,7 +87,7 @@ static const unsigned int sc1200_pio_timings[4][5] =
87static void sc1200_tunepio(ide_drive_t *drive, u8 pio) 87static void sc1200_tunepio(ide_drive_t *drive, u8 pio)
88{ 88{
89 ide_hwif_t *hwif = drive->hwif; 89 ide_hwif_t *hwif = drive->hwif;
90 struct pci_dev *pdev = hwif->pci_dev; 90 struct pci_dev *pdev = to_pci_dev(hwif->dev);
91 unsigned int basereg = hwif->channel ? 0x50 : 0x40, format = 0; 91 unsigned int basereg = hwif->channel ? 0x50 : 0x40, format = 0;
92 92
93 pci_read_config_dword(pdev, basereg + 4, &format); 93 pci_read_config_dword(pdev, basereg + 4, &format);
@@ -130,6 +130,7 @@ out:
130static void sc1200_set_dma_mode(ide_drive_t *drive, const u8 mode) 130static void sc1200_set_dma_mode(ide_drive_t *drive, const u8 mode)
131{ 131{
132 ide_hwif_t *hwif = HWIF(drive); 132 ide_hwif_t *hwif = HWIF(drive);
133 struct pci_dev *dev = to_pci_dev(hwif->dev);
133 int unit = drive->select.b.unit; 134 int unit = drive->select.b.unit;
134 unsigned int reg, timings; 135 unsigned int reg, timings;
135 unsigned short pci_clock; 136 unsigned short pci_clock;
@@ -160,12 +161,11 @@ static void sc1200_set_dma_mode(ide_drive_t *drive, const u8 mode)
160 timings = mwdma_timing[pci_clock][mode - XFER_MW_DMA_0]; 161 timings = mwdma_timing[pci_clock][mode - XFER_MW_DMA_0];
161 162
162 if (unit == 0) { /* are we configuring drive0? */ 163 if (unit == 0) { /* are we configuring drive0? */
163 pci_read_config_dword(hwif->pci_dev, basereg+4, &reg); 164 pci_read_config_dword(dev, basereg + 4, &reg);
164 timings |= reg & 0x80000000; /* preserve PIO format bit */ 165 timings |= reg & 0x80000000; /* preserve PIO format bit */
165 pci_write_config_dword(hwif->pci_dev, basereg+4, timings); 166 pci_write_config_dword(dev, basereg + 4, timings);
166 } else { 167 } else
167 pci_write_config_dword(hwif->pci_dev, basereg+12, timings); 168 pci_write_config_dword(dev, basereg + 12, timings);
168 }
169} 169}
170 170
171/* Replacement for the standard ide_dma_end action in 171/* Replacement for the standard ide_dma_end action in
diff --git a/drivers/ide/pci/scc_pata.c b/drivers/ide/pci/scc_pata.c
index 24a85bbcd2a6..7694969b02ce 100644
--- a/drivers/ide/pci/scc_pata.c
+++ b/drivers/ide/pci/scc_pata.c
@@ -594,7 +594,7 @@ static int __devinit init_setup_scc(struct pci_dev *dev,
594 594
595static void __devinit init_mmio_iops_scc(ide_hwif_t *hwif) 595static void __devinit init_mmio_iops_scc(ide_hwif_t *hwif)
596{ 596{
597 struct pci_dev *dev = hwif->pci_dev; 597 struct pci_dev *dev = to_pci_dev(hwif->dev);
598 struct scc_ports *ports = pci_get_drvdata(dev); 598 struct scc_ports *ports = pci_get_drvdata(dev);
599 unsigned long dma_base = ports->dma; 599 unsigned long dma_base = ports->dma;
600 600
@@ -620,7 +620,7 @@ static void __devinit init_mmio_iops_scc(ide_hwif_t *hwif)
620 hwif->io_ports[IDE_STATUS_OFFSET] = dma_base + 0x3c; 620 hwif->io_ports[IDE_STATUS_OFFSET] = dma_base + 0x3c;
621 hwif->io_ports[IDE_CONTROL_OFFSET] = dma_base + 0x40; 621 hwif->io_ports[IDE_CONTROL_OFFSET] = dma_base + 0x40;
622 622
623 hwif->irq = hwif->pci_dev->irq; 623 hwif->irq = dev->irq;
624 hwif->dma_base = dma_base; 624 hwif->dma_base = dma_base;
625 hwif->config_data = ports->ctl; 625 hwif->config_data = ports->ctl;
626 hwif->mmio = 1; 626 hwif->mmio = 1;
@@ -636,7 +636,8 @@ static void __devinit init_mmio_iops_scc(ide_hwif_t *hwif)
636 636
637static void __devinit init_iops_scc(ide_hwif_t *hwif) 637static void __devinit init_iops_scc(ide_hwif_t *hwif)
638{ 638{
639 struct pci_dev *dev = hwif->pci_dev; 639 struct pci_dev *dev = to_pci_dev(hwif->dev);
640
640 hwif->hwif_data = NULL; 641 hwif->hwif_data = NULL;
641 if (pci_get_drvdata(dev) == NULL) 642 if (pci_get_drvdata(dev) == NULL)
642 return; 643 return;
@@ -726,10 +727,8 @@ static void __devexit scc_remove(struct pci_dev *dev)
726 unsigned long dma_size = pci_resource_len(dev, 1); 727 unsigned long dma_size = pci_resource_len(dev, 1);
727 728
728 if (hwif->dmatable_cpu) { 729 if (hwif->dmatable_cpu) {
729 pci_free_consistent(hwif->pci_dev, 730 pci_free_consistent(dev, PRD_ENTRIES * PRD_BYTES,
730 PRD_ENTRIES * PRD_BYTES, 731 hwif->dmatable_cpu, hwif->dmatable_dma);
731 hwif->dmatable_cpu,
732 hwif->dmatable_dma);
733 hwif->dmatable_cpu = NULL; 732 hwif->dmatable_cpu = NULL;
734 } 733 }
735 734
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c
index bf01c387739e..cb10dfa71f5c 100644
--- a/drivers/ide/pci/serverworks.c
+++ b/drivers/ide/pci/serverworks.c
@@ -67,7 +67,7 @@ static int check_in_drive_lists (ide_drive_t *drive, const char **list)
67 67
68static u8 svwks_udma_filter(ide_drive_t *drive) 68static u8 svwks_udma_filter(ide_drive_t *drive)
69{ 69{
70 struct pci_dev *dev = HWIF(drive)->pci_dev; 70 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
71 u8 mask = 0; 71 u8 mask = 0;
72 72
73 if (dev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE) 73 if (dev->device == PCI_DEVICE_ID_SERVERWORKS_HT1000IDE)
@@ -130,7 +130,7 @@ static void svwks_set_pio_mode(ide_drive_t *drive, const u8 pio)
130 static const u8 pio_modes[] = { 0x5d, 0x47, 0x34, 0x22, 0x20 }; 130 static const u8 pio_modes[] = { 0x5d, 0x47, 0x34, 0x22, 0x20 };
131 static const u8 drive_pci[] = { 0x41, 0x40, 0x43, 0x42 }; 131 static const u8 drive_pci[] = { 0x41, 0x40, 0x43, 0x42 };
132 132
133 struct pci_dev *dev = drive->hwif->pci_dev; 133 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
134 134
135 pci_write_config_byte(dev, drive_pci[drive->dn], pio_modes[pio]); 135 pci_write_config_byte(dev, drive_pci[drive->dn], pio_modes[pio]);
136 136
@@ -153,7 +153,7 @@ static void svwks_set_dma_mode(ide_drive_t *drive, const u8 speed)
153 static const u8 drive_pci2[] = { 0x45, 0x44, 0x47, 0x46 }; 153 static const u8 drive_pci2[] = { 0x45, 0x44, 0x47, 0x46 };
154 154
155 ide_hwif_t *hwif = HWIF(drive); 155 ide_hwif_t *hwif = HWIF(drive);
156 struct pci_dev *dev = hwif->pci_dev; 156 struct pci_dev *dev = to_pci_dev(hwif->dev);
157 u8 unit = (drive->select.b.unit & 0x01); 157 u8 unit = (drive->select.b.unit & 0x01);
158 158
159 u8 ultra_enable = 0, ultra_timing = 0, dma_timing = 0; 159 u8 ultra_enable = 0, ultra_timing = 0, dma_timing = 0;
@@ -287,7 +287,8 @@ static u8 __devinit ata66_svwks_svwks(ide_hwif_t *hwif)
287 */ 287 */
288static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif) 288static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif)
289{ 289{
290 struct pci_dev *dev = hwif->pci_dev; 290 struct pci_dev *dev = to_pci_dev(hwif->dev);
291
291 if (dev->subsystem_vendor == PCI_VENDOR_ID_DELL && 292 if (dev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
292 dev->vendor == PCI_VENDOR_ID_SERVERWORKS && 293 dev->vendor == PCI_VENDOR_ID_SERVERWORKS &&
293 (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE || 294 (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE ||
@@ -305,7 +306,8 @@ static u8 __devinit ata66_svwks_dell(ide_hwif_t *hwif)
305 */ 306 */
306static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif) 307static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif)
307{ 308{
308 struct pci_dev *dev = hwif->pci_dev; 309 struct pci_dev *dev = to_pci_dev(hwif->dev);
310
309 if (dev->subsystem_vendor == PCI_VENDOR_ID_SUN && 311 if (dev->subsystem_vendor == PCI_VENDOR_ID_SUN &&
310 dev->vendor == PCI_VENDOR_ID_SERVERWORKS && 312 dev->vendor == PCI_VENDOR_ID_SERVERWORKS &&
311 dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) 313 dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE)
@@ -316,7 +318,7 @@ static u8 __devinit ata66_svwks_cobalt(ide_hwif_t *hwif)
316 318
317static u8 __devinit ata66_svwks(ide_hwif_t *hwif) 319static u8 __devinit ata66_svwks(ide_hwif_t *hwif)
318{ 320{
319 struct pci_dev *dev = hwif->pci_dev; 321 struct pci_dev *dev = to_pci_dev(hwif->dev);
320 322
321 /* Server Works */ 323 /* Server Works */
322 if (dev->subsystem_vendor == PCI_VENDOR_ID_SERVERWORKS) 324 if (dev->subsystem_vendor == PCI_VENDOR_ID_SERVERWORKS)
@@ -340,6 +342,8 @@ static u8 __devinit ata66_svwks(ide_hwif_t *hwif)
340 342
341static void __devinit init_hwif_svwks (ide_hwif_t *hwif) 343static void __devinit init_hwif_svwks (ide_hwif_t *hwif)
342{ 344{
345 struct pci_dev *dev = to_pci_dev(hwif->dev);
346
343 hwif->set_pio_mode = &svwks_set_pio_mode; 347 hwif->set_pio_mode = &svwks_set_pio_mode;
344 hwif->set_dma_mode = &svwks_set_dma_mode; 348 hwif->set_dma_mode = &svwks_set_dma_mode;
345 hwif->udma_filter = &svwks_udma_filter; 349 hwif->udma_filter = &svwks_udma_filter;
@@ -347,7 +351,7 @@ static void __devinit init_hwif_svwks (ide_hwif_t *hwif)
347 if (!hwif->dma_base) 351 if (!hwif->dma_base)
348 return; 352 return;
349 353
350 if (hwif->pci_dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { 354 if (dev->device != PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) {
351 if (hwif->cbl != ATA_CBL_PATA40_SHORT) 355 if (hwif->cbl != ATA_CBL_PATA40_SHORT)
352 hwif->cbl = ata66_svwks(hwif); 356 hwif->cbl = ata66_svwks(hwif);
353 } 357 }
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c
index b60a5e8860cd..85902074b1fc 100644
--- a/drivers/ide/pci/sgiioc4.c
+++ b/drivers/ide/pci/sgiioc4.c
@@ -159,6 +159,7 @@ sgiioc4_clearirq(ide_drive_t * drive)
159 } 159 }
160 160
161 if (intr_reg & 0x02) { 161 if (intr_reg & 0x02) {
162 struct pci_dev *dev = to_pci_dev(hwif->dev);
162 /* Error when transferring DMA data on PCI bus */ 163 /* Error when transferring DMA data on PCI bus */
163 u32 pci_err_addr_low, pci_err_addr_high, 164 u32 pci_err_addr_low, pci_err_addr_high,
164 pci_stat_cmd_reg; 165 pci_stat_cmd_reg;
@@ -167,7 +168,7 @@ sgiioc4_clearirq(ide_drive_t * drive)
167 readl((void __iomem *)hwif->io_ports[IDE_IRQ_OFFSET]); 168 readl((void __iomem *)hwif->io_ports[IDE_IRQ_OFFSET]);
168 pci_err_addr_high = 169 pci_err_addr_high =
169 readl((void __iomem *)(hwif->io_ports[IDE_IRQ_OFFSET] + 4)); 170 readl((void __iomem *)(hwif->io_ports[IDE_IRQ_OFFSET] + 4));
170 pci_read_config_dword(hwif->pci_dev, PCI_COMMAND, 171 pci_read_config_dword(dev, PCI_COMMAND,
171 &pci_stat_cmd_reg); 172 &pci_stat_cmd_reg);
172 printk(KERN_ERR 173 printk(KERN_ERR
173 "%s(%s) : PCI Bus Error when doing DMA:" 174 "%s(%s) : PCI Bus Error when doing DMA:"
@@ -178,8 +179,7 @@ sgiioc4_clearirq(ide_drive_t * drive)
178 __FUNCTION__, drive->name, 179 __FUNCTION__, drive->name,
179 pci_err_addr_high, pci_err_addr_low); 180 pci_err_addr_high, pci_err_addr_low);
180 /* Clear the PCI Error indicator */ 181 /* Clear the PCI Error indicator */
181 pci_write_config_dword(hwif->pci_dev, PCI_COMMAND, 182 pci_write_config_dword(dev, PCI_COMMAND, 0x00000146);
182 0x00000146);
183 } 183 }
184 184
185 /* Clear the Interrupt, Error bits on the IOC4 */ 185 /* Clear the Interrupt, Error bits on the IOC4 */
@@ -334,6 +334,7 @@ sgiioc4_INB(unsigned long port)
334static int __devinit 334static int __devinit
335ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base) 335ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base)
336{ 336{
337 struct pci_dev *dev = to_pci_dev(hwif->dev);
337 void __iomem *virt_dma_base; 338 void __iomem *virt_dma_base;
338 int num_ports = sizeof (ioc4_dma_regs_t); 339 int num_ports = sizeof (ioc4_dma_regs_t);
339 void *pad; 340 void *pad;
@@ -359,7 +360,7 @@ ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base)
359 } 360 }
360 hwif->dma_base = (unsigned long) virt_dma_base; 361 hwif->dma_base = (unsigned long) virt_dma_base;
361 362
362 hwif->dmatable_cpu = pci_alloc_consistent(hwif->pci_dev, 363 hwif->dmatable_cpu = pci_alloc_consistent(dev,
363 IOC4_PRD_ENTRIES * IOC4_PRD_BYTES, 364 IOC4_PRD_ENTRIES * IOC4_PRD_BYTES,
364 &hwif->dmatable_dma); 365 &hwif->dmatable_dma);
365 366
@@ -368,7 +369,7 @@ ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base)
368 369
369 hwif->sg_max_nents = IOC4_PRD_ENTRIES; 370 hwif->sg_max_nents = IOC4_PRD_ENTRIES;
370 371
371 pad = pci_alloc_consistent(hwif->pci_dev, IOC4_IDE_CACHELINE_SIZE, 372 pad = pci_alloc_consistent(dev, IOC4_IDE_CACHELINE_SIZE,
372 (dma_addr_t *) &(hwif->dma_status)); 373 (dma_addr_t *) &(hwif->dma_status));
373 374
374 if (pad) { 375 if (pad) {
@@ -376,8 +377,7 @@ ide_dma_sgiioc4(ide_hwif_t * hwif, unsigned long dma_base)
376 return 0; 377 return 0;
377 } 378 }
378 379
379 pci_free_consistent(hwif->pci_dev, 380 pci_free_consistent(dev, IOC4_PRD_ENTRIES * IOC4_PRD_BYTES,
380 IOC4_PRD_ENTRIES * IOC4_PRD_BYTES,
381 hwif->dmatable_cpu, hwif->dmatable_dma); 381 hwif->dmatable_cpu, hwif->dmatable_dma);
382 printk(KERN_INFO 382 printk(KERN_INFO
383 "%s() -- Error! Unable to allocate DMA Maps for drive %s\n", 383 "%s() -- Error! Unable to allocate DMA Maps for drive %s\n",
@@ -640,7 +640,7 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev)
640 hw.dev = &dev->dev; 640 hw.dev = &dev->dev;
641 ide_init_port_hw(hwif, &hw); 641 ide_init_port_hw(hwif, &hw);
642 642
643 hwif->pci_dev = dev; 643 hwif->dev = &dev->dev;
644 hwif->channel = 0; /* Single Channel chip */ 644 hwif->channel = 0; /* Single Channel chip */
645 645
646 /* The IOC4 uses MMIO rather than Port IO. */ 646 /* The IOC4 uses MMIO rather than Port IO. */
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
80static inline int is_sata(ide_hwif_t *hwif) 80static 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)
140static u8 sil_pata_udma_filter(ide_drive_t *drive) 140static 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)
303static int siimage_io_ide_dma_test_irq (ide_drive_t *drive) 307static 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)
377static int sil_sata_busproc(ide_drive_t * drive, int state) 382static 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
644static void __devinit init_mmio_iops_siimage(ide_hwif_t *hwif) 650static 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
757static void __devinit init_iops_siimage(ide_hwif_t *hwif) 763static 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
778static u8 __devinit ata66_siimage(ide_hwif_t *hwif) 786static 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
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c
index 85d36996e6af..9fb4ba4ee318 100644
--- a/drivers/ide/pci/sis5513.c
+++ b/drivers/ide/pci/sis5513.c
@@ -197,7 +197,7 @@ static char* chipset_capability[] = {
197 197
198static u8 sis_ata133_get_base(ide_drive_t *drive) 198static u8 sis_ata133_get_base(ide_drive_t *drive)
199{ 199{
200 struct pci_dev *dev = drive->hwif->pci_dev; 200 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
201 u32 reg54 = 0; 201 u32 reg54 = 0;
202 202
203 pci_read_config_dword(dev, 0x54, &reg54); 203 pci_read_config_dword(dev, 0x54, &reg54);
@@ -207,7 +207,7 @@ static u8 sis_ata133_get_base(ide_drive_t *drive)
207 207
208static void sis_ata16_program_timings(ide_drive_t *drive, const u8 mode) 208static void sis_ata16_program_timings(ide_drive_t *drive, const u8 mode)
209{ 209{
210 struct pci_dev *dev = drive->hwif->pci_dev; 210 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
211 u16 t1 = 0; 211 u16 t1 = 0;
212 u8 drive_pci = 0x40 + drive->dn * 2; 212 u8 drive_pci = 0x40 + drive->dn * 2;
213 213
@@ -230,7 +230,7 @@ static void sis_ata16_program_timings(ide_drive_t *drive, const u8 mode)
230 230
231static void sis_ata100_program_timings(ide_drive_t *drive, const u8 mode) 231static void sis_ata100_program_timings(ide_drive_t *drive, const u8 mode)
232{ 232{
233 struct pci_dev *dev = drive->hwif->pci_dev; 233 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
234 u8 t1, drive_pci = 0x40 + drive->dn * 2; 234 u8 t1, drive_pci = 0x40 + drive->dn * 2;
235 235
236 /* timing bits: 7:4 active 3:0 recovery */ 236 /* timing bits: 7:4 active 3:0 recovery */
@@ -253,7 +253,7 @@ static void sis_ata100_program_timings(ide_drive_t *drive, const u8 mode)
253 253
254static void sis_ata133_program_timings(ide_drive_t *drive, const u8 mode) 254static void sis_ata133_program_timings(ide_drive_t *drive, const u8 mode)
255{ 255{
256 struct pci_dev *dev = drive->hwif->pci_dev; 256 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
257 u32 t1 = 0; 257 u32 t1 = 0;
258 u8 drive_pci = sis_ata133_get_base(drive), clk, idx; 258 u8 drive_pci = sis_ata133_get_base(drive), clk, idx;
259 259
@@ -286,7 +286,7 @@ static void sis_program_timings(ide_drive_t *drive, const u8 mode)
286static void config_drive_art_rwp (ide_drive_t *drive) 286static void config_drive_art_rwp (ide_drive_t *drive)
287{ 287{
288 ide_hwif_t *hwif = HWIF(drive); 288 ide_hwif_t *hwif = HWIF(drive);
289 struct pci_dev *dev = hwif->pci_dev; 289 struct pci_dev *dev = to_pci_dev(hwif->dev);
290 u8 reg4bh = 0; 290 u8 reg4bh = 0;
291 u8 rw_prefetch = 0; 291 u8 rw_prefetch = 0;
292 292
@@ -307,7 +307,7 @@ static void sis_set_pio_mode(ide_drive_t *drive, const u8 pio)
307 307
308static void sis_ata133_program_udma_timings(ide_drive_t *drive, const u8 mode) 308static void sis_ata133_program_udma_timings(ide_drive_t *drive, const u8 mode)
309{ 309{
310 struct pci_dev *dev = drive->hwif->pci_dev; 310 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
311 u32 regdw = 0; 311 u32 regdw = 0;
312 u8 drive_pci = sis_ata133_get_base(drive), clk, idx; 312 u8 drive_pci = sis_ata133_get_base(drive), clk, idx;
313 313
@@ -326,7 +326,7 @@ static void sis_ata133_program_udma_timings(ide_drive_t *drive, const u8 mode)
326 326
327static void sis_ata33_program_udma_timings(ide_drive_t *drive, const u8 mode) 327static void sis_ata33_program_udma_timings(ide_drive_t *drive, const u8 mode)
328{ 328{
329 struct pci_dev *dev = drive->hwif->pci_dev; 329 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
330 u8 drive_pci = 0x40 + drive->dn * 2, reg = 0, i = chipset_family; 330 u8 drive_pci = 0x40 + drive->dn * 2, reg = 0, i = chipset_family;
331 331
332 pci_read_config_byte(dev, drive_pci + 1, &reg); 332 pci_read_config_byte(dev, drive_pci + 1, &reg);
@@ -359,7 +359,7 @@ static void sis_set_dma_mode(ide_drive_t *drive, const u8 speed)
359 359
360static u8 sis5513_ata133_udma_filter(ide_drive_t *drive) 360static u8 sis5513_ata133_udma_filter(ide_drive_t *drive)
361{ 361{
362 struct pci_dev *dev = drive->hwif->pci_dev; 362 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
363 u32 regdw = 0; 363 u32 regdw = 0;
364 u8 drive_pci = sis_ata133_get_base(drive); 364 u8 drive_pci = sis_ata133_get_base(drive);
365 365
@@ -530,7 +530,7 @@ static const struct sis_laptop sis_laptop[] = {
530 530
531static u8 __devinit ata66_sis5513(ide_hwif_t *hwif) 531static u8 __devinit ata66_sis5513(ide_hwif_t *hwif)
532{ 532{
533 struct pci_dev *pdev = hwif->pci_dev; 533 struct pci_dev *pdev = to_pci_dev(hwif->dev);
534 const struct sis_laptop *lap = &sis_laptop[0]; 534 const struct sis_laptop *lap = &sis_laptop[0];
535 u8 ata66 = 0; 535 u8 ata66 = 0;
536 536
@@ -545,12 +545,12 @@ static u8 __devinit ata66_sis5513(ide_hwif_t *hwif)
545 if (chipset_family >= ATA_133) { 545 if (chipset_family >= ATA_133) {
546 u16 regw = 0; 546 u16 regw = 0;
547 u16 reg_addr = hwif->channel ? 0x52: 0x50; 547 u16 reg_addr = hwif->channel ? 0x52: 0x50;
548 pci_read_config_word(hwif->pci_dev, reg_addr, &regw); 548 pci_read_config_word(pdev, reg_addr, &regw);
549 ata66 = (regw & 0x8000) ? 0 : 1; 549 ata66 = (regw & 0x8000) ? 0 : 1;
550 } else if (chipset_family >= ATA_66) { 550 } else if (chipset_family >= ATA_66) {
551 u8 reg48h = 0; 551 u8 reg48h = 0;
552 u8 mask = hwif->channel ? 0x20 : 0x10; 552 u8 mask = hwif->channel ? 0x20 : 0x10;
553 pci_read_config_byte(hwif->pci_dev, 0x48, &reg48h); 553 pci_read_config_byte(pdev, 0x48, &reg48h);
554 ata66 = (reg48h & mask) ? 0 : 1; 554 ata66 = (reg48h & mask) ? 0 : 1;
555 } 555 }
556 556
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c
index c7a125b66c29..38a79688abc5 100644
--- a/drivers/ide/pci/sl82c105.c
+++ b/drivers/ide/pci/sl82c105.c
@@ -78,7 +78,7 @@ static unsigned int get_pio_timings(ide_drive_t *drive, u8 pio)
78 */ 78 */
79static void sl82c105_set_pio_mode(ide_drive_t *drive, const u8 pio) 79static void sl82c105_set_pio_mode(ide_drive_t *drive, const u8 pio)
80{ 80{
81 struct pci_dev *dev = HWIF(drive)->pci_dev; 81 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
82 int reg = 0x44 + drive->dn * 4; 82 int reg = 0x44 + drive->dn * 4;
83 u16 drv_ctrl; 83 u16 drv_ctrl;
84 84
@@ -147,7 +147,7 @@ static inline void sl82c105_reset_host(struct pci_dev *dev)
147static void sl82c105_dma_lost_irq(ide_drive_t *drive) 147static void sl82c105_dma_lost_irq(ide_drive_t *drive)
148{ 148{
149 ide_hwif_t *hwif = HWIF(drive); 149 ide_hwif_t *hwif = HWIF(drive);
150 struct pci_dev *dev = hwif->pci_dev; 150 struct pci_dev *dev = to_pci_dev(hwif->dev);
151 u32 val, mask = hwif->channel ? CTRL_IDE_IRQB : CTRL_IDE_IRQA; 151 u32 val, mask = hwif->channel ? CTRL_IDE_IRQB : CTRL_IDE_IRQA;
152 u8 dma_cmd; 152 u8 dma_cmd;
153 153
@@ -184,7 +184,7 @@ static void sl82c105_dma_lost_irq(ide_drive_t *drive)
184static void sl82c105_dma_start(ide_drive_t *drive) 184static void sl82c105_dma_start(ide_drive_t *drive)
185{ 185{
186 ide_hwif_t *hwif = HWIF(drive); 186 ide_hwif_t *hwif = HWIF(drive);
187 struct pci_dev *dev = hwif->pci_dev; 187 struct pci_dev *dev = to_pci_dev(hwif->dev);
188 int reg = 0x44 + drive->dn * 4; 188 int reg = 0x44 + drive->dn * 4;
189 189
190 DBG(("%s(drive:%s)\n", __FUNCTION__, drive->name)); 190 DBG(("%s(drive:%s)\n", __FUNCTION__, drive->name));
@@ -197,15 +197,17 @@ static void sl82c105_dma_start(ide_drive_t *drive)
197 197
198static void sl82c105_dma_timeout(ide_drive_t *drive) 198static void sl82c105_dma_timeout(ide_drive_t *drive)
199{ 199{
200 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
201
200 DBG(("sl82c105_dma_timeout(drive:%s)\n", drive->name)); 202 DBG(("sl82c105_dma_timeout(drive:%s)\n", drive->name));
201 203
202 sl82c105_reset_host(HWIF(drive)->pci_dev); 204 sl82c105_reset_host(dev);
203 ide_dma_timeout(drive); 205 ide_dma_timeout(drive);
204} 206}
205 207
206static int sl82c105_dma_end(ide_drive_t *drive) 208static int sl82c105_dma_end(ide_drive_t *drive)
207{ 209{
208 struct pci_dev *dev = HWIF(drive)->pci_dev; 210 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
209 int reg = 0x44 + drive->dn * 4; 211 int reg = 0x44 + drive->dn * 4;
210 int ret; 212 int ret;
211 213
@@ -224,7 +226,7 @@ static int sl82c105_dma_end(ide_drive_t *drive)
224 */ 226 */
225static void sl82c105_resetproc(ide_drive_t *drive) 227static void sl82c105_resetproc(ide_drive_t *drive)
226{ 228{
227 struct pci_dev *dev = HWIF(drive)->pci_dev; 229 struct pci_dev *dev = to_pci_dev(drive->hwif->dev);
228 u32 val; 230 u32 val;
229 231
230 DBG(("sl82c105_resetproc(drive:%s)\n", drive->name)); 232 DBG(("sl82c105_resetproc(drive:%s)\n", drive->name));
@@ -293,6 +295,7 @@ static unsigned int __devinit init_chipset_sl82c105(struct pci_dev *dev, const c
293 */ 295 */
294static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif) 296static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
295{ 297{
298 struct pci_dev *dev = to_pci_dev(hwif->dev);
296 unsigned int rev; 299 unsigned int rev;
297 300
298 DBG(("init_hwif_sl82c105(hwif: ide%d)\n", hwif->index)); 301 DBG(("init_hwif_sl82c105(hwif: ide%d)\n", hwif->index));
@@ -304,7 +307,7 @@ static void __devinit init_hwif_sl82c105(ide_hwif_t *hwif)
304 if (!hwif->dma_base) 307 if (!hwif->dma_base)
305 return; 308 return;
306 309
307 rev = sl82c105_bridge_revision(hwif->pci_dev); 310 rev = sl82c105_bridge_revision(dev);
308 if (rev <= 5) { 311 if (rev <= 5) {
309 /* 312 /*
310 * Never ever EVER under any circumstances enable 313 * Never ever EVER under any circumstances enable
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c
index dbbb46819a2d..c6a3b9f65ff4 100644
--- a/drivers/ide/pci/slc90e66.c
+++ b/drivers/ide/pci/slc90e66.c
@@ -26,7 +26,7 @@ static DEFINE_SPINLOCK(slc90e66_lock);
26static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio) 26static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)
27{ 27{
28 ide_hwif_t *hwif = HWIF(drive); 28 ide_hwif_t *hwif = HWIF(drive);
29 struct pci_dev *dev = hwif->pci_dev; 29 struct pci_dev *dev = to_pci_dev(hwif->dev);
30 int is_slave = drive->dn & 1; 30 int is_slave = drive->dn & 1;
31 int master_port = hwif->channel ? 0x42 : 0x40; 31 int master_port = hwif->channel ? 0x42 : 0x40;
32 int slave_port = 0x44; 32 int slave_port = 0x44;
@@ -79,7 +79,7 @@ static void slc90e66_set_pio_mode(ide_drive_t *drive, const u8 pio)
79static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed) 79static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed)
80{ 80{
81 ide_hwif_t *hwif = HWIF(drive); 81 ide_hwif_t *hwif = HWIF(drive);
82 struct pci_dev *dev = hwif->pci_dev; 82 struct pci_dev *dev = to_pci_dev(hwif->dev);
83 u8 maslave = hwif->channel ? 0x42 : 0x40; 83 u8 maslave = hwif->channel ? 0x42 : 0x40;
84 int sitre = 0, a_speed = 7 << (drive->dn * 4); 84 int sitre = 0, a_speed = 7 << (drive->dn * 4);
85 int u_speed = 0, u_flag = 1 << drive->dn; 85 int u_speed = 0, u_flag = 1 << drive->dn;
@@ -122,13 +122,14 @@ static void slc90e66_set_dma_mode(ide_drive_t *drive, const u8 speed)
122 122
123static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif) 123static void __devinit init_hwif_slc90e66 (ide_hwif_t *hwif)
124{ 124{
125 struct pci_dev *dev = to_pci_dev(hwif->dev);
125 u8 reg47 = 0; 126 u8 reg47 = 0;
126 u8 mask = hwif->channel ? 0x01 : 0x02; /* bit0:Primary */ 127 u8 mask = hwif->channel ? 0x01 : 0x02; /* bit0:Primary */
127 128
128 hwif->set_pio_mode = &slc90e66_set_pio_mode; 129 hwif->set_pio_mode = &slc90e66_set_pio_mode;
129 hwif->set_dma_mode = &slc90e66_set_dma_mode; 130 hwif->set_dma_mode = &slc90e66_set_dma_mode;
130 131
131 pci_read_config_byte(hwif->pci_dev, 0x47, &reg47); 132 pci_read_config_byte(dev, 0x47, &reg47);
132 133
133 if (hwif->dma_base == 0) 134 if (hwif->dma_base == 0)
134 return; 135 return;
diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c
index e1faf6c2fe16..ea84b9ea7800 100644
--- a/drivers/ide/pci/tc86c001.c
+++ b/drivers/ide/pci/tc86c001.c
@@ -164,7 +164,8 @@ static int tc86c001_busproc(ide_drive_t *drive, int state)
164 164
165static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif) 165static void __devinit init_hwif_tc86c001(ide_hwif_t *hwif)
166{ 166{
167 unsigned long sc_base = pci_resource_start(hwif->pci_dev, 5); 167 struct pci_dev *dev = to_pci_dev(hwif->dev);
168 unsigned long sc_base = pci_resource_start(dev, 5);
168 u16 scr1 = inw(sc_base + 0x00); 169 u16 scr1 = inw(sc_base + 0x00);
169 170
170 /* System Control 1 Register bit 15 (Soft Reset) set */ 171 /* System Control 1 Register bit 15 (Soft Reset) set */
diff --git a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c
index ae52a96a1cf9..ca49cd7f9555 100644
--- a/drivers/ide/pci/triflex.c
+++ b/drivers/ide/pci/triflex.c
@@ -43,7 +43,7 @@
43static void triflex_set_mode(ide_drive_t *drive, const u8 speed) 43static void triflex_set_mode(ide_drive_t *drive, const u8 speed)
44{ 44{
45 ide_hwif_t *hwif = HWIF(drive); 45 ide_hwif_t *hwif = HWIF(drive);
46 struct pci_dev *dev = hwif->pci_dev; 46 struct pci_dev *dev = to_pci_dev(hwif->dev);
47 u8 channel_offset = hwif->channel ? 0x74 : 0x70; 47 u8 channel_offset = hwif->channel ? 0x74 : 0x70;
48 u16 timing = 0; 48 u16 timing = 0;
49 u32 triflex_timings = 0; 49 u32 triflex_timings = 0;
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c
index 7b0338890699..0a29d508168f 100644
--- a/drivers/ide/pci/trm290.c
+++ b/drivers/ide/pci/trm290.c
@@ -245,7 +245,7 @@ static void trm290_dma_host_set(ide_drive_t *drive, int on)
245 245
246static void __devinit init_hwif_trm290(ide_hwif_t *hwif) 246static void __devinit init_hwif_trm290(ide_hwif_t *hwif)
247{ 247{
248 struct pci_dev *dev = hwif->pci_dev; 248 struct pci_dev *dev = to_pci_dev(hwif->dev);
249 unsigned int cfg_base = pci_resource_start(dev, 4); 249 unsigned int cfg_base = pci_resource_start(dev, 4);
250 unsigned long flags; 250 unsigned long flags;
251 u8 reg = 0; 251 u8 reg = 0;
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c
index 4b32c90f4896..37de25b16b34 100644
--- a/drivers/ide/pci/via82cxxx.c
+++ b/drivers/ide/pci/via82cxxx.c
@@ -121,8 +121,8 @@ struct via82cxxx_dev
121 121
122static void via_set_speed(ide_hwif_t *hwif, u8 dn, struct ide_timing *timing) 122static void via_set_speed(ide_hwif_t *hwif, u8 dn, struct ide_timing *timing)
123{ 123{
124 struct pci_dev *dev = hwif->pci_dev; 124 struct pci_dev *dev = to_pci_dev(hwif->dev);
125 struct via82cxxx_dev *vdev = pci_get_drvdata(hwif->pci_dev); 125 struct via82cxxx_dev *vdev = pci_get_drvdata(dev);
126 u8 t; 126 u8 t;
127 127
128 if (~vdev->via_config->flags & VIA_BAD_AST) { 128 if (~vdev->via_config->flags & VIA_BAD_AST) {
@@ -159,8 +159,10 @@ static void via_set_speed(ide_hwif_t *hwif, u8 dn, struct ide_timing *timing)
159 159
160static void via_set_drive(ide_drive_t *drive, const u8 speed) 160static void via_set_drive(ide_drive_t *drive, const u8 speed)
161{ 161{
162 ide_drive_t *peer = HWIF(drive)->drives + (~drive->dn & 1); 162 ide_hwif_t *hwif = drive->hwif;
163 struct via82cxxx_dev *vdev = pci_get_drvdata(drive->hwif->pci_dev); 163 ide_drive_t *peer = hwif->drives + (~drive->dn & 1);
164 struct pci_dev *dev = to_pci_dev(hwif->dev);
165 struct via82cxxx_dev *vdev = pci_get_drvdata(dev);
164 struct ide_timing t, p; 166 struct ide_timing t, p;
165 unsigned int T, UT; 167 unsigned int T, UT;
166 168
@@ -408,7 +410,7 @@ static int via_cable_override(struct pci_dev *pdev)
408 410
409static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif) 411static u8 __devinit via82cxxx_cable_detect(ide_hwif_t *hwif)
410{ 412{
411 struct pci_dev *pdev = hwif->pci_dev; 413 struct pci_dev *pdev = to_pci_dev(hwif->dev);
412 struct via82cxxx_dev *vdev = pci_get_drvdata(pdev); 414 struct via82cxxx_dev *vdev = pci_get_drvdata(pdev);
413 415
414 if (via_cable_override(pdev)) 416 if (via_cable_override(pdev))
diff --git a/drivers/ide/ppc/pmac.c b/drivers/ide/ppc/pmac.c
index 1d6af8824219..b17e097650b1 100644
--- a/drivers/ide/ppc/pmac.c
+++ b/drivers/ide/ppc/pmac.c
@@ -1200,7 +1200,7 @@ pmac_ide_macio_attach(struct macio_dev *mdev, const struct of_device_id *match)
1200 base = ioremap(macio_resource_start(mdev, 0), 0x400); 1200 base = ioremap(macio_resource_start(mdev, 0), 0x400);
1201 regbase = (unsigned long) base; 1201 regbase = (unsigned long) base;
1202 1202
1203 hwif->pci_dev = mdev->bus->pdev; 1203 hwif->dev = &mdev->bus->pdev->dev;
1204 1204
1205 pmif->mdev = mdev; 1205 pmif->mdev = mdev;
1206 pmif->node = mdev->ofdev.node; 1206 pmif->node = mdev->ofdev.node;
@@ -1315,7 +1315,7 @@ pmac_ide_pci_attach(struct pci_dev *pdev, const struct pci_device_id *id)
1315 return -ENXIO; 1315 return -ENXIO;
1316 } 1316 }
1317 1317
1318 hwif->pci_dev = pdev; 1318 hwif->dev = &pdev->dev;
1319 pmif->mdev = NULL; 1319 pmif->mdev = NULL;
1320 pmif->node = np; 1320 pmif->node = np;
1321 1321
@@ -1725,10 +1725,12 @@ pmac_ide_dma_lost_irq (ide_drive_t *drive)
1725static void __devinit 1725static void __devinit
1726pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif) 1726pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1727{ 1727{
1728 struct pci_dev *dev = to_pci_dev(hwif->dev);
1729
1728 /* We won't need pci_dev if we switch to generic consistent 1730 /* We won't need pci_dev if we switch to generic consistent
1729 * DMA routines ... 1731 * DMA routines ...
1730 */ 1732 */
1731 if (hwif->pci_dev == NULL) 1733 if (dev == NULL)
1732 return; 1734 return;
1733 /* 1735 /*
1734 * Allocate space for the DBDMA commands. 1736 * Allocate space for the DBDMA commands.
@@ -1736,7 +1738,7 @@ pmac_ide_setup_dma(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
1736 * aligning the start address to a multiple of 16 bytes. 1738 * aligning the start address to a multiple of 16 bytes.
1737 */ 1739 */
1738 pmif->dma_table_cpu = (struct dbdma_cmd*)pci_alloc_consistent( 1740 pmif->dma_table_cpu = (struct dbdma_cmd*)pci_alloc_consistent(
1739 hwif->pci_dev, 1741 dev,
1740 (MAX_DCMDS + 2) * sizeof(struct dbdma_cmd), 1742 (MAX_DCMDS + 2) * sizeof(struct dbdma_cmd),
1741 &hwif->dmatable_dma); 1743 &hwif->dmatable_dma);
1742 if (pmif->dma_table_cpu == NULL) { 1744 if (pmif->dma_table_cpu == NULL) {
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c
index 0a4b3a6857e1..6b41d6c2433e 100644
--- a/drivers/ide/setup-pci.c
+++ b/drivers/ide/setup-pci.c
@@ -162,8 +162,8 @@ static void ide_pci_clear_simplex(unsigned long dma_base, const char *name)
162 162
163static unsigned long ide_get_or_set_dma_base(const struct ide_port_info *d, ide_hwif_t *hwif) 163static unsigned long ide_get_or_set_dma_base(const struct ide_port_info *d, ide_hwif_t *hwif)
164{ 164{
165 unsigned long dma_base = 0; 165 struct pci_dev *dev = to_pci_dev(hwif->dev);
166 struct pci_dev *dev = hwif->pci_dev; 166 unsigned long dma_base = 0;
167 u8 dma_stat = 0; 167 u8 dma_stat = 0;
168 168
169 if (hwif->mmio) 169 if (hwif->mmio)
@@ -391,7 +391,7 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, const struct ide_port
391 391
392 hwif->noprobe = oldnoprobe; 392 hwif->noprobe = oldnoprobe;
393 393
394 hwif->pci_dev = dev; 394 hwif->dev = &dev->dev;
395 hwif->cds = d; 395 hwif->cds = d;
396 hwif->channel = port; 396 hwif->channel = port;
397 397
diff --git a/include/linux/ide.h b/include/linux/ide.h
index af352cc41db5..ae965a3de9e4 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -503,7 +503,8 @@ typedef struct hwif_s {
503 503
504 hwif_chipset_t chipset; /* sub-module for tuning.. */ 504 hwif_chipset_t chipset; /* sub-module for tuning.. */
505 505
506 struct pci_dev *pci_dev; /* for pci chipsets */ 506 struct device *dev;
507
507 const struct ide_port_info *cds; /* chipset device struct */ 508 const struct ide_port_info *cds; /* chipset device struct */
508 509
509 ide_ack_intr_t *ack_intr; 510 ide_ack_intr_t *ack_intr;
@@ -1299,7 +1300,7 @@ static inline void ide_dump_identify(u8 *id)
1299 1300
1300static inline int hwif_to_node(ide_hwif_t *hwif) 1301static inline int hwif_to_node(ide_hwif_t *hwif)
1301{ 1302{
1302 struct pci_dev *dev = hwif->pci_dev; 1303 struct pci_dev *dev = to_pci_dev(hwif->dev);
1303 return dev ? pcibus_to_node(dev->bus) : -1; 1304 return dev ? pcibus_to_node(dev->bus) : -1;
1304} 1305}
1305 1306