diff options
Diffstat (limited to 'cpukit/score/include/rtems/score/apiext.h')
-rw-r--r-- | cpukit/score/include/rtems/score/apiext.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/apiext.h b/cpukit/score/include/rtems/score/apiext.h new file mode 100644 index 0000000000..c51bcc7b6e --- /dev/null +++ b/cpukit/score/include/rtems/score/apiext.h @@ -0,0 +1,133 @@ +/** + * @file rtems/score/apiext.h + * + * This is the API Extensions Handler. + */ + +/* + * 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.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_SCORE_APIEXT_H +#define _RTEMS_SCORE_APIEXT_H + +/** + * @defgroup ScoreAPIExtension API Extension Handler + * + * This handler encapsulates functionality which provides mechanisms for the + * SuperCore to perform API specific actions without there beingg + * "up-references" from the SuperCore to APIs. If these referencesg + * were allowed in the implementation, the cohesion would be too high + * and adding an API would be more difficult. The SuperCore is supposed + * to be largely independent of any API. + */ +/**@{*/ + +#include <rtems/score/chain.h> +#include <rtems/score/thread.h> + +#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API) + /** + * This type defines the prototype of the Predriver Hook. + */ + typedef void (*API_extensions_Predriver_hook)(void); +#endif + +/** + * This type defines the prototype of the Postdriver Hook. + */ +typedef void (*API_extensions_Postdriver_hook)(void); + +/** + * This type defines the prototype of the Postswitch Hook. + */ +typedef void (*API_extensions_Postswitch_hook)( + Thread_Control * + ); + +/** + * The control structure which defines the points at which an API + * can add an extension to the system initialization thread. + */ +typedef struct { + /** This field allows this structure to be used with the Chain Handler. */ + Chain_Node Node; + #if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API) + /** + * This field is the callout invoked during RTEMS initialization after + * RTEMS data structures are initialized before device driver initialization + * has occurred. + * + * @note If this field is NULL, no extension is invoked. + */ + API_extensions_Predriver_hook predriver_hook; + #endif + /** + * This field is the callout invoked during RTEMS initialization after + * RTEMS data structures and device driver initialization has occurred + * but before multitasking is initiated. + * + * @note If this field is NULL, no extension is invoked. + */ + API_extensions_Postdriver_hook postdriver_hook; + /** + * This field is the callout invoked during each context switch + * in the context of the heir thread. + * + * @note If this field is NULL, no extension is invoked. + */ + API_extensions_Postswitch_hook postswitch_hook; +} API_extensions_Control; + +/** + * This is the list of API extensions to the system initialization. + */ +SCORE_EXTERN Chain_Control _API_extensions_List; + +/** @brief Initialize the API Extensions Handler + * + * This routine initializes the API extension handler. + */ +void _API_extensions_Initialization( void ); + +/** @brief Add Extension Set to the Active Set + * + * This routine adds an extension to the active set of API extensions. + * + * @param[in] the_extension is the extension set to add. + */ +void _API_extensions_Add( + API_extensions_Control *the_extension +); + +#if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API) + /** @brief Execute all Pre-Driver Extensions + * + * This routine executes all of the predriver callouts. + */ + void _API_extensions_Run_predriver( void ); +#endif + +/** @brief Execute all Post-Driver Extensions + * + * This routine executes all of the postdriver callouts. + */ +void _API_extensions_Run_postdriver( void ); + +/** @brief Execute all Post Context Switch Extensions + * + * This routine executes all of the post context switch callouts. + */ +void _API_extensions_Run_postswitch( void ); + +/**@}*/ + +#endif +/* end of include file */ |