2011-04-27 Jennifer Averett <Jennifer.Averett@OARcorp.com>

PR 1784
	* sapi/src/exinit.c, score/Makefile.am, score/preinstall.am,
	score/include/rtems/bspsmp.h, score/src/percpu.c, score/src/smp.c,
	score/src/threadcreateidle.c: Split bspsmp.h into two files smp.h and
	bspsmp.h
	* score/include/rtems/score/smp.h: New file.
This commit is contained in:
Jennifer Averett
2011-04-27 17:18:59 +00:00
parent 5f82db901b
commit 0d5a9f1bb7
9 changed files with 136 additions and 65 deletions

View File

@@ -1,3 +1,12 @@
2011-04-27 Jennifer Averett <Jennifer.Averett@OARcorp.com>
PR 1784
* sapi/src/exinit.c, score/Makefile.am, score/preinstall.am,
score/include/rtems/bspsmp.h, score/src/percpu.c, score/src/smp.c,
score/src/threadcreateidle.c: Split bspsmp.h into two files smp.h and
bspsmp.h
* score/include/rtems/score/smp.h: New file.
2011-04-25 Jennifer Averett <Jennifer.Averett@OARcorp.com>
* score/include/rtems/bspsmp.h: Did some prototype cleanup.

View File

@@ -58,7 +58,7 @@
#endif
#if defined(RTEMS_SMP)
#include <rtems/bspsmp.h>
#include <rtems/score/smp.h>
#include <rtems/score/percpu.h>
#endif

View File

@@ -37,7 +37,7 @@ include_rtems_score_HEADERS = include/rtems/score/address.h \
include/rtems/score/tqdata.h include/rtems/score/userext.h \
include/rtems/score/watchdog.h include/rtems/score/wkspace.h \
include/rtems/score/cpuopts.h include/rtems/score/basedefs.h \
include/rtems/score/smplock.h
include/rtems/score/smplock.h include/rtems/score/smp.h
if HAS_PTHREADS
include_rtems_score_HEADERS += include/rtems/score/corespinlock.h \

View File

