summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/smpimpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/include/rtems/score/smpimpl.h')
-rw-r--r--cpukit/score/include/rtems/score/smpimpl.h354
1 files changed, 0 insertions, 354 deletions
diff --git a/cpukit/score/include/rtems/score/smpimpl.h b/cpukit/score/include/rtems/score/smpimpl.h
deleted file mode 100644
index 48e6a12498..0000000000
--- a/cpukit/score/include/rtems/score/smpimpl.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/**
- * @file
- *
- * @ingroup ScoreSMPImpl
- *
- * @brief SuperCore SMP Implementation
- */
-
-/*
- * 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.org/license/LICENSE.
- */
-
-#ifndef _RTEMS_SCORE_SMPIMPL_H
-#define _RTEMS_SCORE_SMPIMPL_H
-
-#include <rtems/score/smp.h>
-#include <rtems/score/percpu.h>
-#include <rtems/score/processormask.h>
-#include <rtems/fatal.h>
-#include <rtems/rtems/cache.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup ScoreSMP SMP Support
- *
- * @ingroup Score
- *
- * This defines the interface of the SuperCore SMP support.
- *
- * @{
- */
-
-/**
- * @brief SMP message to request a processor shutdown.
- *
- * @see _SMP_Send_message().
- */
-#define SMP_MESSAGE_SHUTDOWN 0x1UL
-
-/**
- * @brief SMP message to request a test handler invocation.
- *
- * @see _SMP_Send_message().
- */
-#define SMP_MESSAGE_TEST 0x2UL
-
-/**
- * @brief SMP message to request a multicast action.
- *
- * @see _SMP_Send_message().
- */
-#define SMP_MESSAGE_MULTICAST_ACTION 0x4UL
-
-/**
- * @brief SMP message to request a clock tick.
- *
- * This message is provided for systems without a proper interrupt affinity
- * support and may be used by the clock driver.
- *
- * @see _SMP_Send_message().
- */
-#define SMP_MESSAGE_CLOCK_TICK 0x8UL
-
-/**
- * @brief SMP fatal codes.
- */
-typedef enum {
- SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER,
- SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT,
- SMP_FATAL_MULTITASKING_START_ON_INVALID_PROCESSOR,
- SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR,
- SMP_FATAL_SHUTDOWN,
- SMP_FATAL_SHUTDOWN_RESPONSE,
- SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED
-} SMP_Fatal_code;
-
-static inline void _SMP_Fatal( SMP_Fatal_code code )
-{
- _Terminate( RTEMS_FATAL_SOURCE_SMP, code );
-}
-
-/**
- * @brief Initialize SMP Handler
- *
- * This method initialize the SMP Handler.
- */
-#if defined( RTEMS_SMP )
- void _SMP_Handler_initialize( void );
-#else
- #define _SMP_Handler_initialize() \
- do { } while ( 0 )
-#endif
-
-#if defined( RTEMS_SMP )
-
-/**
- * @brief Set of online processors.
- *
- * A processor is online if was started during system initialization. In this
- * case its corresponding bit in the mask is set.
- *
- * @see _SMP_Handler_initialize().
- */
-extern Processor_mask _SMP_Online_processors;
-
-/**
- * @brief Performs high-level initialization of a secondary processor and runs
- * the application threads.
- *
- * The low-level initialization code must call this function to hand over the
- * control of this processor to RTEMS. Interrupts must be disabled. It must
- * be possible to send inter-processor interrupts to this processor. Since
- * interrupts are disabled the inter-processor interrupt delivery is postponed
- * until interrupts are enabled the first time. Interrupts are enabled during
- * the execution begin of threads in case they have interrupt level zero (this
- * is the default).
- *
- * The pre-requisites for the call to this function are
- * - disabled interrupts,
- * - delivery of inter-processor interrupts is possible,
- * - a valid stack pointer and enough stack space,
- * - a valid code memory, and
- * - a valid BSS section.
- *
- * This function must not be called by the main processor. The main processor
- * uses _Thread_Start_multitasking() instead.
- *
- * This function does not return to the caller.
- */
-void _SMP_Start_multitasking_on_secondary_processor( void )
- RTEMS_NO_RETURN;
-
-typedef void ( *SMP_Test_message_handler )( Per_CPU_Control *cpu_self );
-
-extern SMP_Test_message_handler _SMP_Test_message_handler;
-
-/**
- * @brief Sets the handler for test messages.
- *
- * This handler can be used to test the inter-processor interrupt
- * implementation.
- */
-static inline void _SMP_Set_test_message_handler(
- SMP_Test_message_handler handler
-)
-{
- _SMP_Test_message_handler = handler;
-}
-
-/**
- * @brief Processes all pending multicast actions.
- */
-void _SMP_Multicast_actions_process( void );
-
-/**
- * @brief Interrupt handler for inter-processor interrupts.
- *
- * @return The received message.
- */
-static inline long unsigned _SMP_Inter_processor_interrupt_handler( void )
-{
- Per_CPU_Control *cpu_self;
- unsigned long message;
-
- cpu_self = _Per_CPU_Get();
-
- /*
- * In the common case the inter-processor interrupt is issued to carry out a
- * thread dispatch.
- */
- cpu_self->dispatch_necessary = true;
-
- message = _Atomic_Exchange_ulong(
- &cpu_self->message,
- 0,
- ATOMIC_ORDER_ACQUIRE
- );
-
- if ( message != 0 ) {
- if ( ( message & SMP_MESSAGE_SHUTDOWN ) != 0 ) {
- _SMP_Fatal( SMP_FATAL_SHUTDOWN_RESPONSE );
- /* does not continue past here */
- }
-
- if ( ( message & SMP_MESSAGE_TEST ) != 0 ) {
- ( *_SMP_Test_message_handler )( cpu_self );
- }
-
- if ( ( message & SMP_MESSAGE_MULTICAST_ACTION ) != 0 ) {
- _SMP_Multicast_actions_process();
- }
- }
-
- return message;
-}
-
-/**
- * @brief Returns true, if the processor with the specified index should be
- * started.
- *
- * @param[in] cpu_index The processor index.
- *
- * @retval true The processor should be started.
- * @retval false Otherwise.
- */
-bool _SMP_Should_start_processor( uint32_t cpu_index );
-
-/**
- * @brief Sends an SMP message to a processor.
- *
- * The target processor may be the sending processor.
- *
- * @param[in] cpu_index The target processor of the message.
- * @param[in] message The message.
- */
-void _SMP_Send_message( uint32_t cpu_index, unsigned long message );
-
-/**
- * @brief Sends an SMP message to all other online processors.
- *
- * @param[in] message The message.
- */
-void _SMP_Send_message_broadcast(
- unsigned long message
-);
-
-/**
- * @brief Sends an SMP message to a set of processors.
- *
- * The sending processor may be part of the set.
- *
- * @param[in] targets The set of processors to send the message.
- * @param[in] message The message.
- */
-void _SMP_Send_message_multicast(
- const Processor_mask *targets,
- unsigned long message
-);
-
-typedef void ( *SMP_Action_handler )( void *arg );
-
-/**
- * @brief Initiates an SMP multicast action to a set of processors.
- *
- * The current processor may be part of the set.
- *
- * @param[in] setsize The size of the set of target processors of the message.
- * @param[in] cpus The set of target processors of the message.
- * @param[in] handler The multicast action handler.
- * @param[in] arg The multicast action argument.
- */
-void _SMP_Multicast_action(
- const size_t setsize,
- const cpu_set_t *cpus,
- SMP_Action_handler handler,
- void *arg
-);
-
-/**
- * @brief Executes a handler with argument on the specified processor on behalf
- * of the boot processor.
- *
- * The calling processor must be the boot processor. In case the specified
- * processor is not online or not in the
- * PER_CPU_STATE_READY_TO_START_MULTITASKING state, then no action is
- * performed.
- *
- * @param cpu The processor to execute the action.
- * @param handler The handler of the action.
- * @param arg The argument of the action.
- *
- * @retval true The handler executed on the specified processor.
- * @retval false Otherwise.
- *
- * @see _SMP_Before_multitasking_action_broadcast().
- */
-bool _SMP_Before_multitasking_action(
- Per_CPU_Control *cpu,
- SMP_Action_handler handler,
- void *arg
-);
-
-/**
- * @brief Executes a handler with argument on all online processors except the
- * boot processor on behalf of the boot processor.
- *
- * The calling processor must be the boot processor.
- *
- * @param handler The handler of the action.
- * @param arg The argument of the action.
- *
- * @retval true The handler executed on all online processors except the boot
- * processor.
- * @retval false Otherwise.
- *
- * @see _SMP_Before_multitasking_action().
- */
-bool _SMP_Before_multitasking_action_broadcast(
- SMP_Action_handler handler,
- void *arg
-);
-
-#endif /* defined( RTEMS_SMP ) */
-
-/**
- * @brief Requests a multitasking start on all configured and available
- * processors.
- */
-#if defined( RTEMS_SMP )
- void _SMP_Request_start_multitasking( void );
-#else
- #define _SMP_Request_start_multitasking() \
- do { } while ( 0 )
-#endif
-
-/**
- * @brief Requests a shutdown of all processors.
- *
- * This function is a part of the system termination procedure.
- *
- * @see _Terminate().
- */
-#if defined( RTEMS_SMP )
- void _SMP_Request_shutdown( void );
-#else
- #define _SMP_Request_shutdown() \
- do { } while ( 0 )
-#endif
-
-RTEMS_INLINE_ROUTINE const Processor_mask *_SMP_Get_online_processors( void )
-{
-#if defined(RTEMS_SMP)
- return &_SMP_Online_processors;
-#else
- return &_Processor_mask_The_one_and_only;
-#endif
-}
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/* end of include file */