source: rtems/c/src/lib/libbsp/powerpc/shared/vme/VME.h @ 3605c4e

Last change on this file since 3605c4e was a3ef256, checked in by Joel Sherrill <joel.sherrill@…>, on 03/25/03 at 16:46:01

2003-03-25 Till Straumann <strauman@…>

PR 349/bsps

  • irq/irq.c, vme/VME.h, vme/vmeconfig.c: Fixes library dependency on the vmeUniverse driver. It is now possible to use the ppc/shared/irq code on non-VME BSPs without triggering linkage of the vmeUniverse 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
91/* don't reference vmeUniverse0PciIrqLine directly here - leave it up to
92 * bspstart() to set BSP_vme_bridge_irq. That way, we can generate variants
93 * of the BSP with / without the universe driver...
94 */
95extern int _BSP_vme_bridge_irq;
96
97#endif
Note: See TracBrowser for help on using the repository browser.