score: Add and use <rtems/score/userextimpl.h>

This file contains the parts of <rtems/score/userext.h> that are only
necessary for the RTEMS implementation.
This commit is contained in:
Sebastian Huber
2012-11-22 14:51:25 +01:00
parent 67a9159e57
commit 3be0c9afa3
49 changed files with 257 additions and 243 deletions

View File

@@ -20,7 +20,7 @@
#include <rtems/score/apiext.h>
#include <rtems/score/stack.h>
#include <rtems/score/thread.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#include <rtems/posix/cancel.h>
#include <rtems/posix/pthread.h>

View File

@@ -20,7 +20,6 @@
#include <rtems/score/apiext.h>
#include <rtems/score/stack.h>
#include <rtems/score/thread.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/posix/cancel.h>
#include <rtems/posix/pthread.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -26,7 +26,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -27,7 +27,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -24,7 +24,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,7 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -26,7 +26,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -26,7 +26,6 @@
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/score/apiext.h>
#include <rtems/score/sysstate.h>

View File

@@ -43,7 +43,7 @@
#include <rtems/score/scheduler.h>
#include <rtems/score/thread.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/watchdog.h>
#include <rtems/score/wkspace.h>

View File

@@ -23,6 +23,7 @@
#include <rtems/rtems/support.h>
#include <rtems/score/object.h>
#include <rtems/score/thread.h>
#include <rtems/score/userextimpl.h>
#include <rtems/extension.h>
rtems_status_code rtems_extension_create(

View File

@@ -52,6 +52,7 @@ include_rtems_score_HEADERS += include/rtems/score/timestamp64.h
include_rtems_score_HEADERS += include/rtems/score/tod.h
include_rtems_score_HEADERS += include/rtems/score/tqdata.h
include_rtems_score_HEADERS += include/rtems/score/userext.h
include_rtems_score_HEADERS += include/rtems/score/userextimpl.h
include_rtems_score_HEADERS += include/rtems/score/watchdog.h
include_rtems_score_HEADERS += include/rtems/score/wkspace.h
include_rtems_score_HEADERS += include/rtems/score/cpuopts.h

View File

@@ -231,201 +231,6 @@ typedef struct {
User_extensions_Table Callouts;
} User_extensions_Control;
/**
* @brief List of active extensions.
*/
extern Chain_Control _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;
bool is_internal;
Internal_errors_t error;
} User_extensions_Fatal_context;
void _User_extensions_Fatal_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.
*/
void _User_extensions_Iterate(
void *arg,
User_extensions_Visitor visitor
);
/** @} */
/**
* @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 );
return ctx.ok;
}
static inline void _User_extensions_Thread_delete( Thread_Control *deleted )
{
_User_extensions_Iterate(
deleted,
_User_extensions_Thread_delete_visitor
);
}
static inline void _User_extensions_Thread_start( Thread_Control *started )
{
_User_extensions_Iterate(
started,
_User_extensions_Thread_start_visitor
);
}
static inline void _User_extensions_Thread_restart( Thread_Control *restarted )
{
_User_extensions_Iterate(
restarted,
_User_extensions_Thread_restart_visitor
);
}
static inline void _User_extensions_Thread_begin( Thread_Control *executing )
{
_User_extensions_Iterate(
executing,
_User_extensions_Thread_begin_visitor
);
}
void _User_extensions_Thread_switch(
Thread_Control *executing,
Thread_Control *heir
);
static inline void _User_extensions_Thread_exitted( Thread_Control *executing )
{
_User_extensions_Iterate(
executing,
_User_extensions_Thread_exitted_visitor
);
}
static inline void _User_extensions_Fatal(
Internal_errors_Source source,
bool is_internal,
Internal_errors_t error
)
{
User_extensions_Fatal_context ctx = { source, is_internal, error };
_User_extensions_Iterate( &ctx, _User_extensions_Fatal_visitor );
}
/** @} */
/** @} */
#ifdef __cplusplus

View File

