| 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 10.0 |