The Extended Industry Standard Architecture (EISA) bus is an industry-standard high-performance bus that is a superset of the 8- and 16-bit Industry Standard Architecture (ISA). This chapter presents an overview of the EISA/ISA bus hardware and software architectures. Specifically, the chapter discusses the following:
For detailed information on EISA bus architectures, see the Extended Industry Standard Architecture Revision 3.10.
Digital supports ISA devices on either the EISA or ISA bus. A system that contains an EISA bus uses the EISA bus-specific support code and EISA Configuration Utility (ECU) data to configure both EISA and ISA devices on the EISA bus. A system that contains an ISA bus uses the ISA bus-specific support code and configuration data stored by the system console's isacfg utility command for ISA devices. A system that contains an ISA bus and no EISA bus cannot support EISA devices.
You can write a device driver that supports an ISA device that operates on the EISA bus, the ISA bus, or both buses. To support an ISA device on the EISA bus, you must:
To support the same device on the ISA bus, you must:
Typical ISA bus devices have selectable settings for various characteristics. In many cases, users select these settings through switch paks or jumpers on the module. Typically, there is no software mechanism provided for users to obtain or change these settings. A system manager must be careful to set up ISA devices such that no resource conflicts arise. Improper setup of ISA resource usage can result in a nonfunctional system.
Digital Alpha systems that use the ISA bus provide a console command utility called isacfg. This utility allows the user to enter ISA bus resource information into the system. The console firmware stores this information for later retrieval by Digital UNIX. The types of resources that users can enter for ISA devices are:
See the hardware or firmware documentation for information on how to use the isacfg console command utility.
The ISA bus support code uses the same data structures that the EISA bus support code uses. The /usr/sys/include/io/dec/eisa/eisa.h file defines these data strutures. Section A.3 provides reference pages that describe these data structures. The ISA bus support code does not use, or uses differently from the EISA bus support code, some of the members of these data structures. These differences are transparent to the device driver.
The following list discussess the only differences that you need to be aware of. These differences concern the eisa_option data structure defined in the /usr/sys/data/isa_option_data.c file, specifically with the board_id and function members.
For the EISA bus, the board_id member specifies the EISA bus option expansion board's product ID name. The EISA bus support code compares the value stored in this member with an EISA ID register to identify an option module and connect it to its associated device driver.
ISA bus device drivers do not use this member. The ISA bus does not require such an ID register. Typically, ISA device driver writers set this member to the null string () in the eisa_option structure defined in /usr/sys/data/isa_option_data.c. The ISA bus support code relies on the presence of information in the isacfg console command database to determine if the driver's probe interface should be called. The ISA bus code uses the function member of the eisa_option structure to make the association between information that resides in the isacfg console command database with the associated device driver.
For the EISA bus, the function member specifies the text that identifies the product up to a maximum of 79 characters. This text can include part numbers. The default is the null string ().
For the ISA bus, this member specifies a string that matches the ISA configuration (ISACFG) handle. The isacfg console command database contains a handle (referred to as the ISACFG handle) or name for a device. The ISACFG handle is a string of 15 bytes. The ISA bus support code compares this string with the string stored in the function member of the isa_option table that resides in the /usr/sys/data/isa_option_data.c file. If the ISA bus support code finds a match, it calls the driver with the device data.
The comparison of the two strings is limited by the length of the string or strings stored in the function member. If the function member contains the string XYZ100, then the ISA bus support code matches with the ISACFG handle of XYZ100, XYZ100-A, or any other string that has a base of XYZ100.
A device driver can use this feature to obtain any special information not provided by the usual data contained in the isacfg console command database. For example, if device XYZ100 can operate at two different speeds and the device hardware provides no way to determine the speed through the software, the driver can call the isa_slot_to_name interface to obtain the full string. The hardware manual for the device would specify that the user enter an appendage to the base ISACFG handle of -A for the slow speed and -B for the fast speed. The driver can then access the string by searching for these ISACFG handles.
Because it is impossible to guarantee the uniqueness of ISACFG handles, the hardware documentation for an ISA device should allow the user to use any handle. For example, if another device already uses XYZ100, the user could enter ABC100 into the isacfg console command database and the function member of the isa_option table that resides in /usr/sys/data/isa_option_data.c. If you want to use an appendage to the base ISACFG handle, it is important not to make assumptions on the base name and to carefully check for the appendage. One convention that can provide maximum flexibility is to identify the base ISACFG handle with alphanumeric characters and specify the start of the appendage with a nonalphanumeric character such as a hyphen.
You can specify multiple comma-separated names or handles in the function member of the isa_option structure. The ISA bus support code matches on any of these names or handles.
Both the EISA and ISA buses can provide expansion slots that accept option cards. The EISA bus can accept both EISA and ISA option cards (devices). The ISA bus can accept only ISA option cards. On the EISA bus, a slot has an address range associated with it; the ISA bus does not. Devices on the ISA bus have a unique slot number, but the addresses used to communicate with the device are not affected by it.
The EISA bus is a 32-bit address and 32-bit data bus with support for 8-, 16-, 24-, and 32-bit bus cycles. (A bus cycle refers to the action that occurs on the bus to transfer the data.) Support for different bus cycle sizes provides backward compatibility with the ISA bus options. Computer systems that adhere to the ISA use the ISA bus. The ISA bus supplies the signals for performing the following basic functions of the computer system:
There are two types of ISA options: one type supports only 8-bit bus cycles (PC and XT) and one type supports 8- and 16-bit bus cycles (AT).
The EISA bus also supports DMA and bus mastering. Although the EISA bus supports a maximum of 15 slots, most computer systems support a maximum of eight. The rest of this section describes the following EISA/ISA bus hardware architecture topics relevant to the device driver writer:
The EISA/ISA bus defines two address spaces:
The EISA/ISA bus supports a 64-kilobyte (KB) I/O address space. For the EISA bus, this I/O address space contains 16 slots, each of which is 4 KB in size. This I/O address space is referred to as slot-specific I/O space. The system board and the ISA-compatible I/O address space share slot zero (0).
For the ISA bus, this I/O address space does not contain any slots.
The EISA bus supports a 4-gigabyte (GB) memory address space. This memory address space is available to any device on the bus. The ISA bus supports a 16 MB memory space. For the EISA bus, assignment of the memory address space is done with the EISA configuration utility (ECU).
For the ISA bus, assignment of the memory address space is done through the use of the ISA configuration (ISACFG) utility.
The EISA bus supports 8-bit (D8), 16-bit (D16), 24-bit (D24), and 32-bit (D32) data sizes.
The ISA bus supports 8-bit (D8) and 16-bit (D16) data sizes.
While EISA/ISA buses do not specify any particular byte ordering, most devices use the Intel model, which is little endian. The Digital model is also little endian.
The EISA bus supports a 4-gigabyte (GB) address space and a 64-kilobyte (KB) I/O space.