summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2003-03-25 18:25:50 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2003-03-25 18:25:50 +0000
commit3446afa55592673fc49338975937d48c3f020c7d (patch)
tree04f40f4b411a539371c02dc22dc722d0b0371e79 /c
parent2003-03-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de> (diff)
downloadrtems-3446afa55592673fc49338975937d48c3f020c7d.tar.bz2
2003-03-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
PR 368/filesystems * ide/Makefile.am, ide/ide_ctrl_cfg.h: General improvements which now work on pc386 and mbx8xx. * ide/ide_controller.c: New file.
Diffstat (limited to 'c')
-rw-r--r--c/src/libchip/ChangeLog7
-rw-r--r--c/src/libchip/ide/Makefile.am23
-rw-r--r--c/src/libchip/ide/ide_controller.c179
-rw-r--r--c/src/libchip/ide/ide_ctrl_cfg.h3
4 files changed, 208 insertions, 4 deletions
diff --git a/c/src/libchip/ChangeLog b/c/src/libchip/ChangeLog
index a1dac6ac81..c26fea594b 100644
--- a/c/src/libchip/ChangeLog
+++ b/c/src/libchip/ChangeLog
@@ -1,3 +1,10 @@
+2003-03-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
+
+ PR 368/filesystems
+ * ide/Makefile.am, ide/ide_ctrl_cfg.h: General improvements which
+ now work on pc386 and mbx8xx.
+ * ide/ide_controller.c: New file.
+
2003-03-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Remove AC_CONFIG_AUX_DIR.
diff --git a/c/src/libchip/ide/Makefile.am b/c/src/libchip/ide/Makefile.am
index ed7af12044..0ee5382b0c 100644
--- a/c/src/libchip/ide/Makefile.am
+++ b/c/src/libchip/ide/Makefile.am
@@ -5,8 +5,22 @@
include_idedir = $(includedir)/libchip
+LIBNAME = libide
+LIB = $(ARCH)/$(LIBNAME).a
+
+C_FILES = ide_controller.c
+C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.$(OBJEXT))
+
+noinst_HEADERS =
+
include_ide_HEADERS = ide_ctrl_cfg.h ide_ctrl.h ide_ctrl_io.h
+OBJS = $(C_O_FILES)
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../../../automake/compile.am
+include $(top_srcdir)/../../../automake/lib.am
+
PREINSTALL_FILES = $(PROJECT_INCLUDE)/libchip \
$(include_ide_HEADERS:%=$(PROJECT_INCLUDE)/libchip/%)
@@ -15,9 +29,12 @@ $(PROJECT_INCLUDE)/libchip:
$(PROJECT_INCLUDE)/libchip/%.h: %.h
$(INSTALL_DATA) $< $@
-all-local: $(PREINSTALL_FILES)
+$(LIB): $(OBJS)
+ $(make-library)
+
+all-local: $(ARCH) $(PREINSTALL_FILES) $(LIB)
-EXTRA_DIST =
+EXTRA_DIST = $(C_FILES)
include $(top_srcdir)/../../../automake/subdirs.am
-include $(top_srcdir)/../../../automake/local.am
+include $(top_srcdir)/../../../automake/local.am \ No newline at end of file
diff --git a/c/src/libchip/ide/ide_controller.c b/c/src/libchip/ide/ide_controller.c
new file mode 100644
index 0000000000..95e422fcf1
--- /dev/null
+++ b/c/src/libchip/ide/ide_controller.c
@@ -0,0 +1,179 @@
+/*
+ * ide_controller.c
+ *
+ * This is generic rtems driver for IDE controllers.
+ *
+ * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia
+ * Authors: Alexandra Kossovsky <sasha@oktet.ru>
+ * Eugeny S. Mints <Eugeny.Mints@oktet.ru>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ *
+ */
+#include <chain.h>
+#include <assert.h>
+#include <rtems/blkdev.h>
+
+#include <libchip/ide_ctrl_cfg.h>
+#include <libchip/ide_ctrl_io.h>
+
+/*
+ * ide_controller_initialize --
+ * Initializes all configured IDE controllers. Controllers configuration
+ * table is provided by BSP
+ *
+ * PARAMETERS:
+ * major - device major number
+ * minor_arg - device minor number
+ * args - arguments
+ *
+ * RETURNS:
+ * RTEMS_SUCCESSFUL on success, or error code if
+ * error occured
+ */
+rtems_device_driver
+ide_controller_initialize(rtems_device_major_number major,
+ rtems_device_minor_number minor_arg,
+ void *args)
+{
+ unsigned long minor;
+ rtems_status_code status;
+
+ /* FIXME: may be it should be done on compilation phase */
+ if (IDE_Controller_Count > IDE_CTRL_MAX_MINOR_NUMBER)
+ rtems_fatal_error_occurred(RTEMS_TOO_MANY);
+
+ for (minor=0; minor < IDE_Controller_Count; minor++)
+ {
+ IDE_Controller_Table[minor].status = IDE_CTRL_NON_INITIALIZED;
+
+ if ((IDE_Controller_Table[minor].probe != NULL &&
+ IDE_Controller_Table[minor].probe(minor)) ||
+ IDE_Controller_Table[minor].fns->ctrl_probe(minor))
+ {
+ status = rtems_io_register_name(IDE_Controller_Table[minor].name,
+ major, minor);
+ if (status != RTEMS_SUCCESSFUL)
+ rtems_fatal_error_occurred(status);
+
+ IDE_Controller_Table[minor].fns->ctrl_initialize(minor);
+
+ IDE_Controller_Table[minor].status = IDE_CTRL_INITIALIZED;
+ }
+ }
+ return RTEMS_SUCCESSFUL;
+}
+
+/*
+ * ide_controller_read_data_block --
+ * Read data block via controller's data register
+ *
+ * PARAMETERS:
+ * minor - minor number of controller
+ * block_size - number of bytes to read
+ * bufs - set of buffers to store data
+ * cbuf - number of current buffer from the set
+ * pos - position inside current buffer 'cbuf'
+ *
+ * RETURNS:
+ * NONE
+ */
+void
+ide_controller_read_data_block(rtems_device_minor_number minor,
+ unsigned16 block_size,
+ blkdev_sg_buffer *bufs,
+ rtems_unsigned32 *cbuf,
+ rtems_unsigned32 *pos)
+{
+ IDE_Controller_Table[minor].fns->ctrl_read_block(minor, block_size, bufs,
+ cbuf, pos);
+}
+
+/*
+ * ide_controller_write_data_block --
+ * Write data block via controller's data register
+ *
+ * PARAMETERS:
+ * minor - minor number of controller
+ * block_size - number of bytes to write
+ * bufs - set of buffers which store data
+ * cbuf - number of current buffer from the set
+ * pos - position inside current buffer 'cbuf'
+ *
+ * RETURNS:
+ * NONE
+ */
+void
+ide_controller_write_data_block(rtems_device_minor_number minor,
+ unsigned16 block_size,
+ blkdev_sg_buffer *bufs,
+ rtems_unsigned32 *cbuf,
+ rtems_unsigned32 *pos)
+
+{
+ IDE_Controller_Table[minor].fns->ctrl_write_block(minor, block_size, bufs,
+ cbuf, pos);
+}
+
+/*
+ * ide_controller_read_register --
+ * Read controller's register
+ *
+ * PARAMETERS:
+ * minor - minor number of controller
+ * reg - register to read
+ * value - placeholder for result
+ *
+ * RETURNS
+ * NONE
+ */
+void
+ide_controller_read_register(rtems_device_minor_number minor,
+ int reg,
+ unsigned16 *value)
+{
+ IDE_Controller_Table[minor].fns->ctrl_reg_read(minor, reg, value);
+}
+
+/*
+ * ide_controller_write_register --
+ * Write controller's register
+ *
+ * PARAMETERS:
+ * minor - minor number of controller
+ * reg - register to write
+ * value - value to write
+ *
+ * RETURNS:
+ * NONE
+ */
+void
+ide_controller_write_register(rtems_device_minor_number minor, int reg,
+ unsigned16 value)
+{
+ IDE_Controller_Table[minor].fns->ctrl_reg_write(minor, reg, value);
+}
+
+/*
+ * ide_controller_config_io_speed --
+ * Set controller's speed of IO operations
+ *
+ * PARAMETERS:
+ * minor - minor number of controller
+ * modes_avaible - speeds available
+ *
+ * RETURNS:
+ * RTEMS_SUCCESSFUL on success, or error code if
+ * error occured
+ */
+rtems_status_code
+ide_controller_config_io_speed(int minor, unsigned8 modes_avaible)
+{
+ return IDE_Controller_Table[minor].fns->ctrl_config_io_speed(
+ minor,
+ modes_avaible);
+}
diff --git a/c/src/libchip/ide/ide_ctrl_cfg.h b/c/src/libchip/ide/ide_ctrl_cfg.h
index d24076bded..da895b4604 100644
--- a/c/src/libchip/ide/ide_ctrl_cfg.h
+++ b/c/src/libchip/ide/ide_ctrl_cfg.h
@@ -26,6 +26,7 @@ extern "C" {
* Avaible drivers for IDE controllers
*/
typedef enum {
+ IDE_STD,
IDE_CUSTOM /* BSP specific driver */
} ide_ctrl_devs_t;
@@ -70,7 +71,7 @@ typedef struct ide_controller_bsp_table_s {
char *name; /* device name */
ide_ctrl_devs_t type; /* chip type */
ide_ctrl_fns_t *fns; /* pointer to the set of driver routines */
- boolean (*probe)(int minor); /* probe routine */
+ boolean (*probe)(int minor); /* general probe routine */
unsigned8 status; /* initialized/non initialized. Should be set
* to zero by static initialization
*/