diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-11 08:48:15 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-12 07:46:49 +0200 |
commit | a961e1980c1674679b1090bb24630cf3de8d6b48 (patch) | |
tree | 50c4a2072af466cb14e9a810cbccf25ea4de81ca /cpukit | |
parent | Create one interrupt server per processor (diff) | |
download | rtems-a961e1980c1674679b1090bb24630cf3de8d6b48.tar.bz2 |
Add interrupt server suspend/resume
This mechanism can be used to safely move the interrupt server from one
scheduler instance to another for example.
Update #3071.
Diffstat (limited to '')
-rw-r--r-- | cpukit/include/rtems/irq-extension.h | 39 | ||||
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/event.h | 6 |
2 files changed, 45 insertions, 0 deletions
diff --git a/cpukit/include/rtems/irq-extension.h b/cpukit/include/rtems/irq-extension.h index 0c72b6e086..4b49a1a078 100644 --- a/cpukit/include/rtems/irq-extension.h +++ b/cpukit/include/rtems/irq-extension.h @@ -362,6 +362,45 @@ rtems_status_code rtems_interrupt_server_handler_iterate( ); /** + * @brief Suspends the specified interrupt server. + * + * A suspend request is sent to the specified interrupt server. This function + * waits for an acknowledgment from the specified interrupt server. + * + * This function must be called from thread context. It may block. Calling + * this function within the context of an interrupt server is undefined + * behaviour. + * + * @param[in] server_index The interrupt server index. Use + * @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server. + * + * @see rtems_interrupt_server_resume(). + * + * @retval RTEMS_SUCCESSFUL Successful operation + * @retval RTEMS_INCORRECT_STATE The interrupt servers are not initialized. + * @retval RTEMS_INVALID_ID If the interrupt server index is invalid. + */ +rtems_status_code rtems_interrupt_server_suspend( uint32_t server_index ); + +/** + * @brief Resumes the specified interrupt server. + * + * This function must be called from thread context. It may block. Calling + * this function within the context of an interrupt server is undefined + * behaviour. + * + * @param[in] server_index The interrupt server index. Use + * @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server. + * + * @see rtems_interrupt_server_suspend(). + * + * @retval RTEMS_SUCCESSFUL Successful operation + * @retval RTEMS_INCORRECT_STATE The interrupt servers are not initialized. + * @retval RTEMS_INVALID_ID If the interrupt server index is invalid. + */ +rtems_status_code rtems_interrupt_server_resume( uint32_t server_index ); + +/** * @brief Initializes the specified interrupt server entry. * * @param[in] server_index The interrupt server index. Use diff --git a/cpukit/rtems/include/rtems/rtems/event.h b/cpukit/rtems/include/rtems/rtems/event.h index 4263a4b881..1cd64c0cfa 100644 --- a/cpukit/rtems/include/rtems/rtems/event.h +++ b/cpukit/rtems/include/rtems/rtems/event.h @@ -319,6 +319,12 @@ rtems_status_code rtems_event_receive ( #define RTEMS_EVENT_SYSTEM_NETWORK_CLOSE RTEMS_EVENT_26 /** + * @brief Reserved system event to resume server threads, e.g timer or + * interrupt server. + */ +#define RTEMS_EVENT_SYSTEM_SERVER_RESUME RTEMS_EVENT_29 + +/** * @brief Reserved system event for the server threads, e.g timer or interrupt * server. */ |