|BusLogic MultiMaster and FlashPoint SCSI Driver for Linux
|Version 2.0.15 for Linux 2.0
|Version 2.1.15 for Linux 2.1
|17 August 1998
|Leonard N. Zubkoff
|Copyright 1995-1998 by Leonard N. Zubkoff <email@example.com>
|BusLogic, Inc. designed and manufactured a variety of high performance SCSI
|host adapters which share a common programming interface across a diverse
|collection of bus architectures by virtue of their MultiMaster ASIC technology.
|BusLogic was acquired by Mylex Corporation in February 1996, but the products
|supported by this driver originated under the BusLogic name and so that name is
|retained in the source code and documentation.
|This driver supports all present BusLogic MultiMaster Host Adapters, and should
|support any future MultiMaster designs with little or no modification. More
|recently, BusLogic introduced the FlashPoint Host Adapters, which are less
|costly and rely on the host CPU, rather than including an onboard processor.
|Despite not having an onboard CPU, the FlashPoint Host Adapters perform very
|well and have very low command latency. BusLogic has recently provided me with
|the FlashPoint Driver Developer's Kit, which comprises documentation and freely
|redistributable source code for the FlashPoint SCCB Manager. The SCCB Manager
|is the library of code that runs on the host CPU and performs functions
|analogous to the firmware on the MultiMaster Host Adapters. Thanks to their
|having provided the SCCB Manager, this driver now supports the FlashPoint Host
|Adapters as well.
|My primary goals in writing this completely new BusLogic driver for Linux are
|to achieve the full performance that BusLogic SCSI Host Adapters and modern
|SCSI peripherals are capable of, and to provide a highly robust driver that can
|be depended upon for high performance mission critical applications. All of
|the major performance features can be configured from the Linux kernel command
|line or at module initialization time, allowing individual installations to
|tune driver performance and error recovery to their particular needs.
|The latest information on Linux support for BusLogic SCSI Host Adapters, as
|well as the most recent release of this driver and the latest firmware for the
|BT-948/958/958D, will always be available from my Linux Home Page at URL
|Bug reports should be sent via electronic mail to "firstname.lastname@example.org". Please
|include with the bug report the complete configuration messages reported by the
|driver and SCSI subsystem at startup, along with any subsequent system messages
|relevant to SCSI operations, and a detailed description of your system's
|Mylex has been an excellent company to work with and I highly recommend their
|products to the Linux community. In November 1995, I was offered the
|opportunity to become a beta test site for their latest MultiMaster product,
|the BT-948 PCI Ultra SCSI Host Adapter, and then again for the BT-958 PCI Wide
|Ultra SCSI Host Adapter in January 1996. This was mutually beneficial since
|Mylex received a degree and kind of testing that their own testing group cannot
|readily achieve, and the Linux community has available high performance host
|adapters that have been well tested with Linux even before being brought to
|market. This relationship has also given me the opportunity to interact
|directly with their technical staff, to understand more about the internal
|workings of their products, and in turn to educate them about the needs and
|potential of the Linux community.
|More recently, Mylex has reaffirmed the company's interest in supporting the
|Linux community, and I am now working on a Linux driver for the DAC960 PCI RAID
|Controllers. Mylex's interest and support is greatly appreciated.
|Unlike some other vendors, if you contact Mylex Technical Support with a
|problem and are running Linux, they will not tell you that your use of their
|products is unsupported. Their latest product marketing literature even states
|"Mylex SCSI host adapters are compatible with all major operating systems
|including: ... Linux ...".
|Mylex Corporation is located at 34551 Ardenwood Blvd., Fremont, California
|94555, USA and can be reached at 510/796-6100 or on the World Wide Web at
|http://www.mylex.com. Mylex HBA Technical Support can be reached by electronic
|mail at email@example.com, by Voice at 510/608-2400, or by FAX at 510/745-7715.
|Contact information for offices in Europe and Japan is available on the Web
|o Configuration Reporting and Testing
|During system initialization, the driver reports extensively on the host
|adapter hardware configuration, including the synchronous transfer parameters
|requested and negotiated with each target device. AutoSCSI settings for
|Synchronous Negotiation, Wide Negotiation, and Disconnect/Reconnect are
|reported for each target device, as well as the status of Tagged Queuing.
|If the same setting is in effect for all target devices, then a single word
|or phrase is used; otherwise, a letter is provided for each target device to
|indicate the individual status. The following examples
|should clarify this reporting format:
|Synchronous Negotiation: Ultra
|Synchronous negotiation is enabled for all target devices and the host
|adapter will attempt to negotiate for 20.0 mega-transfers/second.
|Synchronous Negotiation: Fast
|Synchronous negotiation is enabled for all target devices and the host
|adapter will attempt to negotiate for 10.0 mega-transfers/second.
|Synchronous Negotiation: Slow
|Synchronous negotiation is enabled for all target devices and the host
|adapter will attempt to negotiate for 5.0 mega-transfers/second.
|Synchronous Negotiation: Disabled
|Synchronous negotiation is disabled and all target devices are limited to
|Synchronous Negotiation: UFSNUUU#UUUUUUUU
|Synchronous negotiation to Ultra speed is enabled for target devices 0
|and 4 through 15, to Fast speed for target device 1, to Slow speed for
|target device 2, and is not permitted to target device 3. The host
|adapter's SCSI ID is represented by the "#".
|The status of Wide Negotiation, Disconnect/Reconnect, and Tagged Queuing
|are reported as "Enabled", Disabled", or a sequence of "Y" and "N" letters.
|o Performance Features
|BusLogic SCSI Host Adapters directly implement SCSI-2 Tagged Queuing, and so
|support has been included in the driver to utilize tagged queuing with any
|target devices that report having the tagged queuing capability. Tagged
|queuing allows for multiple outstanding commands to be issued to each target
|device or logical unit, and can improve I/O performance substantially. In
|addition, BusLogic's Strict Round Robin Mode is used to optimize host adapter
|performance, and scatter/gather I/O can support as many segments as can be
|effectively utilized by the Linux I/O subsystem. Control over the use of
|tagged queuing for each target device as well as individual selection of the
|tagged queue depth is available through driver options provided on the kernel
|command line or at module initialization time. By default, the queue depth
|is determined automatically based on the host adapter's total queue depth and
|the number, type, speed, and capabilities of the target devices found. In
|addition, tagged queuing is automatically disabled whenever the host adapter
|firmware version is known not to implement it correctly, or whenever a tagged
|queue depth of 1 is selected. Tagged queuing is also disabled for individual
|target devices if disconnect/reconnect is disabled for that device.
|o Robustness Features
|The driver implements extensive error recovery procedures. When the higher
|level parts of the SCSI subsystem request that a timed out command be reset,
|a selection is made between a full host adapter hard reset and SCSI bus reset
|versus sending a bus device reset message to the individual target device
|based on the recommendation of the SCSI subsystem. Error recovery strategies
|are selectable through driver options individually for each target device,
|and also include sending a bus device reset to the specific target device
|associated with the command being reset, as well as suppressing error
|recovery entirely to avoid perturbing an improperly functioning device. If
|the bus device reset error recovery strategy is selected and sending a bus
|device reset does not restore correct operation, the next command that is
|reset will force a full host adapter hard reset and SCSI bus reset. SCSI bus
|resets caused by other devices and detected by the host adapter are also
|handled by issuing a soft reset to the host adapter and re-initialization.
|Finally, if tagged queuing is active and more than one command reset occurs
|in a 10 minute interval, or if a command reset occurs within the first 10
|minutes of operation, then tagged queuing will be disabled for that target
|device. These error recovery options improve overall system robustness by
|preventing individual errant devices from causing the system as a whole to
|lock up or crash, and thereby allowing a clean shutdown and restart after the
|offending component is removed.
|o PCI Configuration Support
|On PCI systems running kernels compiled with PCI BIOS support enabled, this
|driver will interrogate the PCI configuration space and use the I/O port
|addresses assigned by the system BIOS, rather than the ISA compatible I/O
|port addresses. The ISA compatible I/O port address is then disabled by the
|driver. On PCI systems it is also recommended that the AutoSCSI utility be
|used to disable the ISA compatible I/O port entirely as it is not necessary.
|The ISA compatible I/O port is disabled by default on the BT-948/958/958D.
|o /proc File System Support
|Copies of the host adapter configuration information together with updated
|data transfer and error recovery statistics are available through the
|o Shared Interrupts Support
|On systems that support shared interrupts, any number of BusLogic Host
|Adapters may share the same interrupt request channel.
|SUPPORTED HOST ADAPTERS
|The following list comprises the supported BusLogic SCSI Host Adapters as of
|the date of this document. It is recommended that anyone purchasing a BusLogic
|Host Adapter not in the following table contact the author beforehand to verify
|that it is or will be supported.
|FlashPoint Series PCI Host Adapters:
|FlashPoint LT (BT-930) Ultra SCSI-3
|FlashPoint LT (BT-930R) Ultra SCSI-3 with RAIDPlus
|FlashPoint LT (BT-920) Ultra SCSI-3 (BT-930 without BIOS)
|FlashPoint DL (BT-932) Dual Channel Ultra SCSI-3
|FlashPoint DL (BT-932R) Dual Channel Ultra SCSI-3 with RAIDPlus
|FlashPoint LW (BT-950) Wide Ultra SCSI-3
|FlashPoint LW (BT-950R) Wide Ultra SCSI-3 with RAIDPlus
|FlashPoint DW (BT-952) Dual Channel Wide Ultra SCSI-3
|FlashPoint DW (BT-952R) Dual Channel Wide Ultra SCSI-3 with RAIDPlus
|MultiMaster "W" Series Host Adapters:
|BT-948 PCI Ultra SCSI-3
|BT-958 PCI Wide Ultra SCSI-3
|BT-958D PCI Wide Differential Ultra SCSI-3
|MultiMaster "C" Series Host Adapters:
|BT-946C PCI Fast SCSI-2
|BT-956C PCI Wide Fast SCSI-2
|BT-956CD PCI Wide Differential Fast SCSI-2
|BT-445C VLB Fast SCSI-2
|BT-747C EISA Fast SCSI-2
|BT-757C EISA Wide Fast SCSI-2
|BT-757CD EISA Wide Differential Fast SCSI-2
|BT-545C ISA Fast SCSI-2
|BT-540CF ISA Fast SCSI-2
|MultiMaster "S" Series Host Adapters:
|BT-445S VLB Fast SCSI-2
|BT-747S EISA Fast SCSI-2
|BT-747D EISA Differential Fast SCSI-2
|BT-757S EISA Wide Fast SCSI-2
|BT-757D EISA Wide Differential Fast SCSI-2
|BT-545S ISA Fast SCSI-2
|BT-542D ISA Differential Fast SCSI-2
|BT-742A EISA SCSI-2 (742A revision H)
|BT-542B ISA SCSI-2 (542B revision H)
|MultiMaster "A" Series Host Adapters:
|BT-742A EISA SCSI-2 (742A revisions A - G)
|BT-542B ISA SCSI-2 (542B revisions A - G)
|AMI FastDisk Host Adapters that are true BusLogic MultiMaster clones are also
|supported by this driver.
|BusLogic SCSI Host Adapters are available packaged both as bare boards and as
|retail kits. The BT- model numbers above refer to the bare board packaging.
|The retail kit model numbers are found by replacing BT- with KT- in the above
|list. The retail kit includes the bare board and manual as well as cabling and
|driver media and documentation that are not provided with bare boards.
|FLASHPOINT INSTALLATION NOTES
|o RAIDPlus Support
|FlashPoint Host Adapters now include RAIDPlus, Mylex's bootable software
|RAID. RAIDPlus is not supported on Linux, and there are no plans to support
|it. The MD driver in Linux 2.0 provides for concatenation (LINEAR) and
|striping (RAID-0), and support for mirroring (RAID-1), fixed parity (RAID-4),
|and distributed parity (RAID-5) is available separately. The built-in Linux
|RAID support is generally more flexible and is expected to perform better
|than RAIDPlus, so there is little impetus to include RAIDPlus support in the
|o Enabling UltraSCSI Transfers
|FlashPoint Host Adapters ship with their configuration set to "Factory
|Default" settings that are conservative and do not allow for UltraSCSI speed
|to be negotiated. This results in fewer problems when these host adapters
|are installed in systems with cabling or termination that is not sufficient
|for UltraSCSI operation, or where existing SCSI devices do not properly
|respond to synchronous transfer negotiation for UltraSCSI speed. AutoSCSI
|may be used to load "Optimum Performance" settings which allow UltraSCSI
|speed to be negotiated with all devices, or UltraSCSI speed can be enabled on
|an individual basis. It is recommended that SCAM be manually disabled after
|the "Optimum Performance" settings are loaded.
|BT-948/958/958D INSTALLATION NOTES
|The BT-948/958/958D PCI Ultra SCSI Host Adapters have some features which may
|require attention in some circumstances when installing Linux.
|o PCI I/O Port Assignments
|When configured to factory default settings, the BT-948/958/958D will only
|recognize the PCI I/O port assignments made by the motherboard's PCI BIOS.
|The BT-948/958/958D will not respond to any of the ISA compatible I/O ports
|that previous BusLogic SCSI Host Adapters respond to. This driver supports
|the PCI I/O port assignments, so this is the preferred configuration.
|However, if the obsolete BusLogic driver must be used for any reason, such as
|a Linux distribution that does not yet use this driver in its boot kernel,
|BusLogic has provided an AutoSCSI configuration option to enable a legacy ISA
|compatible I/O port.
|To enable this backward compatibility option, invoke the AutoSCSI utility via
|Ctrl-B at system startup and select "Adapter Configuration", "View/Modify
|Configuration", and then change the "ISA Compatible Port" setting from
|"Disable" to "Primary" or "Alternate". Once this driver has been installed,
|the "ISA Compatible Port" option should be set back to "Disable" to avoid
|possible future I/O port conflicts. The older BT-946C/956C/956CD also have
|this configuration option, but the factory default setting is "Primary".
|o PCI Slot Scanning Order
|In systems with multiple BusLogic PCI Host Adapters, the order in which the
|PCI slots are scanned may appear reversed with the BT-948/958/958D as
|compared to the BT-946C/956C/956CD. For booting from a SCSI disk to work
|correctly, it is necessary that the host adapter's BIOS and the kernel agree
|on which disk is the boot device, which requires that they recognize the PCI
|host adapters in the same order. The motherboard's PCI BIOS provides a
|standard way of enumerating the PCI host adapters, which is used by the Linux
|kernel. Some PCI BIOS implementations enumerate the PCI slots in order of
|increasing bus number and device number, while others do so in the opposite
|Unfortunately, Microsoft decided that Windows 95 would always enumerate the
|PCI slots in order of increasing bus number and device number regardless of
|the PCI BIOS enumeration, and requires that their scheme be supported by the
|host adapter's BIOS to receive Windows 95 certification. Therefore, the
|factory default settings of the BT-948/958/958D enumerate the host adapters
|by increasing bus number and device number. To disable this feature, invoke
|the AutoSCSI utility via Ctrl-B at system startup and select "Adapter
|Configuration", "View/Modify Configuration", press Ctrl-F10, and then change
|the "Use Bus And Device # For PCI Scanning Seq." option to OFF.
|This driver will interrogate the setting of the PCI Scanning Sequence option
|so as to recognize the host adapters in the same order as they are enumerated
|by the host adapter's BIOS.
|o Enabling UltraSCSI Transfers
|The BT-948/958/958D ship with their configuration set to "Factory Default"
|settings that are conservative and do not allow for UltraSCSI speed to be
|negotiated. This results in fewer problems when these host adapters are
|installed in systems with cabling or termination that is not sufficient for
|UltraSCSI operation, or where existing SCSI devices do not properly respond
|to synchronous transfer negotiation for UltraSCSI speed. AutoSCSI may be
|used to load "Optimum Performance" settings which allow UltraSCSI speed to be
|negotiated with all devices, or UltraSCSI speed can be enabled on an
|individual basis. It is recommended that SCAM be manually disabled after the
|"Optimum Performance" settings are loaded.
|BusLogic Driver Options may be specified either via the Linux Kernel Command
|Line or via the Loadable Kernel Module Installation Facility. Driver Options
|for multiple host adapters may be specified either by separating the option
|strings by a semicolon, or by specifying multiple "BusLogic=" strings on the
|command line. Individual option specifications for a single host adapter are
|separated by commas. The Probing and Debugging Options apply to all host
|adapters whereas the remaining options apply individually only to the
|selected host adapter.
|The BusLogic Driver Probing Options comprise the following:
|The "IO:" option specifies an ISA I/O Address to be probed for a non-PCI
|MultiMaster Host Adapter. If neither "IO:" nor "NoProbeISA" options are
|specified, then the standard list of BusLogic MultiMaster ISA I/O Addresses
|will be probed (0x330, 0x334, 0x230, 0x234, 0x130, and 0x134). Multiple
|"IO:" options may be specified to precisely determine the I/O Addresses to
|be probed, but the probe order will always follow the standard list.
|The "NoProbe" option disables all probing and therefore no BusLogic Host
|Adapters will be detected.
|The "NoProbeISA" option disables probing of the standard BusLogic ISA I/O
|Addresses and therefore only PCI MultiMaster and FlashPoint Host Adapters
|will be detected.
|The "NoProbePCI" options disables the interrogation of PCI Configuration
|Space and therefore only ISA Multimaster Host Adapters will be detected, as
|well as PCI Multimaster Host Adapters that have their ISA Compatible I/O
|Port set to "Primary" or "Alternate".
|The "NoSortPCI" option forces PCI MultiMaster Host Adapters to be
|enumerated in the order provided by the PCI BIOS, ignoring any setting of
|the AutoSCSI "Use Bus And Device # For PCI Scanning Seq." option.
|The "MultiMasterFirst" option forces MultiMaster Host Adapters to be probed
|before FlashPoint Host Adapters. By default, if both FlashPoint and PCI
|MultiMaster Host Adapters are present, this driver will probe for
|FlashPoint Host Adapters first unless the BIOS primary disk is controlled
|by the first PCI MultiMaster Host Adapter, in which case MultiMaster Host
|Adapters will be probed first.
|The "FlashPointFirst" option forces FlashPoint Host Adapters to be probed
|before MultiMaster Host Adapters.
|The BusLogic Driver Tagged Queuing Options allow for explicitly specifying
|the Queue Depth and whether Tagged Queuing is permitted for each Target
|Device (assuming that the Target Device supports Tagged Queuing). The Queue
|Depth is the number of SCSI Commands that are allowed to be concurrently
|presented for execution (either to the Host Adapter or Target Device). Note
|that explicitly enabling Tagged Queuing may lead to problems; the option to
|enable or disable Tagged Queuing is provided primarily to allow disabling
|Tagged Queuing on Target Devices that do not implement it correctly. The
|following options are available:
|The "QueueDepth:" or QD:" option specifies the Queue Depth to use for all
|Target Devices that support Tagged Queuing, as well as the maximum Queue
|Depth for devices that do not support Tagged Queuing. If no Queue Depth
|option is provided, the Queue Depth will be determined automatically based
|on the Host Adapter's Total Queue Depth and the number, type, speed, and
|capabilities of the detected Target Devices. For Host Adapters that
|require ISA Bounce Buffers, the Queue Depth is automatically set by default
|to BusLogic_TaggedQueueDepthBB or BusLogic_UntaggedQueueDepthBB to avoid
|excessive preallocation of DMA Bounce Buffer memory. Target Devices that
|do not support Tagged Queuing always have their Queue Depth set to
|BusLogic_UntaggedQueueDepth or BusLogic_UntaggedQueueDepthBB, unless a
|lower Queue Depth option is provided. A Queue Depth of 1 automatically
|disables Tagged Queuing.
|The "QueueDepth:[...]" or "QD:[...]" option specifies the Queue Depth
|individually for each Target Device. If an <integer> is omitted, the
|associated Target Device will have its Queue Depth selected automatically.
|The "TaggedQueuing:Default" or "TQ:Default" option permits Tagged Queuing
|based on the firmware version of the BusLogic Host Adapter and based on
|whether the Queue Depth allows queuing multiple commands.
|The "TaggedQueuing:Enable" or "TQ:Enable" option enables Tagged Queuing for
|all Target Devices on this Host Adapter, overriding any limitation that
|would otherwise be imposed based on the Host Adapter firmware version.
|The "TaggedQueuing:Disable" or "TQ:Disable" option disables Tagged Queuing
|for all Target Devices on this Host Adapter.
|The "TaggedQueuing:<Target-Spec>" or "TQ:<Target-Spec>" option controls
|Tagged Queuing individually for each Target Device. <Target-Spec> is a
|sequence of "Y", "N", and "X" characters. "Y" enables Tagged Queuing, "N"
|disables Tagged Queuing, and "X" accepts the default based on the firmware
|version. The first character refers to Target Device 0, the second to
|Target Device 1, and so on; if the sequence of "Y", "N", and "X" characters
|does not cover all the Target Devices, unspecified characters are assumed
|to be "X".
|The BusLogic Driver Miscellaneous Options comprise the following:
|The "BusSettleTime:" or "BST:" option specifies the Bus Settle Time in
|seconds. The Bus Settle Time is the amount of time to wait between a Host
|Adapter Hard Reset which initiates a SCSI Bus Reset and issuing any SCSI
|Commands. If unspecified, it defaults to BusLogic_DefaultBusSettleTime.
|The "InhibitTargetInquiry" option inhibits the execution of an Inquire
|Target Devices or Inquire Installed Devices command on MultiMaster Host
|Adapters. This may be necessary with some older Target Devices that do not
|respond correctly when Logical Units above 0 are addressed.
|The BusLogic Driver Debugging Options comprise the following:
|The "TraceProbe" option enables tracing of Host Adapter Probing.
|The "TraceHardwareReset" option enables tracing of Host Adapter Hardware
|The "TraceConfiguration" option enables tracing of Host Adapter
|The "TraceErrors" option enables tracing of SCSI Commands that return an
|error from the Target Device. The CDB and Sense Data will be printed for
|each SCSI Command that fails.
|The "Debug" option enables all debugging options.
|The following examples demonstrate setting the Queue Depth for Target Devices
|1 and 2 on the first host adapter to 7 and 15, the Queue Depth for all Target
|Devices on the second host adapter to 31, and the Bus Settle Time on the
|second host adapter to 30 seconds.
|Linux Kernel Command Line:
|LILO Linux Boot Loader (in /etc/lilo.conf):
|append = "BusLogic=QueueDepth:[,7,15];QueueDepth:31,BusSettleTime:30"
|INSMOD Loadable Kernel Module Installation Facility:
|insmod BusLogic.o \
|NOTE: Module Utilities 2.1.71 or later is required for correct parsing
|of driver options containing commas.
|This distribution was prepared for Linux kernel version 2.0.35, but should be
|compatible with 2.0.4 or any later 2.0 series kernel.
|To install the new BusLogic SCSI driver, you may use the following commands,
|replacing "/usr/src" with wherever you keep your Linux kernel source tree:
|tar -xvzf BusLogic-2.0.15.tar.gz
|mv README.* LICENSE.* BusLogic.[ch] FlashPoint.c linux/drivers/scsi
|patch -p0 < BusLogic.patch (only for 2.0.33 and below)
|Then install "arch/x86/boot/zImage" as your standard kernel, run lilo if
|appropriate, and reboot.
|BUSLOGIC ANNOUNCEMENTS MAILING LIST
|The BusLogic Announcements Mailing List provides a forum for informing Linux
|users of new driver releases and other announcements regarding Linux support
|for BusLogic SCSI Host Adapters. To join the mailing list, send a message to
|"firstname.lastname@example.org" with the line "subscribe" in the