alad -- Adaptec AHA-294x SCSI host adapter driver


The alad driver directly supports the following host adapters:


This driver also supports the AIC-7850, AIC-7860, AIC-7870, AIC-7880, and AIC-7895 chips.

To determine the support status of your host adapter, contact your system supplier or refer to the Compatible Hardware Web Pages.

Adaptec 3940 notes

The AHA-3940 is, in fact, two host adapters on one board. This is unlike the AHA-2740, which is a single host adapter with two SCSI buses. On the AHA-3940, the IRQ on each of the two chips are wired to INTA and INTB respectively. This allows increased performance by using separate IRQs. However, on systems that are PCI 2.1 compliant (supports PCI-to-PCI bridge), and depending on the system motherboard and BIOS, it is sometimes possible to share IRQs.

Configuring the alad driver

You can configure the alad driver using entries in /etc/conf/cf.d/mdevice and /etc/conf/sdevice.d/alad. See mdevice(F) and sdevice(F). Changes to these files take effect once you relink the kernel using link_unix(ADM) and reboot the system.

Configure alad driver-specific characteristics by editing the /etc/conf/pack.d/alad/space.c file, which controls parameters such as the SCSI ID, I/O port address, scatter/gather, tag queuing and connect/disconnect.

Interrupt distribution
If set to 1, interrupts are handled only on the base CPU. If set to DRIVER_CPU_DEFAULT, interrupt handling is distributed across all CPUs on a multiprocessing configuration.
   int alad_processor = 1;

Set the SCSI ID for the host adapter.
   aha_change alad_hba_id[ha_number]={1,1};
This ID must be changed if another device (such as another host adapter) already exists on this ID.

Bus release timing
Specifies the number of PCI PCLKs the host adapter will continue transferring after being preempted and before releasing the bus. The range is decimal 2 to 60.
   aha_change alad_bus_release[ha_number]={1,8};

Parity option
If set to 1, parity checking is enabled for incoming SCSI data; if set to 0, parity checking is disabled. Parity is always generated on outbound SCSI data.
   aha_change alad_parity[ha_number]={0,1};
Parity checking ensures that minor errors in transmission are caught so the transfer can be retransmitted. If, however, a device generates an incorect parity signal, parity checking should be disabled. Symptoms of incorrect parity include frequent system panics, read/write errors, and bus resets when the device(s) in question are accessed.

Time selection
Specifies the length of time, in milliseconds, the host adapter will wait for a target to respond to selection before aborting the selection procedure.
   aha_change alad_sel_timeout[ha_number];
The supported values are:

256 milliseconds

128 milliseconds

64 millseconds

32 milliseconds

For example, the following line sets the selection timeout on the first host adapter to 128 milliseconds:

   aha_change alad_sel_timeout[ha_number]={1,ALAD_SEL_128};

Allow disconnection
Specifies whether disconnection is allowed for the corresponding target ID. This is a 16-bit field where each bit corresponds to a target ID. If set to 1, disconnection is allowed; if set to 0, disconnection is not allowed.
   aha_change alad_disconnect[ha_number]={1,1};
Disconnection allows one device to be logically disconnected from the host adapter while it processes a request. This should be allowed in most cases because it improves I/O throughput by allowing the host adapter to service multiple commands to different devices at the same time. Some overhead is associated with disconnecting and reconnecting, so when the host adapter issues a comparitively large number of commands to a single device or when only the host adapter and one other device are configured on the SCSI bus, not allowing disconnection may result in better performance.

You can set up your system so that this value can be changed through SCSI Select without having to rebuild the kernel. To do this, modify the line shown above to:

   aha_change alad_disconnect[ha_number]={1,0xFFFF};

NOTE: If disconnection is not allowed, tag queuing must also be turned off.

