summaryrefslogtreecommitdiffstats
path: root/ada_user/io_manager.rst
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ada_user/io_manager.rst571
1 files changed, 0 insertions, 571 deletions
diff --git a/ada_user/io_manager.rst b/ada_user/io_manager.rst
deleted file mode 100644
index 2fa37d2..0000000
--- a/ada_user/io_manager.rst
+++ /dev/null
@@ -1,571 +0,0 @@
-I/O Manager
-###########
-
-.. index:: device drivers
-.. index:: IO Manager
-
-Introduction
-============
-
-The input/output interface manager provides a
-well-defined mechanism for accessing device drivers and a
-structured methodology for organizing device drivers. The
-directives provided by the I/O manager are:
-
-- ``rtems.io_initialize`` - Initialize a device driver
-
-- ``rtems.io_register_driver`` - Register a device driver
-
-- ``rtems.io_unregister_driver`` - Unregister a device driver
-
-- ``rtems.io_register_name`` - Register a device name
-
-- ``rtems.io_lookup_name`` - Look up a device name
-
-- ``rtems.io_open`` - Open a device
-
-- ``rtems.io_close`` - Close a device
-
-- ``rtems.io_read`` - Read from a device
-
-- ``rtems.io_write`` - Write to a device
-
-- ``rtems.io_control`` - Special device services
-
-Background
-==========
-
-Device Driver Table
--------------------
-.. index:: Device Driver Table
-
-Each application utilizing the RTEMS I/O manager must specify the
-address of a Device Driver Table in its Configuration Table. This table
-contains each device driver’s entry points that is to be initialised by
-RTEMS during initialization. Each device driver may contain the
-following entry points:
-
-- Initialization
-
-- Open
-
-- Close
-
-- Read
-
-- Write
-
-- Control
-
-If the device driver does not support a particular
-entry point, then that entry in the Configuration Table should
-be NULL. RTEMS will return``RTEMS.SUCCESSFUL`` as the executive’s and
-zero (0) as the device driver’s return code for these device
-driver entry points.
-
-Applications can register and unregister drivers with the RTEMS I/O
-manager avoiding the need to have all drivers statically defined and
-linked into this table.
-
-The :file:`confdefs.h` entry ``CONFIGURE_MAXIMUM_DRIVERS`` configures
-the number of driver slots available to the application.
-
-Major and Minor Device Numbers
-------------------------------
-.. index:: major device number
-.. index:: minor device number
-
-Each call to the I/O manager must provide a device’s
-major and minor numbers as arguments. The major number is the
-index of the requested driver’s entry points in the Device
-Driver Table, and is used to select a specific device driver.
-The exact usage of the minor number is driver specific, but is
-commonly used to distinguish between a number of devices
-controlled by the same driver... index:: rtems_device_major_number
-.. index:: rtems_device_minor_number
-
-The data types ``rtems.device_major_number`` and``rtems.device_minor_number`` are used to
-manipulate device major and minor numbers, respectively.
-
-Device Names
-------------
-.. index:: device names
-
-The I/O Manager provides facilities to associate a
-name with a particular device. Directives are provided to
-register the name of a device and to look up the major/minor
-number pair associated with a device name.
-
-Device Driver Environment
--------------------------
-
-Application developers, as well as device driver
-developers, must be aware of the following regarding the RTEMS
-I/O Manager:
-
-- A device driver routine executes in the context of the
- invoking task. Thus if the driver blocks, the invoking task
- blocks.
-
-- The device driver is free to change the modes of the
- invoking task, although the driver should restore them to their
- original values.
-
-- Device drivers may be invoked from ISRs.
-
-- Only local device drivers are accessible through the I/O
- manager.
-
-- A device driver routine may invoke all other RTEMS
- directives, including I/O directives, on both local and global
- objects.
-
-Although the RTEMS I/O manager provides a framework
-for device drivers, it makes no assumptions regarding the
-construction or operation of a device driver.
-
-Runtime Driver Registration
----------------------------
-.. index:: runtime driver registration
-
-Board support package and application developers can select wether a
-device driver is statically entered into the default device table or
-registered at runtime.
-
-Dynamic registration helps applications where:
-
-# The BSP and kernel libraries are common to a range of applications
- for a specific target platform. An application may be built upon a
- common library with all drivers. The application selects and registers
- the drivers. Uniform driver name lookup protects the application.
-
-# The type and range of drivers may vary as the application probes a
- bus during initialization.
-
-# Support for hot swap bus system such as Compact PCI.
-
-# Support for runtime loadable driver modules.
-
-Device Driver Interface
------------------------
-.. index:: device driver interface
-
-When an application invokes an I/O manager directive,
-RTEMS determines which device driver entry point must be
-invoked. The information passed by the application to RTEMS is
-then passed to the correct device driver entry point. RTEMS
-will invoke each device driver entry point assuming it is
-compatible with the following prototype:
-
-.. code:: c
-
- function IO_Entry (
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Major_Number;
- Argument_Block : in RTEMS.Address
- ) return RTEMS.Status_Code;
-
-The format and contents of the parameter block are
-device driver and entry point dependent.
-
-It is recommended that a device driver avoid
-generating error codes which conflict with those used by
-application components. A common technique used to generate
-driver specific error codes is to make the most significant part
-of the status indicate a driver specific code.
-
-Device Driver Initialization
-----------------------------
-
-RTEMS automatically initializes all device drivers
-when multitasking is initiated via the``rtems.initialize_executive``
-directive. RTEMS initializes the device drivers by invoking
-each device driver initialization entry point with the following
-parameters:
-
-major
- the major device number for this device driver.
-
-minor
- zero.
-
-argument_block
- will point to the Configuration Table.
-
-The returned status will be ignored by RTEMS. If the driver
-cannot successfully initialize the device, then it should invoke
-the fatal_error_occurred directive.
-
-Operations
-==========
-
-Register and Lookup Name
-------------------------
-
-The ``rtems.io_register`` directive associates a name with the
-specified device (i.e. major/minor number pair). Device names
-are typically registered as part of the device driver
-initialization sequence. The ``rtems.io_lookup``
-directive is used to
-determine the major/minor number pair associated with the
-specified device name. The use of these directives frees the
-application from being dependent on the arbitrary assignment of
-major numbers in a particular application. No device naming
-conventions are dictated by RTEMS.
-
-Accessing an Device Driver
---------------------------
-
-The I/O manager provides directives which enable the
-application program to utilize device drivers in a standard
-manner. There is a direct correlation between the RTEMS I/O
-manager directives``rtems.io_initialize``,``rtems.io_open``,``rtems.io_close``,``rtems.io_read``,``rtems.io_write``, and``rtems.io_control``
-and the underlying device driver entry points.
-
-Directives
-==========
-
-This section details the I/O manager’s directives. A
-subsection is dedicated to each of this manager’s directives and
-describes the calling sequence, related constants, usage, and
-status codes.
-
-IO_REGISTER_DRIVER - Register a device driver
----------------------------------------------
-.. index:: register a device driver
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- No Ada implementation.
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully registered
-``RTEMS.INVALID_ADDRESS`` - invalid registered major pointer
-``RTEMS.INVALID_ADDRESS`` - invalid driver table
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-``RTEMS.TOO_MANY`` - no available major device table slot
-``RTEMS.RESOURCE_IN_USE`` - major device number entry in use
-
-**DESCRIPTION:**
-
-This directive attempts to add a new device driver to the Device Driver
-Table. The user can specify a specific major device number via the
-directive’s ``major`` parameter, or let the registration routine find
-the next available major device number by specifing a major number of``0``. The selected major device number is returned via the``registered_major`` directive parameter. The directive automatically
-allocation major device numbers from the highest value down.
-
-This directive automatically invokes the IO_INITIALIZE directive if
-the driver address table has an initialization and open entry.
-
-The directive returns RTEMS.TOO_MANY if Device Driver Table is
-full, and RTEMS.RESOURCE_IN_USE if a specific major device
-number is requested and it is already in use.
-
-**NOTES:**
-
-The Device Driver Table size is specified in the Configuration Table
-condiguration. This needs to be set to maximum size the application
-requires.
-
-IO_UNREGISTER_DRIVER - Unregister a device driver
--------------------------------------------------
-.. index:: unregister a device driver
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- No Ada implementation.
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully registered
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-
-**DESCRIPTION:**
-
-This directive removes a device driver from the Device Driver Table.
-
-**NOTES:**
-
-Currently no specific checks are made and the driver is not closed.
-
-IO_INITIALIZE - Initialize a device driver
-------------------------------------------
-.. index:: initialize a device driver
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Initialize (
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Minor_Number;
- Argument : in RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-
-**DESCRIPTION:**
-
-This directive calls the device driver initialization
-routine specified in the Device Driver Table for this major
-number. This directive is automatically invoked for each device
-driver when multitasking is initiated via the
-initialize_executive directive.
-
-A device driver initialization module 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.
-
-**NOTES:**
-
-This directive may or may not cause the calling task
-to be preempted. This is dependent on the device driver being
-initialized.
-
-IO_REGISTER_NAME - Register a device
-------------------------------------
-.. index:: register device
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Register_Name (
- Name : in String;
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Minor_Number;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.TOO_MANY`` - too many devices registered
-
-**DESCRIPTION:**
-
-This directive associates name with the specified
-major/minor number pair.
-
-**NOTES:**
-
-This directive will not cause the calling task to be
-preempted.
-
-IO_LOOKUP_NAME - Lookup a device
---------------------------------
-.. index:: lookup device major and minor number
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Lookup_Name (
- Name : in String;
- Device_Info : out RTEMS.Driver_Name_t_Pointer;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.UNSATISFIED`` - name not registered
-
-**DESCRIPTION:**
-
-This directive returns the major/minor number pair
-associated with the given device name in ``device_info``.
-
-**NOTES:**
-
-This directive will not cause the calling task to be
-preempted.
-
-IO_OPEN - Open a device
------------------------
-.. index:: open a devive
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Open (
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Minor_Number;
- Argument : in RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-
-**DESCRIPTION:**
-
-This directive calls the device driver open routine
-specified in the Device Driver Table for this major number. The
-open entry point is commonly used by device drivers to provide
-exclusive access to a device.
-
-**NOTES:**
-
-This directive may or may not cause the calling task
-to be preempted. This is dependent on the device driver being
-invoked.
-
-IO_CLOSE - Close a device
--------------------------
-.. index:: close a device
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Close (
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Minor_Number;
- Argument : in RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-
-**DESCRIPTION:**
-
-This directive calls the device driver close routine
-specified in the Device Driver Table for this major number. The
-close entry point is commonly used by device drivers to
-relinquish exclusive access to a device.
-
-**NOTES:**
-
-This directive may or may not cause the calling task
-to be preempted. This is dependent on the device driver being
-invoked.
-
-IO_READ - Read from a device
-----------------------------
-.. index:: read from a device
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Read (
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Minor_Number;
- Argument : in RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-
-**DESCRIPTION:**
-
-This directive calls the device driver read routine
-specified in the Device Driver Table for this major number.
-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.
-
-**NOTES:**
-
-This directive may or may not cause the calling task
-to be preempted. This is dependent on the device driver being
-invoked.
-
-IO_WRITE - Write to a device
-----------------------------
-.. index:: write to a device
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Write (
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Minor_Number;
- Argument : in RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-
-**DESCRIPTION:**
-
-This directive calls the device driver write routine
-specified in the Device Driver Table for this major number.
-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.
-
-**NOTES:**
-
-This directive may or may not cause the calling task
-to be preempted. This is dependent on the device driver being
-invoked.
-
-IO_CONTROL - Special device services
-------------------------------------
-.. index:: special device services
-.. index:: IO Control
-
-**CALLING SEQUENCE:**
-
-.. code:: c
-
- procedure IO_Control (
- Major : in RTEMS.Device_Major_Number;
- Minor : in RTEMS.Device_Minor_Number;
- Argument : in RTEMS.Address;
- Result : out RTEMS.Status_Codes
- );
-
-**DIRECTIVE STATUS CODES:**
-
-``RTEMS.SUCCESSFUL`` - successfully initialized
-``RTEMS.INVALID_NUMBER`` - invalid major device number
-
-**DESCRIPTION:**
-
-This directive calls the device driver I/O control
-routine specified in the Device Driver Table for this major
-number. 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 rate of a serial line, while an I/O control operation
-for a floppy disk driver may cause a seek operation.
-
-**NOTES:**
-
-This directive may or may not cause the calling task
-to be preempted. This is dependent on the device driver being
-invoked.
-
-.. COMMENT: COPYRIGHT (c) 1988-2002.
-
-.. COMMENT: On-Line Applications Research Corporation (OAR).
-
-.. COMMENT: All rights reserved.
-