.. SPDX-License-Identifier: CC-BY-SA-4.0 .. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) .. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR) .. Do not manually edit this file. It 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 to an RTEMS mailing list or raise a bug report: .. .. https://docs.rtems.org/branches/master/user/support/bugs.html .. .. For information on updating and regenerating please refer to: .. .. https://docs.rtems.org/branches/master/eng/req/howto.html .. _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 a device major number variable. The device major number of the registered device will be stored in this variable, in case of a successful operation. .. 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 `_. :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.