RTEMS: Interrupt Manager Extension

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
Files | Data Structures | Macros | Typedefs | Functions
Interrupt Manager Extension
API » Classic » Interrupts

## Files
file | irq-extension.h
| Header file for the Interrupt Manager Extension.

## Data Structures
struct | rtems_interrupt_server_action
| An interrupt server action. More...
struct | rtems_interrupt_server_control
| An interrupt server control. More...
struct | rtems_interrupt_server_config
| An interrupt server configuration. More...
struct | rtems_interrupt_server_entry
| An interrupt server entry. More...
struct | rtems_interrupt_server_request
| An interrupt server request. More...

## Macros
#define | RTEMS_INTERRUPT_UNIQUE ((rtems_option) 0x00000001)
| Makes the interrupt handler unique. Prevents other handler from using the same interrupt vector.
#define | RTEMS_INTERRUPT_SHARED ((rtems_option) 0x00000000)
| Allows that this interrupt handler may share a common interrupt vector with other handler.
#define | RTEMS_INTERRUPT_REPLACE ((rtems_option) 0x00000002)
| Forces that this interrupt handler replaces the first handler with the same argument.
#define | RTEMS_INTERRUPT_IS_UNIQUE(options) ((options) & RTEMS_INTERRUPT_UNIQUE)
| Returns true if the interrupt handler unique option is set.
#define | RTEMS_INTERRUPT_IS_SHARED(options) (!RTEMS_INTERRUPT_IS_UNIQUE( options))
| Returns true if the interrupt handler shared option is set.
#define | RTEMS_INTERRUPT_IS_REPLACE(options) ((options) & RTEMS_INTERRUPT_REPLACE)
| Returns true if the interrupt handler replace option is set.
#define | RTEMS_INTERRUPT_SERVER_DEFAULT 0
| The interrupt server index of the default interrupt server.

## Typedefs
typedef void(* | rtems_interrupt_handler) (void *)
| Interrupt handler routine type.
typedef void(* | rtems_interrupt_per_handler_routine) (void *, const char *, rtems_option, rtems_interrupt_handler, void *)
| Interrupt handler iteration routine type.
typedef struct rtems_interrupt_server_action | rtems_interrupt_server_action
| An interrupt server action.
typedef struct rtems_interrupt_server_control | rtems_interrupt_server_control
| An interrupt server control.

