summaryrefslogtreecommitdiffstats
path: root/cpukit/score/include/rtems/score/userextimpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/include/rtems/score/userextimpl.h')
-rw-r--r--cpukit/score/include/rtems/score/userextimpl.h369
1 files changed, 0 insertions, 369 deletions
diff --git a/cpukit/score/include/rtems/score/userextimpl.h b/cpukit/score/include/rtems/score/userextimpl.h
deleted file mode 100644
index 5ad2c63765..0000000000
--- a/cpukit/score/include/rtems/score/userextimpl.h
+++ /dev/null
@@ -1,369 +0,0 @@
-/**
- * @file
- *
- * @ingroup ScoreUserExt
- *
- * @brief User Extension Handler API
- */
-
-/*
- * COPYRIGHT (c) 1989-2009.
- * 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_USEREXTIMPL_H
-#define _RTEMS_SCORE_USEREXTIMPL_H
-
-#include <rtems/score/userext.h>
-#include <rtems/score/isrlock.h>
-#include <rtems/score/chainimpl.h>
-#include <rtems/score/percpu.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @defgroup ScoreUserExt User Extension Handler
- *
- * @ingroup Score
- *
- * @addtogroup ScoreUserExt
- */
-/**@{**/
-
-/**
- * @brief Chain iterator for dynamic user extensions.
- *
- * Since user extensions may delete or restart the executing thread, we must
- * clean up registered iterators.
- *
- * @see _User_extensions_Iterate(), _User_extensions_Destroy_iterators() and
- * Thread_Control::last_user_extensions_iterator.
- */
-typedef struct User_extensions_Iterator {
- Chain_Iterator Iterator;
- struct User_extensions_Iterator *previous;
-} User_extensions_Iterator;
-
-typedef struct {
- /**
- * @brief Active dynamically added user extensions.
- */
- Chain_Control Active;
-
- /**
- * @brief Chain iterator registration.
- */
- Chain_Iterator_registry Iterators;
-
- /**
- * @brief Lock to protect User_extensions_List::Active and
- * User_extensions_List::Iterators.
- */
- ISR_LOCK_MEMBER( Lock )
-} User_extensions_List;
-
-/**
- * @brief List of active extensions.
- */
-extern User_extensions_List _User_extensions_List;
-
-/**
- * @brief List of active task switch extensions.
- */
-extern Chain_Control _User_extensions_Switches_list;
-
-/**
- * @name Extension Maintainance
- */
-/**@{**/
-
-void _User_extensions_Handler_initialization( void );
-
-void _User_extensions_Add_set(
- User_extensions_Control *extension
-);
-
-RTEMS_INLINE_ROUTINE void _User_extensions_Add_API_set(
- User_extensions_Control *extension
-)
-{
- _User_extensions_Add_set( extension );
-}
-
-RTEMS_INLINE_ROUTINE void _User_extensions_Add_set_with_table(
- User_extensions_Control *extension,
- const User_extensions_Table *extension_table
-)
-{
- extension->Callouts = *extension_table;
-
- _User_extensions_Add_set( extension );
-}
-
-void _User_extensions_Remove_set(
- User_extensions_Control *extension
-);
-
-/**
- * @brief User extension visitor.
- *
- * @param[in, out] executing The currently executing thread.
- * @param[in, out] arg The argument passed to _User_extensions_Iterate().
- * @param[in] callouts The current callouts.
- */
-typedef void (*User_extensions_Visitor)(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-typedef struct {
- Thread_Control *created;
- bool ok;
-} User_extensions_Thread_create_context;
-
-void _User_extensions_Thread_create_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_delete_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_start_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_restart_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_begin_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_exitted_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-typedef struct {
- Internal_errors_Source source;
- Internal_errors_t error;
-} User_extensions_Fatal_context;
-
-void _User_extensions_Fatal_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-void _User_extensions_Thread_terminate_visitor(
- Thread_Control *executing,
- void *arg,
- const User_extensions_Table *callouts
-);
-
-/**
- * @brief Iterates through all user extensions and calls the visitor for each.
- *
- * @param[in, out] arg The argument passed to the visitor.
- * @param[in] visitor The visitor for each extension.
- * @param[in] direction The iteration direction for dynamic extensions.
- */
-void _User_extensions_Iterate(
- void *arg,
- User_extensions_Visitor visitor,
- Chain_Iterator_direction direction
-);
-
-/** @} */
-
-/**
- * @name Extension Callout Dispatcher
- */
-/**@{**/
-
-static inline bool _User_extensions_Thread_create( Thread_Control *created )
-{
- User_extensions_Thread_create_context ctx = { created, true };
-
- _User_extensions_Iterate(
- &ctx,
- _User_extensions_Thread_create_visitor,
- CHAIN_ITERATOR_FORWARD
- );
-
- return ctx.ok;
-}
-
-static inline void _User_extensions_Thread_delete( Thread_Control *deleted )
-{
- _User_extensions_Iterate(
- deleted,
- _User_extensions_Thread_delete_visitor,
- CHAIN_ITERATOR_BACKWARD
- );
-}
-
-static inline void _User_extensions_Thread_start( Thread_Control *started )
-{
- _User_extensions_Iterate(
- started,
- _User_extensions_Thread_start_visitor,
- CHAIN_ITERATOR_FORWARD
- );
-}
-
-static inline void _User_extensions_Thread_restart( Thread_Control *restarted )
-{
- _User_extensions_Iterate(
- restarted,
- _User_extensions_Thread_restart_visitor,
- CHAIN_ITERATOR_FORWARD
- );
-}
-
-static inline void _User_extensions_Thread_begin( Thread_Control *executing )
-{
- _User_extensions_Iterate(
- executing,
- _User_extensions_Thread_begin_visitor,
- CHAIN_ITERATOR_FORWARD
- );
-}
-
-static inline void _User_extensions_Thread_switch(
- Thread_Control *executing,
- Thread_Control *heir
-)
-{
- const Chain_Control *chain = &_User_extensions_Switches_list;
- const Chain_Node *tail = _Chain_Immutable_tail( chain );
- const Chain_Node *node = _Chain_Immutable_first( chain );
-
- if ( node != tail ) {
- Per_CPU_Control *cpu_self;
-#if defined(RTEMS_SMP)
- ISR_Level level;
-#endif
-
- cpu_self = _Per_CPU_Get();
-
-#if defined(RTEMS_SMP)
- _ISR_Local_disable( level );
-#endif
- _Per_CPU_Acquire( cpu_self );
-
- while ( node != tail ) {
- const User_extensions_Switch_control *extension =
- (const User_extensions_Switch_control *) node;
-
- (*extension->thread_switch)( executing, heir );
-
- node = _Chain_Immutable_next( node );
- }
-
- _Per_CPU_Release( cpu_self );
-#if defined(RTEMS_SMP)
- _ISR_Local_enable( level );
-#endif
- }
-}
-
-static inline void _User_extensions_Thread_exitted( Thread_Control *executing )
-{
- _User_extensions_Iterate(
- executing,
- _User_extensions_Thread_exitted_visitor,
- CHAIN_ITERATOR_FORWARD
- );
-}
-
-static inline void _User_extensions_Fatal(
- Internal_errors_Source source,
- Internal_errors_t error
-)
-{
- User_extensions_Fatal_context ctx = { source, error };
-
- _User_extensions_Iterate(
- &ctx,
- _User_extensions_Fatal_visitor,
- CHAIN_ITERATOR_FORWARD
- );
-}
-
-static inline void _User_extensions_Thread_terminate(
- Thread_Control *executing
-)
-{
- _User_extensions_Iterate(
- executing,
- _User_extensions_Thread_terminate_visitor,
- CHAIN_ITERATOR_BACKWARD
- );
-}
-
-static inline void _User_extensions_Acquire( ISR_lock_Context *lock_context )
-{
- _ISR_lock_ISR_disable_and_acquire(
- &_User_extensions_List.Lock,
- lock_context
- );
-}
-
-static inline void _User_extensions_Release( ISR_lock_Context *lock_context )
-{
- _ISR_lock_Release_and_ISR_enable(
- &_User_extensions_List.Lock,
- lock_context
- );
-}
-
-static inline void _User_extensions_Destroy_iterators(
- Thread_Control *the_thread
-)
-{
- ISR_lock_Context lock_context;
- User_extensions_Iterator *iter;
-
- _User_extensions_Acquire( &lock_context );
-
- iter = the_thread->last_user_extensions_iterator;
-
- while ( iter != NULL ) {
- _Chain_Iterator_destroy( &iter->Iterator );
- iter = iter->previous;
- }
-
- _User_extensions_Release( &lock_context );
-}
-
-/** @} */
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-/* end of include file */