18 #ifndef _RTEMS_SCORE_SMPIMPL_H 19 #define _RTEMS_SCORE_SMPIMPL_H 43 #define SMP_MESSAGE_SHUTDOWN 0x1UL 50 #define SMP_MESSAGE_PERFORM_JOBS 0x2UL 56 SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER,
57 SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT,
58 SMP_FATAL_MULTITASKING_START_ON_INVALID_PROCESSOR,
59 SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR,
61 SMP_FATAL_SHUTDOWN_RESPONSE,
62 SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED,
63 SMP_FATAL_SCHEDULER_PIN_OR_UNPIN_NOT_SUPPORTED,
64 SMP_FATAL_WRONG_CPU_STATE_TO_PERFORM_JOBS
82 #if defined( RTEMS_SMP ) 85 #define _SMP_Handler_initialize() \ 89 #if defined( RTEMS_SMP ) 142 unsigned long message;
150 message = _Atomic_Exchange_ulong(
196 unsigned long message
208 const Processor_mask *targets,
209 unsigned long message
212 typedef void ( *SMP_Action_handler )(
void *arg );
228 const Processor_mask *targets,
229 SMP_Action_handler handler,
244 SMP_Action_handler handler,
259 SMP_Action_handler handler,
274 SMP_Action_handler handler,
292 #if defined( RTEMS_SMP ) 295 #define _SMP_Request_start_multitasking() \ 306 #if defined( RTEMS_SMP ) 309 #define _SMP_Request_shutdown() \ 320 #if defined(RTEMS_SMP) 323 return &_Processor_mask_The_one_and_only;
void _Per_CPU_Perform_jobs(Per_CPU_Control *cpu)
Performs the jobs of the specified processor in FIFO order.
void _SMP_Handler_initialize(void)
Initializes SMP Handler.
void _SMP_Unicast_action(uint32_t cpu_index, SMP_Action_handler handler, void *arg)
Initiates an SMP action on the specified target processor.
Fatal source of SMP domain.
bool _SMP_Should_start_processor(uint32_t cpu_index)
Checks if the processor with the specified index should be started.
void _SMP_Start_multitasking_on_secondary_processor(Per_CPU_Control *cpu_self) RTEMS_NO_RETURN
Performs high-level initialization of a secondary processor and runs the application threads...
#define RTEMS_PREDICT_FALSE(_exp)
Returns the value of the specified integral expression and tells the compiler that the predicted valu...
static __inline__ const bool _SMP_Need_inter_processor_interrupts(void)
Indicate if inter-processor interrupts are needed.
void _Terminate(Internal_errors_Source the_source, Internal_errors_t the_error) RTEMS_NO_RETURN
Initiates system termination.
static __inline__ const Processor_mask * _SMP_Get_online_processors(void)
Gets all online processors.
void _SMP_Send_message_multicast(const Processor_mask *targets, unsigned long message)
Sends an SMP message to a set of processors.
void _SMP_Send_message_broadcast(unsigned long message)
Sends an SMP message to all other online processors.
SuperCore SMP Support API.
#define SMP_MESSAGE_PERFORM_JOBS
SMP message to perform per-processor jobs.
#define RTEMS_NO_RETURN
Tells the compiler in a function declaration that this function does not return.
static void _SMP_Fatal(SMP_Fatal_code code)
Terminates with the given code.
void _SMP_Request_shutdown(void)
Requests a shutdown of all processors.
#define SMP_MESSAGE_SHUTDOWN
SMP message to request a processor shutdown.
volatile bool dispatch_necessary
This is set to true when this processor needs to run the thread dispatcher.
void _SMP_Request_start_multitasking(void)
Requests a multitasking start on all configured and available processors.
const uint32_t _SMP_Processor_configured_maximum
The configured processor maximum.
void _SMP_Synchronize(void)
Ensures that all store operations issued by the current processor before the call this function are v...
Processor_mask _SMP_Online_processors
Set of online processors.
void _SMP_Othercast_action(SMP_Action_handler handler, void *arg)
Initiates an SMP multicast action to the set of all online processors excluding the current processor...
Atomic_Ulong message
Bit field for SMP messages.
void _SMP_Broadcast_action(SMP_Action_handler handler, void *arg)
Initiates an SMP multicast action to the set of all online processors.
#define RTEMS_INLINE_ROUTINE
Gives a hint to the compiler in a function declaration to inline this function.
void _SMP_Multicast_action(const Processor_mask *targets, SMP_Action_handler handler, void *arg)
Initiates an SMP multicast action to the set of target processors.
This header file defines the Fatal Error Manager API.
static long unsigned _SMP_Inter_processor_interrupt_handler(Per_CPU_Control *cpu_self)
Interrupts handler for inter-processor interrupts.
SMP_Fatal_code
SMP fatal codes.
void _SMP_Send_message(uint32_t cpu_index, unsigned long message)
Sends an SMP message to a processor.