55#define GRLIB_IO_AREA 0xfff00000
58#define GRLIB_CONF_AREA 0xff000
59#define GRLIB_AHB_SLAVE_CONF_AREA (1 << 11)
61#define GRLIB_AHB_CONF_WORDS 8
62#define GRLIB_APB_CONF_WORDS 2
63#define GRLIB_AHB_MASTERS 64
64#define GRLIB_AHB_SLAVES 64
65#define GRLIB_APB_SLAVES 16
67#if defined(RTEMS_MULTIPROCESSING)
68 #define GRLIB_CLOCK_INDEX \
69 (rtems_configuration_get_user_multiprocessing_table() ? GRLIB_Cpu_Index : 0)
71 #define GRLIB_CLOCK_INDEX 0
75#define GRLIB_COUNTER_GPTIMER_INDEX (GRLIB_CLOCK_INDEX + 1)
77#define GRLIB_COUNTER_GPTIMER_INDEX GRLIB_CLOCK_INDEX
80#define GRLIB_GPTIMER_0_FREQUENCY_SET_BY_BOOT_LOADER 1000000
82#define GRLIB_IRQMPSTATUS_CPUNR 28
91extern uint32_t GRLIB_Cpu_Index;
92extern const unsigned char GRLIB_mp_irq;
94extern volatile struct irqmp_regs *GRLIB_IrqCtrl_Regs;
96extern int GRLIB_IrqCtrl_EIrq;
99void gptimer_initialize(
void);
100void irqmp_initialize(
void);
102static inline uint32_t grlib_up_counter_frequency(
void)
108 return ambapp_freq_get(
ambapp_plb(), GRLIB_IrqCtrl_Adev);
114static inline uint32_t grlib_get_cpu_count(
118 uint32_t mpstat = irqmp->mpstat;
120 return ((mpstat >> GRLIB_IRQMPSTATUS_CPUNR) & 0xf) + 1;
123#define GRLIB_IRQCTRL_ACQUIRE( _lock_context ) \
124 rtems_interrupt_lock_acquire( &GRLIB_IrqCtrl_Lock, _lock_context )
126#define GRLIB_IRQCTRL_RELEASE( _lock_context ) \
127 rtems_interrupt_lock_release( &GRLIB_IrqCtrl_Lock, _lock_context )
129#define GRLIB_Cpu_Unmask_interrupt( _source, _cpu ) \
131 rtems_interrupt_lock_context _lock_context; \
132 GRLIB_IRQCTRL_ACQUIRE( &_lock_context ); \
133 GRLIB_IrqCtrl_Regs->mask[_cpu] |= (1U << (_source)); \
134 GRLIB_IRQCTRL_RELEASE( &_lock_context ); \
137#define GRLIB_Cpu_Mask_interrupt( _source, _cpu ) \
139 rtems_interrupt_lock_context _lock_context; \
140 GRLIB_IRQCTRL_ACQUIRE( &_lock_context ); \
141 GRLIB_IrqCtrl_Regs->mask[_cpu] &= ~(1U << (_source)); \
142 GRLIB_IRQCTRL_RELEASE( &_lock_context ); \
145#define GRLIB_Enable_interrupt_broadcast( _source ) \
147 rtems_interrupt_lock_context _lock_context; \
148 uint32_t _mask = 1U << ( _source ); \
149 GRLIB_IRQCTRL_ACQUIRE( &_lock_context ); \
150 GRLIB_IrqCtrl_Regs->bcast |= _mask; \
151 GRLIB_IRQCTRL_RELEASE( &_lock_context ); \
154#define GRLIB_Disable_interrupt_broadcast( _source ) \
156 rtems_interrupt_lock_context _lock_context; \
157 uint32_t _mask = 1U << ( _source ); \
158 GRLIB_IRQCTRL_ACQUIRE( &_lock_context ); \
159 GRLIB_IrqCtrl_Regs->bcast &= ~_mask; \
160 GRLIB_IRQCTRL_RELEASE( &_lock_context ); \
163#define BSP_Cpu_Is_interrupt_masked( _source, _cpu ) \
164 (!(GRLIB_IrqCtrl_Regs->mask[_cpu] & (1U << (_source))))
Common GRLIB AMBA Core Register definitions.
char rtems_interrupt_lock
This structure represents an ISR lock.
Definition: intr.h:532
struct ambapp_bus * ambapp_plb(void)
Gets the fully scanned AMBA Plug & Play Processor Local Bus (PLB).
Definition: bspstart.c:58