diff options
Diffstat (limited to 'bsp_howto/ide_controller.rst')
-rw-r--r-- | bsp_howto/ide_controller.rst | 160 |
1 files changed, 87 insertions, 73 deletions
diff --git a/bsp_howto/ide_controller.rst b/bsp_howto/ide_controller.rst index 0b13490..82961da 100644 --- a/bsp_howto/ide_controller.rst +++ b/bsp_howto/ide_controller.rst @@ -1,14 +1,17 @@ .. comment SPDX-License-Identifier: CC-BY-SA-4.0 +.. COMMENT: COPYRIGHT (c) 1988-2002. +.. COMMENT: On-Line Applications Research Corporation (OAR). +.. COMMENT: All rights reserved. + IDE Controller Driver ##################### Introduction ============ -The IDE Controller driver is responsible for providing an -interface to an IDE Controller. The capabilities provided by this -driver are: +The IDE Controller driver is responsible for providing an interface to an IDE +Controller. The capabilities provided by this driver are: - Read IDE Controller register @@ -18,42 +21,44 @@ driver are: - Write data block through IDE Controller Data Register -The reference implementation for an IDE Controller driver can -be found in ``$RTEMS_SRC_ROOT/c/src/libchip/ide``. This driver -is based on the libchip concept and allows to work with any of the IDE -Controller chips simply by appropriate configuration of BSP. Drivers for a -particular IDE Controller chips locate in the following directories: drivers -for well-known IDE Controller chips locate into``$RTEMS_SRC_ROOT/c/src/libchip/ide``, drivers for IDE Controller chips -integrated with CPU locate into``$RTEMS_SRC_ROOT/c/src/lib/libcpu/myCPU`` and -drivers for custom IDE Controller chips (for example, implemented on FPGA) -locate into ``$RTEMS_SRC_ROOT/c/src/lib/libbsp/myBSP``. -There is a README file in these directories for each supported -IDE Controller chip. Each of these README explains how to configure a BSP -for that particular IDE Controller chip. +The reference implementation for an IDE Controller driver can be found in +``$RTEMS_SRC_ROOT/c/src/libchip/ide``. This driver is based on the libchip +concept and allows to work with any of the IDE Controller chips simply by +appropriate configuration of BSP. Drivers for a particular IDE Controller chips +locate in the following directories: drivers for well-known IDE Controller +chips locate into ``$RTEMS_SRC_ROOT/c/src/libchip/ide``, drivers for IDE +Controller chips integrated with CPU locate into +``$RTEMS_SRC_ROOT/c/src/lib/libcpu/myCPU`` and drivers for custom IDE +Controller chips (for example, implemented on FPGA) locate into +``$RTEMS_SRC_ROOT/c/src/lib/libbsp/myBSP``. There is a README file in these +directories for each supported IDE Controller chip. Each of these README +explains how to configure a BSP for that particular IDE Controller chip. Initialization ============== -IDE Controller chips used by a BSP are statically configured into``IDE_Controller_Table``. The ``ide_controller_initialize`` routine is +IDE Controller chips used by a BSP are statically configured into +``IDE_Controller_Table``. The ``ide_controller_initialize`` routine is responsible for initialization of all configured IDE controller chips. Initialization order of the chips based on the order the chips are defined in the ``IDE_Controller_Table``. -The following actions are performed by the IDE Controller driver -initialization routine: -.. code:: c +The following actions are performed by the IDE Controller driver initialization +routine: + +.. code-block:: c rtems_device_driver ide_controller_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor_arg, - void \*arg + rtems_device_major_number major, + rtems_device_minor_number minor_arg, + void *arg ) { - for each IDE Controller chip configured in IDE_Controller_Table - if (BSP dependent probe(if exists) AND device probe for this IDE chip - indicates it is present) - perform initialization of the particular chip - register device with configured name for this chip + for each IDE Controller chip configured in IDE_Controller_Table + if (BSP dependent probe(if exists) AND device probe for this IDE chip + indicates it is present) + perform initialization of the particular chip + register device with configured name for this chip } Read IDE Controller Register @@ -62,14 +67,19 @@ Read IDE Controller Register The ``ide_controller_read_register`` routine reads the content of the IDE Controller chip register. IDE Controller chip is selected via the minor number. This routine is not allowed to be called from an application. -.. code:: c - void ide_controller_read_register(rtems_device_minor_number minor, - unsigned32 reg, unsigned32 \*value) +.. code-block:: c + + void ide_controller_read_register( + rtems_device_minor_number minor, + unsigned32 reg, + unsigned32 *value + ) { - get IDE Controller chip configuration information from - IDE_Controller_Table by minor number - invoke read register routine for the chip + get IDE Controller chip configuration information from + IDE_Controller_Table by minor number + + invoke read register routine for the chip } Write IDE Controller Register @@ -78,65 +88,69 @@ Write IDE Controller Register The ``ide_controller_write_register`` routine writes IDE Controller chip register with specified value. IDE Controller chip is selected via the minor number. This routine is not allowed to be called from an application. -.. code:: c - void ide_controller_write_register(rtems_device_minor_number minor, - unsigned32 reg, unsigned32 value) +.. code-block:: c + + void ide_controller_write_register( + rtems_device_minor_number minor, + unsigned32 reg, + unsigned32 value + ) { - get IDE Controller chip configuration information from - IDE_Controller_Table by minor number - invoke write register routine for the chip + get IDE Controller chip configuration information from + IDE_Controller_Table by minor number + + invoke write register routine for the chip } Read Data Block Through IDE Controller Data Register ==================================================== -The ``ide_controller_read_data_block`` provides multiple consequent read -of the IDE Controller Data Register. IDE Controller chip is selected via the -minor number. The same functionality may be achieved via separate multiple -calls of ``ide_controller_read_register`` routine but``ide_controller_read_data_block`` allows to escape functions call -overhead. This routine is not allowed to be called from an application. -.. code:: c +The ``ide_controller_read_data_block`` provides multiple consequent read of the +IDE Controller Data Register. IDE Controller chip is selected via the minor +number. The same functionality may be achieved via separate multiple calls of +``ide_controller_read_register`` routine but ``ide_controller_read_data_block`` +allows to escape functions call overhead. This routine is not allowed to be +called from an application. + +.. code-block:: c void ide_controller_read_data_block( - rtems_device_minor_number minor, - unsigned16 block_size, - blkdev_sg_buffer \*bufs, - uint32_t \*cbuf, - uint32_t \*pos + rtems_device_minor_number minor, + unsigned16 block_size, + blkdev_sg_buffer *bufs, + uint32_t *cbuf, + uint32_t *pos ) { - get IDE Controller chip configuration information from - IDE_Controller_Table by minor number - invoke read data block routine for the chip + get IDE Controller chip configuration information from + IDE_Controller_Table by minor number + + invoke read data block routine for the chip } Write Data Block Through IDE Controller Data Register ===================================================== -The ``ide_controller_write_data_block`` provides multiple consequent write -into the IDE Controller Data Register. IDE Controller chip is selected via the -minor number. The same functionality may be achieved via separate multiple -calls of ``ide_controller_write_register`` routine but``ide_controller_write_data_block`` allows to escape functions call +The ``ide_controller_write_data_block`` provides multiple consequent write into +the IDE Controller Data Register. IDE Controller chip is selected via the minor +number. The same functionality may be achieved via separate multiple calls of +``ide_controller_write_register`` routine but +``ide_controller_write_data_block`` allows to escape functions call overhead. This routine is not allowed to be called from an application. -.. code:: c + +.. code-block:: c void ide_controller_write_data_block( - rtems_device_minor_number minor, - unsigned16 block_size, - blkdev_sg_buffer \*bufs, - uint32_t \*cbuf, - uint32_t \*pos + rtems_device_minor_number minor, + unsigned16 block_size, + blkdev_sg_buffer *bufs, + uint32_t *cbuf, + uint32_t *pos ) { - get IDE Controller chip configuration information from - IDE_Controller_Table by minor number - invoke write data block routine for the chip - } - -.. COMMENT: COPYRIGHT (c) 1988-2002. - -.. COMMENT: On-Line Applications Research Corporation (OAR). - -.. COMMENT: All rights reserved. + get IDE Controller chip configuration information from + IDE_Controller_Table by minor number + invoke write data block routine for the chip + } |