## Functions
rtems_status_code | rtems_interrupt_handler_install (rtems_vector_number vector, const char *info, rtems_option options, rtems_interrupt_handler handler, void *arg)
| Installs the interrupt handler routine handler for the interrupt vector with number vector.
rtems_status_code | rtems_interrupt_handler_remove (rtems_vector_number vector, rtems_interrupt_handler handler, void *arg)
| Removes the interrupt handler routine handler with argument arg for the interrupt vector with number vector.
rtems_status_code | rtems_interrupt_handler_iterate (rtems_vector_number vector, rtems_interrupt_per_handler_routine routine, void *arg)
| Iterates over all installed interrupt handler of the interrupt vector with number vector.
rtems_status_code | rtems_interrupt_set_affinity (rtems_vector_number vector, size_t affinity_size, const cpu_set_t *affinity)
| Sets the processor affinity set of an interrupt vector.
rtems_status_code | rtems_interrupt_get_affinity (rtems_vector_number vector, size_t affinity_size, cpu_set_t *affinity)
| Gets the processor affinity set of an interrupt vector.
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)
| Initializes the interrupt server tasks.
rtems_status_code | rtems_interrupt_server_create (rtems_interrupt_server_control *control, const rtems_interrupt_server_config *config, uint32_t *server_index)
| Creates an interrupt server.
rtems_status_code | rtems_interrupt_server_delete (uint32_t server_index)
| Destroys the interrupt server.
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)
| Installs the interrupt handler routine handler for the interrupt vector with number vector on the server server.
rtems_status_code | rtems_interrupt_server_handler_remove (uint32_t server_index, rtems_vector_number vector, rtems_interrupt_handler handler, void *arg)
| Removes the interrupt handler routine handler with argument arg for the interrupt vector with number vector from the server server.
rtems_status_code | rtems_interrupt_server_handler_iterate (uint32_t server_index, rtems_vector_number vector, rtems_interrupt_per_handler_routine routine, void *arg)
| Iterates over all interrupt handler of the interrupt vector with number vector which are installed on the interrupt server specified by server.
rtems_status_code | rtems_interrupt_server_move (uint32_t source_server_index, rtems_vector_number vector, uint32_t destination_server_index)
| Moves the interrupt handlers installed on the specified source interrupt server to the destination interrupt server.
rtems_status_code | rtems_interrupt_server_suspend (uint32_t server_index)
| Suspends the specified interrupt server.
rtems_status_code | rtems_interrupt_server_resume (uint32_t server_index)
| Resumes the specified interrupt server.
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)
| Sets the processor affinity of the specified interrupt server.
rtems_status_code | rtems_interrupt_server_entry_initialize (uint32_t server_index, rtems_interrupt_server_entry *entry)
| Initializes the specified interrupt server entry.
void | rtems_interrupt_server_action_prepend (rtems_interrupt_server_entry *entry, rtems_interrupt_server_action *action, rtems_interrupt_handler handler, void *arg)
| Prepends the specified interrupt server action to the list of actions of the specified interrupt server entry.
void | rtems_interrupt_server_entry_submit (rtems_interrupt_server_entry *entry)
| Submits the specified interrupt server entry so that its interrupt server actions can be invoked by the specified interrupt server.
rtems_status_code | rtems_interrupt_server_entry_move (rtems_interrupt_server_entry *entry, uint32_t destination_server_index)
| Moves the interrupt server entry to the specified destination interrupt server.
void | rtems_interrupt_server_entry_destroy (rtems_interrupt_server_entry *entry)
| Destroys the specified interrupt server entry.
rtems_status_code | rtems_interrupt_server_request_initialize (uint32_t server_index, rtems_interrupt_server_request *request, rtems_interrupt_handler handler, void *arg)
| Initializes the specified interrupt server request.
RTEMS_INLINE_ROUTINE void | rtems_interrupt_server_request_set_vector (rtems_interrupt_server_request *request, rtems_vector_number vector)
| Sets the interrupt vector in the specified interrupt server request.
RTEMS_INLINE_ROUTINE void | rtems_interrupt_server_request_submit (rtems_interrupt_server_request *request)
| Submits the specified interrupt server request so that its interrupt server action can be invoked by the specified interrupt server.
RTEMS_INLINE_ROUTINE void | rtems_interrupt_server_request_destroy (rtems_interrupt_server_request *request)
| Destroys the specified interrupt server request.

## Detailed Description

In addition to the Classic API interrupt handler with a handle are supported. You can also install multiple shared handler for one interrupt vector.

## Typedef Documentation

## ◆ rtems_interrupt_per_handler_routine

typedef void(* rtems_interrupt_per_handler_routine) (void *, const char *, rtems_option, rtems_interrupt_handler, void *)

Interrupt handler iteration routine type.

See also
  rtems_interrupt_handler_iterate()

## ◆ rtems_interrupt_server_action

typedef struct rtems_interrupt_server_action rtems_interrupt_server_action

An interrupt server action.

This structure must be treated as an opaque data type. Members must not be accessed directly.

See also
  rtems_interrupt_server_action_prepend().

## ◆ rtems_interrupt_server_control

typedef struct rtems_interrupt_server_control rtems_interrupt_server_control

An interrupt server control.

This structure must be treated as an opaque data type. Members must not be accessed directly.

See also
  rtems_interrupt_server_create()

## Function Documentation

## ◆ rtems_interrupt_get_affinity()

rtems_status_code rtems_interrupt_get_affinity | ( | rtems_vector_number | vector,
|  | size_t | affinity_size,
|  | cpu_set_t * | affinity
| ) |  |

Gets the processor affinity set of an interrupt vector.

Parameters

  [in] | vector | The interrupt vector number.
  [in] | affinity_size | The storage size of the affinity set.
  [out] | affinity_set | The current processor affinity set for the interrupt vector. This pointer must not be `NULL`.

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_INVALID_ID | The vector number is invalid.
  RTEMS_INVALID_SIZE | Invalid affinity set size.

## ◆ rtems_interrupt_handler_install()

rtems_status_code rtems_interrupt_handler_install | ( | rtems_vector_number | vector,
|  | const char * | info,
|  | rtems_option | options,
|  | rtems_interrupt_handler | handler,
|  | void * | arg
| ) |  |

