forked from luck/tmp_suning_uos_patched
[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:
parent
7f602c5393
commit
dfd287f6ee
@ -102,8 +102,7 @@ aic7770_probe(struct device *dev)
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -337,13 +337,6 @@ static uint32_t aic7xxx_pci_parity = ~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.
|
||||
* The table of values goes like this:
|
||||
@ -475,48 +468,6 @@ ahc_linux_map_seg(struct ahc_softc *ahc, struct scb *scb,
|
||||
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.
|
||||
*/
|
||||
@ -848,6 +799,7 @@ ahc_linux_bus_reset(struct scsi_cmnd *cmd)
|
||||
struct scsi_host_template aic7xxx_driver_template = {
|
||||
.module = THIS_MODULE,
|
||||
.name = "aic7xxx",
|
||||
.proc_name = "aic7xxx",
|
||||
.proc_info = ahc_linux_proc_info,
|
||||
.info = ahc_linux_info,
|
||||
.queuecommand = ahc_linux_queue,
|
||||
@ -2717,18 +2669,31 @@ static struct spi_function_template ahc_linux_transport_functions = {
|
||||
static int __init
|
||||
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)
|
||||
return -ENODEV;
|
||||
|
||||
scsi_transport_reserve_target(ahc_linux_transport_template,
|
||||
sizeof(struct ahc_linux_target));
|
||||
scsi_transport_reserve_device(ahc_linux_transport_template,
|
||||
sizeof(struct ahc_linux_device));
|
||||
if (ahc_linux_detect(&aic7xxx_driver_template))
|
||||
return 0;
|
||||
spi_release_transport(ahc_linux_transport_template);
|
||||
ahc_linux_exit();
|
||||
return -ENODEV;
|
||||
|
||||
/*
|
||||
* Initialize our softc list lock prior to
|
||||
* probing for any adapters.
|
||||
*/
|
||||
ahc_list_lockinit();
|
||||
|
||||
ahc_linux_pci_init();
|
||||
ahc_linux_eisa_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -132,7 +132,6 @@ typedef struct scsi_cmnd *ahc_io_ctx_t;
|
||||
/************************* Configuration Data *********************************/
|
||||
extern u_int aic7xxx_no_probe;
|
||||
extern u_int aic7xxx_allow_memio;
|
||||
extern int aic7xxx_detect_complete;
|
||||
extern struct scsi_host_template aic7xxx_driver_template;
|
||||
|
||||
/***************************** Bus Space/DMA **********************************/
|
||||
|
@ -208,8 +208,7 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
return (-error);
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user