return rc;
 }
 
+/**
+ *     ide_find_port_slot      -       find free ide_hwifs[] slot
+ *     @d: IDE port info
+ *
+ *     Return the new hwif.  If we are out of free slots return NULL.
+ */
+
+ide_hwif_t *ide_find_port_slot(const struct ide_port_info *d)
+{
+       ide_hwif_t *hwif;
+       int i;
+       u8 bootable = (d && (d->host_flags & IDE_HFLAG_NON_BOOTABLE)) ? 0 : 1;
+
+       /*
+        * Claim an unassigned slot.
+        *
+        * Give preference to claiming other slots before claiming ide0/ide1,
+        * just in case there's another interface yet-to-be-scanned
+        * which uses ports 0x1f0/0x170 (the ide0/ide1 defaults).
+        *
+        * Unless there is a bootable card that does not use the standard
+        * ports 0x1f0/0x170 (the ide0/ide1 defaults).
+        */
+       if (bootable) {
+               for (i = 0; i < MAX_HWIFS; i++) {
+                       hwif = &ide_hwifs[i];
+                       if (hwif->chipset == ide_unknown)
+                               return hwif;
+               }
+       } else {
+               for (i = 2; i < MAX_HWIFS; i++) {
+                       hwif = &ide_hwifs[i];
+                       if (hwif->chipset == ide_unknown)
+                               return hwif;
+               }
+               for (i = 0; i < 2 && i < MAX_HWIFS; i++) {
+                       hwif = &ide_hwifs[i];
+                       if (hwif->chipset == ide_unknown)
+                               return hwif;
+               }
+       }
+
+       return NULL;
+}
+EXPORT_SYMBOL_GPL(ide_find_port_slot);
+
 int ide_device_add_all(u8 *idx, const struct ide_port_info *d)
 {
        ide_hwif_t *hwif, *mate = NULL;
 
        return pci_dev_present(pci_default) ? 33 : 50;
 }
 
-ide_hwif_t *ide_find_port(void)
-{
-       ide_hwif_t *hwif;
-       int i;
-
-       for (i = 0; i < MAX_HWIFS; i++) {
-               hwif = &ide_hwifs[i];
-               if (hwif->chipset == ide_unknown)
-                       return hwif;
-       }
-
-       return NULL;
-}
-EXPORT_SYMBOL_GPL(ide_find_port);
-
 static struct resource* hwif_request_region(ide_hwif_t *hwif,
                                            unsigned long addr, int num)
 {
 
 #include <asm/io.h>
 #include <asm/irq.h>
 
-
-/**
- *     ide_match_hwif  -       find free ide_hwifs[] slot
- *     @bootable: bootable flag
- *
- *     Return the new hwif.  If we are out of free slots return NULL.
- */
-
-static ide_hwif_t *ide_match_hwif(u8 bootable)
-{
-       ide_hwif_t *hwif;
-       int h;
-
-       /*
-        * Claim an unassigned slot.
-        *
-        * Give preference to claiming other slots before claiming ide0/ide1,
-        * just in case there's another interface yet-to-be-scanned
-        * which uses ports 1f0/170 (the ide0/ide1 defaults).
-        *
-        * Unless there is a bootable card that does not use the standard
-        * ports 1f0/170 (the ide0/ide1 defaults). The (bootable) flag.
-        */
-       if (bootable) {
-               for (h = 0; h < MAX_HWIFS; ++h) {
-                       hwif = &ide_hwifs[h];
-                       if (hwif->chipset == ide_unknown)
-                               return hwif;    /* pick an unused entry */
-               }
-       } else {
-               for (h = 2; h < MAX_HWIFS; ++h) {
-                       hwif = ide_hwifs + h;
-                       if (hwif->chipset == ide_unknown)
-                               return hwif;    /* pick an unused entry */
-               }
-       }
-       for (h = 0; h < 2 && h < MAX_HWIFS; ++h) {
-               hwif = ide_hwifs + h;
-               if (hwif->chipset == ide_unknown)
-                       return hwif;    /* pick an unused entry */
-       }
-
-       return NULL;
-}
-
 /**
  *     ide_setup_pci_baseregs  -       place a PCI IDE controller native
  *     @dev: PCI device of interface to switch native
 {
        unsigned long ctl = 0, base = 0;
        ide_hwif_t *hwif;
-       u8 bootable = (d->host_flags & IDE_HFLAG_NON_BOOTABLE) ? 0 : 1;
        struct hw_regs_s hw;
 
        if ((d->host_flags & IDE_HFLAG_ISA_PORTS) == 0) {
                base = port ? 0x170 : 0x1f0;
        }
 
-       hwif = ide_match_hwif(bootable);
+       hwif = ide_find_port_slot(d);
        if (hwif == NULL) {
                printk(KERN_ERR "%s: too many IDE interfaces, no room in "
                                "table\n", d->name);
 
        struct device   *dev;
 } hw_regs_t;
 
-struct hwif_s *ide_find_port(void);
 void ide_init_port_data(struct hwif_s *, unsigned int);
 void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
 
 #endif
 extern int noautodma;
 
+ide_hwif_t *ide_find_port_slot(const struct ide_port_info *);
+
+static inline ide_hwif_t *ide_find_port(void)
+{
+       return ide_find_port_slot(NULL);
+}
+
 extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
 int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq,
                             int uptodate, int nr_sectors);