Installs the interrupt handler routine handler for the interrupt vector with number vector.

You can set one of the mutually exclusive options

- RTEMS_INTERRUPT_UNIQUE
- RTEMS_INTERRUPT_SHARED
- RTEMS_INTERRUPT_REPLACE

with the options parameter for the interrupt handler.

The handler routine shall be called with argument arg when dispatched. The order in which the shared interrupt handlers are dispatched for one vector is BSP dependent.

If the option RTEMS_INTERRUPT_UNIQUE is set then it shall be ensured that this handler will be the only one for this vector.

If the option 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 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.

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_CALLED_FROM_ISR | If this function is called from interrupt context this shall be returned.
  RTEMS_INVALID_ADDRESS | If the handler address is NULL this shall be returned.
  RTEMS_INVALID_ID | If the vector number is out of range this shall be returned.
  RTEMS_INVALID_NUMBER | If an option is not applicable this shall be returned.
  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.
  RTEMS_TOO_MANY | If a handler with this argument is already installed for the vector this shall be returned.
  RTEMS_UNSATISFIED | If no handler exists to replace with the specified argument and vector this shall be returned.
  RTEMS_IO_ERROR | Reserved for board support package specific error conditions.

## ◆ rtems_interrupt_handler_iterate()

rtems_status_code rtems_interrupt_handler_iterate | ( | rtems_vector_number | vector,
|  | rtems_interrupt_per_handler_routine | routine,
|  | void * | arg
| ) |  |

Iterates over all installed interrupt handler of the interrupt vector with number vector.

For each installed handler of the vector the function routine will be called with the supplied argument 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.

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_CALLED_FROM_ISR | If this function is called from interrupt context this shall be returned.
  RTEMS_INVALID_ID | If the vector number is out of range this shall be returned.
  RTEMS_IO_ERROR | Reserved for board support package specific error conditions.

## ◆ rtems_interrupt_handler_remove()

rtems_status_code rtems_interrupt_handler_remove | ( | rtems_vector_number | vector,
|  | rtems_interrupt_handler | handler,
|  | void * | arg
| ) |  |

Removes the interrupt handler routine handler with argument arg for the interrupt vector with number vector.

This function may block.

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_CALLED_FROM_ISR | If this function is called from interrupt context this shall be returned.
  RTEMS_INVALID_ADDRESS | If the handler address is NULL this shall be returned.
  RTEMS_INVALID_ID | If the vector number is out of range this shall be returned.
  RTEMS_UNSATISFIED | If the handler with its argument is not installed for the vector this shall be returned.
  RTEMS_IO_ERROR | Reserved for board support package specific error conditions.

## ◆ rtems_interrupt_server_action_prepend()

void rtems_interrupt_server_action_prepend | ( | rtems_interrupt_server_entry * | entry,
|  | rtems_interrupt_server_action * | action,
|  | rtems_interrupt_handler | handler,
|  | void * | arg
| ) |  |

Prepends the specified interrupt server action to the list of actions of the specified interrupt server entry.

No error checking is performed.

Parameters

  [in] | entry | The interrupt server entry to prepend the interrupt server action. It must have been initialized via rtems_interrupt_server_entry_initialize().
  [in] | action | The interrupt server action to prepend the list of actions of the entry.
  [in] | handler | The interrupt handler for the action.
  [in] | arg | The interrupt handler argument for the action.

## ◆ rtems_interrupt_server_create()

rtems_status_code rtems_interrupt_server_create | ( | rtems_interrupt_server_control * | control,
|  | const rtems_interrupt_server_config * | config,
|  | uint32_t * | server_index
| ) |  |

Creates an interrupt server.

This function may block.

