summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/irq-extension.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/include/rtems/irq-extension.h')
-rw-r--r--cpukit/include/rtems/irq-extension.h833
1 files changed, 47 insertions, 786 deletions
diff --git a/cpukit/include/rtems/irq-extension.h b/cpukit/include/rtems/irq-extension.h
index 915be09e2b..c2576ec372 100644
--- a/cpukit/include/rtems/irq-extension.h
+++ b/cpukit/include/rtems/irq-extension.h
@@ -1,807 +1,68 @@
-/**
- * @file
- *
- * @ingroup rtems_interrupt_extension
- *
- * @brief Header file for the Interrupt Manager Extension.
- */
-
-/*
- * Based on concepts of Pavel Pisa, Till Straumann and Eric Valette.
- *
- * Copyright (C) 2008, 2020 embedded brains GmbH (http://www.embedded-brains.de)
- *
- * 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_IRQ_EXTENSION_H
-#define RTEMS_IRQ_EXTENSION_H
-
-#include <rtems.h>
-#include <rtems/chain.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+/* SPDX-License-Identifier: BSD-2-Clause */
/**
- * @defgroup rtems_interrupt_extension Interrupt Manager Extension
+ * @file
*
* @ingroup RTEMSAPIClassicIntr
*
- * In addition to the Classic API interrupt handler with a handle are
- * supported. You can also install multiple shared handler for one interrupt
- * vector.
- */
-/**@{**/
-
-/**
- * @brief Makes the interrupt handler unique. Prevents other handler from
- * using the same interrupt vector.
- */
-#define RTEMS_INTERRUPT_UNIQUE ((rtems_option) 0x00000001)
-
-/**
- * @brief Allows that this interrupt handler may share a common interrupt
- * vector with other handler.
- */
-#define RTEMS_INTERRUPT_SHARED ((rtems_option) 0x00000000)
-
-/**
- * @brief Forces that this interrupt handler replaces the first handler with
- * the same argument.
- */
-#define RTEMS_INTERRUPT_REPLACE ((rtems_option) 0x00000002)
-
-/**
- * @brief Returns true if the interrupt handler unique option is set.
- */
-#define RTEMS_INTERRUPT_IS_UNIQUE( options) \
- ((options) & RTEMS_INTERRUPT_UNIQUE)
-
-/**
- * @brief Returns true if the interrupt handler shared option is set.
- */
-#define RTEMS_INTERRUPT_IS_SHARED( options) \
- (!RTEMS_INTERRUPT_IS_UNIQUE( options))
-
-/**
- * @brief Returns true if the interrupt handler replace option is set.
- */
-#define RTEMS_INTERRUPT_IS_REPLACE( options) \
- ((options) & RTEMS_INTERRUPT_REPLACE)
-
-/**
- * @brief Interrupt handler routine type.
- */
-typedef void (*rtems_interrupt_handler)(void *);
-
-/**
- * @brief Installs the interrupt handler routine @a handler for the interrupt
- * vector with number @a vector.
- *
- * You can set one of the mutually exclusive options
- *
- * - @ref RTEMS_INTERRUPT_UNIQUE
- * - @ref RTEMS_INTERRUPT_SHARED
- * - @ref RTEMS_INTERRUPT_REPLACE
- *
- * with the @a options parameter for the interrupt handler.
- *
- * The handler routine shall be called with argument @a arg when dispatched.
- * The order in which the shared interrupt handlers are dispatched for one
- * vector is BSP dependent.
- *
- * If the option @ref RTEMS_INTERRUPT_UNIQUE is set then it shall be ensured
- * that this handler will be the only one for this vector.
- *
- * If the option @ref RTEMS_INTERRUPT_REPLACE is set then it shall be ensured
- * that this handler will replace the first handler with the same argument for
- * this vector if it exists, otherwise an error status shall be returned. A
- * second handler with the same argument for this vector shall remain
- * unchanged. The new handler will inherit the unique or shared option from
- * the replaced handler.
- *
- * You can provide an informative description @a info. This may be used for
- * system debugging and status tools. The string has to be persistent during
- * the handler life time.
- *
- * This function may block.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_CALLED_FROM_ISR If this function is called from interrupt
- * context this shall be returned.
- * @retval RTEMS_INVALID_ADDRESS If the handler address is NULL this shall be
- * returned.
- * @retval RTEMS_INVALID_ID If the vector number is out of range this shall be
- * returned.
- * @retval RTEMS_INVALID_NUMBER If an option is not applicable this shall be
- * returned.
- * @retval RTEMS_RESOURCE_IN_USE If the vector is already occupied with a
- * unique handler this shall be returned. If a unique handler should be
- * installed and there is already a handler installed this shall be returned.
- * @retval RTEMS_TOO_MANY If a handler with this argument is already installed
- * for the vector this shall be returned.
- * @retval RTEMS_UNSATISFIED If no handler exists to replace with the specified
- * argument and vector this shall be returned.
- * @retval RTEMS_IO_ERROR Reserved for board support package specific error
- * conditions.
- */
-rtems_status_code rtems_interrupt_handler_install(
- rtems_vector_number vector,
- const char *info,
- rtems_option options,
- rtems_interrupt_handler handler,
- void *arg
-);
-
-/**
- * @brief Removes the interrupt handler routine @a handler with argument @a arg
- * for the interrupt vector with number @a vector.
- *
- * This function may block.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_CALLED_FROM_ISR If this function is called from interrupt
- * context this shall be returned.
- * @retval RTEMS_INVALID_ADDRESS If the handler address is NULL this shall be
- * returned.
- * @retval RTEMS_INVALID_ID If the vector number is out of range this shall be
- * returned.
- * @retval RTEMS_UNSATISFIED If the handler with its argument is not installed
- * for the vector this shall be returned.
- * @retval RTEMS_IO_ERROR Reserved for board support package specific error
- * conditions.
- */
-rtems_status_code rtems_interrupt_handler_remove(
- rtems_vector_number vector,
- rtems_interrupt_handler handler,
- void *arg
-);
-
-/**
- * @brief Interrupt handler iteration routine type.
- *
- * @see rtems_interrupt_handler_iterate()
- */
-typedef void (*rtems_interrupt_per_handler_routine)(
- void *, const char *, rtems_option, rtems_interrupt_handler, void *
-);
-
-/**
- * @brief Iterates over all installed interrupt handler of the interrupt vector
- * with number @a vector.
- *
- * For each installed handler of the vector the function @a routine will be
- * called with the supplied argument @a arg and the handler information,
- * options, routine and argument.
- *
- * This function is intended for system information and diagnostics.
- *
- * This function may block. Never install or remove an interrupt handler
- * within the iteration routine. This may result in a deadlock.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_CALLED_FROM_ISR If this function is called from interrupt
- * context this shall be returned.
- * @retval RTEMS_INVALID_ID If the vector number is out of range this shall be
- * returned.
- * @retval RTEMS_IO_ERROR Reserved for board support package specific error
- * conditions.
- */
-rtems_status_code rtems_interrupt_handler_iterate(
- rtems_vector_number vector,
- rtems_interrupt_per_handler_routine routine,
- void *arg
-);
-
-/**
- * @brief Sets the processor affinity set of an interrupt vector.
- *
- * @param[in] vector The interrupt vector number.
- * @param[in] affinity_size The storage size of the affinity set.
- * @param[in] affinity_set The new processor affinity set for the interrupt
- * vector. This pointer must not be @c NULL.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_INVALID_ID The vector number is invalid.
- * @retval RTEMS_INVALID_SIZE Invalid affinity set size.
- * @retval RTEMS_INVALID_NUMBER Invalid processor affinity set.
- */
-rtems_status_code rtems_interrupt_set_affinity(
- rtems_vector_number vector,
- size_t affinity_size,
- const cpu_set_t *affinity
-);
-
-/**
- * @brief Gets the processor affinity set of an interrupt vector.
- *
- * @param[in] vector The interrupt vector number.
- * @param[in] affinity_size The storage size of the affinity set.
- * @param[out] affinity_set The current processor affinity set for the
- * interrupt vector. This pointer must not be @c NULL.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation.
- * @retval RTEMS_INVALID_ID The vector number is invalid.
- * @retval RTEMS_INVALID_SIZE Invalid affinity set size.
- */
-rtems_status_code rtems_interrupt_get_affinity(
- rtems_vector_number vector,
- size_t affinity_size,
- cpu_set_t *affinity
-);
-
-/**
- * @brief An interrupt server action.
- *
- * This structure must be treated as an opaque data type. Members must not be
- * accessed directly.
- *
- * @see rtems_interrupt_server_action_prepend().
- */
-typedef struct rtems_interrupt_server_action {
- struct rtems_interrupt_server_action *next;
- rtems_interrupt_handler handler;
- void *arg;
-} rtems_interrupt_server_action;
-
-/**
- * @brief The interrupt server index of the default interrupt server.
- */
-#define RTEMS_INTERRUPT_SERVER_DEFAULT 0
-
-/**
- * @brief An interrupt server control.
- *
- * This structure must be treated as an opaque data type. Members must not be
- * accessed directly.
- *
- * @see rtems_interrupt_server_create()
- */
-typedef struct rtems_interrupt_server_control {
- RTEMS_INTERRUPT_LOCK_MEMBER( lock )
- rtems_chain_control entries;
- rtems_id server;
- unsigned long errors;
- uint32_t index;
- rtems_chain_node node;
- void ( *destroy )( struct rtems_interrupt_server_control * );
-} rtems_interrupt_server_control;
-
-/**
- * @brief An interrupt server configuration.
- *
- * @see rtems_interrupt_server_create()
- */
-typedef struct {
- /**
- * @brief The task name of the interrupt server.
- */
- rtems_name name;
-
- /**
- * @brief The initial task priority of the interrupt server.
- */
- rtems_task_priority priority;
-
- /**
- * @brief The task storage area of the interrupt server.
- *
- * It shall be NULL for interrupt servers created by
- * rtems_interrupt_server_create().
- */
- void *storage_area;
-
- /**
- * @brief The task storage size of the interrupt server.
- *
- * For interrupt servers created by rtems_interrupt_server_create() this is
- * the task stack size.
- */
- size_t storage_size;
-
- /**
- * @brief The initial task modes of the interrupt server.
- */
- rtems_mode modes;
-
- /**
- * @brief The task attributes of the interrupt server.
- */
- rtems_attribute attributes;
-
- /**
- * @brief An optional handler to destroy the interrupt server control handed
- * over to rtems_interrupt_server_create().
- *
- * This handler is called in the context of the interrupt server to be
- * deleted, see also rtems_interrupt_server_delete().
- */
- void ( *destroy )( rtems_interrupt_server_control * );
-} rtems_interrupt_server_config;
-
-/**
- * @brief An interrupt server entry.
- *
- * This structure must be treated as an opaque data type. Members must not be
- * accessed directly.
- *
- * @see rtems_interrupt_server_entry_initialize(),
- * rtems_interrupt_server_action_prepend(),
- * rtems_interrupt_server_entry_submit(), and
- * rtems_interrupt_server_entry_destroy().
- */
-typedef struct {
- rtems_chain_node node;
- void *server;
- rtems_vector_number vector;
- rtems_interrupt_server_action *actions;
-} rtems_interrupt_server_entry;
-
-/**
- * @brief An interrupt server request.
- *
- * This structure must be treated as an opaque data type. Members must not be
- * accessed directly.
- *
- * @see rtems_interrupt_server_request_initialize(),
- * rtems_interrupt_server_request_set_vector(),
- * rtems_interrupt_server_request_submit(), and
- * rtems_interrupt_server_request_destroy().
- */
-typedef struct {
- rtems_interrupt_server_entry entry;
- rtems_interrupt_server_action action;
-} rtems_interrupt_server_request;
-
-/**
- * @brief Initializes the interrupt server tasks.
- *
- * This function tries to create an interrupt server task for each processor in
- * the system. The tasks will have the priority @a priority, the stack size @a
- * stack_size, the modes @a modes and the attributes @a attributes. The count
- * of server tasks will be returned in @a server_count. Interrupt handlers can
- * be installed on an interrupt server with
- * rtems_interrupt_server_handler_install() and removed with
- * rtems_interrupt_server_handler_remove() using a server index. In case of an
- * interrupt, the request will be forwarded to the interrupt server. The
- * handlers are executed within the interrupt server context. If one handler
- * blocks on something this may delay the processing of other handlers.
- *
- * The server count pointer @a server_count may be @a NULL.
- *
- * The task name of interrupt servers created by this function is
- * rtems_build_name( 'I', 'R', 'Q', 'S' ).
- *
- * This function may block.
- *
- * @retval RTEMS_SUCCESSFUL The operation was successful.
- *
- * @retval RTEMS_INCORRECT_STATE The interrupt servers were already initialized.
- *
- * @return The function uses rtems_task_create(). If this operation is not
- * successful, then its status code is returned.
- *
- * @see rtems_interrupt_server_create() and rtems_interrupt_server_delete().
- */
-rtems_status_code rtems_interrupt_server_initialize(
- rtems_task_priority priority,
- size_t stack_size,
- rtems_mode modes,
- rtems_attribute attributes,
- uint32_t *server_count
-);
-
-/**
- * @brief Creates an interrupt server.
- *
- * This function may block.
- *
- * @param[out] control is the interrupt server control. The ownership of this
- * structure is transferred from the caller of this function to the interrupt
- * server management.
- *
- * @param config is the interrupt server configuration.
- *
- * @param[out] server_index is the pointer to a server index variable. The
- * index of the built interrupt server will be stored in the referenced
- * variable if the operation was successful.
- *
- * @retval RTEMS_SUCCESSFUL The operation was successful.
- *
- * @return The function uses rtems_task_create(). If this operation is not
- * successful, then its status code is returned.
- *
- * @see rtems_interrupt_server_initialize() and
- * rtems_interrupt_server_delete().
- */
-rtems_status_code rtems_interrupt_server_create(
- rtems_interrupt_server_control *control,
- const rtems_interrupt_server_config *config,
- uint32_t *server_index
-);
-
-/**
- * @brief Destroys the interrupt server.
- *
- * This function may block.
- *
- * The interrupt server deletes itself, so after the return of the function the
- * interrupt server may be still in the termination process depending on the
- * task priorities of the system.
- *
- * @param server_index is the index of the interrupt server to destroy. Use
- * ::RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
- *
- * @retval RTEMS_SUCCESSFUL The operation was successful.
- * @retval RTEMS_INVALID_ID The interrupt server index was invalid.
- *
- * @see rtems_interrupt_server_create()
+ * @brief This header file is provided for backward compatiblility.
*/
-rtems_status_code rtems_interrupt_server_delete( uint32_t server_index );
-/**
- * @brief Installs the interrupt handler routine @a handler for the interrupt
- * vector with number @a vector on the server @a server.
- *
- * The handler routine will be executed on the corresponding interrupt server
- * task. A server index @a server_index of @c RTEMS_INTERRUPT_SERVER_DEFAULT
- * may be used to install the handler on the default server.
- *
- * This function may block.
- *
- * @see rtems_interrupt_handler_install().
- *
- * @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.
- * @retval * For other errors see rtems_interrupt_handler_install().
- */
-rtems_status_code rtems_interrupt_server_handler_install(
- uint32_t server_index,
- rtems_vector_number vector,
- const char *info,
- rtems_option options,
- rtems_interrupt_handler handler,
- void *arg
-);
-
-/**
- * @brief Removes the interrupt handler routine @a handler with argument @a arg
- * for the interrupt vector with number @a vector from the server @a server.
- *
- * A server index @a server_index of @c RTEMS_INTERRUPT_SERVER_DEFAULT may be
- * used to remove the handler from the default server.
- *
- * This function may block.
- *
- * @see rtems_interrupt_handler_remove().
- *
- * @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.
- * @retval * For other errors see rtems_interrupt_handler_remove().
- */
-rtems_status_code rtems_interrupt_server_handler_remove(
- uint32_t server_index,
- rtems_vector_number vector,
- rtems_interrupt_handler handler,
- void *arg
-);
-
-/**
- * @brief Iterates over all interrupt handler of the interrupt vector with
- * number @a vector which are installed on the interrupt server specified by
- * @a server.
- *
- * A server index @a server_index of @c RTEMS_INTERRUPT_SERVER_DEFAULT may be
- * used to specify the default server.
- *
- * @see rtems_interrupt_handler_iterate()
- *
- * @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.
- * @retval * For other errors see rtems_interrupt_handler_iterate().
- */
-rtems_status_code rtems_interrupt_server_handler_iterate(
- uint32_t server_index,
- rtems_vector_number vector,
- rtems_interrupt_per_handler_routine routine,
- void *arg
-);
-
-/**
- * @brief Moves the interrupt handlers installed on the specified source
- * interrupt server to the destination 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] source_server_index The source interrupt server index. Use
- * @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
- * @param[in] vector The interrupt vector number.
- * @param[in] destination_server_index The destination interrupt server index.
- * Use @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation
- * @retval RTEMS_INCORRECT_STATE The interrupt servers are not initialized.
- * @retval RTEMS_INVALID_ID The destination interrupt server index is invalid.
- * @retval RTEMS_INVALID_ID The vector number is invalid.
- * @retval RTEMS_INVALID_ID The destination interrupt server index is invalid.
- */
-rtems_status_code rtems_interrupt_server_move(
- uint32_t source_server_index,
- rtems_vector_number vector,
- uint32_t destination_server_index
-);
-
-/**
- * @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 Sets the processor affinity of the specified interrupt server.
- *
- * The scheduler is set determined by the highest numbered processor in the
- * specified affinity set.
- *
- * This operation is only reliable in case the specified interrupt was
- * suspended via rtems_interrupt_server_suspend().
- *
- * @param[in] server_index The interrupt server index. Use
- * @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
- * @param[in] affinity_size The storage size of the affinity set.
- * @param[in] affinity The desired processor affinity set for the specified
- * interrupt server.
- * @param[in] priority The task priority with respect to the corresponding
- * scheduler instance.
- *
- * @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.
- * @retval RTEMS_INVALID_SIZE Invalid affinity set size.
- * @retval RTEMS_INVALID_NAME The affinity set contains no online processor.
- * @retval RTEMS_INCORRECT_STATE The highest numbered online processor in the
- * specified affinity set is not owned by a scheduler.
- * @retval RTEMS_INVALID_PRIORITY Invalid priority.
- * @retval RTEMS_RESOURCE_IN_USE The interrupt server owns resources which deny
- * a scheduler change.
- * @retval RTEMS_INVALID_NUMBER Invalid processor affinity set.
- */
-rtems_status_code rtems_interrupt_server_set_affinity(
- uint32_t server_index,
- size_t affinity_size,
- const cpu_set_t *affinity,
- rtems_task_priority priority
-);
-
-/**
- * @brief Initializes the specified interrupt server entry.
- *
- * @param[in] server_index The interrupt server index. Use
- * @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
- * @param[in] entry The interrupt server entry to initialize.
- *
- * @see rtems_interrupt_server_action_prepend().
- *
- * @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_entry_initialize(
- uint32_t server_index,
- rtems_interrupt_server_entry *entry
-);
-
-/**
- * @brief Prepends the specified interrupt server action to the list of actions
- * of the specified interrupt server entry.
- *
- * No error checking is performed.
- *
- * @param[in] entry The interrupt server entry to prepend the interrupt server
- * action. It must have been initialized via
- * rtems_interrupt_server_entry_initialize().
- * @param[in] action The interrupt server action to prepend the list of actions
- * of the entry.
- * @param[in] handler The interrupt handler for the action.
- * @param[in] arg The interrupt handler argument for the action.
- */
-void rtems_interrupt_server_action_prepend(
- rtems_interrupt_server_entry *entry,
- rtems_interrupt_server_action *action,
- rtems_interrupt_handler handler,
- void *arg
-);
-
-/**
- * @brief Submits the specified interrupt server entry so that its interrupt
- * server actions can be invoked by the specified interrupt server.
- *
- * This function may be used to do a two-step interrupt processing. The first
- * step is done in interrupt context which calls this function. The second
- * step is then done in the context of the interrupt server.
- *
- * This function may be called from thread or interrupt context. It does not
- * block. No error checking is performed.
- *
- * @param[in] entry The interrupt server entry must be initialized before the
- * first call to this function via rtems_interrupt_server_entry_initialize()
- * and rtems_interrupt_server_action_prepend(). The entry and its actions
- * must not be modified between calls to this function. Use
- * rtems_interrupt_server_entry_destroy() to destroy an entry in use.
- */
-void rtems_interrupt_server_entry_submit(
- rtems_interrupt_server_entry *entry
-);
-
-/**
- * @brief Moves the interrupt server entry to the specified destination
- * interrupt server.
- *
- * Calling this function concurrently with rtems_interrupt_server_entry_submit()
- * with the same entry or while the entry is enqueued on the previous interrupt
- * server is undefined behaviour.
- *
- * @param[in,out] entry The interrupt server entry. It must have be initialized
- * before the call to this function.
- * @param destination_server_index The destination interrupt server index.
- * Use @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
- *
- * @retval RTEMS_SUCCESSFUL Successful operation
- * @retval RTEMS_INCORRECT_STATE The interrupt servers are not initialized.
- * @retval RTEMS_INVALID_ID The destination interrupt server index is invalid.
- */
-rtems_status_code rtems_interrupt_server_entry_move(
- rtems_interrupt_server_entry *entry,
- uint32_t destination_server_index
-);
-
-/**
- * @brief Destroys the specified interrupt server entry.
- *
- * This function must be called from thread context. It may block. Calling
- * this function within the context of an interrupt server is undefined
- * behaviour. No error checking is performed.
- *
- * @param[in] entry The interrupt server entry to destroy. It must have been
- * initialized via rtems_interrupt_server_entry_initialize().
+/*
+ * Copyright (C) 2021 embedded brains GmbH & Co. KG
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
*/
-void rtems_interrupt_server_entry_destroy(
- rtems_interrupt_server_entry *entry
-);
-/**
- * @brief Initializes the specified interrupt server request.
+/*
+ * This file is part of the RTEMS quality process and was automatically
+ * generated. If you find something that needs to be fixed or
+ * worded better please post a report or patch to an RTEMS mailing list
+ * or raise a bug report:
*
- * @param[in] server_index The interrupt server index. Use
- * @c RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.
- * @param[in] request The interrupt server request to initialize.
- * @param[in] handler The interrupt handler for the request action.
- * @param[in] arg The interrupt handler argument for the request action.
+ * https://www.rtems.org/bugs.html
*
- * @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.
+ * For information on updating and regenerating please refer to the How-To
+ * section in the Software Requirements Engineering chapter of the
+ * RTEMS Software Engineering manual. The manual is provided as a part of
+ * a release. For development sources please refer to the online
+ * documentation at:
*
- * @see rtems_interrupt_server_request_set_vector().
+ * https://docs.rtems.org
*/
-rtems_status_code rtems_interrupt_server_request_initialize(
- uint32_t server_index,
- rtems_interrupt_server_request *request,
- rtems_interrupt_handler handler,
- void *arg
-);
-/**
- * @brief Sets the interrupt vector in the specified interrupt server request.
- *
- * By default, the interrupt vector of an interrupt server request is set to a
- * special value which is outside the range of vectors supported by the
- * interrupt controller hardware.
- *
- * Calls to rtems_interrupt_server_request_submit() will disable the interrupt
- * vector of the request. After processing of the request by the interrupt
- * server the interrupt vector will be enabled again.
- *
- * @param[in] request The initialized interrupt server request.
- * @param[in] vector The interrupt vector number.
- *
- * @see rtems_interrupt_server_request_initialize().
- */
-RTEMS_INLINE_ROUTINE void rtems_interrupt_server_request_set_vector(
- rtems_interrupt_server_request *request,
- rtems_vector_number vector
-)
-{
- request->entry.vector = vector;
-}
+/* Generated from spec:/rtems/intr/if/header-2 */
-/**
- * @brief Submits the specified interrupt server request so that its interrupt
- * server action can be invoked by the specified interrupt server.
- *
- * This function may be used to do a two-step interrupt processing. The first
- * step is done in interrupt context which calls this function. The second
- * step is then done in the context of the interrupt server.
- *
- * This function may be called from thread or interrupt context. It does not
- * block. No error checking is performed.
- *
- * @param[in] request The interrupt server request must be initialized before the
- * first call to this function via
- * rtems_interrupt_server_request_initialize(). The request must not be
- * modified between calls to this function. Use
- * rtems_interrupt_server_request_destroy() to destroy a request in use.
- */
-RTEMS_INLINE_ROUTINE void rtems_interrupt_server_request_submit(
- rtems_interrupt_server_request *request
-)
-{
- rtems_interrupt_server_entry_submit( &request->entry );
-}
+#ifndef _RTEMS_IRQ_EXTENSION_H
+#define _RTEMS_IRQ_EXTENSION_H
-/**
- * @brief Destroys the specified interrupt server request.
- *
- * This function must be called from thread context. It may block. Calling
- * this function within the context of an interrupt server is undefined
- * behaviour. No error checking is performed.
- *
- * @param[in] request The interrupt server request to destroy. It must have
- * been initialized via rtems_interrupt_server_request_initialize().
- */
-RTEMS_INLINE_ROUTINE void rtems_interrupt_server_request_destroy(
- rtems_interrupt_server_request *request
-)
-{
- rtems_interrupt_server_entry_destroy( &request->entry );
-}
+#include <rtems/rtems/intr.h>
-/** @} */
+#ifdef __cplusplus
+extern "C" {
+#endif
#ifdef __cplusplus
}
-#endif /* __cplusplus */
+#endif
-#endif /* RTEMS_IRQ_EXTENSION_H */
+#endif /* _RTEMS_IRQ_EXTENSION_H */