SCSI option
Sets a 16-byte array that specifies negotiation options. When used for an 8-bit data channel, only the first 8 bytes are examined. Byte 0 represents target 0, byte 1 represents target 1, and so forth. Synchronous negotiation is a method of transferring data that is, in general, much faster than asychronous transfer. A fast synchronous speed of 5-10 MHz is preferred. Some devices, however, such as older tape and CD-ROM devices, support only asynchronous transfer. The system might hang when the BIOS or driver scans such a device or when the device is accessed. If this occurs, disable synchronous negotiation.

Each byte must define SYNC_MODE, SYNC_RATE, and WIDE_MODE:

Determine whether the host adapter will initiate synchronous transfer. Valid values are:

will attempt to initiate synchronous negotiation

will not initiate synchronous negotiation, but will respond to negotiation that is initiated by the target.

Valid values are:

10.0 MHz

8.0 MHz

6.7 MHz

5.7 MHz

5.0 MHz

4.4 MHz

4.0 MHz

3.6 MHz

determines whether the host adapter will attempt to negotiate for wide (16-bit) SCSI data transfers. If set to 1, the host adapter will attempt to negotiate for wide SCSI data transfers; if set to 0, it will not initiate wide negotiation although it will respond to negotiation that is initiated by the target. The supported values for WIDE_MODE are:

negotiate for 16-bit SCSI data transfer

will not initiate wide negotiation.

NOTE: Changing the SCSI option value will cause a SCSI bus reset.

   aha_change alad_scsi_opt[ha_number];
For example, to set wide negotiation for target ID 16:

Ignore underrun
If set to 1, ignore underrun as an error. If set to 0, report underrun as an error. Default is 1, to ignore underrun as an error.
   aha_change alad_underrun[ha_number][16] = {1,0};
An underrun condition occurs when less than the requested amount of data has been transmitted; and overrun condition is when more than the requested amount of data has been transmitted. Some devices transfer more or larger blocks than what was actually requested; for such devices, an underrun condition is not an error condition, so this parameter should be set to ``1'' to avoid spurious error notifications. For devices that conform strictly to the SCSI specification, an underrun is a real error condition. If all configured devices are SCSI compliant, set this parameter to ``0'' so that you receive notification of the error condition.

Tag queuing
If set to 1, driver will perform tag queuing. Default is 0 to disable.
   int alad_do_tagged = 0;
Tag queuing is a provision of the SCSI specification that improves I/O throughput by allowing multiple commands to be queued up in the device's memory for processing. Some devices do not handle such commands properly, and so tag queuing should be disabled when they are configured.

Maximum tag queue
Defines the maximum number of tag queuing SCBs the driver will send to each SCSI device when tag queuing is used. The valid values are 1 to 32, with 8 as the default.
   aha_change alad_MaxTagScbs[ha_number] = {1,4};

Scanning for LUN
During system initialization, the driver scans all devices, but not the LUN, to obtain negotiation information. Setting this to 1 causes the LUN to also be scanned.
   aha_change alad_scan_lun[ha_number];
For example, to have no LUN scanning on host adapter 0 and to enable LUN scanning on host adapter 1:

Enable instrumentation
Set to 1 to enable instrumentation for that host adapter; default is 0 to disable instrumentation.
   aha_change alad_instr_enable[ha_number] = {1,1};
Normally CIO software enables instrumentation, so it is not necessary to enable instrumentation here. Enabling provides more accurate instrumentation information although it degrades performance slightly.

For example, to enable instrumentation on the first and third channels or host adapters, set this as follows:

   aha_change alad_instru_enable[ha_number]={1,1, 0,0, 1,1};

Maximum entries in instrumentation error log
Specifies the maximum number of entries in the error log when instrumentation is enabled. By default, this is set to 32; 1 is the minimum value, or set to max when no instrumentation is enabled. Each entry is approximately 40 bytes long.
   unsigned short alad_instru_errlogsz = 32;

Boot time configuration of SCSI

Use the bootstring(HW) parameters to override the default hardware configuration information. Of special interest are the adapter= parameter that specifies information for the host adapter card that plugs into or is part of the motherboard, and the periph= parameter that specifies information about the host adapter being used by one of the generic peripheral interfaces (Sdsk, Srom, or Stp).

