summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@oarcorp.com>2012-02-17 14:25:13 -0600
committerJoel Sherrill <joel.sherrill@oarcorp.com>2012-02-17 14:25:13 -0600
commit3f85deb858cde2c0ab50007e84c4980f4fcc53ca (patch)
treed2b8872c44abc6d9f76a80c0bee864acb0f2bf7c
parentRemove (Moved to git.rtems.org/data/git/rtems-crossrpms.git). (diff)
downloadrtems-3f85deb858cde2c0ab50007e84c4980f4fcc53ca.tar.bz2
PR 2015 - LEON3: make SHM driver configurable using weak symbols
PR 2015/bsps Since the configuration struct is always present one can let DATA initialize it to reduce footprint, at the same time it is made weak to let the user able to configure the SHM driver without editing the driver code. Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
-rw-r--r--c/src/lib/libbsp/sparc/leon3/ChangeLog5
-rw-r--r--c/src/lib/libbsp/sparc/leon3/shmsupp/getcfg.c22
2 files changed, 22 insertions, 5 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/ChangeLog b/c/src/lib/libbsp/sparc/leon3/ChangeLog
index b5a0069c3d..c9bc8043ef 100644
--- a/c/src/lib/libbsp/sparc/leon3/ChangeLog
+++ b/c/src/lib/libbsp/sparc/leon3/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-17 Daniel Hellstrom <daniel@gaisler.com>
+
+ PR 2015/bsps
+ * shmsupp/getcfg.c: Make SHM driver configurable using weak symbol.
+
2011-04-25 Jennifer Averett <jennifer.averett@OARcorp.com>
PR 1783/bsps
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) {