Linux Drivers Page

This page contains drivers developed by me or other members of
the Open Source Embedding Team at Adaptec Inc. The official Adaptec
OpenSource page can be found
here. The official site is still under construction and will
likely replace this site once complete.

Driver features include support for twin and wide busses,
fast, ultra, ultra2, and double transition(U160) synchronous
transfers depending on controller type, and tagged queuing.
The driver can support target mode in Operating System
environments such as facilities exist in the SCSI layer.

Per target configuration performed in the SCSI-Select menu,
accessible at boot in non-EISA models, or through an EISA
configuration utility for EISA models, is honored by this
driver. This includes synchronous/asynchronous transfers,
maximum synchronous negotiation rate, wide transfers,
disconnection, the host adapter's SCSI ID, and, PCI
controllers, the primary channel selection. For systems
that store non-volatile settings in a system specific manner
rather than a serial eeprom directly connected to the
aic7xxx controller, the BIOS must be enabled for the driver
to access this information. This restriction applies to
all EISA and many motherboard configurations.

Note that I/O addresses are determined automatically by
the probe routines, but care should be taken when using a
284x (VESA local bus controller) in an EISA system. The
jumpers setting the I/O area for the 284x should match the
EISA slot into which the card is inserted to prevent
conflicts with other EISA cards.

Performance and feature sets vary throughout the aic7xxx
product line. The following table provides a comparison
of the different chips supported by the ahc driver. Note
that wide and twin channel features, although always
supported by a particular chip, may be disabled in a
particular motherboard or card design.

64 Byte SCB Support. Standard SCB size is 32 bytes. The
driver currently operates all controllers using standard
sized SCBs unless external sram is available. The extra
space is used to optimize untagged-I/O. By using standard
sized SCBs, the number of SCBs is doubled, thereby improving
performance. All SCB numbers listed for these controllers
are for standard sized SCBs.

Queuing Registers - Allows queuing of new transactions without
pausing the sequencer.

Multiple Target IDs - Allows the controller to respond to se-
lection as a target on multiple SCSI IDs.

Linux Driver Configuration

SCSI Control Blocks (SCBs)

Every transaction sent to a device on the SCSI bus is
assigned a `SCSI Control Block' (SCB). The SCB contains
all of the information required by the controller to process
a transaction. The chip feature table lists the number of
SCBs that can be stored in on-chip memory. All chips with
model numbers greater than or equal to 7870 allow for the
on chip SCB space to be augmented with external SRAM up to
a maximum of 253 SCBs. Very few Adaptec controller
configurations have external SRAM.

If external SRAM is not available, SCBs are a limited
resource. Using the SCBs in a straight forward manner
would only allow the driver to handle as many concurrent
transactions as there are physical SCBs. To fully utilize
the SCSI bus and the devices on it, requires much more
concurrency. The solution to this problem is SCB Paging,
a concept similar to memory paging. SCB paging takes
advantage of the fact that devices usually disconnect from
the SCSI bus for long periods of time without talking to
the controller. The SCBs for disconnected transactions
are only of use to the controller when the transfer is
resumed. When the host queues another transaction for the
controller to execute, the controller firmware will use a
free SCB if one is available. Otherwise, the state of the
most recently disconnected (and therefor most likely to
stay disconnected) SCB is saved, via dma, to host memory,
and the local SCB reused to start the new transaction.
This allows the controller to queue up to 253 transactions
regardless of the amount of SCB space. Since the local
SCB space serves as a cache for disconnected transactions,
the more SCB space available, the less host bus traffic
consumed saving and restoring SCB data.

Installation

The driver is currently available in three forms: RPM, Driver
Update diskettes, and as a tar file that contains only the aic7xxx
driver files. The DUD and RPM methods of installation are preferred
to the source method as the source tar file will not contain all
of the Makefile and other system patches that are required for the
driver to function.