[SCSI] aic7xxx: sane pci probing
always probe in bus order, avoid any reordering Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
committed by
James Bottomley
parent
7f602c5393
commit
dfd287f6ee
@@ -102,8 +102,7 @@ aic7770_probe(struct device *dev)
|
|||||||
|
|
||||||
dev_set_drvdata(dev, ahc);
|
dev_set_drvdata(dev, ahc);
|
||||||
|
|
||||||
if (aic7xxx_detect_complete)
|
error = ahc_linux_register_host(ahc, &aic7xxx_driver_template);
|
||||||
error = ahc_linux_register_host(ahc, &aic7xxx_driver_template);
|
|
||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -337,13 +337,6 @@ static uint32_t aic7xxx_pci_parity = ~0;
|
|||||||
*/
|
*/
|
||||||
uint32_t aic7xxx_allow_memio = ~0;
|
uint32_t aic7xxx_allow_memio = ~0;
|
||||||
|
|
||||||
/*
|
|
||||||
* aic7xxx_detect() has been run, so register all device arrivals
|
|
||||||
* immediately with the system rather than deferring to the sorted
|
|
||||||
* attachment performed by aic7xxx_detect().
|
|
||||||
*/
|
|
||||||
int aic7xxx_detect_complete;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* So that we can set how long each device is given as a selection timeout.
|
* So that we can set how long each device is given as a selection timeout.
|
||||||
* The table of values goes like this:
|
* The table of values goes like this:
|
||||||
@@ -475,48 +468,6 @@ ahc_linux_map_seg(struct ahc_softc *ahc, struct scb *scb,
|
|||||||
return (consumed);
|
return (consumed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Try to detect an Adaptec 7XXX controller.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
ahc_linux_detect(struct scsi_host_template *template)
|
|
||||||
{
|
|
||||||
struct ahc_softc *ahc;
|
|
||||||
int found = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If we've been passed any parameters, process them now.
|
|
||||||
*/
|
|
||||||
if (aic7xxx)
|
|
||||||
aic7xxx_setup(aic7xxx);
|
|
||||||
|
|
||||||
template->proc_name = "aic7xxx";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize our softc list lock prior to
|
|
||||||
* probing for any adapters.
|
|
||||||
*/
|
|
||||||
ahc_list_lockinit();
|
|
||||||
|
|
||||||
found = ahc_linux_pci_init();
|
|
||||||
if (!ahc_linux_eisa_init())
|
|
||||||
found++;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Register with the SCSI layer all
|
|
||||||
* controllers we've found.
|
|
||||||
*/
|
|
||||||
TAILQ_FOREACH(ahc, &ahc_tailq, links) {
|
|
||||||
|
|
||||||
if (ahc_linux_register_host(ahc, template) == 0)
|
|
||||||
found++;
|
|
||||||
}
|
|
||||||
|
|
||||||
aic7xxx_detect_complete++;
|
|
||||||
|
|
||||||
return (found);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a string describing the driver.
|
* Return a string describing the driver.
|
||||||
*/
|
*/
|
||||||
@@ -848,6 +799,7 @@ ahc_linux_bus_reset(struct scsi_cmnd *cmd)
|
|||||||
struct scsi_host_template aic7xxx_driver_template = {
|
struct scsi_host_template aic7xxx_driver_template = {
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.name = "aic7xxx",
|
.name = "aic7xxx",
|
||||||
|
.proc_name = "aic7xxx",
|
||||||
.proc_info = ahc_linux_proc_info,
|
.proc_info = ahc_linux_proc_info,
|
||||||
.info = ahc_linux_info,
|
.info = ahc_linux_info,
|
||||||
.queuecommand = ahc_linux_queue,
|
.queuecommand = ahc_linux_queue,
|
||||||
@@ -2717,18 +2669,31 @@ static struct spi_function_template ahc_linux_transport_functions = {
|
|||||||
static int __init
|
static int __init
|
||||||
ahc_linux_init(void)
|
ahc_linux_init(void)
|
||||||
{
|
{
|
||||||
ahc_linux_transport_template = spi_attach_transport(&ahc_linux_transport_functions);
|
/*
|
||||||
|
* If we've been passed any parameters, process them now.
|
||||||
|
*/
|
||||||
|
if (aic7xxx)
|
||||||
|
aic7xxx_setup(aic7xxx);
|
||||||
|
|
||||||
|
ahc_linux_transport_template =
|
||||||
|
spi_attach_transport(&ahc_linux_transport_functions);
|
||||||
if (!ahc_linux_transport_template)
|
if (!ahc_linux_transport_template)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
scsi_transport_reserve_target(ahc_linux_transport_template,
|
scsi_transport_reserve_target(ahc_linux_transport_template,
|
||||||
sizeof(struct ahc_linux_target));
|
sizeof(struct ahc_linux_target));
|
||||||
scsi_transport_reserve_device(ahc_linux_transport_template,
|
scsi_transport_reserve_device(ahc_linux_transport_template,
|
||||||
sizeof(struct ahc_linux_device));
|
sizeof(struct ahc_linux_device));
|
||||||
if (ahc_linux_detect(&aic7xxx_driver_template))
|
|
||||||
return 0;
|
/*
|
||||||
spi_release_transport(ahc_linux_transport_template);
|
* Initialize our softc list lock prior to
|
||||||
ahc_linux_exit();
|
* probing for any adapters.
|
||||||
return -ENODEV;
|
*/
|
||||||
|
ahc_list_lockinit();
|
||||||
|
|
||||||
|
ahc_linux_pci_init();
|
||||||
|
ahc_linux_eisa_init();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -132,7 +132,6 @@ typedef struct scsi_cmnd *ahc_io_ctx_t;
|
|||||||
/************************* Configuration Data *********************************/
|
/************************* Configuration Data *********************************/
|
||||||
extern u_int aic7xxx_no_probe;
|
extern u_int aic7xxx_no_probe;
|
||||||
extern u_int aic7xxx_allow_memio;
|
extern u_int aic7xxx_allow_memio;
|
||||||
extern int aic7xxx_detect_complete;
|
|
||||||
extern struct scsi_host_template aic7xxx_driver_template;
|
extern struct scsi_host_template aic7xxx_driver_template;
|
||||||
|
|
||||||
/***************************** Bus Space/DMA **********************************/
|
/***************************** Bus Space/DMA **********************************/
|
||||||
|
@@ -208,8 +208,7 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||||||
return (-error);
|
return (-error);
|
||||||
}
|
}
|
||||||
pci_set_drvdata(pdev, ahc);
|
pci_set_drvdata(pdev, ahc);
|
||||||
if (aic7xxx_detect_complete)
|
ahc_linux_register_host(ahc, &aic7xxx_driver_template);
|
||||||
ahc_linux_register_host(ahc, &aic7xxx_driver_template);
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user