diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-05-09 18:01:11 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-05-09 18:01:11 -0400 |
commit | 5cbf79cdb37be2aa2a1b4fa94144526b14557060 (patch) | |
tree | 1fcfbc1248b9904e5890cc593f018ee0a8a53238 /drivers/ide/setup-pci.c | |
parent | 869c56ee9de1b72cd3f8ab9cdfbd3601e55c61f2 (diff) |
ide: add ide_proc_register_port()
* create_proc_ide_interfaces() tries to add /proc entries for every probed
and initialized IDE port, replace it by ide_proc_register_port() which does
it only for the given port (also rename destroy_proc_ide_interface() to
ide_proc_unregister_port() for consistency)
* convert {create,destroy}_proc_ide_interface[s]() users to use new functions
* pmac driver depended on proc_ide_create() to add /proc port entries, fix it
* au1xxx-ide, swarm and cs5520 drivers depended indirectly on ide-generic
driver (CONFIG_IDE_GENERIC=y) to add port /proc entries, fix them
* there is now no need to add /proc entries for IDE ports in proc_ide_create()
so don't do it
* proc_ide_create() needs now to be called before drivers are probed - fix it,
while at it make proc_ide_create() create /proc "ide" directory
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/setup-pci.c')
-rw-r--r-- | drivers/ide/setup-pci.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c index 118fb3205ca8..892cda755782 100644 --- a/drivers/ide/setup-pci.c +++ b/drivers/ide/setup-pci.c | |||
@@ -702,6 +702,7 @@ out: | |||
702 | 702 | ||
703 | int ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d) | 703 | int ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d) |
704 | { | 704 | { |
705 | ide_hwif_t *hwif = NULL, *mate = NULL; | ||
705 | ata_index_t index_list; | 706 | ata_index_t index_list; |
706 | int ret; | 707 | int ret; |
707 | 708 | ||
@@ -710,11 +711,19 @@ int ide_setup_pci_device(struct pci_dev *dev, ide_pci_device_t *d) | |||
710 | goto out; | 711 | goto out; |
711 | 712 | ||
712 | if ((index_list.b.low & 0xf0) != 0xf0) | 713 | if ((index_list.b.low & 0xf0) != 0xf0) |
713 | probe_hwif_init_with_fixup(&ide_hwifs[index_list.b.low], d->fixup); | 714 | hwif = &ide_hwifs[index_list.b.low]; |
714 | if ((index_list.b.high & 0xf0) != 0xf0) | 715 | if ((index_list.b.high & 0xf0) != 0xf0) |
715 | probe_hwif_init_with_fixup(&ide_hwifs[index_list.b.high], d->fixup); | 716 | mate = &ide_hwifs[index_list.b.high]; |
716 | 717 | ||
717 | create_proc_ide_interfaces(); | 718 | if (hwif) |
719 | probe_hwif_init_with_fixup(hwif, d->fixup); | ||
720 | if (mate) | ||
721 | probe_hwif_init_with_fixup(mate, d->fixup); | ||
722 | |||
723 | if (hwif) | ||
724 | ide_proc_register_port(hwif); | ||
725 | if (mate) | ||
726 | ide_proc_register_port(mate); | ||
718 | out: | 727 | out: |
719 | return ret; | 728 | return ret; |
720 | } | 729 | } |
@@ -748,7 +757,15 @@ int ide_setup_pci_devices(struct pci_dev *dev1, struct pci_dev *dev2, | |||
748 | } | 757 | } |
749 | } | 758 | } |
750 | 759 | ||
751 | create_proc_ide_interfaces(); | 760 | for (i = 0; i < 2; i++) { |
761 | u8 idx[2] = { index_list[i].b.low, index_list[i].b.high }; | ||
762 | int j; | ||
763 | |||
764 | for (j = 0; j < 2; j++) { | ||
765 | if ((idx[j] & 0xf0) != 0xf0) | ||
766 | ide_proc_register_port(ide_hwifs + idx[j]); | ||
767 | } | ||
768 | } | ||
752 | out: | 769 | out: |
753 | return ret; | 770 | return ret; |
754 | } | 771 | } |