VME(9) | Kernel Developer's Manual | VME(9) |
VME
, vme_probe
,
vme_space_map
,
vme_space_unmap
, vme_intr_map
,
vme_intr_establish
,
vme_intr_disestablish
,
vme_intr_evcnt
,
vme_dmamap_create
,
vme_dmamap_destroy
,
vme_dmamem_alloc
,
vme_dmamem_free
,
vme_space_alloc
,
vme_space_free
, vme_space_get
—
#include <sys/bus.h>
#include <dev/vme/vmereg.h>
#include <dev/vme/vmevar.h>
int
vme_probe
(void
*vc, vme_addr_t
vmeaddr, vme_size_t
len, vme_am_t am,
vme_datasize_t datasize,
int (*callback)(),
void *arg);
int
vme_space_map
(void *vc,
vme_addr_t vmeaddr, vme_size_t
len, vme_am_t am, vme_datasize_t
datasize, vme_swap_t swap,
bus_space_tag_t *tag,
bus_space_handle_t *handle,
vme_mapresc_t *resc);
void
vme_space_unmap
(void
*vc, vme_mapresc_t
resc);
int
vme_intr_map
(void
*vc, int level,
int vector,
vme_intr_handle_t
*handlep);
void *
vme_intr_establish
(void
*vc, vme_intr_handle_t
handle, int prio,
int (*func)(void *),
void *arg);
void
vme_intr_disestablish
(void
*vc, void
*cookie);
const struct evcnt *
vme_intr_evcnt
(void
*vc, vme_intr_handle_t
handle);
int
vme_dmamap_create
(void *vc,
vme_size_t size, vme_am_t am,
vme_datasize_t datasize, vme_swap_t
swap, int nsegs, vme_size_t
segsz, vme_addr_t bound, int
flags, bus_dmamap_t *map);
void
vme_dmamap_destroy
(void
*vc, bus_dmamap_t
map);
int
vme_dmamem_alloc
(void *vc,
vme_size_t size, vme_am_t am,
vme_datasize_t datasize, vme_swap_t
swap, bus_dma_segment_t *segs,
int nsegs, int *rsegs,
int flags);
void
vme_dmamem_free
(void
*vc, bus_dma_segment_t
*segs, int
nsegs);
int
vme_space_alloc
(struct
vmebus_softc *tag,
vme_addr_t addr,
vme_size_t size,
vme_am_t ams);
void
vme_space_free
(void
*vc, vme_addr_t
addr, vme_size_t
size, vme_am_t
ams);
int
vme_space_get
(void
*vc, vme_size_t
size, vme_am_t ams,
u_long align,
vme_addr_t *addr);
VME
bus provides support for VME devices. The VME
bus is a high-performance backplane bus for use in computer systems. It is
based on the VMEbus specification initially released by the VMEbus
International Trade Association (VITA) in August of 1982. It has since
undergone IEC and IEEE standardisation.
The VME bus supports 8, 16, and 32-bit transfers over non-multiplexed 32-bit data and address paths. The latest revisions allow 64-bit, multiplexed transfers. It supports asynchronous, fully handshaken transfers at speeds up to 80 MB/sec. It has a master-slave architecture, encouraging multiprocessing and supports up to seven interrupt levels.
VME
bus will make use of the
following data types:
vme_addr_t offset; vme_size_t size; vme_am_t am;
vme_chipset_tag_t va_vct; bus_dma_tag_t va_bdt; int ivector; int ilevel; int numcfranges; struct vme_range r[VME_MAXCFRANGES];
vme_probe
(vc,
vmeaddr, len,
am, datasize,
callback, arg)vme_space_map
(vc,
vmeaddr, len,
am, datasize,
swap, tag,
handle, resc)vme_space_map
() returns 0 on success, and nonzero
on error.vme_space_unmap
(vc,
resc)vme_intr_map
(vc,
level, vector,
handlep)vme_intr_map
() returns zero on success, and
nonzero on failure.vme_intr_establish
(vc,
handle, prio,
func, arg)vme_intr_establish
() may be saved and passed to
vme_intr_disestablish
().vme_intr_disestablish
(vc,
cookie)vme_intr_establish
().vme_intr_evcnt
(vc,
handle)vme_dmamap_create
(vc,
size, am,
datasize, swap,
nsegs, segsz,
bound, flags,
map)vme_dmamap_destroy
(vc,
map)vme_dmamem_alloc
(vc,
size, am,
datasize, swap,
segs, nsegs,
rsegs, flags)vme_dmamem_free
(vc,
segs, nsegs)vme_dmamem_alloc
() for the VME space managed by
controller vc.vme_space_alloc
(tag,
addr, size,
ams)vme_space_alloc
() returns EINVAL on invalid
inputs.vme_space_free
(vc,
addr, size,
ams)vme_space_get
(vc,
size, ams,
align, addr)vme_space_alloc
(),
and probe the address space for the device using
vme_probe
().
During driver attach the driver should also map the address ranges
using vme_space_map
(). The interrupt locators in
struct vme_attach_args are used by
vme_intr_map
() and
vme_intr_establish
().
VME
subsystem itself is implemented within the file
sys/dev/vme/vme.c.
June 12, 2001 | NetBSD 9.0 |