diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-14 13:23:10 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-29 11:06:07 +0200 |
commit | 8cacceb7b9e789976c943339ab76317e8964b528 (patch) | |
tree | 183af8610bef3baf0325948e8a5d38bafae00002 /c | |
parent | smp: Delete rtems_smp_send_message() (diff) | |
download | rtems-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.c | 8 | ||||
-rw-r--r-- | c/src/lib/libbsp/shared/smp/smp_stub.c | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/sparc/leon3/smp/smp_leon3.c | 8 |
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 ); |