ide: merge ide_match_hwif() and ide_find_port()
* Change ide_match_hwif() argument from 'u8 bootable' to 'struct ide_port_info *d'. * Move ide_match_hwif() to ide-probe.c from setup-pci.c and rename it to ide_find_port_slot(). Update some comments while at it. * ide_find_port() can be now just a wrapper for ide_find_port_slot(). There should be no functional changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
078fdf789c
commit
fe80b937c9
|
@ -1444,6 +1444,52 @@ static int ide_sysfs_register_port(ide_hwif_t *hwif)
|
||||||
return rc;
|
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)
|
int ide_device_add_all(u8 *idx, const struct ide_port_info *d)
|
||||||
{
|
{
|
||||||
ide_hwif_t *hwif, *mate = NULL;
|
ide_hwif_t *hwif, *mate = NULL;
|
||||||
|
|
|
@ -232,21 +232,6 @@ static int ide_system_bus_speed(void)
|
||||||
return pci_dev_present(pci_default) ? 33 : 50;
|
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,
|
static struct resource* hwif_request_region(ide_hwif_t *hwif,
|
||||||
unsigned long addr, int num)
|
unsigned long addr, int num)
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,51 +20,6 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/irq.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
|
* ide_setup_pci_baseregs - place a PCI IDE controller native
|
||||||
* @dev: PCI device of interface to switch native
|
* @dev: PCI device of interface to switch native
|
||||||
|
@ -320,7 +275,6 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev,
|
||||||
{
|
{
|
||||||
unsigned long ctl = 0, base = 0;
|
unsigned long ctl = 0, base = 0;
|
||||||
ide_hwif_t *hwif;
|
ide_hwif_t *hwif;
|
||||||
u8 bootable = (d->host_flags & IDE_HFLAG_NON_BOOTABLE) ? 0 : 1;
|
|
||||||
struct hw_regs_s hw;
|
struct hw_regs_s hw;
|
||||||
|
|
||||||
if ((d->host_flags & IDE_HFLAG_ISA_PORTS) == 0) {
|
if ((d->host_flags & IDE_HFLAG_ISA_PORTS) == 0) {
|
||||||
|
@ -346,7 +300,7 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev,
|
||||||
base = port ? 0x170 : 0x1f0;
|
base = port ? 0x170 : 0x1f0;
|
||||||
}
|
}
|
||||||
|
|
||||||
hwif = ide_match_hwif(bootable);
|
hwif = ide_find_port_slot(d);
|
||||||
if (hwif == NULL) {
|
if (hwif == NULL) {
|
||||||
printk(KERN_ERR "%s: too many IDE interfaces, no room in "
|
printk(KERN_ERR "%s: too many IDE interfaces, no room in "
|
||||||
"table\n", d->name);
|
"table\n", d->name);
|
||||||
|
|
|
@ -170,7 +170,6 @@ typedef struct hw_regs_s {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
} hw_regs_t;
|
} hw_regs_t;
|
||||||
|
|
||||||
struct hwif_s *ide_find_port(void);
|
|
||||||
void ide_init_port_data(struct hwif_s *, unsigned int);
|
void ide_init_port_data(struct hwif_s *, unsigned int);
|
||||||
void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
|
void ide_init_port_hw(struct hwif_s *, hw_regs_t *);
|
||||||
|
|
||||||
|
@ -809,6 +808,13 @@ extern ide_hwif_t ide_hwifs[]; /* master data repository */
|
||||||
#endif
|
#endif
|
||||||
extern int noautodma;
|
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);
|
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 ide_end_dequeued_request(ide_drive_t *drive, struct request *rq,
|
||||||
int uptodate, int nr_sectors);
|
int uptodate, int nr_sectors);
|
||||||
|
|
Loading…
Reference in New Issue