COHERENT manpages
This page displays the COHERENT manpage for hai [Host adapter-independent SCSI driver].
List of available manpages
Index
hai -- Device Driver Host adapter-independent SCSI driver hai is a host adapter-independent device driver that supports various SCSI devices. It supports the Adaptec 154x host adapter, and compatibles; and all host adapters built around the Future Domain TMC-950/9C50 chip set. With a supported host adapter, hai can support any mix of up to seven SCSI hard disks (either fixed or removable media), CD-ROM drives, and tape drives. hai has major-device number 13. It can access devices either in block mode or character mode. The minor number specifies the device and partition number for disk-type devices; this allows the use of up to eight SCSI identifiers (SCSI-ID's), with up to four logical unit numbers (LUNs) per SCSI-ID and up to four partitions per LUN. Tape and other special devices decode the minor number to perform special operations such as ``rewind on close'' or ``no rewind on close''. The first open() call on a SCSI disk device allocates memory for the partition table and reads it into memory. hai is a modular driver that you can configure to suit your system's suite of SCSI hardware. To build the driver, you must link the main hai module with the appropriate module for your system's SCSI host-adapter card, and a module for each type of SCSI device you have (hard disk, CD-ROM, or tape). Each of hai modules is described below. Usually, you will configure hai when you install COHERENT onto your system, but you can reconfigure hai at any time should you wish to add or modify your system's suite of SCSI devices. The script /etc/conf/hai/mkdev walks you through this process. Once you have reconfigured hai, run the program /etc/conf/bin/idmkcoh to build a new kernel; then reboot your system to invoke the newly built kernel and you're back in business. Extending hai hai is designed to be extendable to other host adapters and other SCSI devices. It is easy to extend hai to work with new hardware. It is possible to extend hai either to support a new host adapter, or to support new peripheral device, or both. To adapt hait to a new a host adapter, you must write a handful of routines to initialize and access the host adapter. A host-adapter module must be able to do the following: -> Initialize the host adapter and ready it for future requests. -> Start a SCSI command and call a notification function when that command completes or times out. -> Abort a SCSI command in progress. -> Reset a device on the SCSI bus. -> Reset the SCSI bus. It is easier to write a module for a peripheral device: you only need to send the appropriate SCSI commands to access the device as required by the COHERENT device-driver interface -- i.e., open(), close(), read(), write(), and ioctl(). To do this, use the routines provided by the host-adapter module, when neccessary, to access the SCSI bus and the device. The following sections of this article discuss each of hai's constituent modules. hai154x -- Adaptec Host-Adapter Module hai154x is the hai host-adapter module for the Adaptec 154x and compatible host adapters. This module lets you run any combination of SCSI hard disks, tape drives, or CD-ROM drives through any Adaptec AHA-154x host adapter. The Adaptec AHA-154x is an intelligent ISA bus mastering SCSI host adapter. Its on-board processor and DMA controllers handle the SCSI bus protocol and the DMA transfer of SCSI data into the PC's main memory. hai154x uses port I/O, a DMA channel, and an interrupt line, which are configured through the following tunable variables: HAI154X_BASE Base port HAI154X_INTR Interrupt level HAI154X_DMA DMA channel The following tunable parameters let you set the DMA transfer speed, the bus-on time, and the bus-off time on the SCSI bus: HAI154X_XFERSPEEDDMA transfer speed, from the table below HAI154X_BUSOFFTIMEHost-adapter bus-on time for DMA transfers HAI154X_BUSONTIMEHost-adapter bus-off time for DMA transfers Variable HAI154X_XFERSPEED must be set to one of the values given in the following table. Setting Speed, megabytes/second 0 5.0 1 6.7 2 8.0 3 10.0 4 5.7 The default setting is `4'. You can use these parameters to tune the performance of the SCSI bus for your system. For most installations, the default settings should be work well. haiss -- Seagate Host-Adapter Module haiss is the host-adapter module for host adapters built around the Future Domain TMC-950 or TMC-9C50 chip sets. It works with the following controllers: Seagate ST01 or ST02 Future Domain TMC-845, 850, 860, 875, or 885 Future Domain TMC-840, 841, 880, or 881 Through this host-adapter module, you can run any combination of SCSI hard disks, tape drives, or CD-ROM drives through any of the above host adapters. These host adapters map the SCSI bus data and signal lines onto memory addresses on the PC bus. haiss then uses standard memory-read and -write operations to access the state of the SCSI bus and the data on it. By default, this controller uses the Intel block-move instruction to transfer data between the device's buffer and the SCSI data-address range. This mode of transfer may be too fast for certain SCSI devices, in which case data can be transferred byte by byte. You can set how haiss transfers data; this is described below. haiss can be used through the following tunable kernel variables: HAISS_TYPE The type of the card, as follows: Type Controller 0 Seagate ST01/02 1 Future Domain TMC-845/850/860/875/885 2 Future Domain TMC-840/841/880/881 HAISS_INTR The interrupt vector to which the card is set. Although MS-DOS permits you to use this card without interrupts, COHERENT requires that you use interrupts. HAISS_BASE The real-mode segment address for the start of the card's RAM area. On all Future Domain and Seagate host adapters with an eight-kilobyte ROM, this is also the base address that is jumpered onto the card. On Seagate host adapters with a 16-kilobyte ROM, this is the base address jumpered on the card plus 0x0200. HAISS_SLOWDEV A bitmask of the target identifiers of all SCSI devices whose rate of data transfer is slower than the default transfer mode that the host adapter supports. These variables are set automatically by the script /etc/conf/hai/mkdev, when you use it to configure hai for your system; or you can use the command /etc/conf/bin/idtune to tune them individually. haict -- Tape Device Module haict is the device module that controls SCSI tape drives. It works a number of popular quarter-inch and DAT SCSI tape drives SCSI tape-drive configuration is controlled by the tunable variables HAI_TAPE_SPEC and HAICT_CACHE. HAI_TAPE_SPEC is a bitmap of the SCSI identifiers that identify tape drives on your system. For example, if a system has only one SCSI tape drive, and it is assigned SCSI identifier two, then you would set HAI_TAPE_SPEC to 0x04, which flips on bit two of that mask. (If you are versed in converting binary values into bit masks, note that the script /etc/conf/hai/mkdev handles that conversion for you -- all you have to do is tell it what SCSI identifiers are set to which devices, and it does the rest.) Variable HAICT_CACHE sets the size of block of memory that hai uses to buffer data that it writes to or reads from the tape drive. You can set this anywhere from zero to 256 kilobytes. The default is 16 kilobytes, which should works well with most tape drives. To tune this variable, use either the command /etc/conf/bin/idtune or the script /etc/conf/hai/mkdev. Please note that larger tape caches may not necessarily improve tape performance. For example, the program cpio for example uses a 5,120-byte buffer that limits the effectiveness of any tape-buffering scheme. haicd -- CD-ROM Device Module haicd is the device module that controls SCSI CD-ROM drives. It permits you to read data from both audio CDs and CD-ROM that hold an ISO 9660 file system. Configuration of haicd is controlled by the variable HAI_CDROM_SPEC, which is a bitmap of the SCSI identifiers that identify CD-ROM drives on your system. For example, if a system has only one SCSI CD-ROM drive, and it is assigned SCSI identifier three, then you would set HAI_TAPE_SPEC to 0x08, which flips on bit three of that mask. (If you are versed in converting binary values into bit masks, note that the script /etc/conf/hai/mkdev handles that conversion for you -- all you have to do is tell it what SCSI identifiers are set to which devices, and it does the rest.) As of this writing (September 1994), haicd has been tested with SCSI CD-ROM drives from Toshiba and NEC. The CD-ROM functions work with both makes of CD-ROM. Please note, however, that the audio functions of the NEC CDR-74 and CDR-84 CD-ROM drives deviate from the SCSI-2 specification considerably; therefore, the audio functions of haicd do not work on these drives. haisd -- Hard Disk Device Module haisd is the hai device module that controls SCSI disk drives. Because hai allows multiple, overlapping, simultaneous access to the system's SCSI host adapter, the disk drives that hai controls operate independently of each other. haisd also chains ``like'' requests for multiple contiguous sectors, which reduces the overhead of starting SCSI commands and thereby inproves performance. haisd is configured through the tunable kernel variable HAI_DISK_SPEC, which is a bitmap of the SCSI identifiers that identify hard-disk drives on your system. For example, if a system has two SCSI disk drives, one with SCSI identifier zero and the other with SCSI identifier one, HAI_DISK_SPEC to 0x03, which flips on bits 0 and 1 of that mask. (If you are versed in converting binary values into bit masks, note that the script /etc/conf/hai/mkdev handles that conversion for you -- all you have to do is tell it what SCSI identifiers are set to which devices, and it does the rest.) haisd determines partitioning information from the device's minor number as follows: Bit: 7 6 5 4 3 2 1 0 S I-I-I L-L P-P The `S' field is the ``special'' bit: it distinguishes SCSI disk drives from tape drives. The `P' fields are a binary value of the partition-table entry for this device, from 0 through 3. If the special bit is set and the partition fields are not 0, then haisd assumes that this device is not a disk drive and will not allow access to the device. The `I' fields give the binary value of the SCSI identifier for this device, from zero through seven. This convention is used for all SCSI devices. Finally, the `L' fields set the logical-unit number field, from 0 through 3. (If you are not skilled at setting bit maps by hand, do not despair: the configuration script /etc/conf/hai/mkdev automatically builds an appropriate device node for each SCSI disk.) Files /dev/sd* -- Block-special SCSI-disk devices /dev/Stp* -- Block-special SCSI-tape devices /dev/Scdrom* -- Block-special SCSI CD-ROM devices /dev/rsd* -- Character-special SCSI-disk devices /dev/rStp* -- Character-special SCSI-tape devices /dev/rScdrom* -- Character-special SCSI CD-ROM devices See Also CD-ROM, device drivers, hai154x, haiss, haicd, haict, haisd, hard disk, tape Notes For a list of the block-special files via which you can access the devices that hai supports, see the Lexicon entries for hard disk and tape. If you are using an Adaptec AHA-1540, AHA-1542C, or AHA-1542CF SCSI host adapter with a drive larger than one gigabyte and extended BIOS support turned on, then you must override the default number of heads to 255 and the number of sectors per track to 63. Note that when you run the script /etc/conf/hai/mkdev (or install COHERENT onto your system), ``255'' appears as the default choice for the number of heads; however, the default choice for number of sectors is 32. Therefore, when you run /etc/conf/hai/mkdev or install COHERENT for a system that has one of the above-named SCSI controllers, you must select the default setting for the number of heads, but you must type ``63'' when asked for the number of sectors per track. hai supercedes the older COHERENT device drivers aha and ss, which were specific to the Adaptec and Future-Domain controllers, and which controlled only SCSI disk drives. hai was written by Chris Hilton (hilton@mwc.com).