summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-05-14 13:23:10 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-05-29 11:06:07 +0200
commit8cacceb7b9e789976c943339ab76317e8964b528 (patch)
tree183af8610bef3baf0325948e8a5d38bafae00002 /c
parentsmp: Delete rtems_smp_send_message() (diff)
downloadrtems-8cacceb7b9e789976c943339ab76317e8964b528.tar.bz2
smp: Delete bsp_smp_secondary_cpu_initialize()
Do not call bsp_smp_secondary_cpu_initialize() in rtems_smp_secondary_cpu_initialize(). This allows more flexibilty in the BSP low-level code. Specify context requirements for a call to rtems_smp_secondary_cpu_initialize().
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/i386/shared/smp/smp-imps.c8
-rw-r--r--c/src/lib/libbsp/shared/smp/smp_stub.c4
-rw-r--r--c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c8
3 files changed, 12 insertions, 8 deletions
diff --git a/c/src/lib/libbsp/i386/shared/smp/smp-imps.c b/c/src/lib/libbsp/i386/shared/smp/smp-imps.c
index 7ea17e594d..62ce8aca27 100644
--- a/c/src/lib/libbsp/i386/shared/smp/smp-imps.c
+++ b/c/src/lib/libbsp/i386/shared/smp/smp-imps.c
@@ -199,6 +199,8 @@ unsigned char imps_apic_cpu_map[IMPS_MAX_CPUS];
/* now defined in getcpuid.c */
extern unsigned imps_lapic_addr;
+static void secondary_cpu_initialize(void);
+
/*
* MPS checksum function
*
@@ -269,7 +271,7 @@ boot_cpu(imps_processor *proc)
(size_t)_binary_appstart_bin_size
);
- reset[1] = (uint32_t)rtems_smp_secondary_cpu_initialize;
+ reset[1] = (uint32_t)secondary_cpu_initialize;
reset[2] = (uint32_t)_Per_CPU_Information[apicid].interrupt_stack_high;
/*
@@ -792,7 +794,7 @@ extern void enable_sse(void);
#endif
/* pc386 specific initialization */
-void bsp_smp_secondary_cpu_initialize(int cpu)
+static void secondary_cpu_initialize(void)
{
int apicid;
@@ -804,6 +806,8 @@ void bsp_smp_secondary_cpu_initialize(int cpu)
#ifdef __SSE__
enable_sse();
#endif
+
+ rtems_smp_secondary_cpu_initialize();
}
#include <rtems/bspsmp.h>
diff --git a/c/src/lib/libbsp/shared/smp/smp_stub.c b/c/src/lib/libbsp/shared/smp/smp_stub.c
index f95cad4610..62338b91df 100644
--- a/c/src/lib/libbsp/shared/smp/smp_stub.c
+++ b/c/src/lib/libbsp/shared/smp/smp_stub.c
@@ -15,10 +15,6 @@
#include <rtems/bspsmp.h>
#include <stdlib.h>
-void bsp_smp_secondary_cpu_initialize(int cpu)
-{
-}
-
uint32_t bsp_smp_initialize( uint32_t configured_cpu_count )
{
/* return the number of CPUs */
diff --git a/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c b/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c
index b479ffcdc4..6a9c189ec2 100644
--- a/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c
+++ b/c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c
@@ -41,11 +41,15 @@ rtems_isr bsp_ap_ipi_isr(
rtems_smp_process_interrupt();
}
-void bsp_smp_secondary_cpu_initialize(int cpu)
+static void leon3_secondary_cpu_initialize(void)
{
+ int cpu = bsp_smp_processor_id();
+
sparc_leon3_set_cctrl( 0x80000F );
LEON_Unmask_interrupt(LEON3_MP_IRQ);
LEON3_IrqCtrl_Regs->mask[cpu] |= 1 << LEON3_MP_IRQ;
+
+ rtems_smp_secondary_cpu_initialize();
}
/*
@@ -89,7 +93,7 @@ uint32_t bsp_smp_initialize( uint32_t configured_cpu_count )
bsp_ap_stack = _Per_CPU_Information[cpu].interrupt_stack_high -
CPU_MINIMUM_STACK_FRAME_SIZE;
- bsp_ap_entry = rtems_smp_secondary_cpu_initialize;
+ bsp_ap_entry = leon3_secondary_cpu_initialize;
LEON3_IrqCtrl_Regs->mpstat = 1 << cpu;
bsp_smp_delay( 1000000 );