diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-24 16:53:14 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-24 16:53:14 -0400 |
commit | 6cdf6eb357c2681596b7b1672b92396ba82333d4 (patch) | |
tree | a6194373c64616ecb3d1af2c9247a32f50543f97 | |
parent | 8c2eece50a368c7986bae0b3e52739558dd71b51 (diff) |
ide: add ->dev and ->host_priv fields to struct ide_host
* Add 'struct device *dev[2]' and 'void *host_priv' fields
to struct ide_host.
* Set ->dev[] in ide_host_alloc_all()/ide_setup_pci_device[s]().
* Pass 'void *priv' argument to ide_setup_pci_device[s]()
and use it to set ->host_priv.
* Set PCI dev's ->driver_data to point to the struct ide_host
instance if PCI host driver wants to use ->host_priv.
* Rename ide_setup_pci_device[s]() to ide_pci_init_{one,two}().
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
33 files changed, 85 insertions, 41 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 4aa76c453755..890c15b1b3ae 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -1604,6 +1604,9 @@ struct ide_host *ide_host_alloc_all(const struct ide_port_info *d, | |||
1604 | return NULL; | 1604 | return NULL; |
1605 | } | 1605 | } |
1606 | 1606 | ||
1607 | if (hws[0]) | ||
1608 | host->dev[0] = hws[0]->dev; | ||
1609 | |||
1607 | return host; | 1610 | return host; |
1608 | } | 1611 | } |
1609 | EXPORT_SYMBOL_GPL(ide_host_alloc_all); | 1612 | EXPORT_SYMBOL_GPL(ide_host_alloc_all); |
diff --git a/drivers/ide/pci/aec62xx.c b/drivers/ide/pci/aec62xx.c index fbc43e121e6b..7a5d246fe9b1 100644 --- a/drivers/ide/pci/aec62xx.c +++ b/drivers/ide/pci/aec62xx.c | |||
@@ -273,7 +273,7 @@ static int __devinit aec62xx_init_one(struct pci_dev *dev, const struct pci_devi | |||
273 | } | 273 | } |
274 | } | 274 | } |
275 | 275 | ||
276 | err = ide_setup_pci_device(dev, &d); | 276 | err = ide_pci_init_one(dev, &d, NULL); |
277 | if (err) | 277 | if (err) |
278 | pci_disable_device(dev); | 278 | pci_disable_device(dev); |
279 | 279 | ||
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index 5ef7817ac64f..7f96e7ca3864 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
@@ -565,7 +565,7 @@ static int __devinit alim15x3_init_one(struct pci_dev *dev, const struct pci_dev | |||
565 | if (idx == 0) | 565 | if (idx == 0) |
566 | d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX; | 566 | d.host_flags |= IDE_HFLAG_CLEAR_SIMPLEX; |
567 | 567 | ||
568 | return ide_setup_pci_device(dev, &d); | 568 | return ide_pci_init_one(dev, &d, NULL); |
569 | } | 569 | } |
570 | 570 | ||
571 | 571 | ||
diff --git a/drivers/ide/pci/amd74xx.c b/drivers/ide/pci/amd74xx.c index ef7d971031ee..b6a475313c7c 100644 --- a/drivers/ide/pci/amd74xx.c +++ b/drivers/ide/pci/amd74xx.c | |||
@@ -302,7 +302,7 @@ static int __devinit amd74xx_probe(struct pci_dev *dev, const struct pci_device_ | |||
302 | d.name, pci_name(dev), dev->revision, | 302 | d.name, pci_name(dev), dev->revision, |
303 | amd_dma[fls(d.udma_mask) - 1]); | 303 | amd_dma[fls(d.udma_mask) - 1]); |
304 | 304 | ||
305 | return ide_setup_pci_device(dev, &d); | 305 | return ide_pci_init_one(dev, &d, NULL); |
306 | } | 306 | } |
307 | 307 | ||
308 | static const struct pci_device_id amd74xx_pci_tbl[] = { | 308 | static const struct pci_device_id amd74xx_pci_tbl[] = { |
diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index 8b637181681a..b483a68b39f6 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c | |||
@@ -167,7 +167,7 @@ static const struct ide_port_info atiixp_pci_info[] __devinitdata = { | |||
167 | 167 | ||
168 | static int __devinit atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 168 | static int __devinit atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
169 | { | 169 | { |
170 | return ide_setup_pci_device(dev, &atiixp_pci_info[id->driver_data]); | 170 | return ide_pci_init_one(dev, &atiixp_pci_info[id->driver_data], NULL); |
171 | } | 171 | } |
172 | 172 | ||
173 | static const struct pci_device_id atiixp_pci_tbl[] = { | 173 | static const struct pci_device_id atiixp_pci_tbl[] = { |
diff --git a/drivers/ide/pci/cmd64x.c b/drivers/ide/pci/cmd64x.c index ce58bfcdb3c6..fc0333c9a4e5 100644 --- a/drivers/ide/pci/cmd64x.c +++ b/drivers/ide/pci/cmd64x.c | |||
@@ -507,7 +507,7 @@ static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_devic | |||
507 | } | 507 | } |
508 | } | 508 | } |
509 | 509 | ||
510 | return ide_setup_pci_device(dev, &d); | 510 | return ide_pci_init_one(dev, &d, NULL); |
511 | } | 511 | } |
512 | 512 | ||
513 | static const struct pci_device_id cmd64x_pci_tbl[] = { | 513 | static const struct pci_device_id cmd64x_pci_tbl[] = { |
diff --git a/drivers/ide/pci/cs5530.c b/drivers/ide/pci/cs5530.c index f5534c1ff349..ba82bad8bf4e 100644 --- a/drivers/ide/pci/cs5530.c +++ b/drivers/ide/pci/cs5530.c | |||
@@ -256,7 +256,7 @@ static const struct ide_port_info cs5530_chipset __devinitdata = { | |||
256 | 256 | ||
257 | static int __devinit cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 257 | static int __devinit cs5530_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
258 | { | 258 | { |
259 | return ide_setup_pci_device(dev, &cs5530_chipset); | 259 | return ide_pci_init_one(dev, &cs5530_chipset, NULL); |
260 | } | 260 | } |
261 | 261 | ||
262 | static const struct pci_device_id cs5530_pci_tbl[] = { | 262 | static const struct pci_device_id cs5530_pci_tbl[] = { |
diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c index 5404fe4f701d..2161f43ca1b8 100644 --- a/drivers/ide/pci/cs5535.c +++ b/drivers/ide/pci/cs5535.c | |||
@@ -180,7 +180,7 @@ static const struct ide_port_info cs5535_chipset __devinitdata = { | |||
180 | static int __devinit cs5535_init_one(struct pci_dev *dev, | 180 | static int __devinit cs5535_init_one(struct pci_dev *dev, |
181 | const struct pci_device_id *id) | 181 | const struct pci_device_id *id) |
182 | { | 182 | { |
183 | return ide_setup_pci_device(dev, &cs5535_chipset); | 183 | return ide_pci_init_one(dev, &cs5535_chipset, NULL); |
184 | } | 184 | } |
185 | 185 | ||
186 | static const struct pci_device_id cs5535_pci_tbl[] = { | 186 | static const struct pci_device_id cs5535_pci_tbl[] = { |
diff --git a/drivers/ide/pci/cy82c693.c b/drivers/ide/pci/cy82c693.c index e14ad5530fa4..abd27ed7c30c 100644 --- a/drivers/ide/pci/cy82c693.c +++ b/drivers/ide/pci/cy82c693.c | |||
@@ -419,7 +419,7 @@ static int __devinit cy82c693_init_one(struct pci_dev *dev, const struct pci_dev | |||
419 | if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && | 419 | if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && |
420 | PCI_FUNC(dev->devfn) == 1) { | 420 | PCI_FUNC(dev->devfn) == 1) { |
421 | dev2 = pci_get_slot(dev->bus, dev->devfn + 1); | 421 | dev2 = pci_get_slot(dev->bus, dev->devfn + 1); |
422 | ret = ide_setup_pci_devices(dev, dev2, &cy82c693_chipset); | 422 | ret = ide_pci_init_two(dev, dev2, &cy82c693_chipset, NULL); |
423 | /* We leak pci refs here but thats ok - we can't be unloaded */ | 423 | /* We leak pci refs here but thats ok - we can't be unloaded */ |
424 | } | 424 | } |
425 | return ret; | 425 | return ret; |
diff --git a/drivers/ide/pci/generic.c b/drivers/ide/pci/generic.c index 041720e22762..dd0caea5e4f3 100644 --- a/drivers/ide/pci/generic.c +++ b/drivers/ide/pci/generic.c | |||
@@ -139,7 +139,7 @@ static int __devinit generic_init_one(struct pci_dev *dev, const struct pci_devi | |||
139 | goto out; | 139 | goto out; |
140 | } | 140 | } |
141 | } | 141 | } |
142 | ret = ide_setup_pci_device(dev, d); | 142 | ret = ide_pci_init_one(dev, d, NULL); |
143 | out: | 143 | out: |
144 | return ret; | 144 | return ret; |
145 | } | 145 | } |
diff --git a/drivers/ide/pci/hpt34x.c b/drivers/ide/pci/hpt34x.c index 9e1d1c4741da..3d70c5150ac6 100644 --- a/drivers/ide/pci/hpt34x.c +++ b/drivers/ide/pci/hpt34x.c | |||
@@ -156,7 +156,7 @@ static int __devinit hpt34x_init_one(struct pci_dev *dev, const struct pci_devic | |||
156 | 156 | ||
157 | d = &hpt34x_chipsets[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]; | 157 | d = &hpt34x_chipsets[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]; |
158 | 158 | ||
159 | return ide_setup_pci_device(dev, d); | 159 | return ide_pci_init_one(dev, d, NULL); |
160 | } | 160 | } |
161 | 161 | ||
162 | static const struct pci_device_id hpt34x_pci_tbl[] = { | 162 | static const struct pci_device_id hpt34x_pci_tbl[] = { |
diff --git a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c index 1f1135ce7cd6..b23b7a278005 100644 --- a/drivers/ide/pci/hpt366.c +++ b/drivers/ide/pci/hpt366.c | |||
@@ -1608,13 +1608,13 @@ static int __devinit hpt366_init_one(struct pci_dev *dev, const struct pci_devic | |||
1608 | d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE; | 1608 | d.host_flags &= ~IDE_HFLAG_NON_BOOTABLE; |
1609 | } | 1609 | } |
1610 | 1610 | ||
1611 | ret = ide_setup_pci_devices(dev, dev2, &d); | 1611 | ret = ide_pci_init_two(dev, dev2, &d, NULL); |
1612 | if (ret < 0) | 1612 | if (ret < 0) |
1613 | pci_dev_put(dev2); | 1613 | pci_dev_put(dev2); |
1614 | return ret; | 1614 | return ret; |
1615 | } | 1615 | } |
1616 | 1616 | ||
1617 | return ide_setup_pci_device(dev, &d); | 1617 | return ide_pci_init_one(dev, &d, NULL); |
1618 | } | 1618 | } |
1619 | 1619 | ||
1620 | static const struct pci_device_id hpt366_pci_tbl[] __devinitconst = { | 1620 | static const struct pci_device_id hpt366_pci_tbl[] __devinitconst = { |
diff --git a/drivers/ide/pci/it8213.c b/drivers/ide/pci/it8213.c index 2b71bdf74e73..18219fa9ef01 100644 --- a/drivers/ide/pci/it8213.c +++ b/drivers/ide/pci/it8213.c | |||
@@ -184,7 +184,7 @@ static const struct ide_port_info it8213_chipsets[] __devinitdata = { | |||
184 | 184 | ||
185 | static int __devinit it8213_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 185 | static int __devinit it8213_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
186 | { | 186 | { |
187 | return ide_setup_pci_device(dev, &it8213_chipsets[id->driver_data]); | 187 | return ide_pci_init_one(dev, &it8213_chipsets[id->driver_data], NULL); |
188 | } | 188 | } |
189 | 189 | ||
190 | static const struct pci_device_id it8213_pci_tbl[] = { | 190 | static const struct pci_device_id it8213_pci_tbl[] = { |
diff --git a/drivers/ide/pci/it821x.c b/drivers/ide/pci/it821x.c index cbf647202994..40186f9e56aa 100644 --- a/drivers/ide/pci/it821x.c +++ b/drivers/ide/pci/it821x.c | |||
@@ -664,7 +664,7 @@ static int __devinit it821x_init_one(struct pci_dev *dev, const struct pci_devic | |||
664 | 664 | ||
665 | pci_set_drvdata(dev, itdevs); | 665 | pci_set_drvdata(dev, itdevs); |
666 | 666 | ||
667 | return ide_setup_pci_device(dev, &it821x_chipsets[id->driver_data]); | 667 | return ide_pci_init_one(dev, &it821x_chipsets[id->driver_data], NULL); |
668 | } | 668 | } |
669 | 669 | ||
670 | static const struct pci_device_id it821x_pci_tbl[] = { | 670 | static const struct pci_device_id it821x_pci_tbl[] = { |
diff --git a/drivers/ide/pci/jmicron.c b/drivers/ide/pci/jmicron.c index 96ef7394f283..a7e3c14f7b07 100644 --- a/drivers/ide/pci/jmicron.c +++ b/drivers/ide/pci/jmicron.c | |||
@@ -121,7 +121,7 @@ static const struct ide_port_info jmicron_chipset __devinitdata = { | |||
121 | 121 | ||
122 | static int __devinit jmicron_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 122 | static int __devinit jmicron_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
123 | { | 123 | { |
124 | return ide_setup_pci_device(dev, &jmicron_chipset); | 124 | return ide_pci_init_one(dev, &jmicron_chipset, NULL); |
125 | } | 125 | } |
126 | 126 | ||
127 | /* All JMB PATA controllers have and will continue to have the same | 127 | /* All JMB PATA controllers have and will continue to have the same |
diff --git a/drivers/ide/pci/ns87415.c b/drivers/ide/pci/ns87415.c index 5cd2b32ff0ef..a45c33c0c792 100644 --- a/drivers/ide/pci/ns87415.c +++ b/drivers/ide/pci/ns87415.c | |||
@@ -324,7 +324,7 @@ static int __devinit ns87415_init_one(struct pci_dev *dev, const struct pci_devi | |||
324 | d.tp_ops = &superio_tp_ops; | 324 | d.tp_ops = &superio_tp_ops; |
325 | } | 325 | } |
326 | #endif | 326 | #endif |
327 | return ide_setup_pci_device(dev, &d); | 327 | return ide_pci_init_one(dev, &d, NULL); |
328 | } | 328 | } |
329 | 329 | ||
330 | static const struct pci_device_id ns87415_pci_tbl[] = { | 330 | static const struct pci_device_id ns87415_pci_tbl[] = { |
diff --git a/drivers/ide/pci/opti621.c b/drivers/ide/pci/opti621.c index 725c80508d90..edb9132ffbe4 100644 --- a/drivers/ide/pci/opti621.c +++ b/drivers/ide/pci/opti621.c | |||
@@ -209,7 +209,7 @@ static const struct ide_port_info opti621_chipset __devinitdata = { | |||
209 | 209 | ||
210 | static int __devinit opti621_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 210 | static int __devinit opti621_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
211 | { | 211 | { |
212 | return ide_setup_pci_device(dev, &opti621_chipset); | 212 | return ide_pci_init_one(dev, &opti621_chipset, NULL); |
213 | } | 213 | } |
214 | 214 | ||
215 | static const struct pci_device_id opti621_pci_tbl[] = { | 215 | static const struct pci_device_id opti621_pci_tbl[] = { |
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index 070df8ab3b21..71a420feb981 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c | |||
@@ -524,7 +524,7 @@ static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_de | |||
524 | dev2 = pdc20270_get_dev2(dev); | 524 | dev2 = pdc20270_get_dev2(dev); |
525 | 525 | ||
526 | if (dev2) { | 526 | if (dev2) { |
527 | int ret = ide_setup_pci_devices(dev, dev2, d); | 527 | int ret = ide_pci_init_two(dev, dev2, d, NULL); |
528 | if (ret < 0) | 528 | if (ret < 0) |
529 | pci_dev_put(dev2); | 529 | pci_dev_put(dev2); |
530 | return ret; | 530 | return ret; |
@@ -540,7 +540,7 @@ static int __devinit pdc202new_init_one(struct pci_dev *dev, const struct pci_de | |||
540 | return -ENODEV; | 540 | return -ENODEV; |
541 | } | 541 | } |
542 | 542 | ||
543 | return ide_setup_pci_device(dev, d); | 543 | return ide_pci_init_one(dev, d, NULL); |
544 | } | 544 | } |
545 | 545 | ||
546 | static const struct pci_device_id pdc202new_pci_tbl[] = { | 546 | static const struct pci_device_id pdc202new_pci_tbl[] = { |
diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index e54dc653b8c4..eba1d60a73a0 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c | |||
@@ -412,7 +412,7 @@ static int __devinit pdc202xx_init_one(struct pci_dev *dev, const struct pci_dev | |||
412 | } | 412 | } |
413 | } | 413 | } |
414 | 414 | ||
415 | return ide_setup_pci_device(dev, d); | 415 | return ide_pci_init_one(dev, d, NULL); |
416 | } | 416 | } |
417 | 417 | ||
418 | static const struct pci_device_id pdc202xx_pci_tbl[] = { | 418 | static const struct pci_device_id pdc202xx_pci_tbl[] = { |
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index 0ce41b4dddaf..359f65ddcbf9 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c | |||
@@ -394,7 +394,7 @@ static const struct ide_port_info piix_pci_info[] __devinitdata = { | |||
394 | 394 | ||
395 | static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 395 | static int __devinit piix_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
396 | { | 396 | { |
397 | return ide_setup_pci_device(dev, &piix_pci_info[id->driver_data]); | 397 | return ide_pci_init_one(dev, &piix_pci_info[id->driver_data], NULL); |
398 | } | 398 | } |
399 | 399 | ||
400 | /** | 400 | /** |
diff --git a/drivers/ide/pci/rz1000.c b/drivers/ide/pci/rz1000.c index 532154adba29..860ffdeca095 100644 --- a/drivers/ide/pci/rz1000.c +++ b/drivers/ide/pci/rz1000.c | |||
@@ -48,7 +48,7 @@ static const struct ide_port_info rz1000_chipset __devinitdata = { | |||
48 | 48 | ||
49 | static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 49 | static int __devinit rz1000_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
50 | { | 50 | { |
51 | return ide_setup_pci_device(dev, &rz1000_chipset); | 51 | return ide_pci_init_one(dev, &rz1000_chipset, NULL); |
52 | } | 52 | } |
53 | 53 | ||
54 | static const struct pci_device_id rz1000_pci_tbl[] = { | 54 | static const struct pci_device_id rz1000_pci_tbl[] = { |
diff --git a/drivers/ide/pci/sc1200.c b/drivers/ide/pci/sc1200.c index 14c787b5d95f..8fd9cc2119d6 100644 --- a/drivers/ide/pci/sc1200.c +++ b/drivers/ide/pci/sc1200.c | |||
@@ -317,7 +317,7 @@ static const struct ide_port_info sc1200_chipset __devinitdata = { | |||
317 | 317 | ||
318 | static int __devinit sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 318 | static int __devinit sc1200_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
319 | { | 319 | { |
320 | return ide_setup_pci_device(dev, &sc1200_chipset); | 320 | return ide_pci_init_one(dev, &sc1200_chipset, NULL); |
321 | } | 321 | } |
322 | 322 | ||
323 | static const struct pci_device_id sc1200_pci_tbl[] = { | 323 | static const struct pci_device_id sc1200_pci_tbl[] = { |
diff --git a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c index 127ccb45e261..34abdfc8d567 100644 --- a/drivers/ide/pci/serverworks.c +++ b/drivers/ide/pci/serverworks.c | |||
@@ -422,7 +422,7 @@ static int __devinit svwks_init_one(struct pci_dev *dev, const struct pci_device | |||
422 | d.host_flags &= ~IDE_HFLAG_SINGLE; | 422 | d.host_flags &= ~IDE_HFLAG_SINGLE; |
423 | } | 423 | } |
424 | 424 | ||
425 | return ide_setup_pci_device(dev, &d); | 425 | return ide_pci_init_one(dev, &d, NULL); |
426 | } | 426 | } |
427 | 427 | ||
428 | static const struct pci_device_id svwks_pci_tbl[] = { | 428 | static const struct pci_device_id svwks_pci_tbl[] = { |
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c index 5965a35d94ae..48124133601a 100644 --- a/drivers/ide/pci/siimage.c +++ b/drivers/ide/pci/siimage.c | |||
@@ -795,7 +795,7 @@ static int __devinit siimage_init_one(struct pci_dev *dev, | |||
795 | d.host_flags |= IDE_HFLAG_NO_ATAPI_DMA; | 795 | d.host_flags |= IDE_HFLAG_NO_ATAPI_DMA; |
796 | } | 796 | } |
797 | 797 | ||
798 | return ide_setup_pci_device(dev, &d); | 798 | return ide_pci_init_one(dev, &d, NULL); |
799 | } | 799 | } |
800 | 800 | ||
801 | static const struct pci_device_id siimage_pci_tbl[] = { | 801 | static const struct pci_device_id siimage_pci_tbl[] = { |
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index 2389945ca95d..a2330c4ac75b 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c | |||
@@ -583,7 +583,7 @@ static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_devi | |||
583 | 583 | ||
584 | d.udma_mask = udma_rates[chipset_family]; | 584 | d.udma_mask = udma_rates[chipset_family]; |
585 | 585 | ||
586 | return ide_setup_pci_device(dev, &d); | 586 | return ide_pci_init_one(dev, &d, NULL); |
587 | } | 587 | } |
588 | 588 | ||
589 | static const struct pci_device_id sis5513_pci_tbl[] = { | 589 | static const struct pci_device_id sis5513_pci_tbl[] = { |
diff --git a/drivers/ide/pci/sl82c105.c b/drivers/ide/pci/sl82c105.c index f82a6502c1b7..be22f8125d71 100644 --- a/drivers/ide/pci/sl82c105.c +++ b/drivers/ide/pci/sl82c105.c | |||
@@ -335,7 +335,7 @@ static int __devinit sl82c105_init_one(struct pci_dev *dev, const struct pci_dev | |||
335 | d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA; | 335 | d.host_flags &= ~IDE_HFLAG_SERIALIZE_DMA; |
336 | } | 336 | } |
337 | 337 | ||
338 | return ide_setup_pci_device(dev, &d); | 338 | return ide_pci_init_one(dev, &d, NULL); |
339 | } | 339 | } |
340 | 340 | ||
341 | static const struct pci_device_id sl82c105_pci_tbl[] = { | 341 | static const struct pci_device_id sl82c105_pci_tbl[] = { |
diff --git a/drivers/ide/pci/slc90e66.c b/drivers/ide/pci/slc90e66.c index dae6e2c94d86..2fc2f2cf2206 100644 --- a/drivers/ide/pci/slc90e66.c +++ b/drivers/ide/pci/slc90e66.c | |||
@@ -144,7 +144,7 @@ static const struct ide_port_info slc90e66_chipset __devinitdata = { | |||
144 | 144 | ||
145 | static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 145 | static int __devinit slc90e66_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
146 | { | 146 | { |
147 | return ide_setup_pci_device(dev, &slc90e66_chipset); | 147 | return ide_pci_init_one(dev, &slc90e66_chipset, NULL); |
148 | } | 148 | } |
149 | 149 | ||
150 | static const struct pci_device_id slc90e66_pci_tbl[] = { | 150 | static const struct pci_device_id slc90e66_pci_tbl[] = { |
diff --git a/drivers/ide/pci/tc86c001.c b/drivers/ide/pci/tc86c001.c index 477e19790102..e16e79d21772 100644 --- a/drivers/ide/pci/tc86c001.c +++ b/drivers/ide/pci/tc86c001.c | |||
@@ -215,7 +215,7 @@ static const struct ide_port_info tc86c001_chipset __devinitdata = { | |||
215 | static int __devinit tc86c001_init_one(struct pci_dev *dev, | 215 | static int __devinit tc86c001_init_one(struct pci_dev *dev, |
216 | const struct pci_device_id *id) | 216 | const struct pci_device_id *id) |
217 | { | 217 | { |
218 | return ide_setup_pci_device(dev, &tc86c001_chipset); | 218 | return ide_pci_init_one(dev, &tc86c001_chipset, NULL); |
219 | } | 219 | } |
220 | 220 | ||
221 | static const struct pci_device_id tc86c001_pci_tbl[] = { | 221 | static const struct pci_device_id tc86c001_pci_tbl[] = { |
diff --git a/drivers/ide/pci/triflex.c b/drivers/ide/pci/triflex.c index db65a558d4ec..60dcb645d1b0 100644 --- a/drivers/ide/pci/triflex.c +++ b/drivers/ide/pci/triflex.c | |||
@@ -104,7 +104,7 @@ static const struct ide_port_info triflex_device __devinitdata = { | |||
104 | static int __devinit triflex_init_one(struct pci_dev *dev, | 104 | static int __devinit triflex_init_one(struct pci_dev *dev, |
105 | const struct pci_device_id *id) | 105 | const struct pci_device_id *id) |
106 | { | 106 | { |
107 | return ide_setup_pci_device(dev, &triflex_device); | 107 | return ide_pci_init_one(dev, &triflex_device, NULL); |
108 | } | 108 | } |
109 | 109 | ||
110 | static const struct pci_device_id triflex_pci_tbl[] = { | 110 | static const struct pci_device_id triflex_pci_tbl[] = { |
diff --git a/drivers/ide/pci/trm290.c b/drivers/ide/pci/trm290.c index a8a3138682ef..d8127b51a542 100644 --- a/drivers/ide/pci/trm290.c +++ b/drivers/ide/pci/trm290.c | |||
@@ -340,7 +340,7 @@ static const struct ide_port_info trm290_chipset __devinitdata = { | |||
340 | 340 | ||
341 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) | 341 | static int __devinit trm290_init_one(struct pci_dev *dev, const struct pci_device_id *id) |
342 | { | 342 | { |
343 | return ide_setup_pci_device(dev, &trm290_chipset); | 343 | return ide_pci_init_one(dev, &trm290_chipset, NULL); |
344 | } | 344 | } |
345 | 345 | ||
346 | static const struct pci_device_id trm290_pci_tbl[] = { | 346 | static const struct pci_device_id trm290_pci_tbl[] = { |
diff --git a/drivers/ide/pci/via82cxxx.c b/drivers/ide/pci/via82cxxx.c index 09dc4803ef9d..2f22abfe003b 100644 --- a/drivers/ide/pci/via82cxxx.c +++ b/drivers/ide/pci/via82cxxx.c | |||
@@ -466,7 +466,7 @@ static int __devinit via_init_one(struct pci_dev *dev, const struct pci_device_i | |||
466 | 466 | ||
467 | d.udma_mask = via_config->udma_mask; | 467 | d.udma_mask = via_config->udma_mask; |
468 | 468 | ||
469 | return ide_setup_pci_device(dev, &d); | 469 | return ide_pci_init_one(dev, &d, NULL); |
470 | } | 470 | } |
471 | 471 | ||
472 | static const struct pci_device_id via_pci_tbl[] = { | 472 | static const struct pci_device_id via_pci_tbl[] = { |
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c index b85de71fdc88..ca17bf8896df 100644 --- a/drivers/ide/setup-pci.c +++ b/drivers/ide/setup-pci.c | |||
@@ -525,8 +525,10 @@ out: | |||
525 | return ret; | 525 | return ret; |
526 | } | 526 | } |
527 | 527 | ||
528 | int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d) | 528 | int ide_pci_init_one(struct pci_dev *dev, const struct ide_port_info *d, |
529 | void *priv) | ||
529 | { | 530 | { |
531 | struct ide_host *host; | ||
530 | hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL }; | 532 | hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL }; |
531 | int ret; | 533 | int ret; |
532 | 534 | ||
@@ -536,6 +538,19 @@ int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d) | |||
536 | 538 | ||
537 | ide_pci_setup_ports(dev, d, 0, &hw[0], &hws[0]); | 539 | ide_pci_setup_ports(dev, d, 0, &hw[0], &hws[0]); |
538 | 540 | ||
541 | host = ide_host_alloc(d, hws); | ||
542 | if (host == NULL) { | ||
543 | ret = -ENOMEM; | ||
544 | goto out; | ||
545 | } | ||
546 | |||
547 | host->dev[0] = &dev->dev; | ||
548 | |||
549 | host->host_priv = priv; | ||
550 | |||
551 | if (priv) | ||
552 | pci_set_drvdata(dev, host); | ||
553 | |||
539 | ret = do_ide_setup_pci_device(dev, d, 1); | 554 | ret = do_ide_setup_pci_device(dev, d, 1); |
540 | if (ret < 0) | 555 | if (ret < 0) |
541 | goto out; | 556 | goto out; |
@@ -543,16 +558,19 @@ int ide_setup_pci_device(struct pci_dev *dev, const struct ide_port_info *d) | |||
543 | /* fixup IRQ */ | 558 | /* fixup IRQ */ |
544 | hw[1].irq = hw[0].irq = ret; | 559 | hw[1].irq = hw[0].irq = ret; |
545 | 560 | ||
546 | ret = ide_host_add(d, hws, NULL); | 561 | ret = ide_host_register(host, d, hws); |
562 | if (ret) | ||
563 | ide_host_free(host); | ||
547 | out: | 564 | out: |
548 | return ret; | 565 | return ret; |
549 | } | 566 | } |
550 | EXPORT_SYMBOL_GPL(ide_setup_pci_device); | 567 | EXPORT_SYMBOL_GPL(ide_pci_init_one); |
551 | 568 | ||
552 | int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, | 569 | int ide_pci_init_two(struct pci_dev *dev1, struct pci_dev *dev2, |
553 | const struct ide_port_info *d) | 570 | const struct ide_port_info *d, void *priv) |
554 | { | 571 | { |
555 | struct pci_dev *pdev[] = { dev1, dev2 }; | 572 | struct pci_dev *pdev[] = { dev1, dev2 }; |
573 | struct ide_host *host; | ||
556 | int ret, i; | 574 | int ret, i; |
557 | hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL }; | 575 | hw_regs_t hw[4], *hws[] = { NULL, NULL, NULL, NULL }; |
558 | 576 | ||
@@ -562,7 +580,25 @@ int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, | |||
562 | goto out; | 580 | goto out; |
563 | 581 | ||
564 | ide_pci_setup_ports(pdev[i], d, 0, &hw[i*2], &hws[i*2]); | 582 | ide_pci_setup_ports(pdev[i], d, 0, &hw[i*2], &hws[i*2]); |
583 | } | ||
565 | 584 | ||
585 | host = ide_host_alloc(d, hws); | ||
586 | if (host == NULL) { | ||
587 | ret = -ENOMEM; | ||
588 | goto out; | ||
589 | } | ||
590 | |||
591 | host->dev[0] = &dev1->dev; | ||
592 | host->dev[1] = &dev2->dev; | ||
593 | |||
594 | host->host_priv = priv; | ||
595 | |||
596 | if (priv) { | ||
597 | pci_set_drvdata(pdev[0], host); | ||
598 | pci_set_drvdata(pdev[1], host); | ||
599 | } | ||
600 | |||
601 | for (i = 0; i < 2; i++) { | ||
566 | ret = do_ide_setup_pci_device(pdev[i], d, !i); | 602 | ret = do_ide_setup_pci_device(pdev[i], d, !i); |
567 | 603 | ||
568 | /* | 604 | /* |
@@ -576,8 +612,10 @@ int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, | |||
576 | hw[i*2 + 1].irq = hw[i*2].irq = ret; | 612 | hw[i*2 + 1].irq = hw[i*2].irq = ret; |
577 | } | 613 | } |
578 | 614 | ||
579 | ret = ide_host_add(d, hws, NULL); | 615 | ret = ide_host_register(host, d, hws); |
616 | if (ret) | ||
617 | ide_host_free(host); | ||
580 | out: | 618 | out: |
581 | return ret; | 619 | return ret; |
582 | } | 620 | } |
583 | EXPORT_SYMBOL_GPL(ide_setup_pci_devices); | 621 | EXPORT_SYMBOL_GPL(ide_pci_init_two); |
diff --git a/include/linux/ide.h b/include/linux/ide.h index d67ccca2b964..776c574c9640 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
@@ -626,6 +626,8 @@ typedef struct hwif_s { | |||
626 | struct ide_host { | 626 | struct ide_host { |
627 | ide_hwif_t *ports[MAX_HWIFS]; | 627 | ide_hwif_t *ports[MAX_HWIFS]; |
628 | unsigned int n_ports; | 628 | unsigned int n_ports; |
629 | struct device *dev[2]; | ||
630 | void *host_priv; | ||
629 | }; | 631 | }; |
630 | 632 | ||
631 | /* | 633 | /* |
@@ -1201,8 +1203,9 @@ struct ide_port_info { | |||
1201 | u8 udma_mask; | 1203 | u8 udma_mask; |
1202 | }; | 1204 | }; |
1203 | 1205 | ||
1204 | int ide_setup_pci_device(struct pci_dev *, const struct ide_port_info *); | 1206 | int ide_pci_init_one(struct pci_dev *, const struct ide_port_info *, void *); |
1205 | int ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, const struct ide_port_info *); | 1207 | int ide_pci_init_two(struct pci_dev *, struct pci_dev *, |
1208 | const struct ide_port_info *, void *); | ||
1206 | 1209 | ||
1207 | void ide_map_sg(ide_drive_t *, struct request *); | 1210 | void ide_map_sg(ide_drive_t *, struct request *); |
1208 | void ide_init_sg_cmd(ide_drive_t *, struct request *); | 1211 | void ide_init_sg_cmd(ide_drive_t *, struct request *); |