@@ -44,43 +44,8 @@
extern "C" {
#endif
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested so that RTEMS will reschedule on this CPU
* because the currently executing thread needs to be switched out.
*/
#define RTEMS_BSP_SMP_CONTEXT_SWITCH_NECESSARY 0x01
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested so that RTEMS will reschedule on this CPU
* because the currently executing thread has been sent a signal.
*/
#define RTEMS_BSP_SMP_SIGNAL_TO_SELF 0x02
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested so that this CPU will be shutdown. This is done
* as part of rtems_executive_shutdown().
*/
#define RTEMS_BSP_SMP_SHUTDOWN 0x04
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested that the receiving CPU needs to perform a context
* switch to the first task.
*/
#define RTEMS_BSP_SMP_FIRST_TASK 0x08
#ifndef ASM
/**
* @brief Number of CPUs in SMP System
*
* This variable is set during the SMP initialization sequence to
* indicate the number of CPUs in this system.
*/
SCORE_EXTERN uint32_t _SMP_Processor_count;
/**
* @brief Maximum Number of CPUs in SMP System
*
@@ -130,32 +95,6 @@ void rtems_smp_send_message(
uint32_t message
);
/**
* @brief Make Request of Others CPUs
*
* This method is invoked by RTEMS when it needs to make a request
* of the other CPUs. It should be implemented using some type of
* interprocessor interrupt. CPUs not including the originating
* CPU should receive the message.
*
* @param [in] message is message to send
*/
void bsp_smp_broadcast_message(
uint32_t message
);
/**
* @brief Make Request of Others CPUs
*
* This method is invoked by XXX when it needs to make a request
* of the other CPUs.
*
* @param [in] message is message to send
*/
void rtems_smp_broadcast_message(
uint32_t message
);
/**
* @brief Generate a Interprocessor Broadcast Interrupt
*
@@ -230,6 +169,12 @@ void rtems_smp_initialize_per_cpu(int cpu);
*/
void rtems_smp_process_interrupt(void);
void bsp_smp_wait_for(
volatile unsigned int *address,
unsigned int desired,
int maximum_usecs
);
#endif
#ifdef __cplusplus

View File

@@ -0,0 +1,112 @@
/**
* @file rtems/score/smp.h
*
* This include file defines the interface to the SuperCore
* SMP support that is used internally to RTEMS.
*/
/*
* COPYRIGHT (c) 1989-2011.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id$
*/
#ifndef _RTEMS_SCORE_SMP_H
#define _RTEMS_SCORE_SMP_H
#if defined (RTEMS_SMP)
#include <rtems/score/percpu.h>
/**
* @defgroup SuperCore SMP Support
*
* This defines the interface of the SuperCore support
* code for SMP support.
*/
/**@{*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested so that RTEMS will reschedule on this CPU
* because the currently executing thread needs to be switched out.
*/
#define RTEMS_BSP_SMP_CONTEXT_SWITCH_NECESSARY 0x01
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested so that RTEMS will reschedule on this CPU
* because the currently executing thread has been sent a signal.
*/
#define RTEMS_BSP_SMP_SIGNAL_TO_SELF 0x02
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested so that this CPU will be shutdown. This is done
* as part of rtems_executive_shutdown().
*/
#define RTEMS_BSP_SMP_SHUTDOWN 0x04
/**
* This defines the bit which indicates the interprocessor interrupt
* has been requested that the receiving CPU needs to perform a context
* switch to the first task.
*/
#define RTEMS_BSP_SMP_FIRST_TASK 0x08
#ifndef ASM
/**
* @brief Number of CPUs in SMP System
*
* This variable is set during the SMP initialization sequence to
* indicate the number of CPUs in this system.
*/
SCORE_EXTERN uint32_t _SMP_Processor_count;
/**
* @brief Make Request of Others CPUs
*
* This method is invoked by RTEMS when it needs to make a request
* of the other CPUs. It should be implemented using some type of
* interprocessor interrupt. CPUs not including the originating
* CPU should receive the message.
*
* @param [in] message is message to send
*/
void _SMP_Broadcast_message(
uint32_t message
);
/**
* @brief Request Dispatch on Other Cores
*
* Send message to other cores requesting them to perform
* a thread dispatch operation.
*/
void _SMP_Request_other_cores_to_dispatch(void);
/**
* @Brief Request Other Cores to Shutdown
*
* Send message to other cores requesting them to shutdown.
*/
void _SMP_Request_other_cores_to_shutdown(void);
#endif
#ifdef __cplusplus
}
#endif
#endif
#endif
/* end of include file */

View File

@@ -199,6 +199,10 @@ $(PROJECT_INCLUDE)/rtems/score/smplock.h: include/rtems/score/smplock.h $(PROJEC
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/smplock.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/smplock.h
$(PROJECT_INCLUDE)/rtems/score/smp.h: include/rtems/score/smp.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/smp.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/smp.h
if HAS_PTHREADS
$(PROJECT_INCLUDE)/rtems/score/corespinlock.h: include/rtems/score/corespinlock.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/corespinlock.h

View File

@@ -19,7 +19,7 @@
#include <rtems/score/wkspace.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
#include <rtems/bspsmp.h>
#include <rtems/score/smp.h>
#include <string.h>
#if defined(RTEMS_SMP)

View File

@@ -15,6 +15,7 @@
#include <rtems/system.h>
#include <rtems/bspsmp.h>
#include <rtems/score/smp.h>
#include <rtems/score/thread.h>
#if defined(RTEMS_SMP)

View File

@@ -30,7 +30,7 @@
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
#include <rtems/bspsmp.h>
#include <rtems/score/smp.h>
static inline void _Thread_Create_idle_helper(
uint32_t name_u32,