diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 13:55:57 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-07-23 13:55:57 -0400 |
commit | 48c3c1072651922ed153bcf0a33ea82cf20df390 (patch) | |
tree | 92ad23e3869e70731eca99394c08a3bf06b8753e /drivers/ide/mips | |
parent | 374e042c3e767ac2e5a40b78529220e0b3de793c (diff) |
ide: add struct ide_host (take 3)
* Add struct ide_host which keeps pointers to host's ports.
* Add ide_host_alloc[_all]() and ide_host_remove() helpers.
* Pass 'struct ide_host *host' instead of 'u8 *idx' to
ide_device_add[_all]() and rename it to ide_host_register[_all]().
* Convert host drivers and core code to use struct ide_host.
* Remove no longer needed ide_find_port().
* Make ide_find_port_slot() static.
* Unexport ide_unregister().
v2:
* Add missing 'struct ide_host *host' to macide.c.
v3:
* Fix build problem in pmac.c (s/ide_alloc_host/ide_host_alloc/)
(Noticed by Stephen Rothwell).
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/mips')
-rw-r--r-- | drivers/ide/mips/au1xxx-ide.c | 25 | ||||
-rw-r--r-- | drivers/ide/mips/swarm.c | 13 |
2 files changed, 16 insertions, 22 deletions
diff --git a/drivers/ide/mips/au1xxx-ide.c b/drivers/ide/mips/au1xxx-ide.c index ed1c9a134079..903c628bddd0 100644 --- a/drivers/ide/mips/au1xxx-ide.c +++ b/drivers/ide/mips/au1xxx-ide.c | |||
@@ -563,11 +563,10 @@ static int au_ide_probe(struct device *dev) | |||
563 | { | 563 | { |
564 | struct platform_device *pdev = to_platform_device(dev); | 564 | struct platform_device *pdev = to_platform_device(dev); |
565 | _auide_hwif *ahwif = &auide_hwif; | 565 | _auide_hwif *ahwif = &auide_hwif; |
566 | ide_hwif_t *hwif; | ||
567 | struct resource *res; | 566 | struct resource *res; |
567 | struct ide_host *host; | ||
568 | int ret = 0; | 568 | int ret = 0; |
569 | hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; | 569 | hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; |
570 | u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; | ||
571 | 570 | ||
572 | #if defined(CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA) | 571 | #if defined(CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA) |
573 | char *mode = "MWDMA2"; | 572 | char *mode = "MWDMA2"; |
@@ -604,25 +603,23 @@ static int au_ide_probe(struct device *dev) | |||
604 | goto out; | 603 | goto out; |
605 | } | 604 | } |
606 | 605 | ||
607 | hwif = ide_find_port(); | ||
608 | if (hwif == NULL) { | ||
609 | ret = -ENOENT; | ||
610 | goto out; | ||
611 | } | ||
612 | |||
613 | memset(&hw, 0, sizeof(hw)); | 606 | memset(&hw, 0, sizeof(hw)); |
614 | auide_setup_ports(&hw, ahwif); | 607 | auide_setup_ports(&hw, ahwif); |
615 | hw.irq = ahwif->irq; | 608 | hw.irq = ahwif->irq; |
616 | hw.dev = dev; | 609 | hw.dev = dev; |
617 | hw.chipset = ide_au1xxx; | 610 | hw.chipset = ide_au1xxx; |
618 | 611 | ||
619 | auide_hwif.hwif = hwif; | 612 | host = ide_host_alloc(&au1xxx_port_info, hws); |
613 | if (host == NULL) { | ||
614 | ret = -ENOENT; | ||
615 | goto out; | ||
616 | } | ||
620 | 617 | ||
621 | idx[0] = hwif->index; | 618 | ide_host_register(host, &au1xxx_port_info, hws); |
622 | 619 | ||
623 | ide_device_add(idx, &au1xxx_port_info, hws); | 620 | auide_hwif.hwif = host->ports[0]; |
624 | 621 | ||
625 | dev_set_drvdata(dev, hwif); | 622 | dev_set_drvdata(dev, host); |
626 | 623 | ||
627 | printk(KERN_INFO "Au1xxx IDE(builtin) configured for %s\n", mode ); | 624 | printk(KERN_INFO "Au1xxx IDE(builtin) configured for %s\n", mode ); |
628 | 625 | ||
@@ -634,10 +631,10 @@ static int au_ide_remove(struct device *dev) | |||
634 | { | 631 | { |
635 | struct platform_device *pdev = to_platform_device(dev); | 632 | struct platform_device *pdev = to_platform_device(dev); |
636 | struct resource *res; | 633 | struct resource *res; |
637 | ide_hwif_t *hwif = dev_get_drvdata(dev); | 634 | struct ide_host *host = dev_get_drvdata(dev); |
638 | _auide_hwif *ahwif = &auide_hwif; | 635 | _auide_hwif *ahwif = &auide_hwif; |
639 | 636 | ||
640 | ide_unregister(hwif); | 637 | ide_host_remove(host); |
641 | 638 | ||
642 | iounmap((void *)ahwif->regbase); | 639 | iounmap((void *)ahwif->regbase); |
643 | 640 | ||
diff --git a/drivers/ide/mips/swarm.c b/drivers/ide/mips/swarm.c index c1ffb83a2de7..b12d9d224831 100644 --- a/drivers/ide/mips/swarm.c +++ b/drivers/ide/mips/swarm.c | |||
@@ -72,12 +72,11 @@ static const struct ide_port_info swarm_port_info = { | |||
72 | */ | 72 | */ |
73 | static int __devinit swarm_ide_probe(struct device *dev) | 73 | static int __devinit swarm_ide_probe(struct device *dev) |
74 | { | 74 | { |
75 | ide_hwif_t *hwif; | ||
76 | u8 __iomem *base; | 75 | u8 __iomem *base; |
76 | struct ide_host *host; | ||
77 | phys_t offset, size; | 77 | phys_t offset, size; |
78 | int i; | 78 | int i; |
79 | hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; | 79 | hw_regs_t hw, *hws[] = { &hw, NULL, NULL, NULL }; |
80 | u8 idx[] = { 0xff, 0xff, 0xff, 0xff }; | ||
81 | 80 | ||
82 | if (!SIBYTE_HAVE_IDE) | 81 | if (!SIBYTE_HAVE_IDE) |
83 | return -ENODEV; | 82 | return -ENODEV; |
@@ -116,15 +115,13 @@ static int __devinit swarm_ide_probe(struct device *dev) | |||
116 | hw.irq = K_INT_GB_IDE; | 115 | hw.irq = K_INT_GB_IDE; |
117 | hw.chipset = ide_generic; | 116 | hw.chipset = ide_generic; |
118 | 117 | ||
119 | hwif = ide_find_port_slot(&swarm_port_info); | 118 | host = ide_host_alloc(&swarm_port_info, hws); |
120 | if (hwif == NULL) | 119 | if (host == NULL) |
121 | goto err; | 120 | goto err; |
122 | 121 | ||
123 | idx[0] = hwif->index; | 122 | ide_host_register(host, &swarm_port_info, hws); |
124 | 123 | ||
125 | ide_device_add(idx, &swarm_port_info, hws); | 124 | dev_set_drvdata(dev, host); |
126 | |||
127 | dev_set_drvdata(dev, hwif); | ||
128 | 125 | ||
129 | return 0; | 126 | return 0; |
130 | err: | 127 | err: |