Parameters

  [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.
  | config | is the interrupt server configuration.
  [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.

Return values

  RTEMS_SUCCESSFUL | The operation was successful.

Returns
  The function uses rtems_task_create(). If this operation is not successful, then its status code is returned.

See also
  rtems_interrupt_server_initialize() and rtems_interrupt_server_delete().

## ◆ rtems_interrupt_server_delete()

rtems_status_code rtems_interrupt_server_delete | ( | uint32_t | server_index | ) |

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.

Parameters

  server_index | is the index of the interrupt server to destroy. Use RTEMS_INTERRUPT_SERVER_DEFAULT to specify the default server.

Return values

  RTEMS_SUCCESSFUL | The operation was successful.
  RTEMS_INVALID_ID | The interrupt server index was invalid.

See also
  rtems_interrupt_server_create()

## ◆ rtems_interrupt_server_entry_destroy()

void rtems_interrupt_server_entry_destroy | ( | rtems_interrupt_server_entry * | entry | ) |

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.

Parameters

  [in] | entry | The interrupt server entry to destroy. It must have been initialized via rtems_interrupt_server_entry_initialize().

## ◆ rtems_interrupt_server_entry_initialize()

rtems_status_code rtems_interrupt_server_entry_initialize | ( | uint32_t | server_index,
|  | rtems_interrupt_server_entry * | entry
| ) |  |

Initializes the specified interrupt server entry.

Parameters

  [in] | server_index | The interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.
  [in] | entry | The interrupt server entry to initialize.

See also
  rtems_interrupt_server_action_prepend().

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.

## ◆ rtems_interrupt_server_entry_move()

rtems_status_code rtems_interrupt_server_entry_move | ( | rtems_interrupt_server_entry * | entry,
|  | uint32_t | destination_server_index
| ) |  |

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.

Parameters

  [in,out] | entry | The interrupt server entry. It must have be initialized before the call to this function.
  | destination_server_index | The destination interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.

Return values

  RTEMS_SUCCESSFUL | Successful operation
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | The destination interrupt server index is invalid.

## ◆ rtems_interrupt_server_entry_submit()

void rtems_interrupt_server_entry_submit | ( | rtems_interrupt_server_entry * | entry | ) |

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.

Parameters

  [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.

## ◆ rtems_interrupt_server_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
| ) |  |

Installs the interrupt handler routine handler for the interrupt vector with number vector on the server server.

The handler routine will be executed on the corresponding interrupt server task. A server index server_index of `RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to install the handler on the default server.

This function may block.

See also
  rtems_interrupt_handler_install().

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.
  * | For other errors see rtems_interrupt_handler_install().

## ◆ rtems_interrupt_server_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
| ) |  |

Iterates over all interrupt handler of the interrupt vector with number vector which are installed on the interrupt server specified by server.

A server index server_index of `RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify the default server.

See also
  rtems_interrupt_handler_iterate()

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.
  * | For other errors see rtems_interrupt_handler_iterate().

## ◆ rtems_interrupt_server_handler_remove()

rtems_status_code rtems_interrupt_server_handler_remove | ( | uint32_t | server_index,
|  | rtems_vector_number | vector,
|  | rtems_interrupt_handler | handler,
|  | void * | arg
| ) |  |

Removes the interrupt handler routine handler with argument arg for the interrupt vector with number vector from the server server.

A server index server_index of `RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to remove the handler from the default server.

This function may block.

See also
  rtems_interrupt_handler_remove().

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.
  * | For other errors see rtems_interrupt_handler_remove().

## ◆ rtems_interrupt_server_initialize()

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
| ) |  |

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 priority, the stack size stack_size, the modes modes and the attributes attributes. The count of server tasks will be returned in 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 server_count may be NULL.

The task name of interrupt servers created by this function is rtems_build_name( 'I', 'R', 'Q', 'S' ).

This function may block.

Return values

  RTEMS_SUCCESSFUL | The operation was successful.
  RTEMS_INCORRECT_STATE | The interrupt servers were already initialized.

Returns
  The function uses rtems_task_create(). If this operation is not successful, then its status code is returned.

See also
  rtems_interrupt_server_create() and rtems_interrupt_server_delete().

## ◆ rtems_interrupt_server_move()

rtems_status_code rtems_interrupt_server_move | ( | uint32_t | source_server_index,
|  | rtems_vector_number | vector,
|  | uint32_t | destination_server_index
| ) |  |

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.

Parameters

  [in] | source_server_index | The source interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.
  [in] | vector | The interrupt vector number.
  [in] | destination_server_index | The destination interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.

Return values

  RTEMS_SUCCESSFUL | Successful operation
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | The destination interrupt server index is invalid.
  RTEMS_INVALID_ID | The vector number is invalid.
  RTEMS_INVALID_ID | The destination interrupt server index is invalid.

## ◆ rtems_interrupt_server_request_destroy()

RTEMS_INLINE_ROUTINE void rtems_interrupt_server_request_destroy | ( | rtems_interrupt_server_request * | request | ) |

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.

Parameters

  [in] | request | The interrupt server request to destroy. It must have been initialized via rtems_interrupt_server_request_initialize().

## ◆ rtems_interrupt_server_request_initialize()

rtems_status_code rtems_interrupt_server_request_initialize | ( | uint32_t | server_index,
|  | rtems_interrupt_server_request * | request,
|  | rtems_interrupt_handler | handler,
|  | void * | arg
| ) |  |

Initializes the specified interrupt server request.

Parameters

  [in] | server_index | The interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.
  [in] | request | The interrupt server request to initialize.
  [in] | handler | The interrupt handler for the request action.
  [in] | arg | The interrupt handler argument for the request action.

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.

See also
  rtems_interrupt_server_request_set_vector().

## ◆ rtems_interrupt_server_request_set_vector()

RTEMS_INLINE_ROUTINE void rtems_interrupt_server_request_set_vector | ( | rtems_interrupt_server_request * | request,
|  | rtems_vector_number | vector
| ) |  |

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.

Parameters

  [in] | request | The initialized interrupt server request.
  [in] | vector | The interrupt vector number.

See also
  rtems_interrupt_server_request_initialize().

## ◆ rtems_interrupt_server_request_submit()

RTEMS_INLINE_ROUTINE void rtems_interrupt_server_request_submit | ( | rtems_interrupt_server_request * | request | ) |

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.

Parameters

  [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_interrupt_server_resume()

rtems_status_code rtems_interrupt_server_resume | ( | uint32_t | server_index | ) |

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.

Parameters

  [in] | server_index | The interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.

See also
  rtems_interrupt_server_suspend().

Return values

  RTEMS_SUCCESSFUL | Successful operation
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.

## ◆ rtems_interrupt_server_set_affinity()

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
| ) |  |

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().

Parameters

  [in] | server_index | The interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.
  [in] | affinity_size | The storage size of the affinity set.
  [in] | affinity | The desired processor affinity set for the specified interrupt server.
  [in] | priority | The task priority with respect to the corresponding scheduler instance.

Return values

  RTEMS_SUCCESSFUL | Successful operation
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.
  RTEMS_INVALID_SIZE | Invalid affinity set size.
  RTEMS_INVALID_NAME | The affinity set contains no online processor.
  RTEMS_INCORRECT_STATE | The highest numbered online processor in the specified affinity set is not owned by a scheduler.
  RTEMS_INVALID_PRIORITY | Invalid priority.
  RTEMS_RESOURCE_IN_USE | The interrupt server owns resources which deny a scheduler change.
  RTEMS_INVALID_NUMBER | Invalid processor affinity set.

## ◆ rtems_interrupt_server_suspend()

rtems_status_code rtems_interrupt_server_suspend | ( | uint32_t | server_index | ) |

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.

Parameters

  [in] | server_index | The interrupt server index. Use `RTEMS_INTERRUPT_SERVER_DEFAULT` to specify the default server.

See also
  rtems_interrupt_server_resume().

Return values

  RTEMS_SUCCESSFUL | Successful operation
  RTEMS_INCORRECT_STATE | The interrupt servers are not initialized.
  RTEMS_INVALID_ID | If the interrupt server index is invalid.

## ◆ rtems_interrupt_set_affinity()

rtems_status_code rtems_interrupt_set_affinity | ( | rtems_vector_number | vector,
|  | size_t | affinity_size,
|  | const cpu_set_t * | affinity
| ) |  |

Sets the processor affinity set of an interrupt vector.

Parameters

  [in] | vector | The interrupt vector number.
  [in] | affinity_size | The storage size of the affinity set.
  [in] | affinity_set | The new processor affinity set for the interrupt vector. This pointer must not be `NULL`.

Return values

  RTEMS_SUCCESSFUL | Successful operation.
  RTEMS_INVALID_ID | The vector number is invalid.
  RTEMS_INVALID_SIZE | Invalid affinity set size.
  RTEMS_INVALID_NUMBER | Invalid processor affinity set.