@@ -0,0 +1,235 @@
/**
* @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.com/license/LICENSE.
*/
#ifndef _RTEMS_SCORE_USEREXTIMPL_H
#define _RTEMS_SCORE_USEREXTIMPL_H
#include <rtems/score/userext.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @addtogroup ScoreUserExt
*
* @{
*/
/**
* @brief List of active extensions.
*/
extern Chain_Control _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;
bool is_internal;
Internal_errors_t error;
} User_extensions_Fatal_context;
void _User_extensions_Fatal_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.
*/
void _User_extensions_Iterate(
void *arg,
User_extensions_Visitor visitor
);
/** @} */
/**
* @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 );
return ctx.ok;
}
static inline void _User_extensions_Thread_delete( Thread_Control *deleted )
{
_User_extensions_Iterate(
deleted,
_User_extensions_Thread_delete_visitor
);
}
static inline void _User_extensions_Thread_start( Thread_Control *started )
{
_User_extensions_Iterate(
started,
_User_extensions_Thread_start_visitor
);
}
static inline void _User_extensions_Thread_restart( Thread_Control *restarted )
{
_User_extensions_Iterate(
restarted,
_User_extensions_Thread_restart_visitor
);
}
static inline void _User_extensions_Thread_begin( Thread_Control *executing )
{
_User_extensions_Iterate(
executing,
_User_extensions_Thread_begin_visitor
);
}
void _User_extensions_Thread_switch(
Thread_Control *executing,
Thread_Control *heir
);
static inline void _User_extensions_Thread_exitted( Thread_Control *executing )
{
_User_extensions_Iterate(
executing,
_User_extensions_Thread_exitted_visitor
);
}
static inline void _User_extensions_Fatal(
Internal_errors_Source source,
bool is_internal,
Internal_errors_t error
)
{
User_extensions_Fatal_context ctx = { source, is_internal, error };
_User_extensions_Iterate( &ctx, _User_extensions_Fatal_visitor );
}
/** @} */
/** @} */
#ifdef __cplusplus
}
#endif
#endif
/* end of include file */

View File

@@ -191,6 +191,10 @@ $(PROJECT_INCLUDE)/rtems/score/userext.h: include/rtems/score/userext.h $(PROJEC
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/userext.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/userext.h
$(PROJECT_INCLUDE)/rtems/score/userextimpl.h: include/rtems/score/userextimpl.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/userextimpl.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/userextimpl.h
$(PROJECT_INCLUDE)/rtems/score/watchdog.h: include/rtems/score/watchdog.h $(PROJECT_INCLUDE)/rtems/score/$(dirstamp)
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/score/watchdog.h
PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/score/watchdog.h

View File

@@ -13,10 +13,9 @@
#include "config.h"
#endif
#include <rtems/system.h>
#include <rtems/score/interr.h>
#include <rtems/score/sysstate.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
System_state_Codes _System_state_Current;

View File

@@ -27,7 +27,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
void _Thread_Close(

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>
#if defined(RTEMS_SMP)

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -24,7 +24,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__

View File

@@ -28,7 +28,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#if defined(RTEMS_SMP)
#include <rtems/score/smp.h>

View File

@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/watchdog.h>
#include <rtems/score/wkspace.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -26,7 +26,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -24,7 +24,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
#include <rtems/config.h>

View File

@@ -25,7 +25,7 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -25,7 +25,6 @@
#include <rtems/score/sysstate.h>
#include <rtems/score/thread.h>
#include <rtems/score/threadq.h>
#include <rtems/score/userext.h>
#include <rtems/score/wkspace.h>
/*

View File

@@ -20,7 +20,7 @@
#endif
#include <rtems/config.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
CHAIN_DEFINE_EMPTY( _User_extensions_Switches_list );

View File

@@ -19,8 +19,7 @@
#include "config.h"
#endif
#include <rtems/system.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
void _User_extensions_Add_set(
User_extensions_Control *the_extension

View File

@@ -17,7 +17,7 @@
#endif
#include <rtems/config.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
CHAIN_DEFINE_EMPTY( _User_extensions_List );

View File

@@ -19,8 +19,7 @@
#include "config.h"
#endif
#include <rtems/system.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
void _User_extensions_Remove_set (
User_extensions_Control *the_extension

View File

@@ -19,8 +19,7 @@
#include "config.h"
#endif
#include <rtems/system.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
void _User_extensions_Thread_switch (
Thread_Control *executing,

View File

@@ -44,7 +44,7 @@
#include <rtems/score/thread.h>
#include <rtems/rtems/timer.h>
#include <rtems/score/tod.h>
#include <rtems/score/userext.h>
#include <rtems/score/userextimpl.h>
#include <rtems/score/wkspace.h>
#if defined(RTEMS_SMP)
#include <rtems/score/smp.h>