summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c')
-rw-r--r--c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c b/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c
index 37117774a0..f8edf11df9 100644
--- a/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c
+++ b/c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c
@@ -76,8 +76,21 @@ extern rtems_mpci_entry Shm_Send_packet(
#define INTERRUPT 0 /* XXX: */
#define POLLING 1 /* XXX: fix me -- is polling ONLY!!! */
-
-shm_config_table BSP_shm_cfgtbl;
+/* Let user override this configuration by declaring this a weak variable */
+shm_config_table BSP_shm_cfgtbl __attribute__((weak)) =
+{
+ (vol_u32 *)0x40000000, /* USER OVERRIDABLE */
+ 0x00001000, /* USER OVERRIDABLE */
+ SHM_BIG,
+ NULL_CONVERT,
+ INTR_MODE,
+ Shm_Cause_interrupt,
+ {
+ NULL,
+ 1 << LEON3_MP_IRQ, /* USER OVERRIDABLE */
+ 4,
+ },
+};
void Shm_Get_configuration(
uint32_t localnode,
@@ -88,8 +101,6 @@ void Shm_Get_configuration(
int i;
unsigned int tmp;
- BSP_shm_cfgtbl.base = 0x40000000;
- BSP_shm_cfgtbl.length = 0x00001000;
BSP_shm_cfgtbl.format = SHM_BIG;
/*
@@ -108,7 +119,8 @@ void Shm_Get_configuration(
BSP_shm_cfgtbl.poll_intr = INTR_MODE;
BSP_shm_cfgtbl.Intr.address =
(vol_u32 *) &(LEON3_IrqCtrl_Regs->force[LEON3_Cpu_Index]);
- BSP_shm_cfgtbl.Intr.value = 1 << LEON3_MP_IRQ ;
+ if (BSP_shm_cfgtbl.Intr.value == 0)
+ BSP_shm_cfgtbl.Intr.value = 1 << LEON3_MP_IRQ; /* Use default MP-IRQ */
BSP_shm_cfgtbl.Intr.length = 4;
if (LEON3_Cpu_Index == 0) {