diff options
Diffstat (limited to 'c-user/io/directives.rst')
-rw-r--r-- | c-user/io/directives.rst | 553 |
1 files changed, 553 insertions, 0 deletions
diff --git a/c-user/io/directives.rst b/c-user/io/directives.rst new file mode 100644 index 0000000..7def56a --- /dev/null +++ b/c-user/io/directives.rst @@ -0,0 +1,553 @@ +.. SPDX-License-Identifier: CC-BY-SA-4.0 + +.. Copyright (C) 2020 embedded brains GmbH & Co. KG +.. 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 + +.. _IOManagerDirectives: + +Directives +========== + +This section details the directives of the I/O 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/io/if/register-driver + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_register_driver() +.. index:: register a device driver + +.. _InterfaceRtemsIoRegisterDriver: + +rtems_io_register_driver() +-------------------------- + +Registers and initializes the device with the specified device driver address +table and device major number in the Device Driver Table. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_register_driver( + rtems_device_major_number major, + const rtems_driver_address_table *driver_table, + rtems_device_major_number *registered_major + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the device major number. Use a value of zero to let the + system obtain a device major number automatically. + +``driver_table`` + This parameter is the device driver address table. + +``registered_major`` + This parameter is the pointer to an :ref:`InterfaceRtemsDeviceMajorNumber` + object. When the directive call is successful, the device major number of + the registered device will be stored in this object. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_INVALID_ADDRESS` + The device major number of the device was `NULL + <https://en.cppreference.com/w/c/types/NULL>`_. + +:c:macro:`RTEMS_INVALID_ADDRESS` + The device driver address table was empty. + +:c:macro:`RTEMS_INVALID_NUMBER` + The device major number of the device was out of range, see + :ref:`CONFIGURE_MAXIMUM_DRIVERS`. + +:c:macro:`RTEMS_TOO_MANY` + The system was unable to obtain a device major number. + +:c:macro:`RTEMS_RESOURCE_IN_USE` + The device major number was already in use. + +:c:macro:`RTEMS_CALLED_FROM_ISR` + The directive was called from interrupt context. + +Other status codes may be returned by :ref:`InterfaceRtemsIoInitialize`. + +.. rubric:: NOTES: + +If the device major number equals zero a device major number will be obtained. +The device major number of the registered driver will be returned. + +After a successful registration, the :ref:`InterfaceRtemsIoInitialize` +directive will be called to initialize the device. + +.. Generated from spec:/rtems/io/if/unregister-driver + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_unregister_driver() +.. index:: unregister a device driver + +.. _InterfaceRtemsIoUnregisterDriver: + +rtems_io_unregister_driver() +---------------------------- + +Removes a device driver specified by the device major number from the Device +Driver Table. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_unregister_driver( + rtems_device_major_number major + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the major number of the device. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_UNSATISFIED` + The device major number was invalid. + +:c:macro:`RTEMS_CALLED_FROM_ISR` + The directive was called from interrupt context. + +.. rubric:: NOTES: + +Currently no specific checks are made and the driver is not closed. + +.. Generated from spec:/rtems/io/if/initialize + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_initialize() +.. index:: initialize a device driver + +.. _InterfaceRtemsIoInitialize: + +rtems_io_initialize() +--------------------- + +Initializes the device specified by the device major and minor numbers. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the major number of the device. + +``minor`` + This parameter is the minor number of the device. + +``argument`` + This parameter is the argument passed to the device driver initialization + entry. + +.. rubric:: DESCRIPTION: + +This directive calls the device driver initialization entry registered in the +Device Driver Table for the specified device major number. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_INVALID_NUMBER` + The device major number was invalid. + +Other status codes may be returned by the device driver initialization entry. + +.. rubric:: NOTES: + +This directive is automatically invoked for each device driver defined by the +application configuration during the system initialization and via the +:ref:`InterfaceRtemsIoRegisterDriver` directive. + +A device driver initialization entry is responsible for initializing all +hardware and data structures associated with a device. If necessary, it can +allocate memory to be used during other operations. + +.. Generated from spec:/rtems/io/if/register-name + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_register_name() +.. index:: register a device in the file system + +.. _InterfaceRtemsIoRegisterName: + +rtems_io_register_name() +------------------------ + +Registers the device specified by the device major and minor numbers in the +file system under the specified name. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_register_name( + const char *device_name, + rtems_device_major_number major, + rtems_device_minor_number minor + ); + +.. rubric:: PARAMETERS: + +``device_name`` + This parameter is the device name in the file system. + +``major`` + This parameter is the device major number. + +``minor`` + This parameter is the device minor number. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_TOO_MANY` + The name was already in use or other errors occurred. + +.. rubric:: NOTES: + +The device is registered as a character device. + +.. Generated from spec:/rtems/io/if/open + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_open() +.. index:: open a device + +.. _InterfaceRtemsIoOpen: + +rtems_io_open() +--------------- + +Opens the device specified by the device major and minor numbers. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the major number of the device. + +``minor`` + This parameter is the minor number of the device. + +``argument`` + This parameter is the argument passed to the device driver close entry. + +.. rubric:: DESCRIPTION: + +This directive calls the device driver open entry registered in the Device +Driver Table for the specified device major number. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_INVALID_NUMBER` + The device major number was invalid. + +Other status codes may be returned by the device driver open entry. + +.. rubric:: NOTES: + +The open entry point is commonly used by device drivers to provide exclusive +access to a device. + +.. Generated from spec:/rtems/io/if/close + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_close() +.. index:: close a device + +.. _InterfaceRtemsIoClose: + +rtems_io_close() +---------------- + +Closes the device specified by the device major and minor numbers. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the major number of the device. + +``minor`` + This parameter is the minor number of the device. + +``argument`` + This parameter is the argument passed to the device driver close entry. + +.. rubric:: DESCRIPTION: + +This directive calls the device driver close entry registered in the Device +Driver Table for the specified device major number. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_INVALID_NUMBER` + The device major number was invalid. + +Other status codes may be returned by the device driver close entry. + +.. rubric:: NOTES: + +The close entry point is commonly used by device drivers to relinquish +exclusive access to a device. + +.. Generated from spec:/rtems/io/if/read + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_read() +.. index:: read from a device + +.. _InterfaceRtemsIoRead: + +rtems_io_read() +--------------- + +Reads from the device specified by the device major and minor numbers. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the major number of the device. + +``minor`` + This parameter is the minor number of the device. + +``argument`` + This parameter is the argument passed to the device driver read entry. + +.. rubric:: DESCRIPTION: + +This directive calls the device driver read entry registered in the Device +Driver Table for the specified device major number. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_INVALID_NUMBER` + The device major number was invalid. + +Other status codes may be returned by the device driver read entry. + +.. rubric:: NOTES: + +Read operations typically require a buffer address as part of the argument +parameter block. The contents of this buffer will be replaced with data from +the device. + +.. Generated from spec:/rtems/io/if/write + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_write() +.. index:: write to a device + +.. _InterfaceRtemsIoWrite: + +rtems_io_write() +---------------- + +Writes to the device specified by the device major and minor numbers. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the major number of the device. + +``minor`` + This parameter is the minor number of the device. + +``argument`` + This parameter is the argument passed to the device driver write entry. + +.. rubric:: DESCRIPTION: + +This directive calls the device driver write entry registered in the Device +Driver Table for the specified device major number. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_INVALID_NUMBER` + The device major number was invalid. + +Other status codes may be returned by the device driver write entry. + +.. rubric:: NOTES: + +Write operations typically require a buffer address as part of the argument +parameter block. The contents of this buffer will be sent to the device. + +.. Generated from spec:/rtems/io/if/control + +.. raw:: latex + + \clearpage + +.. index:: rtems_io_control() +.. index:: IO control +.. index:: special device services + +.. _InterfaceRtemsIoControl: + +rtems_io_control() +------------------ + +Controls the device specified by the device major and minor numbers. + +.. rubric:: CALLING SEQUENCE: + +.. code-block:: c + + rtems_status_code rtems_io_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument + ); + +.. rubric:: PARAMETERS: + +``major`` + This parameter is the major number of the device. + +``minor`` + This parameter is the minor number of the device. + +``argument`` + This parameter is the argument passed to the device driver I/O control + entry. + +.. rubric:: DESCRIPTION: + +This directive calls the device driver I/O control entry registered in the +Device Driver Table for the specified device major number. + +.. rubric:: RETURN VALUES: + +:c:macro:`RTEMS_SUCCESSFUL` + The requested operation was successful. + +:c:macro:`RTEMS_INVALID_NUMBER` + The device major number was invalid. + +Other status codes may be returned by the device driver I/O control entry. + +.. rubric:: NOTES: + +The exact functionality of the driver entry called by this directive is driver +dependent. It should not be assumed that the control entries of two device +drivers are compatible. For example, an RS-232 driver I/O control operation +may change the baud of a serial line, while an I/O control operation for a +floppy disk driver may cause a seek operation. |