diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-06-10 18:01:15 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-07-12 14:53:01 +0200 |
commit | a615014cfb188ef151ba4e11bcc808f4d6d2aefd (patch) | |
tree | d7f1de0f1c9600b794edf00882e9cd8a03d13ffb /spec/rtems/intr/if | |
parent | specview.py: Do not print N/A states (diff) | |
download | rtems-central-a615014cfb188ef151ba4e11bcc808f4d6d2aefd.tar.bz2 |
spec: Add interrupt manager extension
Diffstat (limited to 'spec/rtems/intr/if')
42 files changed, 2257 insertions, 3 deletions
diff --git a/spec/rtems/intr/if/get-affinity.yml b/spec/rtems/intr/if/get-affinity.yml new file mode 100644 index 00000000..9e608ec7 --- /dev/null +++ b/spec/rtems/intr/if/get-affinity.yml @@ -0,0 +1,70 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Gets the processor affinity set of the interrupt vector. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${vector-number:/name} ${.:/params[0]/name} + - ${/c/if/size_t:/name} ${.:/params[1]/name} + - ${/c/if/cpu_set_t:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-isr +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/directive-no-preempt +name: rtems_interrupt_get_affinity +notes: null +params: +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the size of the processor set referenced by ${.:/params[2]/name} in + bytes. + dir: null + name: affinity_size +- description: | + is the pointer to a ${/c/if/cpu_set_t:/name} object. When the directive + call is successful, the processor affinity set of the interrupt vector will + be stored in this object. A set bit in the processor set means that the + corresponding processor is in the processor affinity set of the interrupt + vector, otherwise the bit is cleared. + dir: out + name: affinity +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The ${.:/params[2]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + The size specified by ${.:/params[1]/name} of the processor set was too + small for the processor affinity set of the interrupt vector. + value: ${../../status/if/invalid-size:/name} +type: interface diff --git a/spec/rtems/intr/if/group.yml b/spec/rtems/intr/if/group.yml index 22a0e229..5a5e8c25 100644 --- a/spec/rtems/intr/if/group.yml +++ b/spec/rtems/intr/if/group.yml @@ -61,6 +61,78 @@ links: uid: lock-member - role: placement-order uid: lock-reference +- role: placement-order + uid: shared +- role: placement-order + uid: unique +- role: placement-order + uid: replace +- role: placement-order + uid: is-shared +- role: placement-order + uid: is-unique +- role: placement-order + uid: is-replace +- role: placement-order + uid: handler-install +- role: placement-order + uid: handler-remove +- role: placement-order + uid: get-affinity +- role: placement-order + uid: set-affinity +- role: placement-order + uid: handler-iterate +- role: placement-order + uid: server-default +- role: placement-order + uid: server-config +- role: placement-order + uid: server-control +- role: placement-order + uid: server-initialize +- role: placement-order + uid: server-create +- role: placement-order + uid: server-handler-install +- role: placement-order + uid: server-handler-remove +- role: placement-order + uid: server-set-affinity +- role: placement-order + uid: server-delete +- role: placement-order + uid: server-suspend +- role: placement-order + uid: server-resume +- role: placement-order + uid: server-move +- role: placement-order + uid: server-handler-iterate +- role: placement-order + uid: server-action +- role: placement-order + uid: server-entry +- role: placement-order + uid: server-entry-initialize +- role: placement-order + uid: server-action-prepend +- role: placement-order + uid: server-entry-destroy +- role: placement-order + uid: server-entry-submit +- role: placement-order + uid: server-entry-move +- role: placement-order + uid: server-request +- role: placement-order + uid: server-request-initialize +- role: placement-order + uid: server-request-set-vector +- role: placement-order + uid: server-request-destroy +- role: placement-order + uid: server-request-submit name: Interrupt Manager text: | The Classic API shall provide an interface to the Interrupt Manager. diff --git a/spec/rtems/intr/if/handler-install.yml b/spec/rtems/intr/if/handler-install.yml new file mode 100644 index 00000000..59f5e6e3 --- /dev/null +++ b/spec/rtems/intr/if/handler-install.yml @@ -0,0 +1,127 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Installs the interrupt handler routine and argument at the interrupt vector. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${vector-number:/name} ${.:/params[0]/name} + - const char *${.:/params[1]/name} + - ${../../option/if/option:/name} ${.:/params[2]/name} + - ${handler:/name} ${.:/params[3]/name} + - void *${.:/params[4]/name} + return: ${../../status/if/code:/name} + variants: [] +description: | + One of the following mutually exclusive options + + * ${unique:/name}, + + * ${shared:/name}, and + + * ${replace:/name} + + shall be set in the ${.:/params[2]/name} parameter. + + The handler routine will be called with the argument specified by + ${.:/params[4]/name} when dispatched. The order in which shared + interrupt handlers are dispatched for one vector is defined by the + installation order. The first installed handler is dispatched first. + + If the option ${unique:/name} is set, then it will be ensured that the + handler will be the only one for the interrupt vector. + + If the option ${shared:/name} is set, then multiple handler may be installed + for the interrupt vector. + + If the option ${replace:/name} is set, then the handler specified by + ${.:/params[3]/name} will replace the first handler with the same argument + for the interrupt vector if it exists, otherwise an error status will be + returned. A second handler with the same argument for the interrupt vector + will remain unchanged. The new handler will inherit the unique or shared + options from the replaced handler. + + An informative description may be provided in ${.:/params[1]/name}. It may + be used for system debugging and diagnostic tools. The referenced string has + to be persistent as long as the handler is installed. +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_handler_install +notes: null +params: +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the descriptive information of the interrupt handler to install. + dir: null + name: info +- description: | + is the interrupt handler install option set. + dir: null + name: options +- description: | + is the interrupt handler routine to install. + dir: null + name: routine +- description: | + is the interrupt handler argument to install. + dir: null + name: arg +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The service was not initialized. + value: ${../../status/if/incorrect-state:/name} + - description: | + The ${.:/params[3]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + The directive was called from within interrupt context. + value: ${../../status/if/called-from-isr:/name} + - description: | + There was not enough memory available to allocate data structures to + install the handler. + value: ${../../status/if/no-memory:/name} + - description: | + The ${unique:/name} option was set in ${.:/params[2]/name} and the + interrupt vector was already occupied by a handler. + value: ${../../status/if/resource-in-use:/name} + - description: | + The ${shared:/name} option was set in ${.:/params[2]/name} and the + interrupt vector was already occupied by a unique handler. + value: ${../../status/if/resource-in-use:/name} + - description: | + The handler specified by ${.:/params[3]/name} was already installed for + the interrupt vector specified by ${.:/params[0]/name} with an argument + equal to the argument specified by ${.:/params[4]/name}. + value: ${../../status/if/too-many:/name} + - description: | + The ${replace:/name} option was set in ${.:/params[2]/name} and no + handler to replace was installed. + value: ${../../status/if/unsatisfied:/name} +type: interface diff --git a/spec/rtems/intr/if/handler-iterate.yml b/spec/rtems/intr/if/handler-iterate.yml new file mode 100644 index 00000000..a4015e13 --- /dev/null +++ b/spec/rtems/intr/if/handler-iterate.yml @@ -0,0 +1,73 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Iterates over all interrupt handler installed at the interrupt vector. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${vector-number:/name} ${.:/params[0]/name} + - ${per-handler-routine:/name} ${.:/params[1]/name} + - void *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: | + For each installed handler at the interrupt vector the visitor function + specified by ${.:/params[1]/name} will be called with the argument specified + by ${.:/params[2]/name} and the handler information, options, routine and + argument. +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_handler_iterate +notes: | + The directive is intended for system information and diagnostics. + + Never install or remove an interrupt handler within the visitor function. + This may result in a deadlock. +params: +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the visitor routine. + dir: null + name: routine +- description: + is the visitor argument. + dir: null + name: arg +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The service was not initialized. + value: ${../../status/if/incorrect-state:/name} + - description: | + The ${.:/params[1]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + The directive was called from within interrupt context. + value: ${../../status/if/called-from-isr:/name} +type: interface diff --git a/spec/rtems/intr/if/handler-remove.yml b/spec/rtems/intr/if/handler-remove.yml new file mode 100644 index 00000000..336fcef1 --- /dev/null +++ b/spec/rtems/intr/if/handler-remove.yml @@ -0,0 +1,69 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Removes the interrupt handler routine and argument from the interrupt vector. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${vector-number:/name} ${.:/params[0]/name} + - ${handler:/name} ${.:/params[1]/name} + - void *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_handler_remove +notes: null +params: +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the interrupt handler routine to remove. + dir: null + name: routine +- description: | + is the interrupt handler argument to remove. + dir: null + name: arg +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The service was not initialized. + value: ${../../status/if/incorrect-state:/name} + - description: | + The ${.:/params[1]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + The directive was called from within interrupt context. + value: ${../../status/if/called-from-isr:/name} + - description: | + There was no handler routine and argument pair installed specified by + ${.:/params[1]/name} and ${.:/params[2]/name}. + value: ${../../status/if/unsatisfied:/name} +type: interface diff --git a/spec/rtems/intr/if/handler.yml b/spec/rtems/intr/if/handler.yml new file mode 100644 index 00000000..44cb85f8 --- /dev/null +++ b/spec/rtems/intr/if/handler.yml @@ -0,0 +1,20 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Interrupt handler routines shall have this type. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: void ( *${.:/name} )( void * ) + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: typedef +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: rtems_interrupt_handler +notes: null +type: interface diff --git a/spec/rtems/intr/if/header-2.yml b/spec/rtems/intr/if/header-2.yml new file mode 100644 index 00000000..6ab4d7ab --- /dev/null +++ b/spec/rtems/intr/if/header-2.yml @@ -0,0 +1,16 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This header file defines the Interrupt Manager Extension API. +copyrights: +- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) +enabled-by: true +index-entries: [] +interface-type: header-file +links: +- role: interface-placement + uid: /if/domain +- role: interface-ingroup + uid: group +path: rtems/irq-extension.h +prefix: cpukit/include +type: interface diff --git a/spec/rtems/intr/if/header.yml b/spec/rtems/intr/if/header.yml index dd23f997..8663805a 100644 --- a/spec/rtems/intr/if/header.yml +++ b/spec/rtems/intr/if/header.yml @@ -1,5 +1,6 @@ SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause -brief: This header file defines the Interrupt Manager API. +brief: | + This header file defines the Interrupt Manager API. copyrights: - Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) enabled-by: true diff --git a/spec/rtems/intr/if/is-replace.yml b/spec/rtems/intr/if/is-replace.yml new file mode 100644 index 00000000..ce84fd6f --- /dev/null +++ b/spec/rtems/intr/if/is-replace.yml @@ -0,0 +1,31 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Checks if the interrupt handler replace option is set. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: | + ( ( ${.:/params[0]/name} ) & ${replace:/name} ) + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: macro +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup-hidden + uid: group +name: RTEMS_INTERRUPT_IS_REPLACE +notes: null +params: +- description: + is the interrupt handler option set to check. + dir: null + name: _options +return: + return: | + Returns true, if the interrupt handler replace option ${replace:/name} is + set, otherwise false. + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/is-shared.yml b/spec/rtems/intr/if/is-shared.yml new file mode 100644 index 00000000..94ed576e --- /dev/null +++ b/spec/rtems/intr/if/is-shared.yml @@ -0,0 +1,31 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Checks if the interrupt handler shared option is set. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: | + ( ( ${.:/params[0]/name} ) & ${shared:/name} ) + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: macro +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup-hidden + uid: group +name: RTEMS_INTERRUPT_IS_SHARED +notes: null +params: +- description: | + is the interrupt handler option set to check. + dir: null + name: _options +return: + return: | + Returns true, if the interrupt handler shared option ${shared:/name} is + set, otherwise false. + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/is-unique.yml b/spec/rtems/intr/if/is-unique.yml new file mode 100644 index 00000000..301d3507 --- /dev/null +++ b/spec/rtems/intr/if/is-unique.yml @@ -0,0 +1,31 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Checks if the interrupt handler unique option is set. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: | + ( ( ${.:/params[0]/name} ) & ${unique:/name} ) + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: macro +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup-hidden + uid: group +name: RTEMS_INTERRUPT_IS_UNIQUE +notes: null +params: +- description: | + is the interrupt handler option set to check. + dir: null + name: _options +return: + return: | + Returns true, if the interrupt handler unique option ${unique:/name} is + set, otherwise false. + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/isr-entry.yml b/spec/rtems/intr/if/isr-entry.yml index fa4c706a..1c084f87 100644 --- a/spec/rtems/intr/if/isr-entry.yml +++ b/spec/rtems/intr/if/isr-entry.yml @@ -1,7 +1,6 @@ SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause brief: | - Interrupt service routines installed by ${catch:/name} shall have this - function pointer type. + Interrupt service routines installed by ${catch:/name} shall have this type. copyrights: - Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) - Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) diff --git a/spec/rtems/intr/if/per-handler-routine.yml b/spec/rtems/intr/if/per-handler-routine.yml new file mode 100644 index 00000000..3204b769 --- /dev/null +++ b/spec/rtems/intr/if/per-handler-routine.yml @@ -0,0 +1,27 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Visitor routines invoked by ${handler-iterate:/name} shall have this type. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: | + void ( *${.:/name} )( + void *, + const char *, + ${../../option/if/option:/name}, + ${handler:/name}, + void * + ) + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: typedef +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: rtems_interrupt_per_handler_routine +notes: null +type: interface diff --git a/spec/rtems/intr/if/replace.yml b/spec/rtems/intr/if/replace.yml new file mode 100644 index 00000000..e9955ba3 --- /dev/null +++ b/spec/rtems/intr/if/replace.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This interrupt handler install option requests that the interrupt handler + replaces the first handler with the same argument. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: ( (${../../option/if/option:/name}) 0x00000002 ) + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: define +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: RTEMS_INTERRUPT_REPLACE +notes: null +type: interface diff --git a/spec/rtems/intr/if/server-action-prepend.yml b/spec/rtems/intr/if/server-action-prepend.yml new file mode 100644 index 00000000..156b4389 --- /dev/null +++ b/spec/rtems/intr/if/server-action-prepend.yml @@ -0,0 +1,70 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Prepends the interrupt server action to the list of actions of the interrupt + server entry. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${server-entry:/name} *${.:/params[0]/name} + - ${server-action:/name} *${.:/params[1]/name} + - ${handler:/name} ${.:/params[2]/name} + - void *${.:/params[3]/name} + return: void + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-isr +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/directive-no-preempt +- role: constraint + uid: ../constraint/server-entry-initialized +- role: constraint + uid: ../constraint/server-entry-not-while-action-prepend +- role: constraint + uid: ../constraint/server-entry-not-while-move +- role: constraint + uid: ../constraint/server-entry-not-while-submit +- role: constraint + uid: ../constraint/server-entry-not-while-pending +name: rtems_interrupt_server_action_prepend +notes: | + No error checking is performed by the directive. +params: +- description: | + is the interrupt server entry to prepend the interrupt server action. It + shall have been initialized via ${server-entry-initialize:/name}. + dir: inout + name: entry +- description: | + is the interrupt server action to initialize and prepend to the list of + actions of the entry. + dir: out + name: action +- description: | + is the interrupt handler routine to set in the action. + dir: null + name: routine +- description: | + is the interrupt handler argument to set in the action. + dir: null + name: arg +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/server-action.yml b/spec/rtems/intr/if/server-action.yml new file mode 100644 index 00000000..12a459b1 --- /dev/null +++ b/spec/rtems/intr/if/server-action.yml @@ -0,0 +1,46 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This structure represents an interrupt server action. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: +- default: + brief: | + This member is the reference to the next action or ${/c/if/null:/name}. + definition: struct rtems_interrupt_server_action *${.:name} + description: null + kind: member + name: next + variants: [] +- default: + brief: | + This member is the interrupt handler. + definition: ${handler:/name} ${.:name} + description: null + kind: member + name: handler + variants: [] +- default: + brief: | + This member is the interrupt handler argument. + definition: void *${.:name} + description: null + kind: member + name: arg + variants: [] +definition-kind: typedef-and-struct +description: null +enabled-by: true +index-entries: [] +interface-type: struct +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: rtems_interrupt_server_action +notes: | + This structure shall be treated as an opaque data type from the + ${/glossary/api:/term} point of view. Members shall not be accessed + directly. +type: interface diff --git a/spec/rtems/intr/if/server-config.yml b/spec/rtems/intr/if/server-config.yml new file mode 100644 index 00000000..5f44d2b0 --- /dev/null +++ b/spec/rtems/intr/if/server-config.yml @@ -0,0 +1,85 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This structure defines an interrupt server configuration. +copyrights: +- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: +- default: + brief: | + This member is the task name of the interrupt server. + definition: ${../../type/if/name:/name} ${.:name} + description: null + kind: member + name: name + variants: [] +- default: + brief: | + This member is the initial ${/glossary/priority-task:/term} of the + interrupt server. + definition: ${../../type/if/priority:/name} ${.:name} + description: null + kind: member + name: priority + variants: [] +- default: + brief: | + This member is the task storage area of the interrupt server. + definition: void *${.:name} + description: | + It shall be ${/c/if/null:/name} for interrupt servers created by + ${server-create:/name}. + kind: member + name: storage_area + variants: [] +- default: + brief: | + This member is the task storage size of the interrupt server. + definition: ${/c/if/size_t:/name} ${.:name} + description: | + For interrupt servers created by ${server-create:/name} this is the task + stack size. + kind: member + name: storage_size + variants: [] +- default: + brief: | + This member is the initial mode set of the interrupt server. + definition: ${../../mode/if/mode:/name} ${.:name} + description: null + kind: member + name: modes + variants: [] +- default: + brief: | + This member is the attribute set of the interrupt server. + definition: ${../../attr/if/attribute:/name} ${.:name} + description: null + kind: member + name: attributes + variants: [] +- default: + brief: | + This member is an optional handler to destroy the interrupt server + control handed over to ${server-create:/name}. + definition: void ( *${.:name} )( ${server-control:/name} * ) + description: | + The destroy handler is optional and may be ${/c/if/null:/name}. If the + destroy handler is present, it is called from within the context of the + interrupt server to be deleted, see also ${server-delete:/name}. + kind: member + name: destroy + variants: [] +definition-kind: typedef-only +description: null +enabled-by: true +index-entries: [] +interface-type: struct +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: rtems_interrupt_server_config +notes: | + See also ${server-create:/name}. +type: interface diff --git a/spec/rtems/intr/if/server-control.yml b/spec/rtems/intr/if/server-control.yml new file mode 100644 index 00000000..0489e843 --- /dev/null +++ b/spec/rtems/intr/if/server-control.yml @@ -0,0 +1,82 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This structure represents an interrupt server. +copyrights: +- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: +- default: null + variants: + - definition: + brief: | + This member is the ISR lock protecting the server control state. + definition: ${lock:/name} ${.:name} + description: null + kind: member + name: lock + enabled-by: defined(RTEMS_SMP) +- default: + brief: | + This member is the chain of pending interrupt entries. + definition: ${/score/chain/if/control:/name} ${.:name} + description: null + kind: member + name: entries + variants: [] +- default: + brief: | + This member is the identifier of the server task. + definition: ${../../type/if/id:/name} ${.:name} + description: null + kind: member + name: server + variants: [] +- default: + brief: | + This member is the error count. + definition: unsigned long ${.:name} + description: null + kind: member + name: errors + variants: [] +- default: + brief: | + This member is the server index. + definition: ${/c/if/uint32_t:/name} ${.:name} + description: null + kind: member + name: index + variants: [] +- default: + brief: | + This member is the node for the interrupt server registry. + definition: ${/score/chain/if/node:/name} ${.:name} + description: null + kind: member + name: node + variants: [] +- default: + brief: | + This member is the optional handler to destroy the interrupt server + control. + definition: void ( *${.:name} )( struct rtems_interrupt_server_control * ) + description: null + kind: member + name: destroy + variants: [] +definition-kind: typedef-and-struct +description: null +enabled-by: true +index-entries: [] +interface-type: struct +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: rtems_interrupt_server_control +notes: | + This structure shall be treated as an opaque data type from the + ${/glossary/api:/term} point of view. Members shall not be accessed + directly. The structure is initialized by ${server-create:/name} and + maintained by the interrupt server support. +type: interface diff --git a/spec/rtems/intr/if/server-create.yml b/spec/rtems/intr/if/server-create.yml new file mode 100644 index 00000000..162493bf --- /dev/null +++ b/spec/rtems/intr/if/server-create.yml @@ -0,0 +1,59 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Creates an interrupt server. +copyrights: +- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${server-control:/name} *${.:/params[0]/name} + - const ${server-config:/name} *${.:/params[1]/name} + - ${/c/if/uint32_t:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_server_create +notes: | + See also ${server-initialize:/name} and ${server-delete:/name}. +params: +- description: | + is the pointer to an ${server-control:/name} object. When the directive + call was successful, the ownership of the object was transferred from the + caller of the directive to the interrupt server management. + dir: out + name: control +- description: | + is the interrupt server configuration. + dir: null + name: config +- description: | + is the pointer to an ${/c/if/uint32_t:/name} object. When the directive + call was successful, the index of the created interrupt server will be + stored in this object. + dir: out + name: server_index +return: + return: | + The directive uses ${../../task/if/create:/name}. If this directive fails, + then its error status will be returned. + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} +type: interface diff --git a/spec/rtems/intr/if/server-default.yml b/spec/rtems/intr/if/server-default.yml new file mode 100644 index 00000000..3738b583 --- /dev/null +++ b/spec/rtems/intr/if/server-default.yml @@ -0,0 +1,20 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + The constant represents the index of the default interrupt server. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: '0' + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: define +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: RTEMS_INTERRUPT_SERVER_DEFAULT +notes: null +type: interface diff --git a/spec/rtems/intr/if/server-delete.yml b/spec/rtems/intr/if/server-delete.yml new file mode 100644 index 00000000..6a892107 --- /dev/null +++ b/spec/rtems/intr/if/server-delete.yml @@ -0,0 +1,51 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Deletes the interrupt server. +copyrights: +- Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: ../constraint/not-within-server +- role: constraint + uid: /constraint/request-response +name: rtems_interrupt_server_delete +notes: | + The interrupt server deletes itself, so after the return of the directive the + interrupt server may be still in the termination process depending on the + task priorities of the system. + + See also ${server-create:/name}. +params: +- description: | + is the index of the interrupt server to delete. + dir: null + name: server_index +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the server index specified + by ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-entry-destroy.yml b/spec/rtems/intr/if/server-entry-destroy.yml new file mode 100644 index 00000000..e4fa67cc --- /dev/null +++ b/spec/rtems/intr/if/server-entry-destroy.yml @@ -0,0 +1,42 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Destroys the interrupt server entry. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${server-entry:/name} *${.:/params[0]/name} + return: void + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: ../constraint/not-within-server +- role: constraint + uid: /constraint/request-response +- role: constraint + uid: ../constraint/server-entry-initialized +name: rtems_interrupt_server_entry_destroy +notes: | + No error checking is performed by the directive. +params: +- description: | + is the interrupt server entry to destroy. + dir: inout + name: entry +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/server-entry-initialize.yml b/spec/rtems/intr/if/server-entry-initialize.yml new file mode 100644 index 00000000..5e1b72d1 --- /dev/null +++ b/spec/rtems/intr/if/server-entry-initialize.yml @@ -0,0 +1,58 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Initializes the interrupt server entry. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + - ${server-entry:/name} *${.:/params[1]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_server_entry_initialize +notes: | + After initialization, the list of actions of the interrupt server entry is + empty. Actions may be prepended by ${server-action-prepend:/name}. + Interrupt server entries may be moved to another interrupt vector with + ${server-entry-move:/name}. Server entries may be submitted to get serviced + by the interrupt server with ${server-entry-submit:/name}. Server entries + may be destroyed by ${server-entry-destroy:/name}. +params: +- description: | + is the interrupt server index. The constant ${server-default:/name} may be + used to specify the default interrupt server. + dir: null + name: server_index +- description: | + is the interrupt server entry to initialize. + dir: null + name: entry +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-entry-move.yml b/spec/rtems/intr/if/server-entry-move.yml new file mode 100644 index 00000000..f9972da2 --- /dev/null +++ b/spec/rtems/intr/if/server-entry-move.yml @@ -0,0 +1,63 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Moves the interrupt server entry to the interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${server-entry:/name} *${.:/params[0]/name} + - ${/c/if/uint32_t:/name} ${.:/params[1]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +- role: constraint + uid: ../constraint/server-entry-initialized +- role: constraint + uid: ../constraint/server-entry-not-while-action-prepend +- role: constraint + uid: ../constraint/server-entry-not-while-move +- role: constraint + uid: ../constraint/server-entry-not-while-submit +- role: constraint + uid: ../constraint/server-entry-not-while-pending +name: rtems_interrupt_server_entry_move +notes: null +params: +- description: | + is the interrupt server entry to move. + dir: null + name: entry +- description: | + is the index of the destination interrupt server. The constant + ${server-default:/name} may be used to specify the default interrupt + server. + dir: null + name: server_index +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[1]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-entry-submit.yml b/spec/rtems/intr/if/server-entry-submit.yml new file mode 100644 index 00000000..88b61f1d --- /dev/null +++ b/spec/rtems/intr/if/server-entry-submit.yml @@ -0,0 +1,58 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Submits the interrupt server entry to be serviced by the interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${server-entry:/name} *${.:/params[0]/name} + return: void + variants: [] +description: | + The directive appends the entry to the pending entries of the interrupt + server. The interrupt server is notified that a new entry is pending. Once + the interrupt server is scheduled it services the actions of all pending + entries. +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-isr +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/unblock-may-preempt +- role: constraint + uid: ../constraint/server-entry-initialized +- role: constraint + uid: ../constraint/server-entry-not-while-action-prepend +- role: constraint + uid: ../constraint/server-entry-not-while-move +name: rtems_interrupt_server_entry_submit +notes: | + This directive may be used to do a two-step interrupt processing. The first + step is done from within interrupt context by a call to this directive. The + second step is then done from within the context of the interrupt server. + + No error checking is performed by the directive. + + A submitted entry may be destroyed by ${server-entry-destroy:/name}. +params: +- description: | + is the interrupt server entry to submit. + dir: null + name: entry +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/server-entry.yml b/spec/rtems/intr/if/server-entry.yml new file mode 100644 index 00000000..e9974195 --- /dev/null +++ b/spec/rtems/intr/if/server-entry.yml @@ -0,0 +1,57 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This structure represents an interrupt server entry. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: +- default: + brief: | + This member is the node for the interrupt entry processing. + definition: ${/score/chain/if/node:/name} ${.:name} + description: null + kind: member + name: node + variants: [] +- default: + brief: | + This member references the interrupt server used to process the entry. + definition: ${server-control:/name} *${.:name} + description: null + kind: member + name: server + variants: [] +- default: + brief: | + This member is the interrupt vector number. + definition: ${vector-number:/name} ${.:name} + description: null + kind: member + name: vector + variants: [] +- default: + brief: | + This member is the interrupt server actions list head. + definition: ${server-action:/name} *${.:name} + description: null + kind: member + name: actions + variants: [] +definition-kind: typedef-only +description: null +enabled-by: true +index-entries: [] +interface-type: struct +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: rtems_interrupt_server_entry +notes: | + This structure shall be treated as an opaque data type from the + ${/glossary/api:/term} point of view. Members shall not be accessed + directly. An entry is initialized by ${server-entry-initialize:/name} and + destroyed by ${server-entry-destroy:/name}. Interrupt server actions can be + prepended to the entry by ${server-action-prepend:/name}. The entry is + submitted to be serviced by ${server-entry-submit:/name}. +type: interface diff --git a/spec/rtems/intr/if/server-handler-install.yml b/spec/rtems/intr/if/server-handler-install.yml new file mode 100644 index 00000000..9085d97e --- /dev/null +++ b/spec/rtems/intr/if/server-handler-install.yml @@ -0,0 +1,106 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Installs the interrupt handler routine and argument at the interrupt vector + on the interrupt server. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + - ${vector-number:/name} ${.:/params[1]/name} + - const char *${.:/params[2]/name} + - ${../../option/if/option:/name} ${.:/params[3]/name} + - ${handler:/name} ${.:/params[4]/name} + - void *${.:/params[5]/name} + return: ${../../status/if/code:/name} + variants: [] +description: | + The handler routine specified by ${.:/params[4]/name} will be executed within + the context of the interrupt server task specified by ${.:/params[0]/name}. +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_server_handler_install +notes: | + See also ${handler-install:/name}. +params: +- description: | + is the interrupt server index. The constant ${server-default:/name} may be + used to specify the default interrupt server. + dir: null + name: server_index +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the descriptive information of the interrupt handler to install. + dir: null + name: info +- description: | + is the interrupt handler install option set. + dir: null + name: options +- description: | + is the interrupt handler routine to install. + dir: null + name: routine +- description: | + is the interrupt handler argument to install. + dir: null + name: arg +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + The directive was called from within interrupt context. + value: ${../../status/if/called-from-isr:/name} + - description: | + The ${.:/params[4]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[1]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + An option specified by ${.:/params[2]/name} was not applicable. + value: ${../../status/if/invalid-number:/name} + - description: | + The ${unique:/name} option was set in ${.:/params[2]/name} and the + interrupt vector was already occupied by a handler. + value: ${../../status/if/resource-in-use:/name} + - description: | + The ${shared:/name} option was set in ${.:/params[2]/name} and the + interrupt vector was already occupied by a unique handler. + value: ${../../status/if/resource-in-use:/name} + - description: | + The handler specified by ${.:/params[4]/name} was already installed for + the interrupt vector specified by ${.:/params[1]/name} with an argument + equal to the argument specified by ${.:/params[5]/name}. + value: ${../../status/if/too-many:/name} + - description: | + The ${replace:/name} option was set in ${.:/params[2]/name} and no + handler to replace was installed. + value: ${../../status/if/unsatisfied:/name} +type: interface diff --git a/spec/rtems/intr/if/server-handler-iterate.yml b/spec/rtems/intr/if/server-handler-iterate.yml new file mode 100644 index 00000000..b0922566 --- /dev/null +++ b/spec/rtems/intr/if/server-handler-iterate.yml @@ -0,0 +1,74 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Iterates over all interrupt handler installed at the interrupt vector and + interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + - ${vector-number:/name} ${.:/params[1]/name} + - ${per-handler-routine:/name} ${.:/params[2]/name} + - void *${.:/params[3]/name} + return: ${../../status/if/code:/name} + variants: [] +description: | + For each installed handler at the interrupt vector and interrupt server the + visitor function specified by ${.:/params[1]/name} will be called with the + argument specified by ${.:/params[2]/name} and the handler information, + options, routine and argument. +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_server_handler_iterate +notes: | + The directive is intended for system information and diagnostics. + + Never install or remove an interrupt handler within the visitor function. + This may result in a deadlock. +params: +- description: | + is the index of the interrupt server. + dir: null + name: server_index +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the visitor routine. + dir: null + name: routine +- description: | + is the visitor argument. + dir: null + name: arg +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[1]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-handler-remove.yml b/spec/rtems/intr/if/server-handler-remove.yml new file mode 100644 index 00000000..60396503 --- /dev/null +++ b/spec/rtems/intr/if/server-handler-remove.yml @@ -0,0 +1,73 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Removes the interrupt handler routine and argument from the interrupt vector + and the interrupt server. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + - ${vector-number:/name} ${.:/params[1]/name} + - ${handler:/name} ${.:/params[2]/name} + - void *${.:/params[3]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +- role: constraint + uid: /constraint/request-response +- role: constraint + uid: ../constraint/not-within-server +name: rtems_interrupt_server_handler_remove +notes: null +params: +- description: | + is the interrupt server index. The constant ${server-default:/name} may be + used to specify the default interrupt server. + dir: null + name: server_index +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the interrupt handler routine to remove. + dir: null + name: routine +- description: | + is the interrupt handler argument to remove. + dir: null + name: arg +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[1]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + There was no handler routine and argument pair installed specified by + ${.:/params[2]/name} and ${.:/params[3]/name}. + value: ${../../status/if/unsatisfied:/name} +type: interface diff --git a/spec/rtems/intr/if/server-initialize.yml b/spec/rtems/intr/if/server-initialize.yml new file mode 100644 index 00000000..755e737c --- /dev/null +++ b/spec/rtems/intr/if/server-initialize.yml @@ -0,0 +1,86 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Initializes the interrupt server tasks. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${../../type/if/priority:/name} ${.:/params[0]/name} + - ${/c/if/size_t:/name} ${.:/params[1]/name} + - ${../../mode/if/mode:/name} ${.:/params[2]/name} + - ${../../attr/if/attribute:/name} ${.:/params[3]/name} + - ${/c/if/uint32_t:/name} *${.:/params[4]/name} + return: ${../../status/if/code:/name} + variants: [] +description: | + The directive tries to create an interrupt server task for each online + processor in the system. The tasks will have the initial priority specified + by ${.:/params[0]/name}, the stack size specified by ${.:/params[1]/name}, + the initial mode set specified by ${.:/params[2]/name}, and the attribute set + specified by ${.:/params[3]/name}. The count of successfully created server + tasks will be returned in ${.:/params[4]/name} if the pointer is not equal to + ${/c/if/null:/name}. +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_server_initialize +notes: | + Interrupt handlers may be installed on an interrupt server with + ${server-handler-install:/name} and removed with + ${server-handler-remove:/name} 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. + + Interrupt servers may be deleted by ${server-delete:/name}. +params: +- description: | + is the initial ${/glossary/priority-task:/term} of the created interrupt + servers. + dir: null + name: priority +- description: | + is the task stack size of the created interrupt servers. + dir: null + name: stack_size +- description: | + is the initial mode set of the created interrupt servers. + dir: null + name: modes +- description: | + is the attribute set of the created interrupt servers. + dir: null + name: attributes +- description: | + is the pointer to an ${/c/if/uint32_t:/name} object or ${/c/if/null:/name}. + When the pointer is not equal to ${/c/if/null:/name}, the count of + successfully created interrupt servers is stored in this object regardless + of the return status. + dir: out + name: server_count +return: + return: | + The directive uses ${../../task/if/create:/name}. If this directive fails, + then its error status will be returned. + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The interrupt servers were already initialized. + value: ${../../status/if/incorrect-state:/name} +type: interface diff --git a/spec/rtems/intr/if/server-move.yml b/spec/rtems/intr/if/server-move.yml new file mode 100644 index 00000000..b4e8e7a1 --- /dev/null +++ b/spec/rtems/intr/if/server-move.yml @@ -0,0 +1,69 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Moves the interrupt handlers installed at the interrupt vector and the source + interrupt server to the destination interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + - ${vector-number:/name} ${.:/params[1]/name} + - ${/c/if/uint32_t:/name} ${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: ../constraint/not-within-server +- role: constraint + uid: /constraint/request-response +name: rtems_interrupt_server_move +notes: null +params: +- description: | + is the index of the source interrupt server. The constant + ${server-default:/name} may be used to specify the default interrupt + server. + dir: null + name: source_server_index +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the index of the destination interrupt server. The constant + ${server-default:/name} may be used to specify the default interrupt + server. + dir: null + name: destination_server_index +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[2]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[1]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-request-destroy.yml b/spec/rtems/intr/if/server-request-destroy.yml new file mode 100644 index 00000000..800d8e84 --- /dev/null +++ b/spec/rtems/intr/if/server-request-destroy.yml @@ -0,0 +1,43 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Destroys the interrupt server request. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: | + ${server-entry-destroy:/name}( &${.:/params[0]/name}->entry ); + params: + - ${server-request:/name} *${.:/params[0]/name} + return: void + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: ../constraint/not-within-server +- role: constraint + uid: /constraint/request-response +- role: constraint + uid: ../constraint/server-request-initialized +name: rtems_interrupt_server_request_destroy +notes: | + No error checking is performed by the directive. +params: +- description: | + is the interrupt server request to destroy. + dir: inout + name: request +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/server-request-initialize.yml b/spec/rtems/intr/if/server-request-initialize.yml new file mode 100644 index 00000000..5f8b937b --- /dev/null +++ b/spec/rtems/intr/if/server-request-initialize.yml @@ -0,0 +1,68 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Initializes the interrupt server request. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + - ${server-request:/name} *${.:/params[1]/name} + - ${handler:/name} ${.:/params[2]/name} + - void *${.:/params[3]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/object-allocator +name: rtems_interrupt_server_request_initialize +notes: | + An interrupt server requests consists of an interrupt server entry and + exactly one interrupt server action. The interrupt vector of the request may + be changed with ${server-request-set-vector:/name}. Interrupt server + requests may be submitted to get serviced by the interrupt server with + ${server-request-submit:/name}. Requests may be destroyed by + ${server-request-destroy:/name}. +params: +- description: | + is the interrupt server index. The constant ${server-default:/name} may be + used to specify the default interrupt server. + dir: null + name: server_index +- description: | + is the interrupt server request to initialize. + dir: out + name: request +- description: | + is the interrupt handler routine for the request action. + dir: null + name: routine +- description: | + is the interrupt handler argument for the request action. + dir: null + name: arg +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-request-set-vector.yml b/spec/rtems/intr/if/server-request-set-vector.yml new file mode 100644 index 00000000..c6c6465f --- /dev/null +++ b/spec/rtems/intr/if/server-request-set-vector.yml @@ -0,0 +1,62 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Sets the interrupt vector in the interrupt server request. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: | + ${.:/params[0]/name}->entry.vector = vector; + params: + - ${server-request:/name} *${.:/params[0]/name} + - ${vector-number:/name} ${.:/params[1]/name} + return: void + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-isr +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/directive-no-preempt +- role: constraint + uid: ../constraint/server-request-initialized +- role: constraint + uid: ../constraint/server-request-not-while-set-vector +- role: constraint + uid: ../constraint/server-request-not-while-submit +- role: constraint + uid: ../constraint/server-entry-not-while-pending +name: rtems_interrupt_server_request_set_vector +notes: | + 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 ${server-request-submit:/name} will disable the interrupt vector of + the request. After processing of the request by the interrupt server the + interrupt vector will be enabled again. +params: +- description: | + is the interrupt server request to change. + dir: inout + name: request +- description: | + is the interrupt vector number to be used by the request. + dir: null + name: vector +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/server-request-submit.yml b/spec/rtems/intr/if/server-request-submit.yml new file mode 100644 index 00000000..aa526f0c --- /dev/null +++ b/spec/rtems/intr/if/server-request-submit.yml @@ -0,0 +1,57 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Submits the interrupt server request to be serviced by the interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: | + ${server-entry-submit:/name}( &${.:/params[0]/name}->entry ); + params: + - ${server-request:/name} *${.:/params[0]/name} + return: void + variants: [] +description: | + The directive appends the interrupt server entry of the request to the + pending entries of the interrupt server. The interrupt server is notified + that a new entry is pending. Once the interrupt server is scheduled it + services the actions of all pending entries. +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-isr +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/unblock-may-preempt +- role: constraint + uid: ../constraint/server-request-initialized +- role: constraint + uid: ../constraint/server-request-not-while-set-vector +name: rtems_interrupt_server_request_submit +notes: | + This directive may be used to do a two-step interrupt processing. The first + step is done from within interrupt context by a call to this directive. The + second step is then done from within the context of the interrupt server. + + No error checking is performed by the directive. + + A submitted request may be destroyed by ${server-request-destroy:/name}. +params: +- description: | + is the interrupt server request to submit. + dir: inout + name: request +return: + return: null + return-values: [] +type: interface diff --git a/spec/rtems/intr/if/server-request.yml b/spec/rtems/intr/if/server-request.yml new file mode 100644 index 00000000..a6f8bea4 --- /dev/null +++ b/spec/rtems/intr/if/server-request.yml @@ -0,0 +1,41 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This structure represents an interrupt server request. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: +- default: + brief: | + This member is the interrupt server entry. + definition: ${server-entry:/name} ${.:name} + description: null + kind: member + name: entry + variants: [] +- default: + brief: | + This member is the interrupt server action. + definition: ${server-action:/name} ${.:name} + description: null + kind: member + name: action + variants: [] +definition-kind: typedef-only +description: null +enabled-by: true +index-entries: [] +interface-type: struct +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: rtems_interrupt_server_request +notes: | + This structure shall be treated as an opaque data type from the + ${/glossary/api:/term} point of view. Members shall not be accessed + directly. A request is initialized by ${server-request-initialize:/name} and + destroyed by ${server-request-destroy:/name}. The interrupt vector of the + request can be set by ${server-request-set-vector:/name}. The request is + submitted to be serviced by ${server-request-submit:/name}. +type: interface diff --git a/spec/rtems/intr/if/server-resume.yml b/spec/rtems/intr/if/server-resume.yml new file mode 100644 index 00000000..f7357dc8 --- /dev/null +++ b/spec/rtems/intr/if/server-resume.yml @@ -0,0 +1,49 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Resumes the interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: ../constraint/not-within-server +- role: constraint + uid: /constraint/request-response +name: rtems_interrupt_server_resume +notes: | + Interrupt server may be suspended by ${server-suspend:/name}. +params: +- description: | + is the index of the interrupt server to resume. The constant + ${server-default:/name} may be used to specify the default interrupt + server. + dir: null + name: server_index +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-set-affinity.yml b/spec/rtems/intr/if/server-set-affinity.yml new file mode 100644 index 00000000..e9e3da7b --- /dev/null +++ b/spec/rtems/intr/if/server-set-affinity.yml @@ -0,0 +1,79 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Sets the processor affinity of the interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + - ${/c/if/size_t:/name} ${.:/params[1]/name} + - const ${/c/if/cpu_set_t:/name} *${.:/params[2]/name} + - ${../../type/if/priority:/name} ${.:/params[3]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-isr +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/affinity-may-preempt +- role: constraint + uid: /constraint/priority-may-preempt +name: rtems_interrupt_server_set_affinity +notes: | + The scheduler is set determined by the highest numbered processor in the + affinity set specified by ${.:/params[2]/name}. + + This operation is only reliable in case the interrupt server was suspended + via ${server-suspend:/name}. +params: +- description: | + is the interrupt server index. The constant ${server-default:/name} may be + used to specify the default interrupt server. + dir: null + name: server_index +- description: | + is the size of the processor set referenced by ${.:/params[2]/name} in + bytes. + dir: null + name: affinity_size +- description: | + is the pointer to a ${/c/if/cpu_set_t:/name} object. The processor set + defines the new processor affinity set of the interrupt server. A set bit + in the processor set means that the corresponding processor shall be in the + processor affinity set of the task, otherwise the bit shall be cleared. + dir: null + name: affinity +- description: | + is the new ${/glossary/priority-real:/term} for the interrupt server. + dir: null + name: priority +return: + return: | + The directive uses ${../../scheduler/if/ident-by-processor-set:/name}, + ${../../task/if/set-scheduler:/name}, and + ${../../task/if/set-affinity:/name}. If one of these directive fails, then + its error status will be returned. + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/server-suspend.yml b/spec/rtems/intr/if/server-suspend.yml new file mode 100644 index 00000000..68b43add --- /dev/null +++ b/spec/rtems/intr/if/server-suspend.yml @@ -0,0 +1,49 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Suspends the interrupt server. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${/c/if/uint32_t:/name} ${.:/params[0]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: ../constraint/not-within-server +- role: constraint + uid: /constraint/request-response +name: rtems_interrupt_server_suspend +notes: | + Interrupt server may be resumed by ${server-resume:/name}. +params: +- description: | + is the index of the interrupt server to suspend. The constant + ${server-default:/name} may be used to specify the default interrupt + server. + dir: null + name: server_index +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + There was no interrupt server associated with the index specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} +type: interface diff --git a/spec/rtems/intr/if/set-affinity.yml b/spec/rtems/intr/if/set-affinity.yml new file mode 100644 index 00000000..5a63a12a --- /dev/null +++ b/spec/rtems/intr/if/set-affinity.yml @@ -0,0 +1,76 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + Sets the processor affinity set of the interrupt vector. +copyrights: +- Copyright (C) 2017, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: + attributes: null + body: null + params: + - ${vector-number:/name} ${.:/params[0]/name} + - ${/c/if/size_t:/name} ${.:/params[1]/name} + - const ${/c/if/cpu_set_t:/name} *${.:/params[2]/name} + return: ${../../status/if/code:/name} + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: function +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +- role: constraint + uid: /constraint/directive-ctx-isr +- role: constraint + uid: /constraint/directive-ctx-devinit +- role: constraint + uid: /constraint/directive-ctx-task +- role: constraint + uid: /constraint/directive-no-preempt +name: rtems_interrupt_set_affinity +notes: | + The ${get-attributes:/name} directive may be used to check if the processor + affinity of an interrupt vector can be set. +params: +- description: | + is the interrupt vector number. + dir: null + name: vector +- description: | + is the size of the processor set referenced by ${.:/params[2]/name} in + bytes. + dir: null + name: affinity_size +- description: | + is the pointer to a ${/c/if/cpu_set_t:/name} object. The processor set + defines the new processor affinity set of the interrupt vector. A set bit + in the processor set means that the corresponding processor shall be in the + processor affinity set of the interrupt vector, otherwise the bit shall be + cleared. + dir: null + name: affinity +return: + return: null + return-values: + - description: | + The requested operation was successful. + value: ${../../status/if/successful:/name} + - description: | + The ${.:/params[2]/name} parameter was ${/c/if/null:/name}. + value: ${../../status/if/invalid-address:/name} + - description: | + There was no interrupt vector associated with the number specified by + ${.:/params[0]/name}. + value: ${../../status/if/invalid-id:/name} + - description: | + The referenced processor set was not a valid new processor affinity set + for the interrupt vector. + value: ${../../status/if/invalid-number:/name} + - description: | + The request to set the processor affinity of the interrupt vector has not + been satisfied. + value: ${../../status/if/unsatisfied:/name} +type: interface diff --git a/spec/rtems/intr/if/shared.yml b/spec/rtems/intr/if/shared.yml new file mode 100644 index 00000000..a7568775 --- /dev/null +++ b/spec/rtems/intr/if/shared.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This interrupt handler install option allows that the interrupt handler may + share the interrupt vector with other handler. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: ( (${../../option/if/option:/name}) 0x00000000 ) + variants: [] +description: null +enabled-by: true +index-entries: [] +interface-type: define +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: RTEMS_INTERRUPT_SHARED +notes: null +type: interface diff --git a/spec/rtems/intr/if/unique.yml b/spec/rtems/intr/if/unique.yml new file mode 100644 index 00000000..a1cb3895 --- /dev/null +++ b/spec/rtems/intr/if/unique.yml @@ -0,0 +1,22 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +brief: | + This interrupt handler install option ensures that the interrupt handler is + unique. +copyrights: +- Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de) +definition: + default: ( (${../../option/if/option:/name}) 0x00000001 ) + variants: [] +description: | + This option prevents other handler from using the same interrupt vector. +enabled-by: true +index-entries: [] +interface-type: define +links: +- role: interface-placement + uid: header-2 +- role: interface-ingroup + uid: group +name: RTEMS_INTERRUPT_UNIQUE +notes: null +type: interface |