summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.txt60
-rw-r--r--c-user/cache/directives.rst665
-rw-r--r--c-user/cache/index.rst15
-rw-r--r--c-user/cache/introduction.rst101
-rw-r--r--c-user/clock/directives.rst19
-rw-r--r--c-user/fatal-error/directives.rst10
-rw-r--r--c-user/fatal-error/operations.rst5
-rw-r--r--c-user/glossary.rst47
-rw-r--r--c-user/index.rst2
-rw-r--r--c-user/interrupt/directives.rst2641
-rw-r--r--c-user/interrupt/introduction.rst145
-rw-r--r--c-user/kernel-character-io/directives.rst372
-rw-r--r--c-user/kernel-character-io/index.rst15
-rw-r--r--c-user/kernel-character-io/introduction.rst69
-rw-r--r--c-user/message/directives.rst23
-rw-r--r--c-user/rate-monotonic/directives.rst4
-rw-r--r--c-user/rate-monotonic/introduction.rst2
-rw-r--r--c-user/scheduling-concepts/background.rst5
-rw-r--r--c-user/scheduling-concepts/smp-schedulers.rst9
-rw-r--r--c-user/task/background.rst14
-rw-r--r--c-user/user-extensions/directives.rst10
-rw-r--r--eclipse/conf.py14
-rw-r--r--eclipse/glossary.rst64
-rw-r--r--eclipse/index.rst29
-rw-r--r--eclipse/overview.rst25
-rw-r--r--eclipse/rtems.rst339
-rw-r--r--eclipse/wscript7
-rw-r--r--eng/build-system.rst4
-rw-r--r--eng/coding-conventions.rst2
-rw-r--r--eng/req/items.rst163
-rw-r--r--images/eclipse/eclipse-autotools.pngbin66318 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-cdt.pngbin86223 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-gcc-cross.pngbin67695 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-help-installation.pngbin42717 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-install-new-software.pngbin59697 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-new-project.pngbin95195 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-project-import-existing-code.pngbin44706 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-project-makefile-existing-code.pngbin40911 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-build-project-building.pngbin18398 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-build-project.pngbin140603 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-built.pngbin132040 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-convert-autotools-dialog.pngbin34022 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-convert-autotools.pngbin115896 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-files.pngbin102488 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-at-add-opts.pngbin75057 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-at-prefix.pngbin112293 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-at-target.pngbin64485 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-cdt-build.pngbin79126 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-cdt-env-replace.pngbin73922 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path-add.pngbin13936 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path.pngbin39050 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-cdt-env-var.pngbin13431 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-cdt-env.pngbin66785 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-prop-cdt-settings.pngbin74035 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-properties-menu.pngbin129842 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-reconfigure-console.pngbin110448 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-rtems-git-reconfigure.pngbin129811 -> 0 bytes
-rw-r--r--images/eclipse/eclipse-sdk-details.pngbin54401 -> 0 bytes
-rw-r--r--user/bsps/aarch64/a53.rst8
-rw-r--r--user/bsps/aarch64/xilinx-versal.rst39
-rw-r--r--user/bsps/aarch64/xilinx-zynqmp.rst74
-rw-r--r--user/bsps/arm/imxrt.rst31
-rw-r--r--user/bsps/arm/raspberrypi.rst51
-rw-r--r--user/bsps/bsps-aarch64.rst1
-rw-r--r--user/hosts/posix.rst7
-rw-r--r--user/start/app.rst2
-rw-r--r--user/testing/configuration.rst84
-rw-r--r--user/testing/tftp.rst12
-rw-r--r--wscript1
69 files changed, 4475 insertions, 715 deletions
diff --git a/README.txt b/README.txt
index 03f57ed..828c9e7 100644
--- a/README.txt
+++ b/README.txt
@@ -1,16 +1,17 @@
RTEMS Project Documentation
===========================
-The documents are written in ReST and built using Sphinx. The build system will
-check the version of Sphinx and ensure you have a suitable version
-available. If your host does not provide a packaged version use PIP to fetch a
+The documents are written in ReST and built using Sphinx. The waf build system
+will check the version of Sphinx and ensure you have a suitable version
+available. If your host does not provide a packaged version, use PIP to fetch a
recent version. The Sphinx website provides details on doing this.
-ReST is the Re-Structured-Text format. It is a simple markup language that allows
-us to create quality documentaion. It is flexible and powerful however does not
-attempt to train it to create a specific format. You need to test any new way
-of presenting something on all output formats. What may look great in one
-format may not translate with the same clarity to another output format.
+ReST is the Re-Structured-Text format. It is a simple markup language that
+allows us to create quality documentation which can easily be converted to
+multiple different formats. This flexibility is convenient, but you still need
+to test any new way of presenting something on all output formats. What may look
+great in one format may not translate with the same clarity to another output
+format.
The RTEMS Documentation output formats are:
@@ -26,7 +27,7 @@ Images can be created from source using PlantUML and Ditaa.
A Sphinx checksheet is:
- http://docs.sphinxdocs.com/en/latest/cheatsheet.html#rst-cheat-sheet
+ https://sphinx-tutorial.readthedocs.io/cheatsheet/#rst-cheat-sheet
Production Quality Hosts
------------------------
@@ -45,7 +46,7 @@ NOTE: RedHat Enterprise Linux (RHEL) and Fedora should be the same as CentOS.
Images
------
-All images should be placed int he 'images' directory and referenced from the
+All images should be placed in the 'images' directory and referenced from the
ReST with a relative path. This lets us shared and control images.
We prefer being able to build images from source. This is not always possible
@@ -85,7 +86,7 @@ The home page contain the language options. The PlantUML online demo server
supports Ditaa so use that resource as an online tool. The Ditaa image source
extension is '.ditaa'.
-You do not need PlantUML or Ditaa install to build our documentation. The
+You do not need PlantUML or Ditaa installed to build our documentation. The
online resources can be used. Save the source and the generated PNG file in the
same directory under 'images'.
@@ -94,12 +95,12 @@ Host Setup
HTML builds directly with Sphinx, PDF requires a full Latex (texlive) install,
and building a Single HTML page requires the 'inliner' tool. The
-sphinxcontrib-bibtex extension is mandatory. PlantUML requres the Node.js
+sphinxcontrib-bibtex extension is mandatory. PlantUML requires the Node.js
package called 'node-plantuml' which installs the 'puml' command and Ditaa needs
the 'ditaa' command and package. Ditaa images are built using the 'puml'
command.
-Please add your host as you set it up.
+Please add your host to this section as you set it up.
The best results are produced with Python3 and a virtual environment`. It can
create a specific python environment using `pip`.
@@ -107,8 +108,8 @@ create a specific python environment using `pip`.
Virtual Environment
~~~~~~~~~~~~~~~~~~~
-Create a directory to house the virtual environment, create the envrionment
-and the activate it. This example assumes Python3 and the `venv` module:
+Create a directory to house the virtual environment, create the environment,
+and then activate it. This example assumes Python3 and the `venv` module:
$ mkdir sphinx
$ python3 -m venv sphinx
@@ -120,7 +121,7 @@ Alternatively you can use the `virtualenv` command:
$ virtualenv sphinx
$ . ./sphinx/bin/activate
-The prompt will now change. You can install Sphinx with:
+Either way, the prompt will now change. You can install Sphinx with:
$ pip install sphinx
$ pip install sphinxcontrib-bibtex
@@ -286,6 +287,17 @@ PATH:
export PATH=/usr/local/texlive/2016/bin/i386-linux/:${PATH}
export PATH=${HOME}/.local/bin:${PATH}
+CentOS 8
+~~~~~~~~
+
+The steps for Centos 8 are similar to the steps for CentOS 7.
+There are just a couple differences.
+
+First, CentOS 8 uses Python 3.x as the default, so intalling the
+centos-release-scl and rh-python36 packages is unnecessary.
+Second, Centos 8 uses dnf as its package manager instead of yum, so
+packages such as npm should be installed using dnf instead.
+
Arch Linux
~~~~~~~~~~
@@ -321,11 +333,11 @@ packages. There is no common naming and no real way to figure what texlive
package is present in a host's packaging. It seems not all of texlive is
available.
-The RTEMS Documentation waf configure phase check for each texlive package used
+The RTEMS Documentation waf configure phase checks for each texlive package used
in the generated output and the styles. If you complete configure with the
--pdf option you should be able to build PDF documentation.
-The texlive package requirments come from the Latex styles we are using and
+The texlive package requirements come from the Latex styles we are using and
Sphinx.
An example of failures are:
@@ -450,7 +462,7 @@ existing documentation for an example and if unsure ask.
2. Do not insert tab characters, use spaces, no trailing white space.
-3. Pasted text such as console output can exceed 80 columns however it is
+3. Pasted text such as console output can exceed 80 columns; however, it is
preferred even this text is wrapped at 80 columns. Long lines in code block
text causes issues with the PDF output.
@@ -464,7 +476,7 @@ existing documentation for an example and if unsure ask.
5 ^^^^^^ Sub-sub-sub-section
6 ~~~~~~ Sub-sub-sub-sub-section
-5. For literal output, such as shell commands and code do not use '::'
+5. For literal output such as shell commands and code, do not use '::'
at the trailing edge of the previous paragraph as it generates
warnings as the autodetect fails to find a suitable format. Use the
'.. code-block::' with a suitable lexical label. The lexers are:
@@ -511,8 +523,8 @@ existing documentation for an example and if unsure ask.
:align: center
:alt: This is the alt text for some output types.
-8. Callouts can be implemented manually using a literal block which can use
- '::' or a code block and topic block is used for the items. For
+8. Callouts can be implemented manually using a literal block ('::')
+ or a code block. Either way, a topic block is used for the items. For
example:
.. code-block: c
@@ -535,9 +547,9 @@ existing documentation for an example and if unsure ask.
4. Exit with an exit code of 0. This value can be checked by the
caller of this program.
- Note, the topic items are manually numbered, which makes it easier to see
+ Note the topic items are manually numbered, which makes it easier to see
which item matches the text. Use <> for the number and align at a position
- that works and makes the number as visible as possible. Use hanging indents
+ that makes the number as visible as possible. Use hanging indents
if an items extends past a single line.
9. Use the RTEMS domain references for URLs and mailing lists. For example to
diff --git a/c-user/cache/directives.rst b/c-user/cache/directives.rst
new file mode 100644
index 0000000..98349db
--- /dev/null
+++ b/c-user/cache/directives.rst
@@ -0,0 +1,665 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2016 Pavel Pisa
+.. Copyright (C) 2014, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2000, 2008 On-Line Applications Research Corporation (OAR)
+
+.. This file is part of the RTEMS quality process and was automatically
+.. generated. If you find something that needs to be fixed or
+.. worded better please post a report or patch to an RTEMS mailing list
+.. or raise a bug report:
+..
+.. https://www.rtems.org/bugs.html
+..
+.. For information on updating and regenerating please refer to the How-To
+.. section in the Software Requirements Engineering chapter of the
+.. RTEMS Software Engineering manual. The manual is provided as a part of
+.. a release. For development sources please refer to the online
+.. documentation at:
+..
+.. https://docs.rtems.org
+
+.. _CacheManagerDirectives:
+
+Directives
+==========
+
+This section details the directives of the Cache Manager. A subsection is
+dedicated to each of this manager's directives and lists the calling sequence,
+parameters, description, return values, and notes of the directive.
+
+.. Generated from spec:/rtems/cache/if/flush-multiple-data-lines
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_flush_multiple_data_lines()
+
+.. _InterfaceRtemsCacheFlushMultipleDataLines:
+
+rtems_cache_flush_multiple_data_lines()
+---------------------------------------
+
+Flushes the data cache lines covering the memory area.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_flush_multiple_data_lines( const void *begin, size_t size );
+
+.. rubric:: PARAMETERS:
+
+``begin``
+ This parameter is the begin address of the memory area to flush.
+
+``size``
+ This parameter is the size in bytes of the memory area to flush.
+
+.. rubric:: DESCRIPTION:
+
+Dirty data cache lines covering the area are transfered to memory. Depending
+on the cache implementation this may mark the lines as invalid.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/invalidate-multiple-data-lines
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_invalidate_multiple_data_lines()
+
+.. _InterfaceRtemsCacheInvalidateMultipleDataLines:
+
+rtems_cache_invalidate_multiple_data_lines()
+--------------------------------------------
+
+Invalidates the data cache lines covering the memory area.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_invalidate_multiple_data_lines(
+ const void *begin,
+ size_t size
+ );
+
+.. rubric:: PARAMETERS:
+
+``begin``
+ This parameter is the begin address of the memory area to invalidate.
+
+``size``
+ This parameter is the size in bytes of the memory area to invalidate.
+
+.. rubric:: DESCRIPTION:
+
+The cache lines covering the area are marked as invalid. A later read access
+in the area will load the data from memory.
+
+.. rubric:: NOTES:
+
+In case the area is not aligned on cache line boundaries, then this operation
+may destroy unrelated data.
+
+On some systems, the cache lines may be flushed before they are invalidated.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/invalidate-multiple-instruction-lines
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_invalidate_multiple_instruction_lines()
+
+.. _InterfaceRtemsCacheInvalidateMultipleInstructionLines:
+
+rtems_cache_invalidate_multiple_instruction_lines()
+---------------------------------------------------
+
+Invalidates the instruction cache lines covering the memory area.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_invalidate_multiple_instruction_lines(
+ const void *begin,
+ size_t size
+ );
+
+.. rubric:: PARAMETERS:
+
+``begin``
+ This parameter is the begin address of the memory area to invalidate.
+
+``size``
+ This parameter is the size in bytes of the memory area to invalidate.
+
+.. rubric:: DESCRIPTION:
+
+The cache lines covering the area are marked as invalid. A later instruction
+fetch from the area will result in a load from memory.
+
+.. rubric:: NOTES:
+
+In SMP configurations, on processors without instruction cache snooping, this
+operation will invalidate the instruction cache lines on all processors.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/instruction-sync-after-code-change
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_instruction_sync_after_code_change()
+
+.. _InterfaceRtemsCacheInstructionSyncAfterCodeChange:
+
+rtems_cache_instruction_sync_after_code_change()
+------------------------------------------------
+
+Ensures necessary synchronization required after code changes.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_instruction_sync_after_code_change(
+ const void *begin,
+ size_t size
+ );
+
+.. rubric:: PARAMETERS:
+
+``begin``
+ This parameter is the begin address of the code area to synchronize.
+
+``size``
+ This parameter is the size in bytes of the code area to synchronize.
+
+.. rubric:: NOTES:
+
+When code is loaded or modified, then most systems require synchronization
+instructions to update the instruction caches so that the loaded or modified
+code is fetched. For example, systems with separate data and instruction
+caches or systems without instruction cache snooping. The directives should be
+used by run time loader for example.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/get-maximal-line-size
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_get_maximal_line_size()
+
+.. _InterfaceRtemsCacheGetMaximalLineSize:
+
+rtems_cache_get_maximal_line_size()
+-----------------------------------
+
+Gets the maximal cache line size in bytes of all caches (data, instruction, or
+unified).
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ size_t rtems_cache_get_maximal_line_size( void );
+
+.. rubric:: RETURN VALUES:
+
+``0``
+ There is no cache present.
+
+Returns the maximal cache line size in bytes of all caches (data, instruction,
+or unified).
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/get-data-line-size
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_get_data_line_size()
+
+.. _InterfaceRtemsCacheGetDataLineSize:
+
+rtems_cache_get_data_line_size()
+--------------------------------
+
+Gets the data cache line size in bytes.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ size_t rtems_cache_get_data_line_size( void );
+
+.. rubric:: RETURN VALUES:
+
+``0``
+ There is no data cache present.
+
+Returns the data cache line size in bytes. For multi-level caches this is the
+maximum of the cache line sizes of all levels.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/get-instruction-line-size
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_get_instruction_line_size()
+
+.. _InterfaceRtemsCacheGetInstructionLineSize:
+
+rtems_cache_get_instruction_line_size()
+---------------------------------------
+
+Gets the instruction cache line size in bytes.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ size_t rtems_cache_get_instruction_line_size( void );
+
+.. rubric:: RETURN VALUES:
+
+``0``
+ There is no instruction cache present.
+
+Returns the instruction cache line size in bytes. For multi-level caches this
+is the maximum of the cache line sizes of all levels.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/get-data-size
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_get_data_cache_size()
+
+.. _InterfaceRtemsCacheGetDataCacheSize:
+
+rtems_cache_get_data_cache_size()
+---------------------------------
+
+Gets the data cache size in bytes for the cache level.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ size_t rtems_cache_get_data_cache_size( uint32_t level );
+
+.. rubric:: PARAMETERS:
+
+``level``
+ This parameter is the requested data cache level. The cache level zero
+ specifies the entire data cache.
+
+.. rubric:: RETURN VALUES:
+
+``0``
+ There is no data cache present at the requested cache level.
+
+Returns the data cache size in bytes of the requested cache level.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/get-instruction-size
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_get_instruction_cache_size()
+
+.. _InterfaceRtemsCacheGetInstructionCacheSize:
+
+rtems_cache_get_instruction_cache_size()
+----------------------------------------
+
+Gets the instruction cache size in bytes for the cache level.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ size_t rtems_cache_get_instruction_cache_size( uint32_t level );
+
+.. rubric:: PARAMETERS:
+
+``level``
+ This parameter is the requested instruction cache level. The cache level
+ zero specifies the entire instruction cache.
+
+.. rubric:: RETURN VALUES:
+
+``0``
+ There is no instruction cache present at the requested cache level.
+
+Returns the instruction cache size in bytes of the requested cache level.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/flush-entire-data
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_flush_entire_data()
+
+.. _InterfaceRtemsCacheFlushEntireData:
+
+rtems_cache_flush_entire_data()
+-------------------------------
+
+Flushes the entire data cache.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_flush_entire_data( void );
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/invalidate-entire-data
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_invalidate_entire_data()
+
+.. _InterfaceRtemsCacheInvalidateEntireData:
+
+rtems_cache_invalidate_entire_data()
+------------------------------------
+
+Invalidates the entire data cache.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_invalidate_entire_data( void );
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/invalidate-entire-instruction
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_invalidate_entire_instruction()
+
+.. _InterfaceRtemsCacheInvalidateEntireInstruction:
+
+rtems_cache_invalidate_entire_instruction()
+-------------------------------------------
+
+Invalidates the entire instruction cache.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_invalidate_entire_instruction( void );
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/enable-data
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_enable_data()
+
+.. _InterfaceRtemsCacheEnableData:
+
+rtems_cache_enable_data()
+-------------------------
+
+Enables the data cache.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_enable_data( void );
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/disable-data
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_disable_data()
+
+.. _InterfaceRtemsCacheDisableData:
+
+rtems_cache_disable_data()
+--------------------------
+
+Disables the data cache.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_disable_data( void );
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/enable-instruction
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_enable_instruction()
+
+.. _InterfaceRtemsCacheEnableInstruction:
+
+rtems_cache_enable_instruction()
+--------------------------------
+
+Enables the instruction cache.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_enable_instruction( void );
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/disable-instruction
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_disable_instruction()
+
+.. _InterfaceRtemsCacheDisableInstruction:
+
+rtems_cache_disable_instruction()
+---------------------------------
+
+Disables the instruction cache.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_cache_disable_instruction( void );
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/cache/if/aligned-malloc
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_cache_aligned_malloc()
+
+.. _InterfaceRtemsCacheAlignedMalloc:
+
+rtems_cache_aligned_malloc()
+----------------------------
+
+Allocates memory from the C Program Heap which begins at a cache line boundary.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void *rtems_cache_aligned_malloc( size_t size );
+
+.. rubric:: PARAMETERS:
+
+``size``
+ This parameter is the size in bytes of the memory area to allocate.
+
+.. rubric:: RETURN VALUES:
+
+`NULL <https://en.cppreference.com/w/c/types/NULL>`_
+ There is not enough memory available to satisfy the allocation request.
+
+Returns the begin address of the allocated memory. The begin address is on a
+cache line boundary.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
diff --git a/c-user/cache/index.rst b/c-user/cache/index.rst
new file mode 100644
index 0000000..c8f7263
--- /dev/null
+++ b/c-user/cache/index.rst
@@ -0,0 +1,15 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+
+.. index:: cache
+
+.. _RTEMSAPIClassicCache:
+
+Cache Manager
+*************
+
+.. toctree::
+
+ introduction
+ directives
diff --git a/c-user/cache/introduction.rst b/c-user/cache/introduction.rst
new file mode 100644
index 0000000..6cae4b2
--- /dev/null
+++ b/c-user/cache/introduction.rst
@@ -0,0 +1,101 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2016 Pavel Pisa
+.. Copyright (C) 2014, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2000, 2008 On-Line Applications Research Corporation (OAR)
+
+.. This file is part of the RTEMS quality process and was automatically
+.. generated. If you find something that needs to be fixed or
+.. worded better please post a report or patch to an RTEMS mailing list
+.. or raise a bug report:
+..
+.. https://www.rtems.org/bugs.html
+..
+.. For information on updating and regenerating please refer to the How-To
+.. section in the Software Requirements Engineering chapter of the
+.. RTEMS Software Engineering manual. The manual is provided as a part of
+.. a release. For development sources please refer to the online
+.. documentation at:
+..
+.. https://docs.rtems.org
+
+.. Generated from spec:/rtems/cache/if/group
+
+.. _CacheManagerIntroduction:
+
+Introduction
+============
+
+.. The following list was generated from:
+.. spec:/rtems/cache/if/flush-multiple-data-lines
+.. spec:/rtems/cache/if/invalidate-multiple-data-lines
+.. spec:/rtems/cache/if/invalidate-multiple-instruction-lines
+.. spec:/rtems/cache/if/instruction-sync-after-code-change
+.. spec:/rtems/cache/if/get-maximal-line-size
+.. spec:/rtems/cache/if/get-data-line-size
+.. spec:/rtems/cache/if/get-instruction-line-size
+.. spec:/rtems/cache/if/get-data-size
+.. spec:/rtems/cache/if/get-instruction-size
+.. spec:/rtems/cache/if/flush-entire-data
+.. spec:/rtems/cache/if/invalidate-entire-data
+.. spec:/rtems/cache/if/invalidate-entire-instruction
+.. spec:/rtems/cache/if/enable-data
+.. spec:/rtems/cache/if/disable-data
+.. spec:/rtems/cache/if/enable-instruction
+.. spec:/rtems/cache/if/disable-instruction
+.. spec:/rtems/cache/if/aligned-malloc
+
+The Cache Manager provides functions to perform maintenance operations for data
+and instruction caches.
+
+The actual actions of the Cache Manager operations depend on the hardware and
+the implementation provided by the CPU architecture port or a board support
+package. Cache implementations tend to be highly hardware dependent. The
+directives provided by the Cache Manager are:
+
+* :ref:`InterfaceRtemsCacheFlushMultipleDataLines` - Flushes the data cache
+ lines covering the memory area.
+
+* :ref:`InterfaceRtemsCacheInvalidateMultipleDataLines` - Invalidates the data
+ cache lines covering the memory area.
+
+* :ref:`InterfaceRtemsCacheInvalidateMultipleInstructionLines` - Invalidates
+ the instruction cache lines covering the memory area.
+
+* :ref:`InterfaceRtemsCacheInstructionSyncAfterCodeChange` - Ensures necessary
+ synchronization required after code changes.
+
+* :ref:`InterfaceRtemsCacheGetMaximalLineSize` - Gets the maximal cache line
+ size in bytes of all caches (data, instruction, or unified).
+
+* :ref:`InterfaceRtemsCacheGetDataLineSize` - Gets the data cache line size in
+ bytes.
+
+* :ref:`InterfaceRtemsCacheGetInstructionLineSize` - Gets the instruction cache
+ line size in bytes.
+
+* :ref:`InterfaceRtemsCacheGetDataCacheSize` - Gets the data cache size in
+ bytes for the cache level.
+
+* :ref:`InterfaceRtemsCacheGetInstructionCacheSize` - Gets the instruction
+ cache size in bytes for the cache level.
+
+* :ref:`InterfaceRtemsCacheFlushEntireData` - Flushes the entire data cache.
+
+* :ref:`InterfaceRtemsCacheInvalidateEntireData` - Invalidates the entire data
+ cache.
+
+* :ref:`InterfaceRtemsCacheInvalidateEntireInstruction` - Invalidates the
+ entire instruction cache.
+
+* :ref:`InterfaceRtemsCacheEnableData` - Enables the data cache.
+
+* :ref:`InterfaceRtemsCacheDisableData` - Disables the data cache.
+
+* :ref:`InterfaceRtemsCacheEnableInstruction` - Enables the instruction cache.
+
+* :ref:`InterfaceRtemsCacheDisableInstruction` - Disables the instruction
+ cache.
+
+* :ref:`InterfaceRtemsCacheAlignedMalloc` - Allocates memory from the C Program
+ Heap which begins at a cache line boundary.
diff --git a/c-user/clock/directives.rst b/c-user/clock/directives.rst
index e0f858a..1a65abf 100644
--- a/c-user/clock/directives.rst
+++ b/c-user/clock/directives.rst
@@ -70,10 +70,15 @@ Sets the :term:`CLOCK_REALTIME` to the time of day.
The date, time, and ticks specified by ``time_of_day`` are all range-checked,
and an error is returned if any one is out of its valid range.
-RTEMS can represent time points of this clock in nanoseconds ranging from
-1988-01-01T00:00:00.000000000Z to 2514-05-31T01:53:03.999999999Z. The future
-uptime of the system shall be in this range, otherwise the system behaviour is
-undefined.
+RTEMS can represent time points of the :term:`CLOCK_REALTIME` clock in
+nanoseconds ranging from 1988-01-01T00:00:00.000000000Z to
+2514-05-31T01:53:03.999999999Z. The future uptime of the system shall be in
+this range, otherwise the system behaviour is undefined. Due to implementation
+constraints, the time of day set by the directive shall be before
+2100-01-01:00:00.000000000Z. The latest valid time of day accepted by the
+POSIX `clock_settime()
+<https://pubs.opengroup.org/onlinepubs/9699919799/functions/clock_settime.html>`_
+is 2400-01-01T00:00:00.999999999Z.
The specified time is based on the configured :term:`clock tick` rate, see the
:ref:`CONFIGURE_MICROSECONDS_PER_TICK` application configuration option.
@@ -102,6 +107,12 @@ The following constraints apply to this directive:
* The directive may unblock a task. This may cause the calling task to be
preempted.
+* The time of day set by the directive shall be 1988-01-01T00:00:00.000000000Z
+ or later.
+
+* The time of day set by the directive shall be before
+ 2100-01-01T00:00:00.000000000Z.
+
.. Generated from spec:/rtems/clock/if/get-tod
.. raw:: latex
diff --git a/c-user/fatal-error/directives.rst b/c-user/fatal-error/directives.rst
index 98ce209..6aa4b20 100644
--- a/c-user/fatal-error/directives.rst
+++ b/c-user/fatal-error/directives.rst
@@ -116,10 +116,10 @@ Prints the message and invokes the fatal error handler.
.. rubric:: DESCRIPTION:
-This directive prints a message via :c:func:`printk` specified by the ``fmt``
-parameter and optional parameters and then invokes the fatal error handler.
-The fatal source is set to :c:macro:`RTEMS_FATAL_SOURCE_PANIC`. The fatal code
-is set to the value of the ``fmt`` parameter value.
+This directive prints a message via :ref:`InterfacePrintk` specified by the
+``fmt`` parameter and optional parameters and then invokes the fatal error
+handler. The fatal source is set to :c:macro:`RTEMS_FATAL_SOURCE_PANIC`. The
+fatal code is set to the value of the ``fmt`` parameter value.
.. rubric:: CONSTRAINTS:
@@ -216,7 +216,7 @@ Prints the exception frame.
.. rubric:: DESCRIPTION:
The exception frame is printed in an architecture-dependent format using
-:c:func:`printk`.
+:ref:`InterfacePrintk`.
.. Generated from spec:/rtems/fatal/if/source-text
diff --git a/c-user/fatal-error/operations.rst b/c-user/fatal-error/operations.rst
index 77753d6..6d03a26 100644
--- a/c-user/fatal-error/operations.rst
+++ b/c-user/fatal-error/operations.rst
@@ -40,12 +40,11 @@ The fatal extensions are called with three parameters:
- the fatal source,
-- a legacy parameter which is always false, and
+- a legacy parameter which is always set to :c:macro:`false`, and
- an error code with a fatal source dependent content.
-Once all fatal extensions executed, the error information will be stored to
-:c:data:`_Internal_errors_What_happened` and the system state is set to
+Once all fatal extensions executed, the system state is set to
:c:macro:`SYSTEM_STATE_TERMINATED`.
The final step is to call the CPU port specific :c:func:`_CPU_Fatal_halt()`.
diff --git a/c-user/glossary.rst b/c-user/glossary.rst
index 99f7c60..9274cf3 100644
--- a/c-user/glossary.rst
+++ b/c-user/glossary.rst
@@ -334,7 +334,8 @@ Glossary
This term is an acronym for :term:`First In First Out`.
First In First Out
- A discipline for manipulating entries in a data structure.
+ A discipline for manipulating entries in a data structure. See also
+ :term:`Last In First Out`.
floating point coprocessor
A component used in computer systems to enhance performance in
@@ -393,6 +394,10 @@ Glossary
heterogeneous
A multiprocessor computer system composed of dissimilar processors.
+ higher priority
+ A :term:`task` ``H`` has a higher :term:`priority` than a task ``L``, if
+ task ``H`` is more important than task ``L``.
+
home scheduler
The home scheduler of a :term:`task` is a :term:`scheduler` which is an
:term:`eligible scheduler` and which is assigned to the task during its
@@ -460,6 +465,13 @@ Glossary
kernel
In this document, this term is used as a synonym for executive.
+ Last In First Out
+ A discipline for manipulating entries in a data structure. See also
+ :term:`First In First Out`.
+
+ LIFO
+ This term is an acronym for :term:`Last In First Out`.
+
list
A data structure which allows for dynamic addition and removal of
entries. It is not statically limited to a particular size.
@@ -486,6 +498,10 @@ Glossary
A multiprocessor configuration where shared memory is not used for
communication.
+ lower priority
+ A :term:`task` ``L`` has a lower :term:`priority` than a task ``H``, if
+ task ``L`` is less important than task ``H``.
+
major number
The index of a device driver in the Device Driver Table.
@@ -652,8 +668,22 @@ Glossary
priority
The priority is a mechanism used to represent the relative importance of an
- element in a set of items. RTEMS uses :term:`task priorities <task priority>` to determine
- which :term:`task` should execute.
+ element in a set of items.
+
+ For example, :term:`RTEMS` uses :term:`task priorities <task priority>` to determine which
+ :term:`task` should execute on a processor. In RTEMS, priorities are
+ represented by non-negative integers.
+
+ For the Classic :term:`API`, if a numerical priority value ``A`` is greater
+ than a numerical priority value ``B``, then ``A`` expresses a
+ :term:`lower priority` than ``B``. If a numerical priority value ``C`` is
+ less than a numerical priority value ``D``, then ``C`` expresses a
+ :term:`higher priority` than ``D``.
+
+ For the :term:`POSIX` API, if a numerical priority value ``R`` is less than
+ a numerical priority value ``S``, then ``R`` expresses a lower priority than
+ ``S``. If a numerical priority value ``T`` is greater than a numerical
+ priority value ``U``, then ``T`` expresses a higher priority than ``U``.
priority boosting
A simple approach to extend the priority inheritance protocol for
@@ -987,13 +1017,18 @@ Glossary
and resumes execution on another processor.
task priority
- A task priority of a :term:`task` determines its importance relative to
- other tasks. The scheduler use task priorities to determine which
- :term:`ready task` gets a processor allocated, see :term:`scheduled task`. The
+ A task :term:`priority` of a :term:`task` determines its importance
+ relative to other tasks.
+
+ The scheduler use task priorities to determine which :term:`ready task` gets
+ a processor allocated, see :term:`scheduled task`. The
:term:`eligible priorities <eligible priority>` of a task define the position of the task in a
:term:`wait queue` which uses the priority discipline. Each task has at
least the :term:`real priority`.
+ Task priorities are used in :term:`wait queues <wait queue>` which use the priority
+ discipline to determine the dequeueing order of tasks.
+
task processor affinity
The set of processors on which a task is allowed to execute.
diff --git a/c-user/index.rst b/c-user/index.rst
index 5cd87af..385ea95 100644
--- a/c-user/index.rst
+++ b/c-user/index.rst
@@ -44,6 +44,8 @@ RTEMS Classic API Guide (|version|).
region/index
dual-ported-memory/index
io/index
+ kernel-character-io/index
+ cache/index
fatal-error/index
board_support_packages
user-extensions/index
diff --git a/c-user/interrupt/directives.rst b/c-user/interrupt/directives.rst
index f3a944d..2d7dccf 100644
--- a/c-user/interrupt/directives.rst
+++ b/c-user/interrupt/directives.rst
@@ -1,6 +1,6 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
-.. Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
.. This file is part of the RTEMS quality process and was automatically
@@ -506,70 +506,6 @@ The following constraints apply to this directive:
* The directive will not cause the calling task to be preempted.
-.. Generated from spec:/rtems/intr/if/cause
-
-.. raw:: latex
-
- \clearpage
-
-.. index:: rtems_interrupt_cause()
-
-.. _InterfaceRtemsInterruptCause:
-
-rtems_interrupt_cause()
------------------------
-
-Causes the interrupt.
-
-.. rubric:: CALLING SEQUENCE:
-
-.. code-block:: c
-
- #define rtems_interrupt_cause( vector )
-
-.. rubric:: PARAMETERS:
-
-``vector``
- This parameter is the vector number of the interrupt to cause.
-
-.. rubric:: CONSTRAINTS:
-
-The following constraints apply to this directive:
-
-* The directive is not implemented.
-
-.. Generated from spec:/rtems/intr/if/clear
-
-.. raw:: latex
-
- \clearpage
-
-.. index:: rtems_interrupt_clear()
-
-.. _InterfaceRtemsInterruptClear:
-
-rtems_interrupt_clear()
------------------------
-
-Clears the interrupt.
-
-.. rubric:: CALLING SEQUENCE:
-
-.. code-block:: c
-
- #define rtems_interrupt_clear( vector )
-
-.. rubric:: PARAMETERS:
-
-``vector``
- This parameter is the vector number of the interrupt to clear.
-
-.. rubric:: CONSTRAINTS:
-
-The following constraints apply to this directive:
-
-* The directive is not implemented.
-
.. Generated from spec:/rtems/intr/if/lock-initialize
.. raw:: latex
@@ -1108,3 +1044,2578 @@ Defines an ISR lock object reference.
.. rubric:: NOTES:
Do not add a ";" after this macro.
+
+.. Generated from spec:/rtems/intr/if/entry-initializer
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: RTEMS_INTERRUPT_ENTRY_INITIALIZER()
+
+.. _InterfaceRTEMSINTERRUPTENTRYINITIALIZER:
+
+RTEMS_INTERRUPT_ENTRY_INITIALIZER()
+-----------------------------------
+
+Statically initializes an interrupt entry object.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ #define RTEMS_INTERRUPT_ENTRY_INITIALIZER( routine, arg, info )
+
+.. rubric:: PARAMETERS:
+
+``routine``
+ This parameter is the interrupt handler routine for the entry.
+
+``arg``
+ This parameter is the interrupt handler argument for the entry.
+
+``info``
+ This parameter is the descriptive information for the entry.
+
+.. rubric:: NOTES:
+
+Alternatively, :ref:`InterfaceRtemsInterruptEntryInitialize` may be used to
+dynamically initialize an interrupt entry.
+
+.. Generated from spec:/rtems/intr/if/entry-initialize
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_entry_initialize()
+
+.. _InterfaceRtemsInterruptEntryInitialize:
+
+rtems_interrupt_entry_initialize()
+----------------------------------
+
+Initializes the interrupt entry.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_interrupt_entry_initialize(
+ rtems_interrupt_entry *entry,
+ rtems_interrupt_handler routine,
+ void *arg,
+ const char *info
+ );
+
+.. rubric:: PARAMETERS:
+
+``entry``
+ This parameter is the interrupt entry to initialize.
+
+``routine``
+ This parameter is the interrupt handler routine for the entry.
+
+``arg``
+ This parameter is the interrupt handler argument for the entry.
+
+``info``
+ This parameter is the descriptive information for the entry.
+
+.. rubric:: NOTES:
+
+Alternatively, :ref:`InterfaceRTEMSINTERRUPTENTRYINITIALIZER` may be used to
+statically initialize an interrupt entry.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/entry-install
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_entry_install()
+
+.. _InterfaceRtemsInterruptEntryInstall:
+
+rtems_interrupt_entry_install()
+-------------------------------
+
+Installs the interrupt entry at the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_entry_install(
+ rtems_vector_number vector,
+ rtems_option options,
+ rtems_interrupt_entry *entry
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``options``
+ This parameter is the interrupt entry install option set.
+
+``entry``
+ This parameter is the interrupt entry to install.
+
+.. rubric:: DESCRIPTION:
+
+One of the following mutually exclusive options
+
+* :c:macro:`RTEMS_INTERRUPT_UNIQUE`, and
+
+* :c:macro:`RTEMS_INTERRUPT_SHARED`
+
+shall be set in the ``options`` parameter.
+
+The handler routine of the entry specified by ``entry`` will be called with the
+handler argument of the entry 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 :c:macro:`RTEMS_INTERRUPT_UNIQUE` is set, then it will be ensured
+that the handler will be the only one for the interrupt vector.
+
+If the option :c:macro:`RTEMS_INTERRUPT_SHARED` is set, then multiple handlers
+may be installed for the interrupt vector.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``entry`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INCORRECT_STATE`
+ The service was not initialized.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The handler routine of the entry was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_CALLED_FROM_ISR`
+ The directive was called from within interrupt context.
+
+:c:macro:`RTEMS_INVALID_NUMBER`
+ An option specified by ``options`` was not applicable.
+
+:c:macro:`RTEMS_RESOURCE_IN_USE`
+ The :c:macro:`RTEMS_INTERRUPT_UNIQUE` option was set in ``entry`` and the
+ interrupt vector was already occupied by a handler.
+
+:c:macro:`RTEMS_RESOURCE_IN_USE`
+ The :c:macro:`RTEMS_INTERRUPT_SHARED` option was set in ``entry`` and the
+ interrupt vector was already occupied by a unique handler.
+
+:c:macro:`RTEMS_TOO_MANY`
+ The handler routine of the entry specified by ``entry`` was already
+ installed for the interrupt vector specified by ``vector`` with an argument
+ equal to the handler argument of the entry.
+
+.. rubric:: NOTES:
+
+When the directive call was successful, the ownership of the interrupt entry
+has been transferred from the caller to the interrupt service. An installed
+interrupt entry may be removed from the interrupt service by calling
+:ref:`InterfaceRtemsInterruptEntryRemove`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+* The interrupt entry shall have been initialized by
+ :ref:`InterfaceRtemsInterruptEntryInitialize` or
+ :ref:`InterfaceRTEMSINTERRUPTENTRYINITIALIZER`.
+
+.. Generated from spec:/rtems/intr/if/entry-remove
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_entry_remove()
+
+.. _InterfaceRtemsInterruptEntryRemove:
+
+rtems_interrupt_entry_remove()
+------------------------------
+
+Removes the interrupt entry from the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_entry_remove(
+ rtems_vector_number vector,
+ rtems_interrupt_entry *entry
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``entry``
+ This parameter is the interrupt entry to remove.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INCORRECT_STATE`
+ The service was not initialized.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``entry`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_CALLED_FROM_ISR`
+ The directive was called from within interrupt context.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The entry specified by ``entry`` was not installed at the interrupt vector
+ specified by ``vector``.
+
+.. rubric:: NOTES:
+
+When the directive call was successful, the ownership of the interrupt entry
+has been transferred from the interrupt service to the caller.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+* The interrupt entry shall have been installed by
+ :ref:`InterfaceRtemsInterruptEntryInstall`.
+
+.. Generated from spec:/rtems/intr/if/handler-install
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_handler_install()
+
+.. _InterfaceRtemsInterruptHandlerInstall:
+
+rtems_interrupt_handler_install()
+---------------------------------
+
+Installs the interrupt handler routine and argument at the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_handler_install(
+ rtems_vector_number vector,
+ const char *info,
+ rtems_option options,
+ rtems_interrupt_handler routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``info``
+ This parameter is the descriptive information of the interrupt handler to
+ install.
+
+``options``
+ This parameter is the interrupt handler install option set.
+
+``routine``
+ This parameter is the interrupt handler routine to install.
+
+``arg``
+ This parameter is the interrupt handler argument to install.
+
+.. rubric:: DESCRIPTION:
+
+One of the following mutually exclusive options
+
+* :c:macro:`RTEMS_INTERRUPT_UNIQUE`,
+
+* :c:macro:`RTEMS_INTERRUPT_SHARED`, and
+
+* :c:macro:`RTEMS_INTERRUPT_REPLACE`
+
+shall be set in the ``options`` parameter.
+
+The handler routine will be called with the argument specified by ``arg`` 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 :c:macro:`RTEMS_INTERRUPT_UNIQUE` is set, then it will be ensured
+that the handler will be the only one for the interrupt vector.
+
+If the option :c:macro:`RTEMS_INTERRUPT_SHARED` is set, then multiple handler
+may be installed for the interrupt vector.
+
+If the option :c:macro:`RTEMS_INTERRUPT_REPLACE` is set, then the handler
+specified by ``routine`` 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 ``info``. It may be used for
+system debugging and diagnostic tools. The referenced string has to be
+persistent as long as the handler is installed.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INCORRECT_STATE`
+ The service was not initialized.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``routine`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_CALLED_FROM_ISR`
+ The directive was called from within interrupt context.
+
+:c:macro:`RTEMS_NO_MEMORY`
+ There was not enough memory available to allocate data structures to
+ install the handler.
+
+:c:macro:`RTEMS_RESOURCE_IN_USE`
+ The :c:macro:`RTEMS_INTERRUPT_UNIQUE` option was set in ``options`` and the
+ interrupt vector was already occupied by a handler.
+
+:c:macro:`RTEMS_RESOURCE_IN_USE`
+ The :c:macro:`RTEMS_INTERRUPT_SHARED` option was set in ``options`` and the
+ interrupt vector was already occupied by a unique handler.
+
+:c:macro:`RTEMS_TOO_MANY`
+ The handler specified by ``routine`` was already installed for the
+ interrupt vector specified by ``vector`` with an argument equal to the
+ argument specified by ``arg``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The :c:macro:`RTEMS_INTERRUPT_REPLACE` option was set in ``options`` and no
+ handler to replace was installed.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/handler-remove
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_handler_remove()
+
+.. _InterfaceRtemsInterruptHandlerRemove:
+
+rtems_interrupt_handler_remove()
+--------------------------------
+
+Removes the interrupt handler routine and argument from the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_handler_remove(
+ rtems_vector_number vector,
+ rtems_interrupt_handler routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``routine``
+ This parameter is the interrupt handler routine to remove.
+
+``arg``
+ This parameter is the interrupt handler argument to remove.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INCORRECT_STATE`
+ The service was not initialized.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``routine`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_CALLED_FROM_ISR`
+ The directive was called from within interrupt context.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ There was no handler routine and argument pair installed specified by
+ ``routine`` and ``arg``.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/vector-is-enabled
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_vector_is_enabled()
+
+.. _InterfaceRtemsInterruptVectorIsEnabled:
+
+rtems_interrupt_vector_is_enabled()
+-----------------------------------
+
+Checks if the interrupt vector is enabled.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_vector_is_enabled(
+ rtems_vector_number vector,
+ bool *enabled
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``enabled``
+ This parameter is the pointer to a ``bool`` object. When the directive
+ call is successful, the enabled status of the interrupt associated with the
+ interrupt vector specified by ``vector`` will be stored in this object.
+ When the interrupt was enabled for the processor executing the directive
+ call at some time point during the call, the object value will be set to
+ :c:macro:`true`, otherwise to :c:macro:`false`.
+
+.. rubric:: DESCRIPTION:
+
+The directive checks if the interrupt associated with the interrupt vector
+specified by ``vector`` was enabled for the processor executing the directive
+call at some time point during the call.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``enabled`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+.. rubric:: NOTES:
+
+Interrupt vectors may be enabled by :ref:`InterfaceRtemsInterruptVectorEnable`
+and disabled by :ref:`InterfaceRtemsInterruptVectorDisable`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/vector-enable
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_vector_enable()
+
+.. _InterfaceRtemsInterruptVectorEnable:
+
+rtems_interrupt_vector_enable()
+-------------------------------
+
+Enables the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_vector_enable( rtems_vector_number vector );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the number of the interrupt vector to enable.
+
+.. rubric:: DESCRIPTION:
+
+The directive enables the interrupt vector specified by ``vector``. This allows
+that interrupt service requests are issued to the target processors of the
+interrupt vector. Interrupt service requests for an interrupt vector may be
+raised by :ref:`InterfaceRtemsInterruptRaise`,
+:ref:`InterfaceRtemsInterruptRaiseOn`, external signals, or messages.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The request to enable the interrupt vector has not been satisfied.
+
+.. rubric:: NOTES:
+
+The :ref:`InterfaceRtemsInterruptGetAttributes` directive may be used to check
+if an interrupt vector can be enabled. Interrupt vectors may be disabled by
+:ref:`InterfaceRtemsInterruptVectorDisable`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/vector-disable
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_vector_disable()
+
+.. _InterfaceRtemsInterruptVectorDisable:
+
+rtems_interrupt_vector_disable()
+--------------------------------
+
+Disables the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_vector_disable( rtems_vector_number vector );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the number of the interrupt vector to disable.
+
+.. rubric:: DESCRIPTION:
+
+The directive disables the interrupt vector specified by ``vector``. This
+prevents that an interrupt service request is issued to the target processors
+of the interrupt vector.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The request to disable the interrupt vector has not been satisfied.
+
+.. rubric:: NOTES:
+
+The :ref:`InterfaceRtemsInterruptGetAttributes` directive may be used to check
+if an interrupt vector can be disabled. Interrupt vectors may be enabled by
+:ref:`InterfaceRtemsInterruptVectorEnable`. There may be targets on which some
+interrupt vectors cannot be disabled, for example a hardware watchdog interrupt
+or software generated interrupts.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/is-pending
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_is_pending()
+
+.. _InterfaceRtemsInterruptIsPending:
+
+rtems_interrupt_is_pending()
+----------------------------
+
+Checks if the interrupt is pending.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_is_pending(
+ rtems_vector_number vector,
+ bool *pending
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``pending``
+ This parameter is the pointer to a ``bool`` object. When the directive
+ call is successful, the pending status of the interrupt associated with the
+ interrupt vector specified by ``vector`` will be stored in this object.
+ When the interrupt was pending for the processor executing the directive
+ call at some time point during the call, the object value will be set to
+ :c:macro:`true`, otherwise to :c:macro:`false`.
+
+.. rubric:: DESCRIPTION:
+
+The directive checks if the interrupt associated with the interrupt vector
+specified by ``vector`` was pending for the processor executing the directive
+call at some time point during the call.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``pending`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The request to get the pending status has not been satisfied.
+
+.. rubric:: NOTES:
+
+Interrupts may be made pending by calling the
+:ref:`InterfaceRtemsInterruptRaise` or :ref:`InterfaceRtemsInterruptRaiseOn`
+directives or due to external signals or messages. The pending state may be
+cleared by :ref:`InterfaceRtemsInterruptClear`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/raise
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_raise()
+
+.. _InterfaceRtemsInterruptRaise:
+
+rtems_interrupt_raise()
+-----------------------
+
+Raises the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_raise( rtems_vector_number vector );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the number of the interrupt vector to raise.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The request to raise the interrupt vector has not been satisfied.
+
+.. rubric:: NOTES:
+
+The :ref:`InterfaceRtemsInterruptGetAttributes` directive may be used to check
+if an interrupt vector can be raised.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/raise-on
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_raise_on()
+
+.. _InterfaceRtemsInterruptRaiseOn:
+
+rtems_interrupt_raise_on()
+--------------------------
+
+Raises the interrupt vector on the processor.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_raise_on(
+ rtems_vector_number vector,
+ uint32_t cpu_index
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the number of the interrupt vector to raise.
+
+``cpu_index``
+ This parameter is the index of the target processor of the interrupt vector
+ to raise.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_NOT_CONFIGURED`
+ The processor specified by ``cpu_index`` was not configured to be used by
+ the application.
+
+:c:macro:`RTEMS_INCORRECT_STATE`
+ The processor specified by ``cpu_index`` was configured to be used by the
+ application, however, it was not online.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The request to raise the interrupt vector has not been satisfied.
+
+.. rubric:: NOTES:
+
+The :ref:`InterfaceRtemsInterruptGetAttributes` directive may be used to check
+if an interrupt vector can be raised on a processor.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/clear
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_clear()
+
+.. _InterfaceRtemsInterruptClear:
+
+rtems_interrupt_clear()
+-----------------------
+
+Clears the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_clear( rtems_vector_number vector );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the number of the interrupt vector to clear.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The request to raise the interrupt vector has not been satisfied.
+
+.. rubric:: NOTES:
+
+The :ref:`InterfaceRtemsInterruptGetAttributes` directive may be used to check
+if an interrupt vector can be cleared.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/get-affinity
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_get_affinity()
+
+.. _InterfaceRtemsInterruptGetAffinity:
+
+rtems_interrupt_get_affinity()
+------------------------------
+
+Gets the processor affinity set of the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_get_affinity(
+ rtems_vector_number vector,
+ size_t affinity_size,
+ cpu_set_t *affinity
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``affinity_size``
+ This parameter is the size of the processor set referenced by ``affinity``
+ in bytes.
+
+``affinity``
+ This parameter is the pointer to a :c:type:`cpu_set_t` 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.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``affinity`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_INVALID_SIZE`
+ The size specified by ``affinity_size`` of the processor set was too small
+ for the processor affinity set of the interrupt vector.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/set-affinity
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_set_affinity()
+
+.. _InterfaceRtemsInterruptSetAffinity:
+
+rtems_interrupt_set_affinity()
+------------------------------
+
+Sets the processor affinity set of the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_set_affinity(
+ rtems_vector_number vector,
+ size_t affinity_size,
+ const cpu_set_t *affinity
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``affinity_size``
+ This parameter is the size of the processor set referenced by ``affinity``
+ in bytes.
+
+``affinity``
+ This parameter is the pointer to a :c:type:`cpu_set_t` 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.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``affinity`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_INVALID_NUMBER`
+ The referenced processor set was not a valid new processor affinity set for
+ the interrupt vector.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The request to set the processor affinity of the interrupt vector has not
+ been satisfied.
+
+.. rubric:: NOTES:
+
+The :ref:`InterfaceRtemsInterruptGetAttributes` directive may be used to check
+if the processor affinity of an interrupt vector can be set.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/get-attributes
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_get_attributes()
+
+.. _InterfaceRtemsInterruptGetAttributes:
+
+rtems_interrupt_get_attributes()
+--------------------------------
+
+Gets the attributes of the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_get_attributes(
+ rtems_vector_number vector,
+ rtems_interrupt_attributes *attributes
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``attributes``
+ This parameter is the pointer to an :c:type:`rtems_interrupt_attributes`
+ object. When the directive call is successful, the attributes of the
+ interrupt vector will be stored in this object.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``attributes`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/handler-iterate
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_handler_iterate()
+
+.. _InterfaceRtemsInterruptHandlerIterate:
+
+rtems_interrupt_handler_iterate()
+---------------------------------
+
+Iterates over all interrupt handler installed at the interrupt vector.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_handler_iterate(
+ rtems_vector_number vector,
+ rtems_interrupt_per_handler_routine routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``routine``
+ This parameter is the visitor routine.
+
+``arg``
+ This parameter is the visitor argument.
+
+.. rubric:: DESCRIPTION:
+
+For each installed handler at the interrupt vector the visitor function
+specified by ``routine`` will be called with the argument specified by ``arg``
+and the handler information, options, routine and argument.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INCORRECT_STATE`
+ The service was not initialized.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``routine`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_CALLED_FROM_ISR`
+ The directive was called from within interrupt context.
+
+.. rubric:: 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.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-initialize
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_initialize()
+
+.. _InterfaceRtemsInterruptServerInitialize:
+
+rtems_interrupt_server_initialize()
+-----------------------------------
+
+Initializes the interrupt server tasks.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_initialize(
+ rtems_task_priority priority,
+ size_t stack_size,
+ rtems_mode modes,
+ rtems_attribute attributes,
+ uint32_t *server_count
+ );
+
+.. rubric:: PARAMETERS:
+
+``priority``
+ This parameter is the initial :term:`task priority` of the created
+ interrupt servers.
+
+``stack_size``
+ This parameter is the task stack size of the created interrupt servers.
+
+``modes``
+ This parameter is the initial mode set of the created interrupt servers.
+
+``attributes``
+ This parameter is the attribute set of the created interrupt servers.
+
+``server_count``
+ This parameter is the pointer to an `uint32_t
+ <https://en.cppreference.com/w/c/types/integer>`_ object or `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_. When the pointer is not
+ equal to `NULL <https://en.cppreference.com/w/c/types/NULL>`_, the count of
+ successfully created interrupt servers is stored in this object regardless
+ of the return status.
+
+.. rubric:: 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
+``priority``, the stack size specified by ``stack_size``, the initial mode set
+specified by ``modes``, and the attribute set specified by ``attributes``. The
+count of successfully created server tasks will be returned in ``server_count``
+if the pointer is not equal to `NULL
+<https://en.cppreference.com/w/c/types/NULL>`_.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INCORRECT_STATE`
+ The interrupt servers were already initialized.
+
+The directive uses :ref:`InterfaceRtemsTaskCreate`. If this directive fails,
+then its error status will be returned.
+
+.. rubric:: NOTES:
+
+Interrupt handlers may be installed on an interrupt server with
+:ref:`InterfaceRtemsInterruptServerHandlerInstall` and removed with
+:ref:`InterfaceRtemsInterruptServerHandlerRemove` 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 :ref:`InterfaceRtemsInterruptServerDelete`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-create
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_create()
+
+.. _InterfaceRtemsInterruptServerCreate:
+
+rtems_interrupt_server_create()
+-------------------------------
+
+Creates an interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_create(
+ rtems_interrupt_server_control *control,
+ const rtems_interrupt_server_config *config,
+ uint32_t *server_index
+ );
+
+.. rubric:: PARAMETERS:
+
+``control``
+ This parameter is the pointer to an
+ :c:type:`rtems_interrupt_server_control` 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.
+
+``config``
+ This parameter is the interrupt server configuration.
+
+``server_index``
+ This parameter is the pointer to an `uint32_t
+ <https://en.cppreference.com/w/c/types/integer>`_ object. When the
+ directive call was successful, the index of the created interrupt server
+ will be stored in this object.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+The directive uses :ref:`InterfaceRtemsTaskCreate`. If this directive fails,
+then its error status will be returned.
+
+.. rubric:: NOTES:
+
+See also :ref:`InterfaceRtemsInterruptServerInitialize` and
+:ref:`InterfaceRtemsInterruptServerDelete`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-handler-install
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_handler_install()
+
+.. _InterfaceRtemsInterruptServerHandlerInstall:
+
+rtems_interrupt_server_handler_install()
+----------------------------------------
+
+Installs the interrupt handler routine and argument at the interrupt vector on
+the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_handler_install(
+ uint32_t server_index,
+ rtems_vector_number vector,
+ const char *info,
+ rtems_option options,
+ rtems_interrupt_handler routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the interrupt server index. The constant
+ :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify the
+ default interrupt server.
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``info``
+ This parameter is the descriptive information of the interrupt handler to
+ install.
+
+``options``
+ This parameter is the interrupt handler install option set.
+
+``routine``
+ This parameter is the interrupt handler routine to install.
+
+``arg``
+ This parameter is the interrupt handler argument to install.
+
+.. rubric:: DESCRIPTION:
+
+The handler routine specified by ``routine`` will be executed within the
+context of the interrupt server task specified by ``server_index``.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+:c:macro:`RTEMS_CALLED_FROM_ISR`
+ The directive was called from within interrupt context.
+
+:c:macro:`RTEMS_INVALID_ADDRESS`
+ The ``routine`` parameter was `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_INVALID_NUMBER`
+ An option specified by ``info`` was not applicable.
+
+:c:macro:`RTEMS_RESOURCE_IN_USE`
+ The :c:macro:`RTEMS_INTERRUPT_UNIQUE` option was set in ``info`` and the
+ interrupt vector was already occupied by a handler.
+
+:c:macro:`RTEMS_RESOURCE_IN_USE`
+ The :c:macro:`RTEMS_INTERRUPT_SHARED` option was set in ``info`` and the
+ interrupt vector was already occupied by a unique handler.
+
+:c:macro:`RTEMS_TOO_MANY`
+ The handler specified by ``routine`` was already installed for the
+ interrupt vector specified by ``vector`` with an argument equal to the
+ argument specified by ``arg``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ The :c:macro:`RTEMS_INTERRUPT_REPLACE` option was set in ``info`` and no
+ handler to replace was installed.
+
+.. rubric:: NOTES:
+
+See also :ref:`InterfaceRtemsInterruptHandlerInstall`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-handler-remove
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_handler_remove()
+
+.. _InterfaceRtemsInterruptServerHandlerRemove:
+
+rtems_interrupt_server_handler_remove()
+---------------------------------------
+
+Removes the interrupt handler routine and argument from the interrupt vector
+and the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_handler_remove(
+ uint32_t server_index,
+ rtems_vector_number vector,
+ rtems_interrupt_handler routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the interrupt server index. The constant
+ :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify the
+ default interrupt server.
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``routine``
+ This parameter is the interrupt handler routine to remove.
+
+``arg``
+ This parameter is the interrupt handler argument to remove.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+:c:macro:`RTEMS_UNSATISFIED`
+ There was no handler routine and argument pair installed specified by
+ ``routine`` and ``arg``.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+* The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+
+* 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.
+
+.. Generated from spec:/rtems/intr/if/server-set-affinity
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_set_affinity()
+
+.. _InterfaceRtemsInterruptServerSetAffinity:
+
+rtems_interrupt_server_set_affinity()
+-------------------------------------
+
+Sets the processor affinity of the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_set_affinity(
+ uint32_t server_index,
+ size_t affinity_size,
+ const cpu_set_t *affinity,
+ rtems_task_priority priority
+ );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the interrupt server index. The constant
+ :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify the
+ default interrupt server.
+
+``affinity_size``
+ This parameter is the size of the processor set referenced by ``affinity``
+ in bytes.
+
+``affinity``
+ This parameter is the pointer to a :c:type:`cpu_set_t` 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.
+
+``priority``
+ This parameter is the new :term:`real priority` for the interrupt server.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+The directive uses :ref:`InterfaceRtemsSchedulerIdentByProcessorSet`,
+:ref:`InterfaceRtemsTaskSetScheduler`, and
+:ref:`InterfaceRtemsTaskSetAffinity`. If one of these directive fails, then
+its error status will be returned.
+
+.. rubric:: NOTES:
+
+The scheduler is set determined by the highest numbered processor in the
+affinity set specified by ``affinity``.
+
+This operation is only reliable in case the interrupt server was suspended via
+:ref:`InterfaceRtemsInterruptServerSuspend`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may change the processor affinity of a task. This may cause
+ the calling task to be preempted.
+
+* The directive may change the priority of a task. This may cause the calling
+ task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-delete
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_delete()
+
+.. _InterfaceRtemsInterruptServerDelete:
+
+rtems_interrupt_server_delete()
+-------------------------------
+
+Deletes the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_delete( uint32_t server_index );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the index of the interrupt server to delete.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the server index specified by
+ ``server_index``.
+
+.. rubric:: 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 :ref:`InterfaceRtemsInterruptServerCreate`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within task context.
+
+* 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.
+
+* The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+
+.. Generated from spec:/rtems/intr/if/server-suspend
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_suspend()
+
+.. _InterfaceRtemsInterruptServerSuspend:
+
+rtems_interrupt_server_suspend()
+--------------------------------
+
+Suspends the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_suspend( uint32_t server_index );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the index of the interrupt server to suspend. The
+ constant :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify
+ the default interrupt server.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+.. rubric:: NOTES:
+
+Interrupt server may be resumed by :ref:`InterfaceRtemsInterruptServerResume`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within task context.
+
+* 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.
+
+* The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+
+.. Generated from spec:/rtems/intr/if/server-resume
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_resume()
+
+.. _InterfaceRtemsInterruptServerResume:
+
+rtems_interrupt_server_resume()
+-------------------------------
+
+Resumes the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_resume( uint32_t server_index );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the index of the interrupt server to resume. The
+ constant :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify
+ the default interrupt server.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+.. rubric:: NOTES:
+
+Interrupt server may be suspended by
+:ref:`InterfaceRtemsInterruptServerSuspend`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within task context.
+
+* 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.
+
+* The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+
+.. Generated from spec:/rtems/intr/if/server-move
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_move()
+
+.. _InterfaceRtemsInterruptServerMove:
+
+rtems_interrupt_server_move()
+-----------------------------
+
+Moves the interrupt handlers installed at the interrupt vector and the source
+interrupt server to the destination interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_move(
+ uint32_t source_server_index,
+ rtems_vector_number vector,
+ uint32_t destination_server_index
+ );
+
+.. rubric:: PARAMETERS:
+
+``source_server_index``
+ This parameter is the index of the source interrupt server. The constant
+ :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify the
+ default interrupt server.
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``destination_server_index``
+ This parameter is the index of the destination interrupt server. The
+ constant :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify
+ the default interrupt server.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``source_server_index``.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``destination_server_index``.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within task context.
+
+* 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.
+
+* The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+
+.. Generated from spec:/rtems/intr/if/server-handler-iterate
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_handler_iterate()
+
+.. _InterfaceRtemsInterruptServerHandlerIterate:
+
+rtems_interrupt_server_handler_iterate()
+----------------------------------------
+
+Iterates over all interrupt handler installed at the interrupt vector and
+interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_handler_iterate(
+ uint32_t server_index,
+ rtems_vector_number vector,
+ rtems_interrupt_per_handler_routine routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the index of the interrupt server.
+
+``vector``
+ This parameter is the interrupt vector number.
+
+``routine``
+ This parameter is the visitor routine.
+
+``arg``
+ This parameter is the visitor argument.
+
+.. rubric:: DESCRIPTION:
+
+For each installed handler at the interrupt vector and interrupt server the
+visitor function specified by ``vector`` will be called with the argument
+specified by ``routine`` and the handler information, options, routine and
+argument.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt vector associated with the number specified by
+ ``vector``.
+
+.. rubric:: 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.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-entry-initialize
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_entry_initialize()
+
+.. _InterfaceRtemsInterruptServerEntryInitialize:
+
+rtems_interrupt_server_entry_initialize()
+-----------------------------------------
+
+Initializes the interrupt server entry.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_entry_initialize(
+ uint32_t server_index,
+ rtems_interrupt_server_entry *entry
+ );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the interrupt server index. The constant
+ :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify the
+ default interrupt server.
+
+``entry``
+ This parameter is the interrupt server entry to initialize.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+.. rubric:: NOTES:
+
+After initialization, the list of actions of the interrupt server entry is
+empty. Actions may be prepended by
+:ref:`InterfaceRtemsInterruptServerActionPrepend`. Interrupt server entries may
+be moved to another interrupt vector with
+:ref:`InterfaceRtemsInterruptServerEntryMove`. Server entries may be submitted
+to get serviced by the interrupt server with
+:ref:`InterfaceRtemsInterruptServerEntrySubmit`. Server entries may be
+destroyed by :ref:`InterfaceRtemsInterruptServerEntryDestroy`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-action-prepend
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_action_prepend()
+
+.. _InterfaceRtemsInterruptServerActionPrepend:
+
+rtems_interrupt_server_action_prepend()
+---------------------------------------
+
+Prepends the interrupt server action to the list of actions of the interrupt
+server entry.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_interrupt_server_action_prepend(
+ rtems_interrupt_server_entry *entry,
+ rtems_interrupt_server_action *action,
+ rtems_interrupt_handler routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``entry``
+ This parameter is the interrupt server entry to prepend the interrupt
+ server action. It shall have been initialized via
+ :ref:`InterfaceRtemsInterruptServerEntryInitialize`.
+
+``action``
+ This parameter is the interrupt server action to initialize and prepend to
+ the list of actions of the entry.
+
+``routine``
+ This parameter is the interrupt handler routine to set in the action.
+
+``arg``
+ This parameter is the interrupt handler argument to set in the action.
+
+.. rubric:: NOTES:
+
+No error checking is performed by the directive.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The interrupt server entry shall have been initialized by
+ :ref:`InterfaceRtemsInterruptServerEntryInitialize` and further optional
+ calls to :ref:`InterfaceRtemsInterruptServerActionPrepend`.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerActionPrepend` with the same interrupt
+ server entry. Calling the directive under this condition is undefined
+ behaviour.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerEntryMove` with the same interrupt server
+ entry. Calling the directive under this condition is undefined behaviour.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerEntrySubmit` with the same interrupt
+ server entry. Calling the directive under this condition is undefined
+ behaviour.
+
+* 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.
+
+.. Generated from spec:/rtems/intr/if/server-entry-destroy
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_entry_destroy()
+
+.. _InterfaceRtemsInterruptServerEntryDestroy:
+
+rtems_interrupt_server_entry_destroy()
+--------------------------------------
+
+Destroys the interrupt server entry.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_interrupt_server_entry_destroy(
+ rtems_interrupt_server_entry *entry
+ );
+
+.. rubric:: PARAMETERS:
+
+``entry``
+ This parameter is the interrupt server entry to destroy.
+
+.. rubric:: NOTES:
+
+No error checking is performed by the directive.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within task context.
+
+* 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.
+
+* The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+
+* The interrupt server entry shall have been initialized by
+ :ref:`InterfaceRtemsInterruptServerEntryInitialize` and further optional
+ calls to :ref:`InterfaceRtemsInterruptServerActionPrepend`.
+
+.. Generated from spec:/rtems/intr/if/server-entry-submit
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_entry_submit()
+
+.. _InterfaceRtemsInterruptServerEntrySubmit:
+
+rtems_interrupt_server_entry_submit()
+-------------------------------------
+
+Submits the interrupt server entry to be serviced by the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_interrupt_server_entry_submit(
+ rtems_interrupt_server_entry *entry
+ );
+
+.. rubric:: PARAMETERS:
+
+``entry``
+ This parameter is the interrupt server entry to submit.
+
+.. rubric:: 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.
+
+.. rubric:: 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
+:ref:`InterfaceRtemsInterruptServerEntryDestroy`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may unblock a task. This may cause the calling task to be
+ preempted.
+
+* The interrupt server entry shall have been initialized by
+ :ref:`InterfaceRtemsInterruptServerEntryInitialize` and further optional
+ calls to :ref:`InterfaceRtemsInterruptServerActionPrepend`.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerActionPrepend` with the same interrupt
+ server entry. Calling the directive under this condition is undefined
+ behaviour.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerEntryMove` with the same interrupt server
+ entry. Calling the directive under this condition is undefined behaviour.
+
+.. Generated from spec:/rtems/intr/if/server-entry-move
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_entry_move()
+
+.. _InterfaceRtemsInterruptServerEntryMove:
+
+rtems_interrupt_server_entry_move()
+-----------------------------------
+
+Moves the interrupt server entry to the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_entry_move(
+ rtems_interrupt_server_entry *entry,
+ uint32_t server_index
+ );
+
+.. rubric:: PARAMETERS:
+
+``entry``
+ This parameter is the interrupt server entry to move.
+
+``server_index``
+ This parameter is the index of the destination interrupt server. The
+ constant :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify
+ the default interrupt server.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+* The interrupt server entry shall have been initialized by
+ :ref:`InterfaceRtemsInterruptServerEntryInitialize` and further optional
+ calls to :ref:`InterfaceRtemsInterruptServerActionPrepend`.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerActionPrepend` with the same interrupt
+ server entry. Calling the directive under this condition is undefined
+ behaviour.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerEntryMove` with the same interrupt server
+ entry. Calling the directive under this condition is undefined behaviour.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerEntrySubmit` with the same interrupt
+ server entry. Calling the directive under this condition is undefined
+ behaviour.
+
+* 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.
+
+.. Generated from spec:/rtems/intr/if/server-request-initialize
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_request_initialize()
+
+.. _InterfaceRtemsInterruptServerRequestInitialize:
+
+rtems_interrupt_server_request_initialize()
+-------------------------------------------
+
+Initializes the interrupt server request.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ rtems_status_code rtems_interrupt_server_request_initialize(
+ uint32_t server_index,
+ rtems_interrupt_server_request *request,
+ rtems_interrupt_handler routine,
+ void *arg
+ );
+
+.. rubric:: PARAMETERS:
+
+``server_index``
+ This parameter is the interrupt server index. The constant
+ :c:macro:`RTEMS_INTERRUPT_SERVER_DEFAULT` may be used to specify the
+ default interrupt server.
+
+``request``
+ This parameter is the interrupt server request to initialize.
+
+``routine``
+ This parameter is the interrupt handler routine for the request action.
+
+``arg``
+ This parameter is the interrupt handler argument for the request action.
+
+.. rubric:: RETURN VALUES:
+
+:c:macro:`RTEMS_SUCCESSFUL`
+ The requested operation was successful.
+
+:c:macro:`RTEMS_INVALID_ID`
+ There was no interrupt server associated with the index specified by
+ ``server_index``.
+
+.. rubric:: 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 :ref:`InterfaceRtemsInterruptServerRequestSetVector`. Interrupt
+server requests may be submitted to get serviced by the interrupt server with
+:ref:`InterfaceRtemsInterruptServerRequestSubmit`. Requests may be destroyed
+by :ref:`InterfaceRtemsInterruptServerRequestDestroy`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may obtain and release the object allocator mutex. This may
+ cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/intr/if/server-request-set-vector
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_request_set_vector()
+
+.. _InterfaceRtemsInterruptServerRequestSetVector:
+
+rtems_interrupt_server_request_set_vector()
+-------------------------------------------
+
+Sets the interrupt vector in the interrupt server request.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_interrupt_server_request_set_vector(
+ rtems_interrupt_server_request *request,
+ rtems_vector_number vector
+ );
+
+.. rubric:: PARAMETERS:
+
+``request``
+ This parameter is the interrupt server request to change.
+
+``vector``
+ This parameter is the interrupt vector number to be used by the request.
+
+.. rubric:: 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 :ref:`InterfaceRtemsInterruptServerRequestSubmit` will disable the
+interrupt vector of the request. After processing of the request by the
+interrupt server the interrupt vector will be enabled again.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
+
+* The interrupt server request shall have been initialized by
+ :ref:`InterfaceRtemsInterruptServerRequestInitialize`.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerRequestSetVector` with the same interrupt
+ server request. Calling the directive under this condition is undefined
+ behaviour.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerRequestSubmit` with the same interrupt
+ server request. Calling the directive under this condition is undefined
+ behaviour.
+
+* 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.
+
+.. Generated from spec:/rtems/intr/if/server-request-destroy
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_request_destroy()
+
+.. _InterfaceRtemsInterruptServerRequestDestroy:
+
+rtems_interrupt_server_request_destroy()
+----------------------------------------
+
+Destroys the interrupt server request.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_interrupt_server_request_destroy(
+ rtems_interrupt_server_request *request
+ );
+
+.. rubric:: PARAMETERS:
+
+``request``
+ This parameter is the interrupt server request to destroy.
+
+.. rubric:: NOTES:
+
+No error checking is performed by the directive.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within task context.
+
+* 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.
+
+* The directive sends a request to another task and waits for a response. This
+ may cause the calling task to be blocked and unblocked.
+
+* The interrupt server request shall have been initialized by
+ :ref:`InterfaceRtemsInterruptServerRequestInitialize`.
+
+.. Generated from spec:/rtems/intr/if/server-request-submit
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_interrupt_server_request_submit()
+
+.. _InterfaceRtemsInterruptServerRequestSubmit:
+
+rtems_interrupt_server_request_submit()
+---------------------------------------
+
+Submits the interrupt server request to be serviced by the interrupt server.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_interrupt_server_request_submit(
+ rtems_interrupt_server_request *request
+ );
+
+.. rubric:: PARAMETERS:
+
+``request``
+ This parameter is the interrupt server request to submit.
+
+.. rubric:: 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.
+
+.. rubric:: 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
+:ref:`InterfaceRtemsInterruptServerRequestDestroy`.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within interrupt context.
+
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive may unblock a task. This may cause the calling task to be
+ preempted.
+
+* The interrupt server request shall have been initialized by
+ :ref:`InterfaceRtemsInterruptServerRequestInitialize`.
+
+* The directive shall not be called concurrently with
+ :ref:`InterfaceRtemsInterruptServerRequestSetVector` with the same interrupt
+ server request. Calling the directive under this condition is undefined
+ behaviour.
diff --git a/c-user/interrupt/introduction.rst b/c-user/interrupt/introduction.rst
index 3d5c71d..7987b54 100644
--- a/c-user/interrupt/introduction.rst
+++ b/c-user/interrupt/introduction.rst
@@ -1,6 +1,6 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
-.. Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2008, 2021 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
.. This file is part of the RTEMS quality process and was automatically
@@ -33,8 +33,6 @@ Introduction
.. spec:/rtems/intr/if/local-disable
.. spec:/rtems/intr/if/local-enable
.. spec:/rtems/intr/if/is-in-progress
-.. spec:/rtems/intr/if/cause
-.. spec:/rtems/intr/if/clear
.. spec:/rtems/intr/if/lock-initialize
.. spec:/rtems/intr/if/lock-destroy
.. spec:/rtems/intr/if/lock-acquire
@@ -47,6 +45,42 @@ Introduction
.. spec:/rtems/intr/if/lock-initializer
.. spec:/rtems/intr/if/lock-member
.. spec:/rtems/intr/if/lock-reference
+.. spec:/rtems/intr/if/entry-initializer
+.. spec:/rtems/intr/if/entry-initialize
+.. spec:/rtems/intr/if/entry-install
+.. spec:/rtems/intr/if/entry-remove
+.. spec:/rtems/intr/if/handler-install
+.. spec:/rtems/intr/if/handler-remove
+.. spec:/rtems/intr/if/vector-is-enabled
+.. spec:/rtems/intr/if/vector-enable
+.. spec:/rtems/intr/if/vector-disable
+.. spec:/rtems/intr/if/is-pending
+.. spec:/rtems/intr/if/raise
+.. spec:/rtems/intr/if/raise-on
+.. spec:/rtems/intr/if/clear
+.. spec:/rtems/intr/if/get-affinity
+.. spec:/rtems/intr/if/set-affinity
+.. spec:/rtems/intr/if/get-attributes
+.. spec:/rtems/intr/if/handler-iterate
+.. spec:/rtems/intr/if/server-initialize
+.. spec:/rtems/intr/if/server-create
+.. spec:/rtems/intr/if/server-handler-install
+.. spec:/rtems/intr/if/server-handler-remove
+.. spec:/rtems/intr/if/server-set-affinity
+.. spec:/rtems/intr/if/server-delete
+.. spec:/rtems/intr/if/server-suspend
+.. spec:/rtems/intr/if/server-resume
+.. spec:/rtems/intr/if/server-move
+.. spec:/rtems/intr/if/server-handler-iterate
+.. spec:/rtems/intr/if/server-entry-initialize
+.. spec:/rtems/intr/if/server-action-prepend
+.. spec:/rtems/intr/if/server-entry-destroy
+.. spec:/rtems/intr/if/server-entry-submit
+.. spec:/rtems/intr/if/server-entry-move
+.. spec:/rtems/intr/if/server-request-initialize
+.. spec:/rtems/intr/if/server-request-set-vector
+.. spec:/rtems/intr/if/server-request-destroy
+.. spec:/rtems/intr/if/server-request-submit
Any real-time executive must provide a mechanism for quick response to
externally generated interrupts to satisfy the critical time constraints of the
@@ -76,10 +110,6 @@ from an ISR. The directives provided by the Interrupt Manager are:
* :ref:`InterfaceRtemsInterruptIsInProgress` - Checks if an ISR is in progress
on the current processor.
-* :ref:`InterfaceRtemsInterruptCause` - Causes the interrupt.
-
-* :ref:`InterfaceRtemsInterruptClear` - Clears the interrupt.
-
* :ref:`InterfaceRtemsInterruptLockInitialize` - Initializes the ISR lock.
* :ref:`InterfaceRtemsInterruptLockDestroy` - Destroys the ISR lock.
@@ -108,3 +138,104 @@ from an ISR. The directives provided by the Interrupt Manager are:
* :ref:`InterfaceRTEMSINTERRUPTLOCKREFERENCE` - Defines an ISR lock object
reference.
+
+* :ref:`InterfaceRTEMSINTERRUPTENTRYINITIALIZER` - Statically initializes an
+ interrupt entry object.
+
+* :ref:`InterfaceRtemsInterruptEntryInitialize` - Initializes the interrupt
+ entry.
+
+* :ref:`InterfaceRtemsInterruptEntryInstall` - Installs the interrupt entry at
+ the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptEntryRemove` - Removes the interrupt entry from
+ the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptHandlerInstall` - Installs the interrupt handler
+ routine and argument at the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptHandlerRemove` - Removes the interrupt handler
+ routine and argument from the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptVectorIsEnabled` - Checks if the interrupt
+ vector is enabled.
+
+* :ref:`InterfaceRtemsInterruptVectorEnable` - Enables the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptVectorDisable` - Disables the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptIsPending` - Checks if the interrupt is pending.
+
+* :ref:`InterfaceRtemsInterruptRaise` - Raises the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptRaiseOn` - Raises the interrupt vector on the
+ processor.
+
+* :ref:`InterfaceRtemsInterruptClear` - Clears the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptGetAffinity` - Gets the processor affinity set
+ of the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptSetAffinity` - Sets the processor affinity set
+ of the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptGetAttributes` - Gets the attributes of the
+ interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptHandlerIterate` - Iterates over all interrupt
+ handler installed at the interrupt vector.
+
+* :ref:`InterfaceRtemsInterruptServerInitialize` - Initializes the interrupt
+ server tasks.
+
+* :ref:`InterfaceRtemsInterruptServerCreate` - Creates an interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerHandlerInstall` - Installs the interrupt
+ handler routine and argument at the interrupt vector on the interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerHandlerRemove` - Removes the interrupt
+ handler routine and argument from the interrupt vector and the interrupt
+ server.
+
+* :ref:`InterfaceRtemsInterruptServerSetAffinity` - Sets the processor affinity
+ of the interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerDelete` - Deletes the interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerSuspend` - Suspends the interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerResume` - Resumes the interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerMove` - Moves the interrupt handlers
+ installed at the interrupt vector and the source interrupt server to the
+ destination interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerHandlerIterate` - Iterates over all
+ interrupt handler installed at the interrupt vector and interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerEntryInitialize` - Initializes the
+ interrupt server entry.
+
+* :ref:`InterfaceRtemsInterruptServerActionPrepend` - Prepends the interrupt
+ server action to the list of actions of the interrupt server entry.
+
+* :ref:`InterfaceRtemsInterruptServerEntryDestroy` - Destroys the interrupt
+ server entry.
+
+* :ref:`InterfaceRtemsInterruptServerEntrySubmit` - Submits the interrupt
+ server entry to be serviced by the interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerEntryMove` - Moves the interrupt server
+ entry to the interrupt server.
+
+* :ref:`InterfaceRtemsInterruptServerRequestInitialize` - Initializes the
+ interrupt server request.
+
+* :ref:`InterfaceRtemsInterruptServerRequestSetVector` - Sets the interrupt
+ vector in the interrupt server request.
+
+* :ref:`InterfaceRtemsInterruptServerRequestDestroy` - Destroys the interrupt
+ server request.
+
+* :ref:`InterfaceRtemsInterruptServerRequestSubmit` - Submits the interrupt
+ server request to be serviced by the interrupt server.
diff --git a/c-user/kernel-character-io/directives.rst b/c-user/kernel-character-io/directives.rst
new file mode 100644
index 0000000..f13010e
--- /dev/null
+++ b/c-user/kernel-character-io/directives.rst
@@ -0,0 +1,372 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2015 On-Line Applications Research Corporation (OAR)
+
+.. This file is part of the RTEMS quality process and was automatically
+.. generated. If you find something that needs to be fixed or
+.. worded better please post a report or patch to an RTEMS mailing list
+.. or raise a bug report:
+..
+.. https://www.rtems.org/bugs.html
+..
+.. For information on updating and regenerating please refer to the How-To
+.. section in the Software Requirements Engineering chapter of the
+.. RTEMS Software Engineering manual. The manual is provided as a part of
+.. a release. For development sources please refer to the online
+.. documentation at:
+..
+.. https://docs.rtems.org
+
+.. _KernelCharacterIOSupportDirectives:
+
+Directives
+==========
+
+This section details the directives of the Kernel Character I/O Support. A
+subsection is dedicated to each of this manager's directives and lists the
+calling sequence, parameters, description, return values, and notes of the
+directive.
+
+.. Generated from spec:/rtems/io/if/putc
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_putc()
+
+.. _InterfaceRtemsPutc:
+
+rtems_putc()
+------------
+
+Outputs the character to the kernel character output device.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_putc( char c );
+
+.. rubric:: PARAMETERS:
+
+``c``
+ This parameter is the character to output.
+
+.. rubric:: DESCRIPTION:
+
+The directive outputs the character specified by ``c`` to the kernel character
+output device using the polled character output implementation provided by
+BSP_output_char. The directive performs a character translation from ``NL`` to
+``CR`` followed by ``NR``.
+
+If the kernel character output device is concurrently accessed, then
+interleaved output may occur.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/io/if/put-char
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_put_char()
+
+.. _InterfaceRtemsPutChar:
+
+rtems_put_char()
+----------------
+
+Puts the character using :ref:`InterfaceRtemsPutc`
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ void rtems_put_char( int c, void *unused );
+
+.. rubric:: PARAMETERS:
+
+``c``
+ This parameter is the character to output.
+
+``unused``
+ This parameter is an unused argument.
+
+.. rubric:: NOTES:
+
+The directive is provided to support the RTEMS Testing Framework.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/io/if/putk
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: putk()
+
+.. _InterfacePutk:
+
+putk()
+------
+
+Outputs the characters of the string and a newline character to the kernel
+character output device.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ int putk( const char *s );
+
+.. rubric:: PARAMETERS:
+
+``s``
+ This parameter is the string to output.
+
+.. rubric:: RETURN VALUES:
+
+Returns the number of characters output to the kernel character output device.
+
+.. rubric:: NOTES:
+
+The directive may be used to print debug and test information. It uses
+:ref:`InterfaceRtemsPutc` to output the characters. This directive performs a
+character translation from ``NL`` to ``CR`` followed by ``NR``.
+
+If the kernel character output device is concurrently accessed, then
+interleaved output may occur.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+.. Generated from spec:/rtems/io/if/printk
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: printk()
+
+.. _InterfacePrintk:
+
+printk()
+--------
+
+Outputs the characters defined by the format string and the arguments to the
+kernel character output device.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ int printk( const char *fmt, ... );
+
+.. rubric:: PARAMETERS:
+
+``fmt``
+ This parameter is a printf()-style format string.
+
+``...``
+ This parameter is a list of optional parameters required by the format
+ string.
+
+.. rubric:: RETURN VALUES:
+
+Returns the number of characters output to the kernel character output device.
+
+.. rubric:: NOTES:
+
+The directive may be used to print debug and test information. It uses
+:ref:`InterfaceRtemsPutc` to output the characters. This directive performs a
+character translation from ``NL`` to ``CR`` followed by ``NR``.
+
+If the kernel character output device is concurrently accessed, then
+interleaved output may occur.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* Formatting of floating point numbers is not supported.
+
+.. Generated from spec:/rtems/io/if/vprintk
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: vprintk()
+
+.. _InterfaceVprintk:
+
+vprintk()
+---------
+
+Outputs the characters defined by the format string and the variable argument
+list to the kernel character output device.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ int vprintk( const char *fmt, va_list ap );
+
+.. rubric:: PARAMETERS:
+
+``fmt``
+ This parameter is a printf()-style format string.
+
+``ap``
+ This parameter is the variable argument list required by the format string.
+
+.. rubric:: RETURN VALUES:
+
+Returns the number of characters output to the kernel character output device.
+
+.. rubric:: NOTES:
+
+The directive may be used to print debug and test information. It uses
+:ref:`InterfaceRtemsPutc` to output the characters. This directive performs a
+character translation from ``NL`` to ``CR`` followed by ``NR``.
+
+If the kernel character output device is concurrently accessed, then
+interleaved output may occur.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* Formatting of floating point numbers is not supported.
+
+.. Generated from spec:/rtems/io/if/printk-printer
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: rtems_printk_printer()
+
+.. _InterfaceRtemsPrintkPrinter:
+
+rtems_printk_printer()
+----------------------
+
+Outputs the characters defined by the format string and the variable argument
+list to the kernel character output device.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ int rtems_printk_printer( void *unused, const char *fmt, va_list ap );
+
+.. rubric:: PARAMETERS:
+
+``unused``
+ This parameter is an unused argument.
+
+``fmt``
+ This parameter is a printf()-style format string.
+
+``ap``
+ This parameter is the variable argument list required by the format string.
+
+.. rubric:: RETURN VALUES:
+
+Returns the number of characters output to the kernel character output device.
+
+.. rubric:: NOTES:
+
+The directive may be used to print debug and test information. It uses
+:ref:`InterfaceRtemsPutc` to output the characters. This directive performs a
+character translation from ``NL`` to ``CR`` followed by ``NR``.
+
+If the kernel character output device is concurrently accessed, then
+interleaved output may occur.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
+
+* Formatting of floating point numbers is not supported.
+
+.. Generated from spec:/rtems/io/if/getchark
+
+.. raw:: latex
+
+ \clearpage
+
+.. index:: getchark()
+
+.. _InterfaceGetchark:
+
+getchark()
+----------
+
+Tries to dequeue a character from the kernel character input device.
+
+.. rubric:: CALLING SEQUENCE:
+
+.. code-block:: c
+
+ int getchark( void );
+
+.. rubric:: DESCRIPTION:
+
+The directive tries to dequeue a character from the kernel character input
+device using the polled character input implementation referenced by
+BSP_poll_char if it is available.
+
+.. rubric:: RETURN VALUES:
+
+``-1``
+ The BSP_poll_char pointer was equal to `NULL
+ <https://en.cppreference.com/w/c/types/NULL>`_.
+
+``-1``
+ There was no character enqueued on the kernel character input device.
+
+Returns the character least recently enqueued on the kernel character input
+device as an unsigned character value.
+
+.. rubric:: CONSTRAINTS:
+
+The following constraints apply to this directive:
+
+* The directive may be called from within any runtime context.
+
+* The directive will not cause the calling task to be preempted.
diff --git a/c-user/kernel-character-io/index.rst b/c-user/kernel-character-io/index.rst
new file mode 100644
index 0000000..c6a9b6b
--- /dev/null
+++ b/c-user/kernel-character-io/index.rst
@@ -0,0 +1,15 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+
+.. index:: Kernel Character I/O Support
+
+.. _RTEMSAPIKernelCharIO:
+
+Kernel Character I/O Support
+****************************
+
+.. toctree::
+
+ introduction
+ directives
diff --git a/c-user/kernel-character-io/introduction.rst b/c-user/kernel-character-io/introduction.rst
new file mode 100644
index 0000000..ef3512b
--- /dev/null
+++ b/c-user/kernel-character-io/introduction.rst
@@ -0,0 +1,69 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2015 On-Line Applications Research Corporation (OAR)
+
+.. This file is part of the RTEMS quality process and was automatically
+.. generated. If you find something that needs to be fixed or
+.. worded better please post a report or patch to an RTEMS mailing list
+.. or raise a bug report:
+..
+.. https://www.rtems.org/bugs.html
+..
+.. For information on updating and regenerating please refer to the How-To
+.. section in the Software Requirements Engineering chapter of the
+.. RTEMS Software Engineering manual. The manual is provided as a part of
+.. a release. For development sources please refer to the online
+.. documentation at:
+..
+.. https://docs.rtems.org
+
+.. Generated from spec:/rtems/io/if/group-3
+
+.. _KernelCharacterIOSupportIntroduction:
+
+Introduction
+============
+
+.. The following list was generated from:
+.. spec:/rtems/io/if/putc
+.. spec:/rtems/io/if/put-char
+.. spec:/rtems/io/if/putk
+.. spec:/rtems/io/if/printk
+.. spec:/rtems/io/if/vprintk
+.. spec:/rtems/io/if/printk-printer
+.. spec:/rtems/io/if/getchark
+
+The kernel character input/output support is an extension of the
+:ref:`RTEMSAPIClassicIO` to output characters to the kernel character output
+device and receive characters from the kernel character input device using a
+polled and non-blocking implementation.
+
+The directives may be used to print debug and test information. The kernel
+character input/output support should work even if no Console Driver is
+configured, see :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`. The kernel
+character input and output device is provided by the :term:`BSP`. Applications
+may change the device. The directives provided by the Kernel Character I/O
+Support are:
+
+* :ref:`InterfaceRtemsPutc` - Outputs the character to the kernel character
+ output device.
+
+* :ref:`InterfaceRtemsPutChar` - Puts the character using
+ :ref:`InterfaceRtemsPutc`
+
+* :ref:`InterfacePutk` - Outputs the characters of the string and a newline
+ character to the kernel character output device.
+
+* :ref:`InterfacePrintk` - Outputs the characters defined by the format string
+ and the arguments to the kernel character output device.
+
+* :ref:`InterfaceVprintk` - Outputs the characters defined by the format string
+ and the variable argument list to the kernel character output device.
+
+* :ref:`InterfaceRtemsPrintkPrinter` - Outputs the characters defined by the
+ format string and the variable argument list to the kernel character output
+ device.
+
+* :ref:`InterfaceGetchark` - Tries to dequeue a character from the kernel
+ character input device.
diff --git a/c-user/message/directives.rst b/c-user/message/directives.rst
index f320350..70a22d3 100644
--- a/c-user/message/directives.rst
+++ b/c-user/message/directives.rst
@@ -891,10 +891,6 @@ queue.
:c:macro:`RTEMS_UNSATISFIED`
The queue was empty.
-:c:macro:`RTEMS_UNSATISFIED`
- The queue was flushed while the calling task was waiting to receive a
- message.
-
:c:macro:`RTEMS_TIMEOUT`
The timeout happened while the calling task was waiting to receive a
message
@@ -1018,8 +1014,8 @@ Flushes all messages on the queue.
``count``
This parameter is the pointer to an `uint32_t
<https://en.cppreference.com/w/c/types/integer>`_ object. When the
- directive call is successful, the number of unblocked tasks will be stored
- in this object.
+ directive call is successful, the number of pending messages removed from
+ the queue will be stored in this object.
.. rubric:: DESCRIPTION:
@@ -1039,17 +1035,22 @@ present on the queue, count is set to zero.
The ``count`` parameter was `NULL
<https://en.cppreference.com/w/c/types/NULL>`_.
+.. rubric:: NOTES:
+
+The directive does not flush tasks waiting to receive a message from the
+:term:`wait queue` of the message queue.
+
.. rubric:: CONSTRAINTS:
The following constraints apply to this directive:
-* The directive may be called from within task context.
-
* The directive may be called from within interrupt context.
-* When the directive operates on a remote object, the directive sends a message
- to the remote node and waits for a reply. This will preempt the calling
- task.
+* The directive may be called from within device driver initialization context.
+
+* The directive may be called from within task context.
+
+* The directive will not cause the calling task to be preempted.
.. Generated from spec:/rtems/message/if/buffer
diff --git a/c-user/rate-monotonic/directives.rst b/c-user/rate-monotonic/directives.rst
index 02b8898..2e48aac 100644
--- a/c-user/rate-monotonic/directives.rst
+++ b/c-user/rate-monotonic/directives.rst
@@ -652,7 +652,7 @@ The following constraints apply to this directive:
rtems_rate_monotonic_report_statistics()
----------------------------------------
-Reports the period statistics using the :c:func:`printk` printer.
+Reports the period statistics using the :ref:`InterfacePrintk` printer.
.. rubric:: CALLING SEQUENCE:
@@ -663,7 +663,7 @@ Reports the period statistics using the :c:func:`printk` printer.
.. rubric:: DESCRIPTION:
This directive prints a report on all active periods which have executed at
-least one period using the :c:func:`printk` printer.
+least one period using the :ref:`InterfacePrintk` printer.
.. rubric:: CONSTRAINTS:
diff --git a/c-user/rate-monotonic/introduction.rst b/c-user/rate-monotonic/introduction.rst
index 5b0c094..9e3c6f0 100644
--- a/c-user/rate-monotonic/introduction.rst
+++ b/c-user/rate-monotonic/introduction.rst
@@ -70,7 +70,7 @@ by the Rate-Monotonic Manager are:
of all periods.
* :ref:`InterfaceRtemsRateMonotonicReportStatistics` - Reports the period
- statistics using the :c:func:`printk` printer.
+ statistics using the :ref:`InterfacePrintk` printer.
* :ref:`InterfaceRtemsRateMonotonicReportStatisticsWithPlugin` - Reports the
period statistics using the printer plugin.
diff --git a/c-user/scheduling-concepts/background.rst b/c-user/scheduling-concepts/background.rst
index 7f8a63d..1fe7089 100644
--- a/c-user/scheduling-concepts/background.rst
+++ b/c-user/scheduling-concepts/background.rst
@@ -117,10 +117,7 @@ Task Priority and Scheduling
The most significant task scheduling modification mechanism is the ability for
the user to assign a priority level to each individual task when it is created
-and to alter a task's priority at run-time. The maximum priority level depends
-on the configured scheduler. A lower priority level means higher priority
-(higher importance). The maximum priority level of the default uniprocessor
-scheduler is 255.
+and to alter a task's priority at run-time, see :ref:`TaskPriority`.
.. index:: preemption
diff --git a/c-user/scheduling-concepts/smp-schedulers.rst b/c-user/scheduling-concepts/smp-schedulers.rst
index cfab04f..d6c1dc6 100644
--- a/c-user/scheduling-concepts/smp-schedulers.rst
+++ b/c-user/scheduling-concepts/smp-schedulers.rst
@@ -45,7 +45,7 @@ Deterministic Priority SMP Scheduler
A fixed-priority scheduler which uses a table of chains with one chain per
priority level for the ready tasks. The maximum priority level is
configurable. By default, the maximum priority level is 255 (256 priority
-levels).
+levels), see :ref:`CONFIGURE_MAXIMUM_PRIORITY`.
.. _SchedulerSMPPrioritySimple:
@@ -64,6 +64,7 @@ Arbitrary Processor Affinity Priority SMP Scheduler
A fixed-priority scheduler which uses a table of chains with one chain per
priority level for the ready tasks. The maximum priority level is
configurable. By default, the maximum priority level is 255 (256 priority
-levels). This scheduler supports arbitrary task processor affinities. The
-worst-case run-time complexity of some scheduler operations exceeds
-:math:`O(n)` while :math:`n` is the count of ready tasks.
+levels), see :ref:`CONFIGURE_MAXIMUM_PRIORITY`. This scheduler supports
+arbitrary task processor affinities. The worst-case run-time complexity of
+some scheduler operations exceeds :math:`O(n)` while :math:`n` is the count of
+ready tasks.
diff --git a/c-user/task/background.rst b/c-user/task/background.rst
index a55f743..da6cabf 100644
--- a/c-user/task/background.rst
+++ b/c-user/task/background.rst
@@ -127,13 +127,19 @@ scheduling of a task is based on its current state and priority.
.. index:: priority, task
.. index:: rtems_task_priority
+.. _TaskPriority:
+
Task Priority
-------------
-A task's priority determines its importance in relation to the other tasks
-executing on the same processor. RTEMS supports 255 levels of priority ranging
-from 1 to 255. The data type ``rtems_task_priority`` is used to store task
-priorities.
+A task's :term:`priority` determines its importance in relation to the other
+tasks executing on the processor set owned by a :term:`scheduler`. Normally,
+RTEMS supports 256 levels of priority ranging from 0 to 255. The priority
+level 0 represents a special priority reserved for the operating system. The
+data type :c:type:`rtems_task_priority` is used to store task priorities. The
+maximum priority level depends on the configured scheduler, see
+:ref:`CONFIGURE_MAXIMUM_PRIORITY`, :ref:`ConfigurationSchedulersClustered`, and
+:ref:`RTEMSAPIClassicScheduler`.
Tasks of numerically smaller priority values are more important tasks than
tasks of numerically larger priority values. For example, a task at priority
diff --git a/c-user/user-extensions/directives.rst b/c-user/user-extensions/directives.rst
index 2dbac54..ac04cdd 100644
--- a/c-user/user-extensions/directives.rst
+++ b/c-user/user-extensions/directives.rst
@@ -102,11 +102,15 @@ The extension set is initialized using the extension table specified in
.. rubric:: NOTES:
-The user-provided extension set table is not used after the return of the
+The user-provided extension table is not used after the return of the
directive.
-Newly created extension sets are immediately installed and are invoked upon the
-next system event supporting an extension.
+Each extension of the extension table is optional and may be `NULL
+<https://en.cppreference.com/w/c/types/NULL>`_. All extensions except the task
+switch extension of the extension table are atomically and immediately
+installed. A task switch extension is separately installed after the other
+extensions. The extensions of the extension table are invoked upon the next
+system event supporting an extension.
An alternative to dynamically created extension sets are initial extensions,
see :ref:`CONFIGURE_INITIAL_EXTENSIONS`. Initial extensions are recommended
diff --git a/eclipse/conf.py b/eclipse/conf.py
deleted file mode 100644
index 2adc01f..0000000
--- a/eclipse/conf.py
+++ /dev/null
@@ -1,14 +0,0 @@
-import sys, os
-sys.path.insert(0, os.path.abspath('../common/'))
-
-from conf import *
-
-project = "RTEMS Eclipse Manual"
-
-latex_documents = [
- ('index',
- 'eclipse.tex',
- u'RTEMS Eclipse Manual',
- u'RTEMS Documentation Project',
- 'manual'),
-]
diff --git a/eclipse/glossary.rst b/eclipse/glossary.rst
deleted file mode 100644
index c8eb2f1..0000000
--- a/eclipse/glossary.rst
+++ /dev/null
@@ -1,64 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-4.0
-
-.. _glossary:
-
-Glossary
-********
-
-.. glossary::
-
- Binutils
- GNU Binary Utilities such as the assembler ``as``, linker ``ld`` and a
- range of other tools used in the development of software.
-
- DLL
- Dynamically Linker Library used on Windows.
-
- GCC
- GNU Compiler Tool chain. It is the GNU C/C++ compiler, binutils and GDB.
-
- GDB
- GNU Debugger
-
- MinGW
- Minimal GNU system for Windows that lets GCC built programs use the
- standard Windows operating system DLLs. It lets you build native Windows
- programs with the GNU GCC compiler.
-
- MinGW64
- Minimal GNU system for 64bit Windows. MinGW64 is not the MinGW project.
-
- MSYS2
- Minimal System 2 is a fork of the MinGW project's MSYS tool and the MinGW
- MSYS tool is a fork of Cygwin project. The Cygwin project provides a POSIX
- emulation layer for Windows so POSIX software can run on Windows. MSYS is a
- minimal version that is just enough to let ``configure`` scripts run. MSYS
- has a simplified path structure to make it easier to building native Windows
- programs.
-
- POSIX
- Portable Operating System Interface is a standard that lets software be
- portable between compliant operating systems.
-
- prefix
- A path used when building a package so all parts of the package reside
- under that path.
-
- RSB
- RTEMS Source Builder is part of the RTEMS Tools Project. It builds packages
- such as the tools for the RTEMS operating system.
-
- RTEMS
- The Real-Time Executive for Multiprocessor Systems or RTEMS is an open
- source fully featured Real Time Operating System or RTOS that supports a
- variety of open standard application programming interfaces (API) and
- interface standards such as POSIX and BSD sockets.
-
- Test Suite
- See Testsuite
-
- Testsuite
- RTEMS test suite located in the ``testsuites/`` directory.
-
- Waf
- Waf build system. For more information see http://www.waf.io/
diff --git a/eclipse/index.rst b/eclipse/index.rst
deleted file mode 100644
index c5b2374..0000000
--- a/eclipse/index.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-4.0
-
-.. Copyright (C) 2016 Chris Johns <chrisj@rtems.org>
-
-.. include:: ../common/unicode.rst
-
-.. highlight:: c
-
-=================================
-RTEMS Eclipse Manual (|version|).
-=================================
-
-.. topic:: Copyrights and License
-
- | |copy| 1988, 2015 On-Line Applications Research Corporation (OAR)
-
- .. include:: ../common/license.rst
-
-.. include:: ../common/header.rst
-
-.. toctree::
- :maxdepth: 5
- :numbered:
-
- overview
-
- rtems
-
- glossary
diff --git a/eclipse/overview.rst b/eclipse/overview.rst
deleted file mode 100644
index 306200f..0000000
--- a/eclipse/overview.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-4.0
-
-.. Copyright (C) 2016 Chris Johns <chrisj@rtems.org>
-
-.. _overview:
-
-Overview
-********
-
-Welcome to the :ref:term:`RTEMS` Eclipse Manual.
-
-This document covers using Eclipse with RTEMS.
-
-RTEMS, Real-Time Executive for Multiprocessor Systems, is a real-time executive
-(kernel) which provides a high performance environment for embedded
-applications.
-
-Eclipse is an Integrated Development Environment (IDE) for a wide range of
-languages and platforms.
-
-RTEMS's eco-system provides all the tools and capabilities to integrate with
-Eclipse. You can build and develop RTEMS with Eclipse as well as build
-applications with Eclipse.
-
-Unless otherwise stated this document refers to the Eclipse Mars release.
diff --git a/eclipse/rtems.rst b/eclipse/rtems.rst
deleted file mode 100644
index cd1f45a..0000000
--- a/eclipse/rtems.rst
+++ /dev/null
@@ -1,339 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-4.0
-
-.. Copyright (C) 2016 Chris Johns <chrisj@rtems.org>
-
-.. _rtems-development:
-
-RTEMS Development
-*****************
-
-RTEMS can be developed using Eclipse. The RTEMS kernel is an `autotools` or
-`autoconf` and `automake` based package. You can create a project in Eclipse
-that lets you configure and build a BSP for an architecture. We assume you have
-already build and installed your tools using the RTEMS Source Builder.
-
-Kernel Source
--------------
-
-Download or clone the RTEMS Kernel source code. We will clone the source code:
-
-.. code-block:: shell
-
- $ git clone git://git.rtems.org/rtems.git rtems.master
- Cloning into 'rtems'...
- remote: Counting objects: 483342, done.
- remote: Compressing objects: 100% (88974/88974), done.
- remote: Total 483342 (delta 390053), reused 475669 (delta 383809)
- Receiving objects: 100% (483342/483342), 69.88 MiB | 1.37 MiB/s, done.
- Resolving deltas: 100% (390053/390053), done.
- Checking connectivity... done.
-
-We need to `bootstrap` the kernel source code. A `botostrap` invokes the
-various `autotools` commands need to generate build system files. First we need
-to the path to our tools:
-
-.. code-block:: shell
-
- $ export PATH=/opt/rtems/5/bin:$PATH
-
-Now run the `bootstrap` command:
-
-.. code-block:: shell
-
- $ cd rtems.master
- $ ./bootstrap
-
-Sit back, this can take a while. The Getting Started Guide talks about using
-the `rtems-bootstrap` to run the bootstrap process in parallel on all
-available cores. The output of the bootstrap has not been copied into this
-document.
-
-The source code is now ready.
-
-Eclipse SDK Software
---------------------
-
-We need the following Eclipse SDK Software packages installed:
-
- - C/C++ Autotools support
- - C/C++ Development Tools
- - C/C++ GCC Cross Compiler Support
-
-Start Eclipse and check to see if you have the them installed via the **Help,
-Installation Details** menu item:
-
-.. figure:: ../images/eclipse/eclipse-help-installation.png
- :width: 50%
- :align: center
- :alt: Help, Installation Details
-
-The dialog box shows the installed software packages and you can see the
-**C/C++ Autotools support** and the **C/C++ Development Tools** are installed:
-
-.. figure:: ../images/eclipse/eclipse-sdk-details.png
- :align: center
- :alt: SDK Installation Details
-
-You can see some other software packages are installed in the figure. You can ignore those.
-
-If you do not have the listed software packages install select **Help, Install
-New Software** and in the **Work with:** list box select
-**http://download.eclipse.org/releases/mars**.
-
-.. figure:: ../images/eclipse/eclipse-install-new-software.png
- :width: 80%
- :align: center
- :alt: Help, Install New Software
-
-Afer a small period of time a list of available packages will populate and you
-can select the ones we are interested in. Enter ``autotools`` in the search
-box and select the package:
-
-.. figure:: ../images/eclipse/eclipse-autotools.png
- :width: 80%
- :align: center
- :alt: C/C++ Autotools support
-
-Clear the search line and enter ``development tools`` in the search box and
-then scroll down to find **C/C++ Development Tools**:
-
-.. figure:: ../images/eclipse/eclipse-cdt.png
- :width: 80%
- :align: center
- :alt: C/C++ Development Tools
-
-Again clear the search line and enter ``gcc cross`` in the search box and
-select the package:
-
-.. figure:: ../images/eclipse/eclipse-gcc-cross.png
- :width: 80%
- :align: center
- :alt: C/C++ GCC Cross Compiler Support
-
-Click **Next** and once the **Install Details** have determined what is needed
-select **Finish** to install the packages.
-
-Kernel Build Project
---------------------
-
-We create a project in Eclipse that can configure and build RTEMS for the
-``pc686`` BSP. This BSP is based on the ``pc386`` BSP and is under the ``i386``
-architecture.
-
-We assume you have built and installed the ``i386`` RTEMS Tools, obtained the
-RTEMS kernel code and ``bootstrapped`` it if a git clone, and installed the
-required Eclipse Software packages.
-
-The paths used in this project are:
-
-:file:`/opt/work/rtems/4.11`
- The RTEMS Tools prefix the tools are install under.
-
-:file:`/opt/work/chris/rtems/kernel/rtems.master`
- The RTEMS Kernel source code.
-
-:file:`/opt/work/chris/rtems/kernel/5`
- The RTEMS Kernel prefix.
-
-:file:`/opt/work/chris/rtems/kernel/bsp/pc`
- The RTEMS Kernel BSP build directory.
-
-The menus shown here may vary from those you have as Eclipse changes them based
-on what you do.
-
-Select **File, New, Project** :
-
-.. figure:: ../images/eclipse/eclipse-new-project.png
- :width: 100%
- :align: center
- :alt: File, New, Project...
-
-Click on **C/C++** and select **Makefile Project with Existing Code** then
-select **Next** :
-
-.. figure:: ../images/eclipse/eclipse-project-makefile-existing-code.png
- :width: 75%
- :align: center
- :alt: Makefile Project with Existing Code
-
-Enter the project name ``rtems-git`` into the **Project Name** field and select
-the **Browse...** button and the path to the RTEMS Kernel source code then
-click **Finish** :
-
-.. figure:: ../images/eclipse/eclipse-project-import-existing-code.png
- :width: 75%
- :align: center
- :alt: Import Existing Code
-
-Eclipse will show the RTEMS Kernel source code in the **Project Explorer** panel:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-files.png
- :width: 100%
- :align: center
- :alt: RTEMS GIT Project showing files
-
-We now convert the project to an Autotools project. Select **File, New,
-Convert to a C/C++ Autotools Project** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-convert-autotools.png
- :width: 100%
- :align: center
- :alt: Convert the project to Autotools
-
-Select **C Project** then **Finish** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-convert-autotools-dialog.png
- :width: 85%
- :align: center
- :alt: Convert the project to Autotools
-
-We now configure the project's properties by right clicking on the
-``rtems-git`` project title and then **Properties** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-properties-menu.png
- :width: 100%
- :align: center
- :alt:
-
-Click on the **Autotools** item then **Configure Settings** and **Platform
-specifiers** and set the **Target platform** field with ``i386-rtems5``:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-at-target.png
- :width: 100%
- :align: center
- :alt: Enter the Autotool target
-
-Select **Platform directories** and enter the **Arch-independent install
-directory (--prefix)** to the RTEMS Kernel prefix of
-:file:`/opt/work/chris/rtems/kernel/5`:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-at-prefix.png
- :width: 100%
- :align: center
- :alt: Enter the Autotool target
-
-We disable networking to use the external LibBSD package and set the BSP to
-``pc686``. Select the **Advanced** and in the **Additional command-line
-options** enter ``--disable-networking`` and ``--enable-rtemsbsps=pc686``. You
-can add extra options you may need:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-at-add-opts.png
- :width: 100%
- :align: center
- :alt: Enter the Autotool additional options
-
-Select **C/C++ Build** and **Environment**. Uncheck or clear the **Use default
-build command** and add ``-j N`` where ``N`` is the number of cores you have in
-your machine. The figure has told `make` to run 8 jobs, one per core for an 8
-core machine. Click on the **File system...** button and navigate to the BSP
-build directory. This is the location Eclipse builds the BSP. RTEMS requires
-you build outside the source tree and in this example we are forcing the build
-directory to something specific. Finish by pressing **Apply** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-cdt-build.png
- :width: 100%
- :align: center
- :alt: C/C++ Build Properties
-
-Select **Environment** under **C/C++ Build** as we need to set the path to the
-RTEMS Tools. In this example we set the path in the Eclipse project so each
-project can have a specific set of tools. Press the **Add...** button:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-cdt-env.png
- :width: 100%
- :align: center
- :alt: C/C++ Build Environment
-
-Enter the path to the tools, in our case it is
-:file:`/opt/work/rtems/5/bin`, then press **Variables** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-cdt-env-var.png
- :width: 85%
- :align: center
- :alt: C/C++ Build Environment
-
-Scroll down and select **PATH** and then press **OK** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path.png
- :width: 60%
- :align: center
- :alt: C/C++ Build Environment
-
-You will now see the path in the **Value:** field. Make sure you have a path
-separator between the end of the tools path and the path variable we have just
-added. In this case is a Unix host and the separator is `:`. Windows use
-`;`. Press **OK** when you have a valid path:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path-add.png
- :width: 85%
- :align: center
- :alt: C/C++ Build Environment
-
-The **Environment** panel will now show the added `PATH` variable. Click
-**Replace native environment with specified one** as shown and then press
-**Apply** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-cdt-env-replace.png
- :width: 100%
- :align: center
- :alt: C/C++ Build Environment
-
-Select **Settings** under **C/C++ Build** and check **Elf Parser** and **GNU
-Elf Parser** and then press **OK** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-prop-cdt-settings.png
- :width: 100%
- :align: center
- :alt: C/C++ Build Settings
-
-We are now ready to run configure using Eclipse. Right click on the project
-name ``rtems-git`` and then **Reconfigure Project** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-reconfigure.png
- :width: 100%
- :align: center
- :alt: Reconfigure the RTEMS Project
-
-Select the **Console** tab in the output panel to view the configure process
-output. You will notice the end of the configure process shows the names of the
-BSPs we have asked to build. In our case this is the ``pc686`` BSP:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-reconfigure-console.png
- :width: 100%
- :align: center
- :alt: Reconfigure console output
-
-We can now build RTEMS using Eclipse. Right click on the project name
-``rtems-git`` and then select **Build Project** :
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-build-project.png
- :width: 100%
- :align: center
- :alt: Reconfigure the RTEMS Project
-
-A **Build Project** message box will appear showing the progress:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-build-project-building.png
- :width: 75%
- :align: center
- :alt: Reconfigure the RTEMS Project
-
-When finished click on the **Problems** output tab to view any errors or warnings:
-
-.. figure:: ../images/eclipse/eclipse-rtems-git-built.png
- :width: 100%
- :align: center
- :alt: Reconfigure the RTEMS Project
-
-If you get errors during the configure phase or building you will need to
-determine reason why. The main source of errors will be the path to the
-tools. Check the top of the ``config.log`` file ``configure`` generates. This
-file can be found in the top directory of you BSP build tree. The file will
-list the path components near the top and you should see the path to your tools
-listed first. While looking make sure the configure command matches what you
-expect and matches the documentation for configuring RTEMS.
-
-If the contents of ``config.log`` look fine check the build log. The project's
-**Properties** dialog under **C/C++ Build**, **Logging** has a path to a build
-log. Open the build log and search for the error. If you cannot figure out the
-source of the error please ask on the :r:list:`users` for help.
diff --git a/eclipse/wscript b/eclipse/wscript
deleted file mode 100644
index 4063cd4..0000000
--- a/eclipse/wscript
+++ /dev/null
@@ -1,7 +0,0 @@
-from common.waf import cmd_configure as configure
-from common.waf import cmd_build as build
-from common.waf import cmd_options as options
-from common.waf import spell
-from common.waf import cmd_spell
-from common.waf import linkcheck
-from common.waf import cmd_linkcheck
diff --git a/eng/build-system.rst b/eng/build-system.rst
index e76b606..030679d 100644
--- a/eng/build-system.rst
+++ b/eng/build-system.rst
@@ -355,8 +355,8 @@ Add a Base BSP to a BSP Family
items ``spec:/build/bsps/arch/family/bsprst``,
``spec:/build/bsps/arch/family/bspuvw``, and
``spec:/build/bsps/arch/family/bspxyz`` just define the name of the base
- BSP and set a link to the group item. The base BSP names can be used for
- example in the ``default-by-variant`` attribute of
+ BSP and set a link to the group item. The base BSP and BSP family names
+ can be used for example in the ``default-by-variant`` attribute of
:ref:`SpecTypeBuildOptionItemType` items. The items linked by the BSP
items are shown using relative UIDs.
diff --git a/eng/coding-conventions.rst b/eng/coding-conventions.rst
index 668a917..575dd44 100644
--- a/eng/coding-conventions.rst
+++ b/eng/coding-conventions.rst
@@ -219,8 +219,6 @@ Performance
* Understand the constraints of `real-time programming <https://devel.rtems.org/wiki/TBR/Review/Real-Time_Resources>`_..
Limit execution times in interrupt contexts and critical sections,
such as Interrupt and Timer Service Routines (TSRs).
-* Functions used only through function pointers should be declared
- 'static inline' (RTEMS_INLINE_ROUTINE)
* Prefer to ++preincrement instead of postincrement++.
* Avoid using floating point except where absolutely necessary.
diff --git a/eng/req/items.rst b/eng/req/items.rst
index db39547..2c1e361 100644
--- a/eng/req/items.rst
+++ b/eng/req/items.rst
@@ -719,8 +719,11 @@ default
default-by-variant
The attribute value shall be a list. Each list element shall be a
- :ref:`SpecTypeBuildOptionDefaultByVariant`. The list is processed from top
- to bottom. If a matching variant is found, then the processing stops.
+ :ref:`SpecTypeBuildOptionDefaultByVariant`. The list is checked two times
+ and processed from top to bottom. Firstly, the base BSP name is used to
+ match with a variant. Secondly, the BSP family name prefixed by ``bsps/``
+ is used to match with a variant. If a matching variant is found, then the
+ processing stops.
description
The attribute value shall be an optional string. It shall be the
@@ -750,6 +753,7 @@ Please have a look at the following example:
default-by-variant:
- value: 9600
variants:
+ - bsps/powerpc/motorola_powerpc
- m68k/m5484FireEngine
- powerpc/hsc_cm01
- value: 19200
@@ -1544,6 +1548,13 @@ name
notes
The attribute value shall be an :ref:`SpecTypeInterfaceNotes`.
+params
+ The attribute value shall be a list. Each list element shall be an
+ :ref:`SpecTypeInterfaceParameter`.
+
+return
+ The attribute value shall be an :ref:`SpecTypeInterfaceReturnDirective`.
+
.. _SpecTypeInterfaceUnspecifiedItemType:
Interface Unspecified Item Type
@@ -3090,7 +3101,7 @@ Build Install Path
A value of this type shall be of one of the following variants:
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string. It shall be the installation path of a
:ref:`SpecTypeBuildTarget`.
@@ -3451,7 +3462,7 @@ A value of this type shall be of one of the following variants:
* The value may be a list. Each list element shall be a string.
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string.
@@ -3692,7 +3703,7 @@ Interface Brief Description
A value of this type shall be of one of the following variants:
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string. It shall be the brief description of the
interface. It should be a single sentence. The value shall not match with
@@ -3786,23 +3797,27 @@ definition
Interface Compound Member Definition
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-This set of attributes specifies an interface compound member definition. All
-explicit attributes shall be specified. The explicit attributes for this type
-are:
+A value of this type shall be of one of the following variants:
-brief
- The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
+* The value may be a set of attributes. This set of attributes specifies an
+ interface compound member definition. All explicit attributes shall be
+ specified. The explicit attributes for this type are:
-description
- The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
+ brief
+ The attribute value shall be an :ref:`SpecTypeInterfaceBriefDescription`.
-kind
- The attribute value shall be a string. It shall be the interface compound
- member kind.
+ description
+ The attribute value shall be an :ref:`SpecTypeInterfaceDescription`.
-name
- The attribute value shall be a string. It shall be the interface compound
- member name.
+ kind
+ The attribute value shall be a string. It shall be the interface compound
+ member kind.
+
+ name
+ The attribute value shall be a string. It shall be the interface compound
+ member name.
+
+* There may be no value (null).
This type is refined by the following types:
@@ -3871,7 +3886,7 @@ Interface Definition
A value of this type shall be of one of the following variants:
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string. It shall be the definition. On the definition a
context-sensitive substitution of item variables is performed.
@@ -3941,7 +3956,7 @@ Interface Description
A value of this type shall be of one of the following variants:
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string. It shall be the description of the interface. The
description should be short and concentrate on the average case. All special
@@ -4059,33 +4074,38 @@ links.
Interface Function Definition
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-This set of attributes specifies a function definition. All explicit attributes
-shall be specified. The explicit attributes for this type are:
+A value of this type shall be of one of the following variants:
-attributes
- The attribute value shall be an optional string. If the value is present,
- then it shall be the function attributes. On the attributes a
- context-sensitive substitution of item variables is performed. A function
- attribute is for example the indication that the function does not return
- to the caller.
+* The value may be a set of attributes. This set of attributes specifies a
+ function definition. All explicit attributes shall be specified. The explicit
+ attributes for this type are:
-body
- The attribute value shall be an optional string. If the value is present,
- then it shall be the definition of a static inline function. On the
- function definition a context-sensitive substitution of item variables is
- performed. If no value is present, then the function is declared as an
- external function.
+ attributes
+ The attribute value shall be an optional string. If the value is present,
+ then it shall be the function attributes. On the attributes a
+ context-sensitive substitution of item variables is performed. A
+ function attribute is for example the indication that the function does
+ not return to the caller.
-params
- The attribute value shall be a list of strings. It shall be the list of
- parameter declarations of the function. On the function parameter
- declarations a context-sensitive substitution of item variables is
- performed.
+ body
+ The attribute value shall be an optional string. If the value is present,
+ then it shall be the definition of a static inline function. On the
+ function definition a context-sensitive substitution of item variables is
+ performed. If no value is present, then the function is declared as an
+ external function.
-return
- The attribute value shall be a string. It shall be the function return
- type. On the return type a context-sensitive substitution of item
- variables is performed.
+ params
+ The attribute value shall be a list of strings. It shall be the list of
+ parameter declarations of the function. On the function parameter
+ declarations a context-sensitive substitution of item variables is
+ performed.
+
+ return
+ The attribute value shall be a string. It shall be the function return
+ type. On the return type a context-sensitive substitution of item
+ variables is performed.
+
+* There may be no value (null).
This type is used by the following types:
@@ -4171,6 +4191,18 @@ This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
value is ``interface-ingroup``. It defines the interface group membership role
of links.
+.. _SpecTypeInterfaceHiddenGroupMembershipLinkRole:
+
+Interface Hidden Group Membership Link Role
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This type refines the :ref:`SpecTypeLink` through the ``role`` attribute if the
+value is ``interface-ingroup-hidden``. It defines the interface hidden group
+membership role of links. This role may be used to make an interface a group
+member and hide this relationship in the documentation. An example is an
+optimized macro implementation of a directive which has the same name as the
+corresponding directive.
+
.. _SpecTypeInterfaceIncludeLinkRole:
Interface Include Link Role
@@ -4194,7 +4226,7 @@ Interface Notes
A value of this type shall be of one of the following variants:
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string. It shall be the notes for the interface.
@@ -4240,6 +4272,8 @@ This type is used by the following types:
* :ref:`SpecTypeInterfaceMacroItemType`
+* :ref:`SpecTypeInterfaceTypedefItemType`
+
.. _SpecTypeInterfaceParameterDirection:
Interface Parameter Direction
@@ -4247,7 +4281,7 @@ Interface Parameter Direction
A value of this type shall be of one of the following variants:
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string. It specifies the interface parameter direction.
The value shall be an element of
@@ -4293,16 +4327,21 @@ This type is used by the following types:
Interface Return Directive
^^^^^^^^^^^^^^^^^^^^^^^^^^
-This set of attributes specifies an interface return. All explicit attributes
-shall be specified. The explicit attributes for this type are:
+A value of this type shall be of one of the following variants:
-return
- The attribute value shall be an optional string. It shall describe the
- interface return for unspecified return values.
+* The value may be a set of attributes. This set of attributes specifies an
+ interface return. All explicit attributes shall be specified. The explicit
+ attributes for this type are:
-return-values
- The attribute value shall be a list. Each list element shall be an
- :ref:`SpecTypeInterfaceReturnValue`.
+ return
+ The attribute value shall be an optional string. It shall describe the
+ interface return for unspecified return values.
+
+ return-values
+ The attribute value shall be a list. Each list element shall be an
+ :ref:`SpecTypeInterfaceReturnValue`.
+
+* There may be no value (null).
This type is used by the following types:
@@ -4310,6 +4349,8 @@ This type is used by the following types:
* :ref:`SpecTypeInterfaceMacroItemType`
+* :ref:`SpecTypeInterfaceTypedefItemType`
+
.. _SpecTypeInterfaceReturnValue:
Interface Return Value
@@ -4372,6 +4413,8 @@ This type is refined by the following types:
* :ref:`SpecTypeInterfaceGroupMembershipLinkRole`
+* :ref:`SpecTypeInterfaceHiddenGroupMembershipLinkRole`
+
* :ref:`SpecTypeInterfaceIncludeLinkRole`
* :ref:`SpecTypeInterfacePlacementLinkRole`
@@ -4455,7 +4498,7 @@ Optional String
A value of this type shall be of one of the following variants:
-* There may by be no value (null).
+* There may be no value (null).
* The value may be a string.
@@ -5471,7 +5514,7 @@ A value of this type shall be of one of the following variants:
member definition. It shall be a valid C structure member definition
without a trailing ``;``.
-* There may by be no value (null).
+* There may be no value (null).
This type is used by the following types:
@@ -5503,6 +5546,12 @@ A value of this type shall be of one of the following variants:
scope after the general test declarations and before the test run
function declaration.
+ freestanding
+ The attribute value shall be a boolean. The value shall be ``true``, if
+ the test case is freestanding, otherwise ``false``. Freestanding test
+ cases are not statically registered. Instead the generated test runner
+ uses :c:func:`T_case_begin` and :c:func:`T_case_end`.
+
includes
The attribute value shall be a list of strings. It shall be a list of
header files included by the header file via ``#include <...>``.
@@ -5519,7 +5568,7 @@ A value of this type shall be of one of the following variants:
The attribute value shall be a string. It shall be the path to the
generated test header file.
-* There may by be no value (null).
+* There may be no value (null).
This type is used by the following types:
@@ -5581,7 +5630,7 @@ A value of this type shall be of one of the following variants:
The attribute value shall be an optional string. It shall be the test
support method description.
-* There may by be no value (null).
+* There may be no value (null).
This type is used by the following types:
diff --git a/images/eclipse/eclipse-autotools.png b/images/eclipse/eclipse-autotools.png
deleted file mode 100644
index d04a138..0000000
--- a/images/eclipse/eclipse-autotools.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-cdt.png b/images/eclipse/eclipse-cdt.png
deleted file mode 100644
index a0cb57d..0000000
--- a/images/eclipse/eclipse-cdt.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-gcc-cross.png b/images/eclipse/eclipse-gcc-cross.png
deleted file mode 100644
index 8cc72e0..0000000
--- a/images/eclipse/eclipse-gcc-cross.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-help-installation.png b/images/eclipse/eclipse-help-installation.png
deleted file mode 100644
index 1572ce4..0000000
--- a/images/eclipse/eclipse-help-installation.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-install-new-software.png b/images/eclipse/eclipse-install-new-software.png
deleted file mode 100644
index 7f5d982..0000000
--- a/images/eclipse/eclipse-install-new-software.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-new-project.png b/images/eclipse/eclipse-new-project.png
deleted file mode 100644
index b5ef677..0000000
--- a/images/eclipse/eclipse-new-project.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-project-import-existing-code.png b/images/eclipse/eclipse-project-import-existing-code.png
deleted file mode 100644
index 23e8d4f..0000000
--- a/images/eclipse/eclipse-project-import-existing-code.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-project-makefile-existing-code.png b/images/eclipse/eclipse-project-makefile-existing-code.png
deleted file mode 100644
index f3fa4fa..0000000
--- a/images/eclipse/eclipse-project-makefile-existing-code.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-build-project-building.png b/images/eclipse/eclipse-rtems-git-build-project-building.png
deleted file mode 100644
index 33e9d3b..0000000
--- a/images/eclipse/eclipse-rtems-git-build-project-building.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-build-project.png b/images/eclipse/eclipse-rtems-git-build-project.png
deleted file mode 100644
index 79fa8a0..0000000
--- a/images/eclipse/eclipse-rtems-git-build-project.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-built.png b/images/eclipse/eclipse-rtems-git-built.png
deleted file mode 100644
index 45e0f40..0000000
--- a/images/eclipse/eclipse-rtems-git-built.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-convert-autotools-dialog.png b/images/eclipse/eclipse-rtems-git-convert-autotools-dialog.png
deleted file mode 100644
index 2ed3979..0000000
--- a/images/eclipse/eclipse-rtems-git-convert-autotools-dialog.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-convert-autotools.png b/images/eclipse/eclipse-rtems-git-convert-autotools.png
deleted file mode 100644
index 62d5bdb..0000000
--- a/images/eclipse/eclipse-rtems-git-convert-autotools.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-files.png b/images/eclipse/eclipse-rtems-git-files.png
deleted file mode 100644
index 0e5e78f..0000000
--- a/images/eclipse/eclipse-rtems-git-files.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-at-add-opts.png b/images/eclipse/eclipse-rtems-git-prop-at-add-opts.png
deleted file mode 100644
index 6363f44..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-at-add-opts.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-at-prefix.png b/images/eclipse/eclipse-rtems-git-prop-at-prefix.png
deleted file mode 100644
index c4b21c6..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-at-prefix.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-at-target.png b/images/eclipse/eclipse-rtems-git-prop-at-target.png
deleted file mode 100644
index 454bd6f..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-at-target.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-cdt-build.png b/images/eclipse/eclipse-rtems-git-prop-cdt-build.png
deleted file mode 100644
index 1457d08..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-cdt-build.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-cdt-env-replace.png b/images/eclipse/eclipse-rtems-git-prop-cdt-env-replace.png
deleted file mode 100644
index b9c3ea8..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-cdt-env-replace.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path-add.png b/images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path-add.png
deleted file mode 100644
index 80e99c1..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path-add.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path.png b/images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path.png
deleted file mode 100644
index 52ef22c..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-cdt-env-var-path.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-cdt-env-var.png b/images/eclipse/eclipse-rtems-git-prop-cdt-env-var.png
deleted file mode 100644
index 030e826..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-cdt-env-var.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-cdt-env.png b/images/eclipse/eclipse-rtems-git-prop-cdt-env.png
deleted file mode 100644
index 089862b..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-cdt-env.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-prop-cdt-settings.png b/images/eclipse/eclipse-rtems-git-prop-cdt-settings.png
deleted file mode 100644
index a566669..0000000
--- a/images/eclipse/eclipse-rtems-git-prop-cdt-settings.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-properties-menu.png b/images/eclipse/eclipse-rtems-git-properties-menu.png
deleted file mode 100644
index 33745ba..0000000
--- a/images/eclipse/eclipse-rtems-git-properties-menu.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-reconfigure-console.png b/images/eclipse/eclipse-rtems-git-reconfigure-console.png
deleted file mode 100644
index fd219bc..0000000
--- a/images/eclipse/eclipse-rtems-git-reconfigure-console.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-rtems-git-reconfigure.png b/images/eclipse/eclipse-rtems-git-reconfigure.png
deleted file mode 100644
index 504daf6..0000000
--- a/images/eclipse/eclipse-rtems-git-reconfigure.png
+++ /dev/null
Binary files differ
diff --git a/images/eclipse/eclipse-sdk-details.png b/images/eclipse/eclipse-sdk-details.png
deleted file mode 100644
index c8eafe4..0000000
--- a/images/eclipse/eclipse-sdk-details.png
+++ /dev/null
Binary files differ
diff --git a/user/bsps/aarch64/a53.rst b/user/bsps/aarch64/a53.rst
index 52e1509..9d8e1ce 100644
--- a/user/bsps/aarch64/a53.rst
+++ b/user/bsps/aarch64/a53.rst
@@ -29,7 +29,9 @@ The console driver supports the default Qemu emulated ARM PL011 PrimeCell UART.
Running Executables
-------------------
-Executables generated by these BSPs can be run using the following command::
+Executables generated by these BSPs can be run using the following command:
-qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
- -machine virt,gic-version=3 -cpu cortex-a53 -m 4096 -kernel example.exe
+.. code-block:: shell
+
+ qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
+ -machine virt,gic-version=3 -cpu cortex-a53 -m 4096 -kernel example.exe
diff --git a/user/bsps/aarch64/xilinx-versal.rst b/user/bsps/aarch64/xilinx-versal.rst
new file mode 100644
index 0000000..51489f2
--- /dev/null
+++ b/user/bsps/aarch64/xilinx-versal.rst
@@ -0,0 +1,39 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2021 Gedare Bloom
+
+.. _BSP_aarch64_qemu_xilinx_versal_ilp32_qemu:
+.. _BSP_aarch64_qemu_xilinx_versal_lp64_qemu:
+
+Qemu Xilinx Versal
+==================
+
+This BSP supports two variants, `xilinx-versal-ilp32-qemu` and
+`xilinx-versal-lp64-qemu`. The basic hardware initialization is performed by the
+BSP. These BSPs support the GICv3 interrupt controller present in the Xilinx
+Versal Adaptive Compute Acceleration Platform (ACAP) systems. The BSPs
+currently only work when started in the secure mode.
+
+Boot via ELF
+------------
+The executable image is booted by Qemu in ELF format.
+
+Clock Driver
+------------
+
+The clock driver uses the `ARM Generic Timer`.
+
+Console Driver
+--------------
+
+The console driver supports the default Qemu emulated ARM PL011 PrimeCell UART.
+There are some differences between the PL011 and the UART used by actual Versal
+ACAP hardware systems.
+
+Running Executables
+-------------------
+
+Executables generated by these BSPs can be run using the following command::
+
+qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
+ -machine xlnx-versal-virt -m 4096 -kernel example.exe
diff --git a/user/bsps/aarch64/xilinx-zynqmp.rst b/user/bsps/aarch64/xilinx-zynqmp.rst
index 7401e84..ca232de 100644
--- a/user/bsps/aarch64/xilinx-zynqmp.rst
+++ b/user/bsps/aarch64/xilinx-zynqmp.rst
@@ -4,19 +4,46 @@
.. _BSP_aarch64_qemu_xilinx_zynqmp_ilp32_qemu:
.. _BSP_aarch64_qemu_xilinx_zynqmp_lp64_qemu:
+.. _BSP_aarch64_qemu_xilinx_zynqmp_ilp32_zu3eg:
+.. _BSP_aarch64_qemu_xilinx_zynqmp_lp64_zu3eg:
Qemu Xilinx ZynqMP
==================
-This BSP supports two variants, `xilinx-zynqmp-ilp32-qemu` and
-`xilinx-zynqmp-lp64-qemu`. The basic hardware initialization is performed by the
-BSP. These BSPs support the GICv2 interrupt controller present in all ZynqMP
-systems.
+This BSP supports four variants: `xilinx-zynqmp-ilp32-qemu`,
+`xilinx-zynqmp-lp64-qemu`, `xilinx-zynqmp-ilp32-zu3eg`, and
+`xilinx-zynqmp-lp64-zu3eg`. Platform-specific hardware initialization is
+performed by ARM Trusted Firmware (ATF). Other basic hardware initialization is
+performed by the BSP. These BSPs support the GICv2 interrupt controller present
+in all ZynqMP systems. The zu3eg BSPs have also been tested to be fully
+functional on zu2cg boards and should also work on any other ZynqMP chip variant
+since the Processing Subsystem (PS) does not vary among chip variants other than
+the number of CPU cores available.
-Boot via ELF
+Boot on QEMU
------------
The executable image is booted by Qemu in ELF format.
+Boot on ZynqMP Hardware
+-----------------------
+
+On ZynqMP hardware, RTEMS can be started at EL1, EL2, or EL3 by u-boot or
+directly as part of BOOT.bin. Regardless of the exception level at boot, RTEMS
+will drop to EL1 for execution. For quick turnaround during testing, it is
+recommended to use the u-boot BOOT.bin that comes with the PetaLinux prebuilts
+for the board in question.
+
+Hardware Boot Image Generation
+------------------------------
+
+RTEMS expects some hardware initialization to be performed by ATF and expects
+the services it provides to be present, so this must be included when generating
+a direct-boot RTEMS BOOT.bin.
+
+When booting via u-boot, RTEMS must be packaged into a u-boot image or booted
+as a raw binary since u-boot does not currently support ELF64 which is required
+for AArch64 ELF binaries.
+
Clock Driver
------------
@@ -25,12 +52,37 @@ The clock driver uses the `ARM Generic Timer`.
Console Driver
--------------
-The console driver supports the default Qemu emulated ARM PL011 PrimeCell UART.
+The console driver supports the default Qemu emulated ARM PL011 PrimeCell UART
+as well as the physical ARM PL011 PrimeCell UART in the ZynqMP hardware.
+
+SDHCI Driver
+------------
+
+The ZynqMP bsp has an SDHCI driver which allows reading to and writing from SD
+cards. These can be tested in qemu using the "-sd" option. For example:
+
+.. code-block:: shell
+
+ qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
+ -machine xlnx-zcu102 -m 4096 -kernel media01.exe -sd example.img
+
+The SD card image should have an MSDOS partition table with a single partition
+containing a FAT file system.
+
+Network Configuration
+---------------------
+
+When used with LibBSD, these BSP variants support networking via the four
+Cadence GEM instances present on all ZynqMP hardware variants. All interfaces
+are enabled by default, but only interfaces with operational MII busses will be
+recognized and usable in RTEMS. Most ZynqMP dev boards use CGEM3.
+
+Running Executables on QEMU
+---------------------------
-Running Executables
--------------------
+Executables generated by these BSPs can be run using the following command:
-Executables generated by these BSPs can be run using the following command::
+.. code-block:: shell
-qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
- -machine xlnx-zcu102 -m 4096 -kernel example.exe
+ qemu-system-aarch64 -no-reboot -nographic -serial mon:stdio \
+ -machine xlnx-zcu102 -m 4096 -kernel example.exe
diff --git a/user/bsps/arm/imxrt.rst b/user/bsps/arm/imxrt.rst
index c60b51d..f8d9731 100644
--- a/user/bsps/arm/imxrt.rst
+++ b/user/bsps/arm/imxrt.rst
@@ -10,6 +10,10 @@ This BSP offers only one variant, the `imxrt1052`. This variant supports the
i.MXRT 1052 processor on a IMXRT1050-EVKB (tested with rev A1). You can also
configure it to work with custom boards.
+NOTE: The IMXRT1050-EVKB has an backlight controller that must not be enabled
+without load. Make sure to either attach a load, disable it by software or
+disable it by removing the 0-Ohm resistor on it's input.
+
Build Configuration Options
---------------------------
@@ -41,6 +45,11 @@ Then just copy the generated binary to the mass storage provided by the
debugger. Wait a bit till the mass storage vanishes and re-appears. After that,
reset the board and the newly programmed application will start.
+NOTE: It seems that there is a bug on at least some of the on board debuggers.
+They can't write more than 1MB to the HyperFlash. If your application is bigger
+than that (like quite some of the applications in libbsd), you should use an
+external debugger or find some alternative programming method.
+
For debugging: Create a special application with a `while(true)` loop at end of
`bsp_start_hook_1`. Load that application into flash. Then remove the loop
again, build your BSP for SDRAM and use a debugger to load the application into
@@ -121,7 +130,27 @@ with your FDT source names)::
dtc -O dtb -o "YOUR.dtb" -b 0 -p 64
sh> rtems-bin2c -C -N imxrt_dtb "YOUR.dtb" "YOUR.c"
-Make sure that your new c file is compiled and linked into the application.
+Make sure that your new C file is compiled and linked into the application.
+
+PLL Settings
+------------
+
+The commercial variant of the i.MXRT1052 on the evaluation board allows a clock
+up to 600MHz for the ARM core. For some industrial variants only up to 528MHz
+are specified. To make it possible to adapt to these variants the application
+can overwrite the following constant:
+
+.. code-block:: c
+
+ #include "fsl_clock_config.h"
+
+ const clock_arm_pll_config_t armPllConfig_BOARD_BootClockRUN = {
+ .loopDivider = 100,
+ .src = 0,
+ };
+
+With the default configuration of a 24MHz oscillator, the loopDivider has to be
+88 for the 528MHz.
Clock Driver
------------
diff --git a/user/bsps/arm/raspberrypi.rst b/user/bsps/arm/raspberrypi.rst
index c26f4b5..235134f 100644
--- a/user/bsps/arm/raspberrypi.rst
+++ b/user/bsps/arm/raspberrypi.rst
@@ -5,8 +5,9 @@
raspberrypi
===========
-This BSP supports `Raspberry Pi 1` and `Raspberry Pi 2` currently.
-The support for `Raspberry Pi 3` is work under progress.
+The 'raspberrypi' BSP supports the single core models (Zero, Zero W, A+, B+),
+and the 'raspberrypi2' BSP supports the Raspberry Pi 2, Raspberry Pi 3 A+, and Raspberry Pi 3.
+The Raspberry Pi 4 is not supported currently.
The default bootloader on the Raspberry Pi which is used to boot Raspbian
or other OS can be also used to boot RTEMS. U-boot can also be used.
@@ -19,10 +20,12 @@ The bootloader looks for a kernel image, by default the kernel images must
have a name of the form ``kernel*.img`` but this can be changed by adding
`kernel=<img_name>` to ``config.txt``.
-You must provide the required files for the GPU to proceed. These files
+You must provide the required firmware files on the SD card for the GPU to proceed,
+and thereby to boot RTEMS.
+The BSP currently boots up with an older version of the official firmware. These files
can be downloaded from
-`the Raspberry Pi Firmware Repository <https://github.com/raspberrypi/firmware/tree/master/boot>`_.
-You can remove the ``kernel*.img`` files if you want too, but don't touch
+`the Raspberry Pi Firmware Repository <https://github.com/raspberrypi/firmware/tree/1.20200601/boot>`_.
+You can remove the ``kernel*.img`` files if you want to, but don't touch
the other files.
Copy these files in to a SD card with FAT filesystem.
@@ -46,10 +49,46 @@ Make sure you have these lines below, in your ``config.txt``.
.. code-block:: none
- enable_uart=1
+ dtoverlay=disable-bt
kernel_address=0x200000
kernel=kernel.img
+SPI Driver
+------------
+
+SPI drivers are registered by the ``rpi_spi_init(bool bidirectional_mode)`` function.
+
+.. code-block:: none
+
+ #include <assert.h>
+ #include <bsp.h>
+
+ void spi_init(void)
+ {
+ int rv;
+
+ rv = rpi_spi_init(false);
+ assert(rv == 0);
+ }
+
+I2C Driver
+------------
+
+I2C drivers are registered by the ``rpi_setup_i2c_bus()`` function.
+
+.. code-block:: none
+
+ #include <assert.h>
+ #include <bsp.h>
+
+ void i2c_init(void)
+ {
+ int rv;
+
+ rv = rpi_setup_i2c_bus();
+ assert(rv == 0);
+ }
+
Testing using QEMU
------------------
diff --git a/user/bsps/bsps-aarch64.rst b/user/bsps/bsps-aarch64.rst
index 566a750..933370f 100644
--- a/user/bsps/bsps-aarch64.rst
+++ b/user/bsps/bsps-aarch64.rst
@@ -7,4 +7,5 @@ aarch64 (AArch64)
.. include:: aarch64/a53.rst
.. include:: aarch64/a72.rst
+.. include:: aarch64/xilinx-versal.rst
.. include:: aarch64/xilinx-zynqmp.rst
diff --git a/user/hosts/posix.rst b/user/hosts/posix.rst
index 6686fc9..818eb25 100644
--- a/user/hosts/posix.rst
+++ b/user/hosts/posix.rst
@@ -195,6 +195,13 @@ The RTEMS Source Builder has been tested on FreeBSD 9.1, 10.3, 11 and
# pkg install -y python
# pkg install -y gsed
+For FreeBSD 13, you will need to install the packages listed above, as well as
+the following additional ones. They are:
+
+.. code-block:: none
+
+ # pkg install -y bison texinfo gmake binutils
+
FreeBSD's default C compiler is LLVM and installing the host's GCC compiler
package may break building GCC. We recommend you do not install the GCC
package and you use the default C compiler.
diff --git a/user/start/app.rst b/user/start/app.rst
index 2bb0a9e..19ae3e1 100644
--- a/user/start/app.rst
+++ b/user/start/app.rst
@@ -209,7 +209,7 @@ Run the executable:
.. code-block:: none
- $HOME/quick-start/rtems/6/bin/rtems-run --rtems-bsps=erc32-sis build/sparc-rtems-erc32/hello.exe
+ $HOME/quick-start/rtems/6/bin/rtems-run --rtems-bsps=erc32-sis build/sparc-rtems6-erc32/hello.exe
The output will be something close to:
diff --git a/user/testing/configuration.rst b/user/testing/configuration.rst
index 9c65506..4d67482 100644
--- a/user/testing/configuration.rst
+++ b/user/testing/configuration.rst
@@ -1,6 +1,6 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
-.. Copyright (C) 2018 Chris Johns <chrisj@rtems.org>
+.. Copyright (C) 2018,2021 Chris Johns <chrisj@rtems.org>
Tester Configuration
--------------------
@@ -226,9 +226,10 @@ supported directives are:
- ``%execute``
- ``%gdb``
- ``%tftp``
+- ``%wait``
-.. _tester-config-console:
.. index:: Console, %console
+.. _tester-config-console:
Console
~~~~~~~
@@ -278,10 +279,12 @@ configuration script. If the ``%{console_stdio}`` is defined the console will
be ``stdio`` else the console will be the BSP console or ``%{bsp_tty_dev}``.
Telnet can be combined with the ``ser2net`` daemon to remotely access a
-target's physical serial UART interface.
+target's physical serial UART interface. The syntax is ``host:port``::
+
+ %define bsp_tty_dev 1.2.3.4:8989
-.. _tester-config-execute:
.. index:: Execute, %execute
+.. _tester-config-execute:
Execute
~~~~~~~
@@ -297,8 +300,8 @@ An example is::
%execute %{run_cmd} %{run_opts} %{test_executable} %{test_executable_opts}
-.. _tester-config-gdb:
.. index:: GDB, %gdb
+.. _tester-config-gdb:
GDB
~~~
@@ -313,8 +316,8 @@ An example is::
%gdb %{gdb_cmd} %{test_executable} %{gdb_script}
-.. _tester-config-tftp:
.. index:: TFTP, %tftp
+.. _tester-config-tftp:
TFTP
~~~~
@@ -328,3 +331,72 @@ board running the test.
An example is::
%tftp %{test_executable} %{tftp_port}
+
+The RTEMS Tester contains a TFTP server so an external TFTP is not
+needed. It is recommended a TFTP Proxy is set up to handle the TFTP
+sessions for your network. The internal TFTP server ignores the
+requrest file and serves the next executable. If the target requires
+the executable ne in a specific format provide a script via the
+``target_pretest_command`` option in your user configuration file.
+
+The RTEMS Tools provides a TFTP protocol proxy server. It takes a list
+of MAC addresses and proxies TFTP sessions for that MAC address to
+another IP address and port. A proxy provides the following benefits:
+
+1. The TFTP proxy server is the only software required to run as root
+
+2. All hardware targets can be configured to serve from a single
+ machine and the proxy can distribute the sessions out to developer
+ machines
+
+3. There is no need to provide a globally writable file system a
+ central TFTP server acceses
+
+If you have a central TFTP server refer to the ``%wait`` directive.
+
+.. index:: Wait, %wait
+.. _tester-config-wait:
+
+Wait
+~~~~
+
+The ``%wait`` directive waits the timeout period for a test to
+complete. The directive monitors the console output and resets the
+timeout timer if console output is seen. If the test runs for too long
+while outputing data an error is reported.
+
+The wait directive can be used in systems where there is an external
+mechanism being used to send the executable to the target hardware.
+
+An example is::
+
+ %wait
+
+Wait has no options. The timeouts are controlled in other ways.
+
+If you have an external system wide TFTP server with global access
+wait can used by providing a `` script that places the file in the
+location the TFTP server can see. This is done as the test start so if
+networking loading there is normally enough time to get the executable
+image in place before the transfer starts. The MVME2700
+(``powerpc/mvme2307``) is a BSP that supports the ``%wait`` directive.
+
+The following is an example user configuration file (see
+``--user-config``)::
+
+ #
+ # MVME2700 (mvme2307)
+ #
+ [mvme2307]
+ bsp_tty_dev = 1.2.3.4:5678
+ target_pretest_command = mk-mvme2307-img @EXE@ /tftp/cjohns/rtems.img
+ target_exe_filter = /\.exe/.exe.img/
+ target_on_command = pw-ctl 1.2.3.4 toggle-on 3 1
+ target_off_command = pw-ctl 1.2.3.4 off 3
+ target_reset_command = pw-ctl 1.2.3.4 toggle-on 3 1
+
+The script ``mk-mvme2307-img`` converts the RTEMS ELF executable into
+the PowerPC prep bootloader format and copies the file to the TFTP
+server's network wide location. The MVME2700 is configured to request
+``rtems.img`` from this location. The command ``pw-ctl`` is a command
+to control the power to the board.
diff --git a/user/testing/tftp.rst b/user/testing/tftp.rst
index ade8f9a..4cb16ef 100644
--- a/user/testing/tftp.rst
+++ b/user/testing/tftp.rst
@@ -10,10 +10,14 @@ TFTP and U-Boot
.. index:: TFTP, U-Boot, Testing
TFTP and U-Boot provides a simple way to test RTEMS on a network capable
-target. The RTEMS Tester starts a TFTP server for each test and the target's
-boot monitor, in this case U-Boot request a file, any file, which the TFTP
-server supplies. U-Boot loads the executable and boots it using a standard
-U-Boot script.
+target. The RTEMS Tester starts a TFTP server session for each test and the
+target's boot monitor, in this case U-Boot request a file, any file, which the
+TFTP server supplies. U-Boot loads the executable and boots it using a
+standard U-Boot script.
+
+The RTEMS Tester contains a TFTP server so no external TFTP server or
+configuration is required. If you have an external TFTP server and wish to use
+that resource the :ref:`tester-config-wait` directive can be used.
.. _fig-tester-tftp-u-boot:
diff --git a/wscript b/wscript
index 0b1c368..fd8f10c 100644
--- a/wscript
+++ b/wscript
@@ -35,7 +35,6 @@ build_all = ['user',
'shell',
'cpu-supplement',
'develenv',
- 'eclipse',
'legacy-networking']
building = build_all