c-user: Generate dual-ported memory manager docs

The documentation is a consolidation of the comments in Doxygen markup
and the documentation sources in Sphinx markup.  The documentation was
transfered to interface specification items.  The documentation source
files were generated from the items by a script.

Update #3993.
This commit is contained in:
Sebastian Huber 2021-04-21 14:52:45 +02:00
parent a99562097a
commit 03fc1d6514
2 changed files with 363 additions and 160 deletions

View File

@ -1,229 +1,403 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0 .. SPDX-License-Identifier: CC-BY-SA-4.0
.. Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) .. Copyright (C) 1988, 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
.. _DualPortedMemoryManagerDirectives:
Directives Directives
========== ==========
This section details the dual-ported memory manager's directives. A subsection This section details the directives of the Dual-Ported Memory Manager. A
is dedicated to each of this manager's directives and describes the calling subsection is dedicated to each of this manager's directives and lists the
sequence, related constants, usage, and status codes. calling sequence, parameters, description, return values, and notes of the
directive.
.. Generated from spec:/rtems/dpmem/if/create
.. raw:: latex .. raw:: latex
\clearpage \clearpage
.. index:: rtems_port_create()
.. index:: create a port .. index:: create a port
.. index:: rtems_port_create
.. _rtems_port_create: .. _InterfaceRtemsPortCreate:
PORT_CREATE - Create a port rtems_port_create()
--------------------------- -------------------
CALLING SEQUENCE: Creates a port.
.. code-block:: c
rtems_status_code rtems_port_create( .. rubric:: CALLING SEQUENCE:
rtems_name name,
void *internal_start,
void *external_start,
uint32_t length,
rtems_id *id
);
DIRECTIVE STATUS CODES: .. code-block:: c
.. list-table::
:class: rtems-table
* - ``RTEMS_SUCCESSFUL`` rtems_status_code rtems_port_create(
- port created successfully rtems_name name,
* - ``RTEMS_INVALID_NAME`` void *internal_start,
- invalid port name void *external_start,
* - ``RTEMS_INVALID_ADDRESS`` uint32_t length,
- address not on four byte boundary rtems_id *id
* - ``RTEMS_INVALID_ADDRESS`` );
- ``id`` is NULL
* - ``RTEMS_TOO_MANY``
- too many DP memory areas created
DESCRIPTION: .. rubric:: PARAMETERS:
This directive creates a port which resides on the local node for the
specified DPMA. The assigned port id is returned in id. This port id is
used as an argument to other dual-ported memory manager directives to
convert addresses within this DPMA.
For control and maintenance of the port, RTEMS allocates and initializes an ``name``
DPCB from the DPCB free pool. Thus memory from the dual-ported memory area This parameter is the object name of the port.
is not used to store the DPCB.
NOTES: ``internal_start``
This directive may cause the calling task to be preempted due to an This parameter is the internal start address of the memory area.
obtain and release of the object allocator mutex.
The internal_address and external_address parameters must be on a four byte ``external_start``
boundary. This parameter is the external start address of the memory area.
``length``
This parameter is the length in bytes of the memory area.
``id``
This parameter is the pointer to an object identifier variable. When the
directive call is successful, the identifier of the created port will be
stored in this variable.
.. rubric:: DESCRIPTION:
This directive creates a port which resides on the local node. The port has
the user-defined object name specified in ``name``. The assigned object
identifier is returned in ``id``. This identifier is used to access the port
with other dual-ported memory port related directives.
.. rubric:: RETURN VALUES:
:c:macro:`RTEMS_SUCCESSFUL`
The requested operation was successful.
:c:macro:`RTEMS_INVALID_NAME`
The ``name`` parameter was invalid.
:c:macro:`RTEMS_INVALID_ADDRESS`
The ``id`` parameter was `NULL
<https://en.cppreference.com/w/c/types/NULL>`_.
:c:macro:`RTEMS_INVALID_ADDRESS`
The ``internal_start`` parameter was not properly aligned.
:c:macro:`RTEMS_INVALID_ADDRESS`
The ``external_start`` parameter was not properly aligned.
:c:macro:`RTEMS_TOO_MANY`
There was no inactive object available to create a port. The number of
port available to the application is configured through the
:ref:`CONFIGURE_MAXIMUM_PORTS` application configuration option.
.. rubric:: NOTES:
The ``internal_start`` and ``external_start`` parameters must be on a boundary
defined by the target processor architecture.
For control and maintenance of the port, RTEMS allocates a :term:`DPCB` from
the local DPCB free pool and initializes it.
.. 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 number of ports available to the application is configured through the
:ref:`CONFIGURE_MAXIMUM_PORTS` application configuration option.
* Where the object class corresponding to the directive is configured to use
unlimited objects, the directive may allocate memory from the RTEMS
Workspace.
.. Generated from spec:/rtems/dpmem/if/ident
.. raw:: latex .. raw:: latex
\clearpage \clearpage
.. index:: get ID of a port .. index:: rtems_port_ident()
.. index:: obtain ID of a port
.. index:: rtems_port_ident
.. _rtems_port_ident: .. _InterfaceRtemsPortIdent:
PORT_IDENT - Get ID of a port rtems_port_ident()
----------------------------- ------------------
CALLING SEQUENCE: Identifies a port by the object name.
.. code-block:: c
rtems_status_code rtems_port_ident( .. rubric:: CALLING SEQUENCE:
rtems_name name,
rtems_id *id
);
DIRECTIVE STATUS CODES: .. code-block:: c
.. list-table::
:class: rtems-table
* - ``RTEMS_SUCCESSFUL`` rtems_status_code rtems_port_ident( rtems_name name, rtems_id *id );
- port identified successfully
* - ``RTEMS_INVALID_ADDRESS``
- ``id`` is NULL
* - ``RTEMS_INVALID_NAME``
- port name not found
DESCRIPTION: .. rubric:: PARAMETERS:
This directive obtains the port id associated with the specified name to be
acquired. If the port name is not unique, then the port id will match one
of the DPMAs with that name. However, this port id is not guaranteed to
correspond to the desired DPMA. The port id is used to access this DPMA in
other dual-ported memory area related directives.
NOTES: ``name``
This directive will not cause the running task to be preempted. This parameter is the object name to look up.
``id``
This parameter is the pointer to an object identifier variable. When the
directive call is successful, the object identifier of an object with the
specified name will be stored in this variable.
.. rubric:: DESCRIPTION:
This directive obtains a port identifier associated with the port name
specified in ``name``.
.. rubric:: RETURN VALUES:
:c:macro:`RTEMS_SUCCESSFUL`
The requested operation was successful.
:c:macro:`RTEMS_INVALID_ADDRESS`
The ``id`` parameter was `NULL
<https://en.cppreference.com/w/c/types/NULL>`_.
:c:macro:`RTEMS_INVALID_NAME`
The ``name`` parameter was 0.
:c:macro:`RTEMS_INVALID_NAME`
There was no object with the specified name on the local node.
.. rubric:: NOTES:
If the port name is not unique, then the port identifier will match the first
port with that name in the search order. However, this port identifier is not
guaranteed to correspond to the desired port.
The objects are searched from lowest to the highest index. Only the local node
is searched.
The port identifier is used with other dual-ported memory related directives to
access the port.
.. 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/dpmem/if/delete
.. raw:: latex .. raw:: latex
\clearpage \clearpage
.. index:: rtems_port_delete()
.. index:: delete a port .. index:: delete a port
.. index:: rtems_port_delete
.. _rtems_port_delete: .. _InterfaceRtemsPortDelete:
PORT_DELETE - Delete a port rtems_port_delete()
--------------------------- -------------------
CALLING SEQUENCE: Deletes the port.
.. code-block:: c
rtems_status_code rtems_port_delete( .. rubric:: CALLING SEQUENCE:
rtems_id id
);
DIRECTIVE STATUS CODES: .. code-block:: c
.. list-table::
:class: rtems-table
* - ``RTEMS_SUCCESSFUL`` rtems_status_code rtems_port_delete( rtems_id id );
- port deleted successfully
* - ``RTEMS_INVALID_ID``
- invalid port id
DESCRIPTION: .. rubric:: PARAMETERS:
This directive deletes the dual-ported memory area specified by id. The
DPCB for the deleted dual-ported memory area is reclaimed by RTEMS.
NOTES: ``id``
This directive may cause the calling task to be preempted due to an This parameter is the port identifier.
obtain and release of the object allocator mutex.
The calling task does not have to be the task that created the port. Any .. rubric:: DESCRIPTION:
local task that knows the port id can delete the port.
This directive deletes the port specified by ``id``.
.. rubric:: RETURN VALUES:
:c:macro:`RTEMS_SUCCESSFUL`
The requested operation was successful.
:c:macro:`RTEMS_INVALID_ID`
There was no port associated with the identifier specified by ``id``.
.. rubric:: NOTES:
The :term:`DPCB` for the deleted port is reclaimed by RTEMS.
.. 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 calling task does not have to be the task that created the object. Any
local task that knows the object identifier can delete the object.
* Where the object class corresponding to the directive is configured to use
unlimited objects, the directive may free memory to the RTEMS Workspace.
.. Generated from spec:/rtems/dpmem/if/external-to-internal
.. raw:: latex .. raw:: latex
\clearpage \clearpage
.. index:: rtems_port_external_to_internal()
.. index:: convert external to internal address .. index:: convert external to internal address
.. index:: rtems_port_external_to_internal
.. _rtems_port_external_to_internal: .. _InterfaceRtemsPortExternalToInternal:
PORT_EXTERNAL_TO_INTERNAL - Convert external to internal address rtems_port_external_to_internal()
---------------------------------------------------------------- ---------------------------------
CALLING SEQUENCE: Converts the external address to the internal address.
.. code-block:: c
rtems_status_code rtems_port_external_to_internal( .. rubric:: CALLING SEQUENCE:
rtems_id id,
void *external,
void **internal
);
DIRECTIVE STATUS CODES: .. code-block:: c
.. list-table::
:class: rtems-table
* - ``RTEMS_INVALID_ADDRESS`` rtems_status_code rtems_port_external_to_internal(
- ``internal`` is NULL rtems_id id,
* - ``RTEMS_SUCCESSFUL`` void *external,
- successful conversion void **internal
);
DESCRIPTION: .. rubric:: PARAMETERS:
This directive converts a dual-ported memory address from external to
internal representation for the specified port. If the given external
address is invalid for the specified port, then the internal address is set
to the given external address.
NOTES: ``id``
This directive is callable from an ISR. This parameter is the port identifier.
This directive will not cause the calling task to be preempted. ``external``
This parameter is the external address to convert.
``internal``
This parameter is the pointer to a pointer variable. When the directive
call is successful, the external address associated with the internal
address will be stored in this variable.
.. rubric:: DESCRIPTION:
This directive converts a dual-ported memory address from external to internal
representation for the specified port. If the given external address is
invalid for the specified port, then the internal address is set to the given
external address.
.. rubric:: RETURN VALUES:
:c:macro:`RTEMS_SUCCESSFUL`
The requested operation was successful.
:c:macro:`RTEMS_INVALID_NAME`
The ``id`` parameter was invalid.
:c:macro:`RTEMS_INVALID_ADDRESS`
The ``internal`` parameter was `NULL
<https://en.cppreference.com/w/c/types/NULL>`_.
.. 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/dpmem/if/internal-to-external
.. raw:: latex .. raw:: latex
\clearpage \clearpage
.. index:: rtems_port_internal_to_external()
.. index:: convert internal to external address .. index:: convert internal to external address
.. index:: rtems_port_internal_to_external
.. _rtems_port_internal_to_external: .. _InterfaceRtemsPortInternalToExternal:
PORT_INTERNAL_TO_EXTERNAL - Convert internal to external address rtems_port_internal_to_external()
---------------------------------------------------------------- ---------------------------------
CALLING SEQUENCE: Converts the internal address to the external address.
.. code-block:: c
rtems_status_code rtems_port_internal_to_external( .. rubric:: CALLING SEQUENCE:
rtems_id id,
void *internal,
void **external
);
DIRECTIVE STATUS CODES: .. code-block:: c
.. list-table::
:class: rtems-table
* - ``RTEMS_INVALID_ADDRESS`` rtems_status_code rtems_port_internal_to_external(
- ``external`` is NULL rtems_id id,
* - ``RTEMS_SUCCESSFUL`` void *internal,
- successful conversion void **external
);
DESCRIPTION: .. rubric:: PARAMETERS:
This directive converts a dual-ported memory address from internal to
external representation so that it can be passed to owner of the DPMA
represented by the specified port. If the given internal address is an
invalid dual-ported address, then the external address is set to the given
internal address.
NOTES: ``id``
This directive is callable from an ISR. This parameter is the port identifier.
This directive will not cause the calling task to be preempted. ``internal``
This parameter is the internal address to convert.
``external``
This parameter is the pointer to a pointer variable. When the directive
call is successful, the external address associated with the internal
address will be stored in this variable.
.. rubric:: DESCRIPTION:
This directive converts a dual-ported memory address from internal to external
representation so that it can be passed to owner of the DPMA represented by the
specified port. If the given internal address is an invalid dual-ported
address, then the external address is set to the given internal address.
.. rubric:: RETURN VALUES:
:c:macro:`RTEMS_SUCCESSFUL`
The requested operation was successful.
:c:macro:`RTEMS_INVALID_NAME`
The ``id`` parameter was invalid.
:c:macro:`RTEMS_INVALID_ADDRESS`
The ``external`` parameter was `NULL
<https://en.cppreference.com/w/c/types/NULL>`_.
.. 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.

