summaryrefslogtreecommitdiffstats
path: root/bsp_howto/ide_controller.rst
diff options
context:
space:
mode:
authorAmar Takhar <amar@rtems.org>2016-01-17 00:47:50 -0500
committerAmar Takhar <verm@darkbeer.org>2016-05-02 20:51:23 -0400
commitb35050917272ab536c8f4158e5c002f98a092796 (patch)
tree386dc0be827a10ff668e6d0b2b1ff52a1f49e9ed /bsp_howto/ide_controller.rst
parentFix warnings. (diff)
downloadrtems-docs-b35050917272ab536c8f4158e5c002f98a092796.tar.bz2
Split document into seperate files by section.
Diffstat (limited to 'bsp_howto/ide_controller.rst')
-rw-r--r--bsp_howto/ide_controller.rst140
1 files changed, 140 insertions, 0 deletions
diff --git a/bsp_howto/ide_controller.rst b/bsp_howto/ide_controller.rst
new file mode 100644
index 0000000..9a8c425
--- /dev/null
+++ b/bsp_howto/ide_controller.rst
@@ -0,0 +1,140 @@
+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:
+
+- Read IDE Controller register
+
+- Write IDE Controller register
+
+- Read data block through IDE Controller Data Register
+
+- 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.
+
+Initialization
+==============
+
+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
+
+ rtems_device_driver ide_controller_initialize(
+ 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
+ }
+
+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)
+ {
+ get IDE Controller chip configuration information from
+ IDE_Controller_Table by minor number
+ invoke read register routine for the chip
+ }
+
+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)
+ {
+ 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
+
+ void ide_controller_read_data_block(
+ 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
+ }
+
+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
+overhead. This routine is not allowed to be called from an application.
+.. code:: 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
+ )
+ {
+ 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.
+