extractedLnx/linux/drivers/scsi/BusLogic.c_BusLogic_ReadHostAdapterConfiguration.c
static boolean BusLogic_ReadHostAdapterConfiguration(BusLogic_HostAdapter_T
*HostAdapter)
{
BusLogic_BoardID_T BoardID;
BusLogic_Configuration_T Configuration;
BusLogic_SetupInformation_T SetupInformation;
BusLogic_ExtendedSetupInformation_T ExtendedSetupInformation;
BusLogic_ControllerModelNumber_T ControllerModelNumber;
BusLogic_FirmwareVersion3rdDigit_T FirmwareVersion3rdDigit;
BusLogic_FirmwareVersionLetter_T FirmwareVersionLetter;
BusLogic_GenericIOPortInformation_T GenericIOPortInformation;
BusLogic_FetchHostAdapterLocalRAMRequest_T FetchHostAdapterLocalRAMRequest;
BusLogic_AutoSCSIByte15_T AutoSCSIByte15;
BusLogic_RequestedReplyLength_T RequestedReplyLength;
unsigned char GeometryRegister, *TargetPointer, Character;
unsigned short AllTargetsMask, DisconnectPermitted;
unsigned short TaggedQueuingPermitted, TaggedQueuingPermittedDefault;
boolean CommonErrorRecovery;
int TargetID, i;
/*
Issue the Inquire Board ID command.
*/
if (BusLogic_Command(HostAdapter, BusLogic_InquireBoardID, NULL, 0,
&BoardID, sizeof(BoardID)) != sizeof(BoardID))
return BusLogic_Failure(HostAdapter, "INQUIRE BOARD ID");
/*
Issue the Inquire Configuration command.
*/
if (BusLogic_Command(HostAdapter, BusLogic_InquireConfiguration, NULL, 0,
&Configuration, sizeof(Configuration))
!= sizeof(Configuration))
return BusLogic_Failure(HostAdapter, "INQUIRE CONFIGURATION");
/*
Issue the Inquire Setup Information command.
*/
RequestedReplyLength = sizeof(SetupInformation);
if (BusLogic_Command(HostAdapter, BusLogic_InquireSetupInformation,
&RequestedReplyLength, sizeof(RequestedReplyLength),
&SetupInformation, sizeof(SetupInformation))
!= sizeof(SetupInformation))
return BusLogic_Failure(HostAdapter, "INQUIRE SETUP INFORMATION");
/*
Issue the Inquire Extended Setup Information command.
*/
RequestedReplyLength = sizeof(ExtendedSetupInformation);
if (BusLogic_Command(HostAdapter, BusLogic_InquireExtendedSetupInformation,
&RequestedReplyLength, sizeof(RequestedReplyLength),
&ExtendedSetupInformation,
sizeof(ExtendedSetupInformation))
!= sizeof(ExtendedSetupInformation))
return BusLogic_Failure(HostAdapter, "INQUIRE EXTENDED SETUP INFORMATION");
/*
Issue the Inquire Controller Model Number command.
*/
if (ExtendedSetupInformation.BusType == 'A' &&
BoardID.FirmwareVersion1stDigit == '2')
/* BusLogic BT-542B ISA 2.xx */
strcpy(ControllerModelNumber, "542B");
else if (ExtendedSetupInformation.BusType == 'E' &&
BoardID.FirmwareVersion1stDigit == '0')
/* AMI FastDisk EISA Series 441 0.x */
strcpy(ControllerModelNumber, "747A");
else
{
RequestedReplyLength = sizeof(ControllerModelNumber);
if (BusLogic_Command(HostAdapter, BusLogic_InquireControllerModelNumber,
&RequestedReplyLength, sizeof(RequestedReplyLength),
&ControllerModelNumber,
sizeof(ControllerModelNumber))
!= sizeof(ControllerModelNumber))
return BusLogic_Failure(HostAdapter, "INQUIRE CONTROLLER MODEL NUMBER");
}
/*
Issue the Inquire Firmware Version 3rd Digit command.
*/
FirmwareVersion3rdDigit = '\0';
if (BoardID.FirmwareVersion1stDigit > '0')
if (BusLogic_Command(HostAdapter, BusLogic_InquireFirmwareVersion3rdDigit,
NULL, 0, &FirmwareVersion3rdDigit,
sizeof(FirmwareVersion3rdDigit))
!= sizeof(FirmwareVersion3rdDigit))
return BusLogic_Failure(HostAdapter, "INQUIRE FIRMWARE 3RD DIGIT");
/*
BusLogic Host Adapters can be identified by their model number and
the major version number of their firmware as follows:
5.xx BusLogic "W" Series Host Adapters:
BT-948/958/958D
4.xx BusLogic "C" Series Host Adapters:
BT-946C/956C/956CD/747C/757C/757CD/445C/545C/540CF
3.xx BusLogic "S" Series Host Adapters:
BT-747S/747D/757S/757D/445S/545S/542D
BT-542B/742A (revision H)
2.xx BusLogic "A" Series Host Adapters:
BT-542B/742A (revision G and below)
0.xx AMI FastDisk VLB/EISA BusLogic Clone Host Adapter
*/
/*
Save the Model Name and Controller Name in the Host Adapter structure.
*/
TargetPointer = HostAdapter->ModelName;
*TargetPointer++ = 'B';
*TargetPointer++ = 'T';
*TargetPointer++ = '-';
for (i = 0; i < sizeof(ControllerModelNumber); i++)
{
Character = ControllerModelNumber[i];
if (Character == ' ' || Character == '\0') break;
*TargetPointer++ = Character;
}
*TargetPointer++ = '\0';
strcpy(HostAdapter->ControllerName, "BusLogic ");
strcat(HostAdapter->ControllerName, HostAdapter->ModelName);
strcpy(HostAdapter->InterruptLabel, HostAdapter->ControllerName);
/*
Save the Firmware Version in the Host Adapter structure.
*/
TargetPointer = HostAdapter->FirmwareVersion;
*TargetPointer++ = BoardID.FirmwareVersion1stDigit;
*TargetPointer++ = '.';
*TargetPointer++ = BoardID.FirmwareVersion2ndDigit;
if (FirmwareVersion3rdDigit != ' ' && FirmwareVersion3rdDigit != '\0')
*TargetPointer++ = FirmwareVersion3rdDigit;
*TargetPointer = '\0';
/*
Issue the Inquire Firmware Version Letter command.
*/
if (strcmp(HostAdapter->FirmwareVersion, "3.3") >= 0)
{
if (BusLogic_Command(HostAdapter, BusLogic_InquireFirmwareVersionLetter,
NULL, 0, &FirmwareVersionLetter,
sizeof(FirmwareVersionLetter))
!= sizeof(FirmwareVersionLetter))
return BusLogic_Failure(HostAdapter, "INQUIRE FIRMWARE VERSION LETTER");
if (FirmwareVersionLetter != ' ' && FirmwareVersionLetter != '\0')
*TargetPointer++ = FirmwareVersionLetter;
*TargetPointer = '\0';
}
/*
Issue the Inquire Generic I/O Port Information command to read the
IRQ Channel from all PCI Host Adapters, and the Termination Information
from "W" Series Host Adapters.
*/
if (HostAdapter->ModelName[3] == '9' &&
strcmp(HostAdapter->FirmwareVersion, "4.25") >= 0)
{
if (BusLogic_Command(HostAdapter,
BusLogic_InquireGenericIOPortInformation,
NULL, 0, &GenericIOPortInformation,
sizeof(GenericIOPortInformation))
!= sizeof(GenericIOPortInformation))
return BusLogic_Failure(HostAdapter,
"INQUIRE GENERIC I/O PORT INFORMATION");
/*
Save the IRQ Channel in the Host Adapter structure.
*/
HostAdapter->IRQ_Channel = GenericIOPortInformation.PCIAssignedIRQChannel;
/*
Save the Termination Information in the Host Adapter structure.
*/
if (HostAdapter->FirmwareVersion[0] == '5' &&
GenericIOPortInformation.Valid)
{
HostAdapter->TerminationInfoValid = true;
HostAdapter->LowByteTerminated =
GenericIOPortInformation.LowByteTerminated;
HostAdapter->HighByteTerminated =
GenericIOPortInformation.HighByteTerminated;
}
}
/*
Issue the Fetch Host Adapter Local RAM command to read the Termination
Information from the AutoSCSI area of "C" Series Host Adapters.
*/
if (HostAdapter->FirmwareVersion[0] == '4')
{
FetchHostAdapterLocalRAMRequest.ByteOffset =
BusLogic_AutoSCSI_BaseOffset + 15;
FetchHostAdapterLocalRAMRequest.ByteCount = sizeof(AutoSCSIByte15);
if (BusLogic_Command(HostAdapter,
BusLogic_FetchHostAdapterLocalRAM,
&FetchHostAdapterLocalRAMRequest,
sizeof(FetchHostAdapterLocalRAMRequest),
&AutoSCSIByte15, sizeof(AutoSCSIByte15))
!= sizeof(AutoSCSIByte15))
return BusLogic_Failure(HostAdapter, "FETCH HOST ADAPTER LOCAL RAM");
/*
Save the Termination Information in the Host Adapter structure.
*/
HostAdapter->TerminationInfoValid = true;
HostAdapter->LowByteTerminated = AutoSCSIByte15.LowByteTerminated;
HostAdapter->HighByteTerminated = AutoSCSIByte15.HighByteTerminated;
}
/*
Determine the IRQ Channel and save it in the Host Adapter structure.
*/
if (HostAdapter->IRQ_Channel == 0)
{
if (Configuration.IRQ_Channel9)
HostAdapter->IRQ_Channel = 9;
else if (Configuration.IRQ_Channel10)
HostAdapter->IRQ_Channel = 10;
else if (Configuration.IRQ_Channel11)
HostAdapter->IRQ_Channel = 11;
else if (Configuration.IRQ_Channel12)
HostAdapter->IRQ_Channel = 12;
else if (Configuration.IRQ_Channel14)
HostAdapter->IRQ_Channel = 14;
else if (Configuration.IRQ_Channel15)
HostAdapter->IRQ_Channel = 15;
}
/*
Save the Host Adapter SCSI ID in the Host Adapter structure.
*/
HostAdapter->SCSI_ID = Configuration.HostAdapterID;
/*
Save the Synchronous Initiation flag and SCSI Parity Checking flag
in the Host Adapter structure.
*/
HostAdapter->SynchronousInitiation =
SetupInformation.SynchronousInitiationEnabled;
HostAdapter->ParityChecking = SetupInformation.ParityCheckEnabled;
/*
Determine the Bus Type and save it in the Host Adapter structure,
and determine and save the DMA Channel for ISA Host Adapters.
*/
switch (HostAdapter->ModelName[3])
{
case '4':
HostAdapter->BusType = BusLogic_VESA_Bus;
break;
case '5':
HostAdapter->BusType = BusLogic_ISA_Bus;
if (Configuration.DMA_Channel5)
HostAdapter->DMA_Channel = 5;
else if (Configuration.DMA_Channel6)
HostAdapter->DMA_Channel = 6;
else if (Configuration.DMA_Channel7)
HostAdapter->DMA_Channel = 7;
break;
case '6':
HostAdapter->BusType = BusLogic_MCA_Bus;
break;
case '7':
HostAdapter->BusType = BusLogic_EISA_Bus;
break;
case '9':
HostAdapter->BusType = BusLogic_PCI_Bus;
break;
}
/*
Determine whether Extended Translation is enabled and save it in
the Host Adapter structure.
*/
GeometryRegister = BusLogic_ReadGeometryRegister(HostAdapter);
if (GeometryRegister & BusLogic_ExtendedTranslationEnabled)
HostAdapter->ExtendedTranslation = true;
/*
Save the Disconnect/Reconnect Permitted flag bits in the Host Adapter
structure. The Disconnect Permitted information is only valid on "W" and
"C" Series controllers, but Disconnect/Reconnect is always permitted on "S"
and "A" Series controllers.
*/
if (HostAdapter->FirmwareVersion[0] >= '4')
HostAdapter->DisconnectPermitted =
(SetupInformation.DisconnectPermittedID8to15 << 8)
| SetupInformation.DisconnectPermittedID0to7;
else HostAdapter->DisconnectPermitted = 0xFF;
/*
Save the Scatter Gather Limits, Level Sensitive Interrupts flag, Wide
SCSI flag, Differential SCSI flag, Automatic Configuration flag, and
Ultra SCSI flag in the Host Adapter structure.
*/
HostAdapter->HostAdapterScatterGatherLimit =
ExtendedSetupInformation.ScatterGatherLimit;
HostAdapter->DriverScatterGatherLimit =
HostAdapter->HostAdapterScatterGatherLimit;
if (HostAdapter->HostAdapterScatterGatherLimit > BusLogic_ScatterGatherLimit)
HostAdapter->DriverScatterGatherLimit = BusLogic_ScatterGatherLimit;
if (ExtendedSetupInformation.Misc.LevelSensitiveInterrupts)
HostAdapter->LevelSensitiveInterrupts = true;
HostAdapter->HostWideSCSI = ExtendedSetupInformation.HostWideSCSI;
HostAdapter->HostDifferentialSCSI =
ExtendedSetupInformation.HostDifferentialSCSI;
HostAdapter->HostAutomaticConfiguration =
ExtendedSetupInformation.HostAutomaticConfiguration;
HostAdapter->HostUltraSCSI = ExtendedSetupInformation.HostUltraSCSI;
/*
Determine whether 64 LUN Format CCBs are supported and save the information
in the Host Adapter structure.
*/
if (HostAdapter->FirmwareVersion[0] == '5' ||
(HostAdapter->FirmwareVersion[0] == '4' && HostAdapter->HostWideSCSI))
HostAdapter->Host64LUNSupport = true;
/*
Determine the Host Adapter BIOS Address if the BIOS is enabled and
save it in the Host Adapter structure. The BIOS is disabled if the
BIOS_Address is 0.
*/
HostAdapter->BIOS_Address = ExtendedSetupInformation.BIOS_Address << 12;
/*
ISA Host Adapters require Bounce Buffers if there is more than 16MB memory.
*/
if (HostAdapter->BusType == BusLogic_ISA_Bus && high_memory > MAX_DMA_ADDRESS)
HostAdapter->BounceBuffersRequired = true;
/*
BusLogic BT-445S Host Adapters prior to controller revision E have a
hardware bug whereby when the BIOS is enabled, transfers to/from the same
address range the BIOS occupies modulo 16MB are handled incorrectly. Only
properly functioning BT-445S controllers have firmware version 3.37, so we
require that ISA Bounce Buffers be used for the buggy BT-445S models if
there is more than 16MB memory.
*/
if (HostAdapter->BIOS_Address > 0 &&
strcmp(HostAdapter->ModelName, "BT-445S") == 0 &&
strcmp(HostAdapter->FirmwareVersion, "3.37") < 0 &&
high_memory > MAX_DMA_ADDRESS)
HostAdapter->BounceBuffersRequired = true;
/*
Determine the maximum number of Target IDs and Logical Units supported by
this driver for Wide and Narrow Host Adapters.
*/
HostAdapter->MaxTargetDevices = (HostAdapter->HostWideSCSI ? 16 : 8);
HostAdapter->MaxLogicalUnits = (HostAdapter->Host64LUNSupport ? 64 : 8);
/*
Select appropriate values for the Mailbox Count, Initial CCBs, and
Incremental CCBs variables based on whether or not Strict Round Robin Mode
is supported. If Strict Round Robin Mode is supported, then there is no
performance degradation in using the maximum possible number of Outgoing
and Incoming Mailboxes and allowing the Tagged and Untagged Queue Depths to
determine the actual utilization. If Strict Round Robin Mode is not
supported, then the Host Adapter must scan all the Outgoing Mailboxes
whenever an Outgoing Mailbox entry is made, which can cause a substantial
performance penalty. The Host Adapters actually have room to store the
following number of CCBs internally; that is, they can internally queue and
manage this many active commands on the SCSI bus simultaneously.
Performance measurements demonstrate that the Mailbox Count should be set
to the maximum possible, rather than the internal CCB capacity, as it is
more efficient to have the queued commands waiting in Outgoing Mailboxes if
necessary than to block the process in the higher levels of the SCSI
Subsystem.
192 BT-948/958/958D
100 BT-946C/956C/956CD/747C/757C/757CD/445C
50 BT-545C/540CF
30 BT-747S/747D/757S/757D/445S/545S/542D/542B/742A
*/
if (strcmp(HostAdapter->FirmwareVersion, "3.31") >= 0)
{
HostAdapter->StrictRoundRobinModeSupport = true;
HostAdapter->MailboxCount = 255;
HostAdapter->InitialCCBs = 64;
HostAdapter->IncrementalCCBs = 32;
}
else
{
HostAdapter->StrictRoundRobinModeSupport = false;
HostAdapter->MailboxCount = 32;
HostAdapter->InitialCCBs = 32;
HostAdapter->IncrementalCCBs = 4;
}
if (HostAdapter->FirmwareVersion[0] == '5')
HostAdapter->TotalQueueDepth = 192;
else if (HostAdapter->FirmwareVersion[0] == '4')
HostAdapter->TotalQueueDepth =
(HostAdapter->BusType != BusLogic_ISA_Bus ? 100 : 50);
else HostAdapter->TotalQueueDepth = 30;
/*
Select an appropriate value for the Tagged Queue Depth either from a
Command Line Entry, or based on whether this Host Adapter requires that
ISA Bounce Buffers be used. The Tagged Queue Depth is left at 0 for
automatic determination in BusLogic_SelectQueueDepths. Initialize the
Untagged Queue Depth.
*/
if (HostAdapter->CommandLineEntry != NULL &&
HostAdapter->CommandLineEntry->TaggedQueueDepth > 0)
HostAdapter->TaggedQueueDepth =
HostAdapter->CommandLineEntry->TaggedQueueDepth;
else if (HostAdapter->BounceBuffersRequired)
HostAdapter->TaggedQueueDepth = BusLogic_TaggedQueueDepth_BB;
else HostAdapter->TaggedQueueDepth = 0;
HostAdapter->UntaggedQueueDepth = BusLogic_UntaggedQueueDepth;
if (HostAdapter->UntaggedQueueDepth > HostAdapter->TaggedQueueDepth &&
HostAdapter->TaggedQueueDepth > 0)
HostAdapter->UntaggedQueueDepth = HostAdapter->TaggedQueueDepth;
/*
Select an appropriate value for Bus Settle Time either from a Command
Line Entry, or from BusLogic_DefaultBusSettleTime.
*/
if (HostAdapter->CommandLineEntry != NULL &&
HostAdapter->CommandLineEntry->BusSettleTime > 0)
HostAdapter->BusSettleTime = HostAdapter->CommandLineEntry->BusSettleTime;
else HostAdapter->BusSettleTime = BusLogic_DefaultBusSettleTime;
/*
Select an appropriate value for Local Options from a Command Line Entry.
*/
if (HostAdapter->CommandLineEntry != NULL)
HostAdapter->LocalOptions = HostAdapter->CommandLineEntry->LocalOptions;
/*
Select appropriate values for the Error Recovery Strategy array either from
a Command Line Entry, or using BusLogic_ErrorRecovery_Default.
*/
if (HostAdapter->CommandLineEntry != NULL)
memcpy(HostAdapter->ErrorRecoveryStrategy,
HostAdapter->CommandLineEntry->ErrorRecoveryStrategy,
sizeof(HostAdapter->ErrorRecoveryStrategy));
else memset(HostAdapter->ErrorRecoveryStrategy,
BusLogic_ErrorRecovery_Default,
sizeof(HostAdapter->ErrorRecoveryStrategy));
/*
Tagged Queuing support is available and operates properly on all "W" Series
controllers, on "C" Series controllers with firmware version 4.22 and
above, and on "S" Series controllers with firmware version 3.35 and above.
Tagged Queuing is disabled by default when the Tagged Queue Depth is 1
since queuing multiple commands is not possible.
*/
TaggedQueuingPermittedDefault = 0;
if (HostAdapter->TaggedQueueDepth != 1)
switch (HostAdapter->FirmwareVersion[0])
{
case '5':
TaggedQueuingPermittedDefault = 0xFFFF;
break;
case '4':
if (strcmp(HostAdapter->FirmwareVersion, "4.22") >= 0)
TaggedQueuingPermittedDefault = 0xFFFF;
break;
case '3':
if (strcmp(HostAdapter->FirmwareVersion, "3.35") >= 0)
TaggedQueuingPermittedDefault = 0xFFFF;
break;
}
/*
Tagged Queuing is only useful if Disconnect/Reconnect is permitted.
Therefore, mask the Tagged Queuing Permitted Default bits with the
Disconnect/Reconnect Permitted bits.
*/
TaggedQueuingPermittedDefault &= HostAdapter->DisconnectPermitted;
/*
Combine the default Tagged Queuing Permitted bits with any Command
Line Entry Tagged Queuing specification.
*/
if (HostAdapter->CommandLineEntry != NULL)
HostAdapter->TaggedQueuingPermitted =
(HostAdapter->CommandLineEntry->TaggedQueuingPermitted &
HostAdapter->CommandLineEntry->TaggedQueuingPermittedMask) |
(TaggedQueuingPermittedDefault &
~HostAdapter->CommandLineEntry->TaggedQueuingPermittedMask);
else HostAdapter->TaggedQueuingPermitted = TaggedQueuingPermittedDefault;
/*
Announce the Host Adapter Configuration.
*/
printk("scsi%d: Configuring BusLogic Model %s %s%s%s%s SCSI Host Adapter\n",
HostAdapter->HostNumber, HostAdapter->ModelName,
BusLogic_BusNames[HostAdapter->BusType],
(HostAdapter->HostWideSCSI ? " Wide" : ""),
(HostAdapter->HostDifferentialSCSI ? " Differential" : ""),
(HostAdapter->HostUltraSCSI ? " Ultra" : ""));
printk("scsi%d: Firmware Version: %s, I/O Address: 0x%X, "
"IRQ Channel: %d/%s\n",
HostAdapter->HostNumber, HostAdapter->FirmwareVersion,
HostAdapter->IO_Address, HostAdapter->IRQ_Channel,
(HostAdapter->LevelSensitiveInterrupts ? "Level" : "Edge"));
printk("scsi%d: DMA Channel: ", HostAdapter->HostNumber);
if (HostAdapter->DMA_Channel > 0)
printk("%d, ", HostAdapter->DMA_Channel);
else printk("None, ");
if (HostAdapter->BIOS_Address > 0)
printk("BIOS Address: 0x%X, ", HostAdapter->BIOS_Address);
else printk("BIOS Address: None, ");
printk("Host Adapter SCSI ID: %d\n", HostAdapter->SCSI_ID);
printk("scsi%d: Scatter/Gather Limit: %d of %d segments, "
"Parity Checking: %s\n", HostAdapter->HostNumber,
HostAdapter->DriverScatterGatherLimit,
HostAdapter->HostAdapterScatterGatherLimit,
(HostAdapter->ParityChecking ? "Enabled" : "Disabled"));
printk("scsi%d: Synchronous Initiation: %s, "
"Extended Disk Translation: %s\n", HostAdapter->HostNumber,
(HostAdapter->SynchronousInitiation ? "Enabled" : "Disabled"),
(HostAdapter->ExtendedTranslation ? "Enabled" : "Disabled"));
AllTargetsMask = (1 << HostAdapter->MaxTargetDevices) - 1;
DisconnectPermitted = HostAdapter->DisconnectPermitted & AllTargetsMask;
printk("scsi%d: Disconnect/Reconnect: ", HostAdapter->HostNumber);
if (DisconnectPermitted == 0)
printk("Disabled");
else if (DisconnectPermitted == AllTargetsMask)
printk("Enabled");
else
for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++)
printk("%c", (DisconnectPermitted & (1 << TargetID)) ? 'Y' : 'N');
printk(", Tagged Queuing: ");
TaggedQueuingPermitted =
HostAdapter->TaggedQueuingPermitted & AllTargetsMask;
if (TaggedQueuingPermitted == 0)
printk("Disabled");
else if (TaggedQueuingPermitted == AllTargetsMask)
printk("Enabled");
else
for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++)
printk("%c", (TaggedQueuingPermitted & (1 << TargetID)) ? 'Y' : 'N');
printk("\n");
printk("scsi%d: Total Queue Depth: %d, Mailboxes: %d, Initial CCBs: %d\n",
HostAdapter->HostNumber, HostAdapter->TotalQueueDepth,
HostAdapter->MailboxCount, HostAdapter->InitialCCBs);
printk("scsi%d: Tagged Queue Depth: ", HostAdapter->HostNumber);
if (HostAdapter->TaggedQueueDepth > 0)
printk("%d", HostAdapter->TaggedQueueDepth);
else printk("Automatic");
printk(", Untagged Queue Depth: %d\n", HostAdapter->UntaggedQueueDepth);
if (HostAdapter->TerminationInfoValid)
if (HostAdapter->HostWideSCSI)
printk("scsi%d: Host Adapter SCSI Bus Termination (Low/High): %s/%s\n",
HostAdapter->HostNumber,
(HostAdapter->LowByteTerminated ? "Enabled" : "Disabled"),
(HostAdapter->HighByteTerminated ? "Enabled" : "Disabled"));
else printk("scsi%d: Host Adapter SCSI Bus Termination: %s\n",
HostAdapter->HostNumber,
(HostAdapter->LowByteTerminated ? "Enabled" : "Disabled"));
CommonErrorRecovery = true;
for (TargetID = 1; TargetID < HostAdapter->MaxTargetDevices; TargetID++)
if (HostAdapter->ErrorRecoveryStrategy[TargetID] !=
HostAdapter->ErrorRecoveryStrategy[0])
{
CommonErrorRecovery = false;
break;
}
printk("scsi%d: Error Recovery Strategy: ", HostAdapter->HostNumber);
if (CommonErrorRecovery)
printk("%s", BusLogic_ErrorRecoveryStrategyNames[
HostAdapter->ErrorRecoveryStrategy[0]]);
else
for (TargetID = 0; TargetID < HostAdapter->MaxTargetDevices; TargetID++)
printk("%s", BusLogic_ErrorRecoveryStrategyLetters[
HostAdapter->ErrorRecoveryStrategy[TargetID]]);
printk("\n");
/*
Indicate reading the Host Adapter Configuration completed successfully.
*/
return true;
}
Generated by GNU enscript 1.6.4.