Computer systems typically include expansion slots which permit the enhancement of the functionality of the computer system by the inclusion of additional circuitry. These expansion slots are typically connected via an expansion bus to the processor complex, i.e., the processor and its associated circuitry. For example, an input/output adapter (IOA) can be added to a computer system to allow external receipt and transmission of data, e.g., from a computer network.
Several standards have evolved for expansion slots and expansion cards. Two well known standards are the ISA standard and Microchannel standard, both of which define particular arrangements of the contacts in the expansion slots and the edge of the expansion cards, as well as defining protocols for communication between a compatible expansion card and the computer system.
A more recent standard is the PCI standard, which is intended for use in many computing environments in place of or in addition to the older ISA and Microchannel standards. The PCI architecture includes, in addition to other features supported by earlier standards, a definition for a PCI bridge. A PCI bridge connects between a "primary" PCI expansion bus at the side of the bridge closest to the processor, and a "secondary" bus on the other side of the bridge; the secondary bus may be a PCI, ISA, Microchannel, or other type of expansion bus. A PCI bridge might be used where there are not enough slots in a computer system to connect all desired expansion cards, and an additional slot or slots is desired; the additional slots can be provided on the secondary bus. A PCI bridge may also be used to interface the PCI bus on a computer system to older ISA or Microchannel expansion cards connected to a secondary ISA or Microchannel bus, which is bridged to the primary PCI bus.
Additionally, a PCI bridge may be used to provide a "hot swap" capability: specifically, the presence of the bridge permits power to be applied to and removed from the secondary bus independently from the primary bus. Accordingly, the expansion cards on the secondary bus can be replaced while the computer system remains on, by removing power from the secondary bus, replacing the card on the secondary bus, and then reapplying power to the secondary bus. In computing systems which support hot swapping of some or all of the expansion cards, each expansion card may be on a separate secondary bus bridged to the primary PCI bus, to permit the expansion cards to be individually hot-swapped without power-down of any other expansion cards.
The PCI standard specifies that a PCI bridge provide address mapping registers which can be configured from the primary bus. The values in the address mapping registers define an address range within the entire address space of the primary bus. When a memory or input/output (I/O) command is delivered to the primary bus by the processor or other circuitry connected to the primary bus, the bridge compares the address of the command to the address range defined by the address mapping registers in the bridge. If the address of the command falls within the address range defined by the mapping registers, then the memory or I/O command is passed through the bridge to the secondary bus connected to the bridge. Furthermore, when a memory or I/O command is delivered to the secondary bus connected to the bridge, the bridge compares the address of the command to the address range defined by the mapping registers, and if the address of the command is not within the address range, the command is passed through the bridge to the primary bus connected to the bridge.
Many computing systems include expansion cards which access or communicate with both the processor complex and other expansion cards in the computer system. If an expansion card is not on the same secondary bus as the expansion card that it accesses, e.g., where each card is on its own secondary bus to facilitate hot swapping, this can result in excessive traffic between the expansion cards via the primary PCI bus, introducing latency and making the expansion cards operate in less than an optimal manner.
Therefore, a significant need continues to exist for an improved manner of routing commands between and among computer systems and expansion slots or cards.