|
@@ -579,17 +579,17 @@ static void __init BusLogic_InitializeProbeInfoListISA(struct BusLogic_HostAdapt
|
|
|
/*
|
|
|
Append the list of standard BusLogic MultiMaster ISA I/O Addresses.
|
|
|
*/
|
|
|
- if (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe330 : check_region(0x330, BusLogic_MultiMasterAddressCount) == 0)
|
|
|
+ if (!BusLogic_ProbeOptions.LimitedProbeISA || BusLogic_ProbeOptions.Probe330)
|
|
|
BusLogic_AppendProbeAddressISA(0x330);
|
|
|
- if (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe334 : check_region(0x334, BusLogic_MultiMasterAddressCount) == 0)
|
|
|
+ if (!BusLogic_ProbeOptions.LimitedProbeISA || BusLogic_ProbeOptions.Probe334)
|
|
|
BusLogic_AppendProbeAddressISA(0x334);
|
|
|
- if (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe230 : check_region(0x230, BusLogic_MultiMasterAddressCount) == 0)
|
|
|
+ if (!BusLogic_ProbeOptions.LimitedProbeISA || BusLogic_ProbeOptions.Probe230)
|
|
|
BusLogic_AppendProbeAddressISA(0x230);
|
|
|
- if (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe234 : check_region(0x234, BusLogic_MultiMasterAddressCount) == 0)
|
|
|
+ if (!BusLogic_ProbeOptions.LimitedProbeISA || BusLogic_ProbeOptions.Probe234)
|
|
|
BusLogic_AppendProbeAddressISA(0x234);
|
|
|
- if (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe130 : check_region(0x130, BusLogic_MultiMasterAddressCount) == 0)
|
|
|
+ if (!BusLogic_ProbeOptions.LimitedProbeISA || BusLogic_ProbeOptions.Probe130)
|
|
|
BusLogic_AppendProbeAddressISA(0x130);
|
|
|
- if (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe134 : check_region(0x134, BusLogic_MultiMasterAddressCount) == 0)
|
|
|
+ if (!BusLogic_ProbeOptions.LimitedProbeISA || BusLogic_ProbeOptions.Probe134)
|
|
|
BusLogic_AppendProbeAddressISA(0x134);
|
|
|
}
|
|
|
|
|
@@ -795,7 +795,9 @@ static int __init BusLogic_InitializeMultiMasterProbeInfo(struct BusLogic_HostAd
|
|
|
host adapters are probed.
|
|
|
*/
|
|
|
if (!BusLogic_ProbeOptions.NoProbeISA)
|
|
|
- if (PrimaryProbeInfo->IO_Address == 0 && (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe330 : check_region(0x330, BusLogic_MultiMasterAddressCount) == 0)) {
|
|
|
+ if (PrimaryProbeInfo->IO_Address == 0 &&
|
|
|
+ (!BusLogic_ProbeOptions.LimitedProbeISA ||
|
|
|
+ BusLogic_ProbeOptions.Probe330)) {
|
|
|
PrimaryProbeInfo->HostAdapterType = BusLogic_MultiMaster;
|
|
|
PrimaryProbeInfo->HostAdapterBusType = BusLogic_ISA_Bus;
|
|
|
PrimaryProbeInfo->IO_Address = 0x330;
|
|
@@ -805,15 +807,25 @@ static int __init BusLogic_InitializeMultiMasterProbeInfo(struct BusLogic_HostAd
|
|
|
omitting the Primary I/O Address which has already been handled.
|
|
|
*/
|
|
|
if (!BusLogic_ProbeOptions.NoProbeISA) {
|
|
|
- if (!StandardAddressSeen[1] && (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe334 : check_region(0x334, BusLogic_MultiMasterAddressCount) == 0))
|
|
|
+ if (!StandardAddressSeen[1] &&
|
|
|
+ (!BusLogic_ProbeOptions.LimitedProbeISA ||
|
|
|
+ BusLogic_ProbeOptions.Probe334))
|
|
|
BusLogic_AppendProbeAddressISA(0x334);
|
|
|
- if (!StandardAddressSeen[2] && (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe230 : check_region(0x230, BusLogic_MultiMasterAddressCount) == 0))
|
|
|
+ if (!StandardAddressSeen[2] &&
|
|
|
+ (!BusLogic_ProbeOptions.LimitedProbeISA ||
|
|
|
+ BusLogic_ProbeOptions.Probe230))
|
|
|
BusLogic_AppendProbeAddressISA(0x230);
|
|
|
- if (!StandardAddressSeen[3] && (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe234 : check_region(0x234, BusLogic_MultiMasterAddressCount) == 0))
|
|
|
+ if (!StandardAddressSeen[3] &&
|
|
|
+ (!BusLogic_ProbeOptions.LimitedProbeISA ||
|
|
|
+ BusLogic_ProbeOptions.Probe234))
|
|
|
BusLogic_AppendProbeAddressISA(0x234);
|
|
|
- if (!StandardAddressSeen[4] && (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe130 : check_region(0x130, BusLogic_MultiMasterAddressCount) == 0))
|
|
|
+ if (!StandardAddressSeen[4] &&
|
|
|
+ (!BusLogic_ProbeOptions.LimitedProbeISA ||
|
|
|
+ BusLogic_ProbeOptions.Probe130))
|
|
|
BusLogic_AppendProbeAddressISA(0x130);
|
|
|
- if (!StandardAddressSeen[5] && (BusLogic_ProbeOptions.LimitedProbeISA ? BusLogic_ProbeOptions.Probe134 : check_region(0x134, BusLogic_MultiMasterAddressCount) == 0))
|
|
|
+ if (!StandardAddressSeen[5] &&
|
|
|
+ (!BusLogic_ProbeOptions.LimitedProbeISA ||
|
|
|
+ BusLogic_ProbeOptions.Probe134))
|
|
|
BusLogic_AppendProbeAddressISA(0x134);
|
|
|
}
|
|
|
/*
|
|
@@ -2220,22 +2232,35 @@ static int __init BusLogic_init(void)
|
|
|
HostAdapter->PCI_Device = ProbeInfo->PCI_Device;
|
|
|
HostAdapter->IRQ_Channel = ProbeInfo->IRQ_Channel;
|
|
|
HostAdapter->AddressCount = BusLogic_HostAdapterAddressCount[HostAdapter->HostAdapterType];
|
|
|
+
|
|
|
+ /*
|
|
|
+ Make sure region is free prior to probing.
|
|
|
+ */
|
|
|
+ if (!request_region(HostAdapter->IO_Address, HostAdapter->AddressCount,
|
|
|
+ "BusLogic"))
|
|
|
+ continue;
|
|
|
/*
|
|
|
Probe the Host Adapter. If unsuccessful, abort further initialization.
|
|
|
*/
|
|
|
- if (!BusLogic_ProbeHostAdapter(HostAdapter))
|
|
|
+ if (!BusLogic_ProbeHostAdapter(HostAdapter)) {
|
|
|
+ release_region(HostAdapter->IO_Address, HostAdapter->AddressCount);
|
|
|
continue;
|
|
|
+ }
|
|
|
/*
|
|
|
Hard Reset the Host Adapter. If unsuccessful, abort further
|
|
|
initialization.
|
|
|
*/
|
|
|
- if (!BusLogic_HardwareResetHostAdapter(HostAdapter, true))
|
|
|
+ if (!BusLogic_HardwareResetHostAdapter(HostAdapter, true)) {
|
|
|
+ release_region(HostAdapter->IO_Address, HostAdapter->AddressCount);
|
|
|
continue;
|
|
|
+ }
|
|
|
/*
|
|
|
Check the Host Adapter. If unsuccessful, abort further initialization.
|
|
|
*/
|
|
|
- if (!BusLogic_CheckHostAdapter(HostAdapter))
|
|
|
+ if (!BusLogic_CheckHostAdapter(HostAdapter)) {
|
|
|
+ release_region(HostAdapter->IO_Address, HostAdapter->AddressCount);
|
|
|
continue;
|
|
|
+ }
|
|
|
/*
|
|
|
Initialize the Driver Options field if provided.
|
|
|
*/
|
|
@@ -2246,16 +2271,6 @@ static int __init BusLogic_init(void)
|
|
|
and Electronic Mail Address.
|
|
|
*/
|
|
|
BusLogic_AnnounceDriver(HostAdapter);
|
|
|
- /*
|
|
|
- Register usage of the I/O Address range. From this point onward, any
|
|
|
- failure will be assumed to be due to a problem with the Host Adapter,
|
|
|
- rather than due to having mistakenly identified this port as belonging
|
|
|
- to a BusLogic Host Adapter. The I/O Address range will not be
|
|
|
- released, thereby preventing it from being incorrectly identified as
|
|
|
- any other type of Host Adapter.
|
|
|
- */
|
|
|
- if (!request_region(HostAdapter->IO_Address, HostAdapter->AddressCount, "BusLogic"))
|
|
|
- continue;
|
|
|
/*
|
|
|
Register the SCSI Host structure.
|
|
|
*/
|
|
@@ -2280,6 +2295,12 @@ static int __init BusLogic_init(void)
|
|
|
Acquire the System Resources necessary to use the Host Adapter, then
|
|
|
Create the Initial CCBs, Initialize the Host Adapter, and finally
|
|
|
perform Target Device Inquiry.
|
|
|
+
|
|
|
+ From this point onward, any failure will be assumed to be due to a
|
|
|
+ problem with the Host Adapter, rather than due to having mistakenly
|
|
|
+ identified this port as belonging to a BusLogic Host Adapter. The
|
|
|
+ I/O Address range will not be released, thereby preventing it from
|
|
|
+ being incorrectly identified as any other type of Host Adapter.
|
|
|
*/
|
|
|
if (BusLogic_ReadHostAdapterConfiguration(HostAdapter) &&
|
|
|
BusLogic_ReportHostAdapterConfiguration(HostAdapter) &&
|
|
@@ -3598,6 +3619,7 @@ static void __exit BusLogic_exit(void)
|
|
|
|
|
|
__setup("BusLogic=", BusLogic_Setup);
|
|
|
|
|
|
+#ifdef MODULE
|
|
|
static struct pci_device_id BusLogic_pci_tbl[] __devinitdata = {
|
|
|
{ PCI_VENDOR_ID_BUSLOGIC, PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER,
|
|
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
|
@@ -3607,6 +3629,7 @@ static struct pci_device_id BusLogic_pci_tbl[] __devinitdata = {
|
|
|
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
|
|
|
{ }
|
|
|
};
|
|
|
+#endif
|
|
|
MODULE_DEVICE_TABLE(pci, BusLogic_pci_tbl);
|
|
|
|
|
|
module_init(BusLogic_init);
|