View File

@ -1,20 +1,49 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0 .. SPDX-License-Identifier: CC-BY-SA-4.0
.. Copyright (C) 2020, 2021 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) .. Copyright (C) 1988, 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/dpmem/if/group
.. _DualPortedMemoryManagerIntroduction:
Introduction Introduction
============ ============
The dual-ported memory manager provides a mechanism for converting addresses .. The following list was generated from:
.. spec:/rtems/dpmem/if/create
.. spec:/rtems/dpmem/if/ident
.. spec:/rtems/dpmem/if/delete
.. spec:/rtems/dpmem/if/external-to-internal
.. spec:/rtems/dpmem/if/internal-to-external
The Dual-Ported Memory Manager provides a mechanism for converting addresses
between internal and external representations for multiple dual-ported memory between internal and external representations for multiple dual-ported memory
areas (DPMA). The directives provided by the dual-ported memory manager are: areas (DPMA). The directives provided by the Dual-Ported Memory Manager are:
- :ref:`rtems_port_create` * :ref:`InterfaceRtemsPortCreate` - Creates a port.
- :ref:`rtems_port_ident` * :ref:`InterfaceRtemsPortIdent` - Identifies a port by the object name.
- :ref:`rtems_port_delete` * :ref:`InterfaceRtemsPortDelete` - Deletes the port.
- :ref:`rtems_port_external_to_internal` * :ref:`InterfaceRtemsPortExternalToInternal` - Converts the external address
to the internal address.
- :ref:`rtems_port_internal_to_external` * :ref:`InterfaceRtemsPortInternalToExternal` - Converts the internal address
to the external address.