summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-06-10 18:01:15 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-12 14:53:01 +0200
commita615014cfb188ef151ba4e11bcc808f4d6d2aefd (patch)
treed7f1de0f1c9600b794edf00882e9cd8a03d13ffb
parentspecview.py: Do not print N/A states (diff)
downloadrtems-central-a615014cfb188ef151ba4e11bcc808f4d6d2aefd.tar.bz2
spec: Add interrupt manager extension
-rw-r--r--spec/constraint/request-response.yml12
-rw-r--r--spec/rtems/intr/constraint/not-within-server.yml13
-rw-r--r--spec/rtems/intr/constraint/server-entry-initialized.yml13
-rw-r--r--spec/rtems/intr/constraint/server-entry-not-while-action-prepend.yml13
-rw-r--r--spec/rtems/intr/constraint/server-entry-not-while-move.yml13
-rw-r--r--spec/rtems/intr/constraint/server-entry-not-while-pending.yml13
-rw-r--r--spec/rtems/intr/constraint/server-entry-not-while-submit.yml13
-rw-r--r--spec/rtems/intr/constraint/server-request-initialized.yml12
-rw-r--r--spec/rtems/intr/constraint/server-request-not-while-set-vector.yml13
-rw-r--r--spec/rtems/intr/constraint/server-request-not-while-submit.yml13
-rw-r--r--spec/rtems/intr/if/get-affinity.yml70
-rw-r--r--spec/rtems/intr/if/group.yml72
-rw-r--r--spec/rtems/intr/if/handler-install.yml127
-rw-r--r--spec/rtems/intr/if/handler-iterate.yml73
-rw-r--r--spec/rtems/intr/if/handler-remove.yml69
-rw-r--r--spec/rtems/intr/if/handler.yml20
-rw-r--r--spec/rtems/intr/if/header-2.yml16
-rw-r--r--spec/rtems/intr/if/header.yml3
-rw-r--r--spec/rtems/intr/if/is-replace.yml31
-rw-r--r--spec/rtems/intr/if/is-shared.yml31
-rw-r--r--spec/rtems/intr/if/is-unique.yml31
-rw-r--r--spec/rtems/intr/if/isr-entry.yml3
-rw-r--r--spec/rtems/intr/if/per-handler-routine.yml27
-rw-r--r--spec/rtems/intr/if/replace.yml21
-rw-r--r--spec/rtems/intr/if/server-action-prepend.yml70
-rw-r--r--spec/rtems/intr/if/server-action.yml46
-rw-r--r--spec/rtems/intr/if/server-config.yml85
-rw-r--r--spec/rtems/intr/if/server-control.yml82
-rw-r--r--spec/rtems/intr/if/server-create.yml59
-rw-r--r--spec/rtems/intr/if/server-default.yml20
-rw-r--r--spec/rtems/intr/if/server-delete.yml51
-rw-r--r--spec/rtems/intr/if/server-entry-destroy.yml42
-rw-r--r--spec/rtems/intr/if/server-entry-initialize.yml58
-rw-r--r--spec/rtems/intr/if/server-entry-move.yml63
-rw-r--r--spec/rtems/intr/if/server-entry-submit.yml58
-rw-r--r--spec/rtems/intr/if/server-entry.yml57
-rw-r--r--spec/rtems/intr/if/server-handler-install.yml106
-rw-r--r--spec/rtems/intr/if/server-handler-iterate.yml74
-rw-r--r--spec/rtems/intr/if/server-handler-remove.yml73
-rw-r--r--spec/rtems/intr/if/server-initialize.yml86
-rw-r--r--spec/rtems/intr/if/server-move.yml69
-rw-r--r--spec/rtems/intr/if/server-request-destroy.yml43
-rw-r--r--spec/rtems/intr/if/server-request-initialize.yml68
-rw-r--r--spec/rtems/intr/if/server-request-set-vector.yml62
-rw-r--r--spec/rtems/intr/if/server-request-submit.yml57
-rw-r--r--spec/rtems/intr/if/server-request.yml41
-rw-r--r--spec/rtems/intr/if/server-resume.yml49
-rw-r--r--spec/rtems/intr/if/server-set-affinity.yml79
-rw-r--r--spec/rtems/intr/if/server-suspend.yml49
-rw-r--r--spec/rtems/intr/if/set-affinity.yml76
-rw-r--r--spec/rtems/intr/if/shared.yml21
-rw-r--r--spec/rtems/intr/if/unique.yml22
-rw-r--r--spec/score/chain/if/control.yml12
-rw-r--r--spec/score/chain/if/header.yml14
-rw-r--r--spec/score/chain/if/node.yml12
55 files changed, 2423 insertions, 3 deletions
diff --git a/spec/constraint/request-response.yml b/spec/constraint/request-response.yml
new file mode 100644
index 00000000..be8a8d87
--- /dev/null
+++ b/spec/constraint/request-response.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+type: constraint
diff --git a/spec/rtems/intr/constraint/not-within-server.yml b/spec/rtems/intr/constraint/not-within-server.yml
new file mode 100644
index 00000000..baefd3c6
--- /dev/null
+++ b/spec/rtems/intr/constraint/not-within-server.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive shall not be called from within the context of an interrupt
+ server. Calling the directive from within the context of an interrupt server
+ is undefined behaviour.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-entry-initialized.yml b/spec/rtems/intr/constraint/server-entry-initialized.yml
new file mode 100644
index 00000000..ae69f8d3
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-entry-initialized.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The interrupt server entry shall have been initialized by
+ ${../if/server-entry-initialize:/name} and further optional calls to
+ ${../if/server-action-prepend:/name}.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-entry-not-while-action-prepend.yml b/spec/rtems/intr/constraint/server-entry-not-while-action-prepend.yml
new file mode 100644
index 00000000..cc8c464a
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-entry-not-while-action-prepend.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive shall not be called concurrently with
+ ${../if/server-action-prepend:/name} with the same interrupt server entry.
+ Calling the directive under this condition is undefined behaviour.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-entry-not-while-move.yml b/spec/rtems/intr/constraint/server-entry-not-while-move.yml
new file mode 100644
index 00000000..1f827050
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-entry-not-while-move.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive shall not be called concurrently with
+ ${../if/server-entry-move:/name} with the same interrupt server entry.
+ Calling the directive under this condition is undefined behaviour.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-entry-not-while-pending.yml b/spec/rtems/intr/constraint/server-entry-not-while-pending.yml
new file mode 100644
index 00000000..685aaf76
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-entry-not-while-pending.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive shall not be called while the interrupt server entry is pending
+ on or serviced by its current interrupt server. Calling the directive under
+ these conditions is undefined behaviour.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-entry-not-while-submit.yml b/spec/rtems/intr/constraint/server-entry-not-while-submit.yml
new file mode 100644
index 00000000..89423790
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-entry-not-while-submit.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive shall not be called concurrently with
+ ${../if/server-entry-submit:/name} with the same interrupt server entry.
+ Calling the directive under this condition is undefined behaviour.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-request-initialized.yml b/spec/rtems/intr/constraint/server-request-initialized.yml
new file mode 100644
index 00000000..407eeecc
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-request-initialized.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The interrupt server request shall have been initialized by
+ ${../if/server-request-initialize:/name}.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-request-not-while-set-vector.yml b/spec/rtems/intr/constraint/server-request-not-while-set-vector.yml
new file mode 100644
index 00000000..94cd0953
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-request-not-while-set-vector.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive shall not be called concurrently with
+ ${../if/server-request-set-vector:/name} with the same interrupt server
+ request. Calling the directive under this condition is undefined behaviour.
+type: constraint
diff --git a/spec/rtems/intr/constraint/server-request-not-while-submit.yml b/spec/rtems/intr/constraint/server-request-not-while-submit.yml
new file mode 100644
index 00000000..24a8351b
--- /dev/null
+++ b/spec/rtems/intr/constraint/server-request-not-while-submit.yml
@@ -0,0 +1,13 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: requirement-refinement
+ uid: /req/usage-constraints
+rationale: null
+text: |
+ The directive shall not be called concurrently with
+ ${../if/server-request-submit:/name} with the same interrupt server request.
+ Calling the directive under this condition is undefined behaviour.
+type: constraint
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
diff --git a/spec/score/chain/if/control.yml b/spec/score/chain/if/control.yml
new file mode 100644
index 00000000..5af06a00
--- /dev/null
+++ b/spec/score/chain/if/control.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+index-entries: []
+interface-type: unspecified-type
+links:
+- role: interface-placement
+ uid: header
+name: Chain_Control
+references: {}
+type: interface
diff --git a/spec/score/chain/if/header.yml b/spec/score/chain/if/header.yml
new file mode 100644
index 00000000..44683d06
--- /dev/null
+++ b/spec/score/chain/if/header.yml
@@ -0,0 +1,14 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+brief: |
+ This header file defines data structures of the Chain Handler.
+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
+path: rtems/score/chain.h
+prefix: cpukit/include
+type: interface
diff --git a/spec/score/chain/if/node.yml b/spec/score/chain/if/node.yml
new file mode 100644
index 00000000..99c4c7f1
--- /dev/null
+++ b/spec/score/chain/if/node.yml
@@ -0,0 +1,12 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+index-entries: []
+interface-type: unspecified-type
+links:
+- role: interface-placement
+ uid: header
+name: Chain_Node
+references: {}
+type: interface