NAME
MCA,
mca_intr_establish,
mca_intr_disestablish,
mca_intr_evcnt,
mca_conf_read,
mca_conf_write —
MicroChannel Architecture bus
SYNOPSIS
#include <sys/bus.h>
#include <dev/mca/mcavar.h>
#include <dev/mca/mcadevs.h>
void *
mca_intr_establish(
mca_chipset_tag_t
mc,
mca_intr_handle_t
hdl,
int level,
int (*handler)(void *),
void *arg);
void
mca_intr_disestablish(
mca_chipset_tag_t
mc,
mca_intr_handle_t
hdl);
const struct evcnt *
mca_intr_evcnt(
mca_chipset_tag_t
mc,
mca_intr_handle_t
hdl);
int
mca_conf_read(
mca_chipset_tag_t
mc,
int slot,
int reg);
void
mca_conf_write(
mca_chipset_tag_t
mc,
int slot,
int reg,
int data);
DESCRIPTION
The
MCA device provides support for IBM's MicroChannel
Architecture bus found on IBM PS/2 systems and selected workstations. It was
designed as a replacement bus for the ISA bus found on IBM's older machines.
However, the bus specifications were only available under license, so MCA did
not achieve widespread acceptance in the industry.
Being a replacement for the ISA bus, the MCA bus does share some similar aspects
with the ISA bus. Some MCA devices can be detected via the usual ISA-style
probing. However, most device detection is done through the Programmable
Option Select (POS) registers. These registers provide a window into a device
to determine device-specific properties and configuration. The configuration
of devices and their POS registers is performed using IBM's system
configuration software.
The MCA bus uses level-triggered interrupts while the ISA bus uses
edge-triggered interrupts. Level triggered interrupts have the advantage that
they can be shared among multiple device. Therefore, most MCA-specific devices
should be coded with shared interrupts in mind.
DATA TYPES
Drivers for devices attached to the MCA bus will make use of the following data
types:
-
-
- mca_chipset_tag_t
- Chipset tag for the MCA bus.
-
-
- mca_intr_handle_t
- The opaque handle describing an established interrupt
handler.
-
-
- struct
mca_attach_args
- A structure use to inform the driver of MCA bus properties.
It contains the following members:
bus_space_tag_t ma_iot; /* MCA I/O space tag */
bus_space_tag_t ma_memt; /* MCA mem space tag */
bus_dma_tag_t ma_dmat; /* MCA DMA tag */
int ma_slot; /* MCA slot number */
int ma_pos[8]; /* MCA POS values */
int ma_id; /* MCA device */
FUNCTIONS
-
-
- mca_intr_establish(mc,
hdl, level,
handler, arg)
- Establish a MCA interrupt handler on the MCA bus specified
by mc for the interrupt described completely by
hdl. The priority of the interrupt is specified by
level. When the interrupt occurs the function
handler is called with argument
arg.
-
-
- mca_intr_disestablish(mc,
hdl)
- Dis-establish the interrupt handler on the MCA bus
specified by mc for the interrupt described
completely hdl.
-
-
- mca_intr_evcnt(mc,
hdl)
- Do interrupt event counting on the MCA bus specified by
mc for the event described completely by
hdl.
-
-
- mca_conf_read(mc,
slot, reg)
- Read the POS register reg for the
device in slot slot on the MCA bus specified by
mc.
-
-
- mca_conf_write(mc,
slot, reg,
data)
- Write data data to the POS register
reg for the device in slot
slot on the MCA bus specified by
mc.
AUTOCONFIGURATION
The MCA bus is a direct-connection bus. During autoconfiguration, the parent
specifies the MCA device ID for the found device in the
ma_id member of the
mca_attach_args
structure. Drivers should match on the device ID. Device capabilities and
configuration information should be read from device POS registers using
mca_conf_read(). Some important configuration information
found in the POS registers include the I/O base address, memory base address
and interrupt number. The location of these configurable options with the POS
registers are device specific.
DMA SUPPORT
The MCA bus supports 32-bit, bidirectional DMA transfers. Currently, no
machine-independent support for MCA DMA is available.
CODE REFERENCES
The MCA subsystem itself is implemented within the file
sys/dev/mca/mca_subr.c. Machine-dependent portions can be
found in
sys/arch/<arch>/mca/mca_machdep.c. The
database of known devices exists within the file
sys/dev/mca/mcadevs_data.h and is generated automatically
from the file
sys/dev/mca/mcadevs. New vendor and product
identifiers should be added to this file. The database can be regenerated
using the Makefile
sys/dev/mca/Makefile.mcadevs.
A good source of information about MCA devices is IBM's system configuration
disk. The disk contains .adf files which describe the location of device
configuration options in the POS registers.
SEE ALSO
mca(4),
autoconf(9),
bus_dma(9),
bus_space(9),
driver(9),
isa(9)
BUGS
The machine-independent
MCA driver does not currently support
DMA. MCA devices which require DMA operation currently access the DMA
capabilities directly.