source: rtems/c/src/lib/libbsp/powerpc/shared/vme/VME.h @ 20ccd1f

4.104.114.84.95
Last change on this file since 20ccd1f was b95aedf, checked in by Joel Sherrill <joel.sherrill@…>, on 02/20/03 at 21:43:02

2003-02-20 Till Straumann <strauman@…>

PR 349/bsps

  • vme/.cvsignore, vme/Makefile.am, vme/VME.h, vme/VMEConfig.h, vme/vmeconfig.c: Add glue to the powerpc/shared BSP to use the vmeUniverse VME-PCI bridge driver.
  • Property mode set to 100644
File size: 3.0 KB
Line 
1#ifndef RTEMS_BSP_VME_UNIVERSE_H
2#define RTEMS_BSP_VME_UNIVERSE_H
3/* $Id$ */
4
5/* SVGM et al. BSP's VME support */
6/* Author: Till Straumann, <strauman@slac.stanford.edu> */
7
8/* pull in bsp.h */
9#include <bsp.h>
10/* our VME bridge */
11#include <bsp/vmeUniverse.h>
12/* our address space configuration */
13#include <bsp/VMEConfig.h>
14
15/* VME related declarations */
16/* how to map a VME address to the CPU local bus.
17 * Note that this traverses two bridges:
18 * the grackle and the universe. For the
19 * Universe, there is a lookup procedure while
20 * we assume a 1:1 mapping for the grackle...
21 */
22
23/* NOTE about the fast mapping macros:
24 * using these macros is only safe if the user app
25 * does _NOT_ change the universe mappings!
26 * While changing the PCI windows probably doesn't
27 * make much sense (involves changing the MMU/DBATs as well),
28 * The user might wish to change the VME address
29 * layout, i.e. by remapping _VME_A32_WIN0_ON_VME
30 * and _VME_DRAM_OFFSET...
31 * Hence, using the A24 and A16 macros is probably safe.
32 */
33
34#define BSP_vme_init() \
35        vmeUniverseInit
36
37/* translate through host bridge and vme master window of vme bridge */
38static inline int
39BSP_vme2local_adrs(unsigned am, unsigned long vmeaddr, unsigned long *plocaladdr)
40{
41int rval=vmeUniverseXlateAddr(1,0,am,vmeaddr,plocaladdr);
42        *plocaladdr+=PCI_MEM_BASE;
43        return rval;
44}
45
46/* when using this macro, the universe setup MUST NOT BE
47 * CHANGED by the application...
48 */
49#define BSP_vme2local_A32_fast(vmeaddr) \
50        ((vmeaddr)-_VME_A32_WIN0_ON_VME + _VME_A32_WIN0_ON_PCI + PCI_MEM_BASE)
51#define BSP_vme2local_A24_fast(vmeaddr) \
52        (((vmeaddr)&0x7ffffff)+_VME_A24_ON_PCI + PCI_MEM_BASE)
53#define BSP_vme2local_A16_fast(vmeaddr) \
54        (((vmeaddr)&0xffff)+_VME_A16_ON_PCI + PCI_MEM_BASE)
55
56/* how a CPU address is mapped to the VME bus (if at all)
57 */
58static inline int
59BSP_local2vme_adrs(unsigned am, unsigned long localaddr, unsigned long *pvmeaddr)
60{
61return vmeUniverseXlateAddr(0, 0, am,localaddr+PCI_DRAM_OFFSET,pvmeaddr);
62}
63
64#define BSP_localdram2vme_fast(localaddr) \
65        ((localaddr)+_VME_DRAM_OFFSET)
66
67/* interrupt handlers and levels */
68typedef void (*BSP_VME_ISR_t)(void *usrArg, unsigned long vector);
69
70#define BSP_installVME_isr(vector, handler, arg) \
71        vmeUniverseInstallISR(vector, handler, arg)
72
73#define BSP_removeVME_isr(vector, handler, arg) \
74        vmeUniverseRemoveISR(vector, handler, arg)
75
76/* retrieve the currently installed ISR for a given vector */
77#define BSP_getVME_isr(vector, parg) \
78    vmeUniverseISRGet(vector, parg)
79
80#define BSP_enableVME_int_lvl(level) \
81        vmeUniverseIntEnable(level)
82
83#define BSP_disableVME_int_lvl(level) \
84        vmeUniverseIntDisable(level)
85
86/* Tell the interrupt manager that the universe driver
87 * already called openpic_eoi() and that this step hence
88 * must be omitted.
89 */
90#define BSP_PCI_VME_DRIVER_DOES_EOI
91extern int _BSP_vme_bridge_irq;
92/* don't reference vmeUniverse0PciIrqLine directly here - leave it up to
93 * bspstart() to set BSP_vme_bridge_irq. That way, we can generate variants
94 * of the BSP with / without the universe driver...
95 */
96#define BSP_PCI_VME_BRIDGE_IRQ _BSP_vme_bridge_irq
97
98#endif
Note: See TracBrowser for help on using the repository browser.