fga - SPARC Force FGA5000 VME/SBus bridge driver
fga0 at iommu0
fvme* at fga0
The fga driver provides a bridge between SBus and VME interfaces. It has
support for accessing VME address and data spaces as if they
were SBus
address ranges, and mapping of VME interrupt levels to SBus
interrupts.
The fga also provides a set of semaphores and mailboxes
which are accessible
from user programs via ioctl(2).
VME devices are attached to the fvme pseudo-devices, which
provide an interface
for drivers to establish VME level/vectored interrupts and map
address ranges. By default the following address ranges are
established:
Size SBus Slot SBus Offset VME Space VME 256MB 1 0x0000000 A32/D32
0xf0000000
256MB 4 0x0000000 A32/D16
0xf0000000
16MB 5 0xe000000 A24/D16
0x000000
64KB 5 0xffc0000 A16/D8
0x0000
64KB 5 0xffd0000 A16/D16
0x0000
64KB 5 0xffe0000 A16/D32
0x0000
The abort switch on the FORCE CPU boards is also controlled
by the fga,
and is enabled if the eeprom variable abort-ena? is set to
true. Toggling
the switch when enabled stops the kernel and starts
the kernel debugger
ddb(4).
The fga device responds to the following ioctl(2) calls defined in
<machine/fgaio.h>:
FGAIOCSEM (struct fga_sem) Clear (release) the semaphore
fgasem_num.
The argument structure is defined as follows:
struct fga_sem {
u_int8_t fgasem_num; /* semaphore
number */
u_int8_t fgasem_val; /* semaphore
value */
};
FGAIOSSEM (struct fga_sem) Set (attempt to get) the
semaphore
fgasem_num. If successful, fgasem_val will have
a value of 1,
otherwise it will have a value of 0.
FGAIOCMBX (struct fga_sem) Clear (release) the mailbox
fgasem_num.
FGAIOSMBX (struct fga_sem) Set (attempt to get) the mailbox
fgasem_num.
If successful, fgasem_val will have a value of 1,
otherwise it
will have a value of 0.
ioctl(2), ddb(4), intro(4), eeprom(8)
OpenBSD support for the fga first appeared in OpenBSD 2.6.
The driver for the fga was written by Jason L. Wright <ja[email protected]>
under contract with RTMX Incorporated.
There are several features provided by the FGA5000 that are
not implemented
in the driver. Most notably, VME slave ranges are
not mapped and
the DMA engine is not used. Also, several VME interrupts
are not handled:
SYSFAIL and ACFAIL.
OpenBSD 3.6 July 25, 1999
[ Back ] |