ioctl commands

The alad driver supports all standard SCSI ioctls that are defined in the <sys/scsicmd.h> header file and documented on the scsi(HW) manual page.


The alad driver may not talk to some tape devices, especially those designed to the SCSI-1 specification. For these devices, if a tape(C) command or data transfer is attempted on a SCSI tape device at any time after power up, the command hangs and all access to the SCSI bus is denied. In other words, you cannot access any other device on the SCSI bus the tape is on.

This happens because the tape is holding the SCSI bus BUSY waiting for an acknowledgement of data it has previously sent. The adapter driver has become confused about the Synchronous Transfer parameters negotiated previously and does not realize it needs to send an acknowledgement.

To avoid this problem, disable Synchronous Negotiation for the tape device in the Adaptec SCSI-Select BIOS.

The data transfer rate to the tape device might decrease slightly.

This problem has only been observed on Apricot machines with Tandberg 4200c and Archive Viper 525 tape drives.


These error messages associated with alad may display on the console. See messages(M) for general information about kernel error messages, including a list of generic device driver errors.

WARNING: alad: Adapter diagnostic failure 0x%x: bus 0
alad was unable to initialize the hardware that it found. This often indicates a hardware error. Contact Adaptec technical support or your system vendor for assistance.

WARNING: alad: Cannot initialize drive ID:0
alad was unable to perform SCSI commands on the boot drive to determine its drive geometry. This might indicate that not enough memory was available to perform the operation.

WARNING: alad: CONFLICT-Disconnection must be enabled in order for tag-queuing to work
By definition, tag queuing requires that disconnection be enabled. If tag queuing is enabled but disconnect is disabled, this message appears. The solution is to either enable disconnection or disable tag queuing in the driver's space.c file or SCSI Select.

WARNING: alad: spurious interrupt alad_name.
An interrupt occurred, but there was no pending command. The source could be another driver, such as a video driver, that is sharing the same interrupt. From the standpoint of the host adapter driver, this message can be ignored.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Command Aborted by Host Adapter
No response required.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Selection Timeout
Device is not ready, malfunctioned, or is no longer connected to the SCSI bus. Make sure that the device is connected. Also check the cabling and power connector.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Data Overrun or Underrun occurred
For CD-ROM drives, no response is required. Otherwise, check the hardware or software for errors.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Unexpected Bus Free Occurred
Almost anything can cause this message, including device firmware, the SCSI driver, and bus resets. Usually no user response is possible.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Target Bus Phase Sequence Error
An error occurred in the SCSI phase. Anything can cause this message, including device firmware, the SCSI driver, and bus resets. Usually no user response is possible, although you may want to avoid issuing the commands that resulted in this error.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Invalid SCSI Linking Operation
No response required.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Auto-Request Sense Failed
When a check condition occurs, the host adapter automatically performs a request sense to obtain the sense key. If that process also fails, this message is displayed. No user response required.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Tagged Queuing Rejected by Target
Target rejected a tagged command. The solution is to disable tagged queuing.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Host Adapter Hardware Error
Check the adapter and cabling. Be sure that the host adapter is firmly seated in the slot. The host adapter might be malfunctioning; contact the host adapter manufacturer for assistance.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
Target Didn't Respond to ATN (RESET)
If no other error is visible, no user response is required. Otherwise, contact the device manufacturer.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0
SCSI bus reset by host adapter
If no other error is visible, no user response is required.

WARNING: alad: adapter 0 Error: alad (ha=0 bus=0 id=0 lun=0)
SCSI bus reset by other device
If no other error is visible, no user response is required.



SCSI interface header files

See also

boot(HW), link_unix(ADM), mdevice(F), mkdev(ADM), sconf(ADM), scsi(HW), sdevice(F)

``Adding SCSI host adapters and peripherals'' in the SCO OpenServer Handbook
SCO OpenServer System Administration Guide

© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003