summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/i386ex/console/console.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1996-10-15 21:39:15 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1996-10-15 21:39:15 +0000
commit6c58b6fea3054acd2da3ebc741b6a4632c131602 (patch)
treeaaeee5ec5e00224f340a14a1693d77e6bfdf07d0 /c/src/lib/libbsp/i386/i386ex/console/console.c
parentupdated to format of 3.6.0 clock drivers (diff)
downloadrtems-6c58b6fea3054acd2da3ebc741b6a4632c131602.tar.bz2
updated to format of 3.6.0 console drivers
Diffstat (limited to 'c/src/lib/libbsp/i386/i386ex/console/console.c')
-rw-r--r--c/src/lib/libbsp/i386/i386ex/console/console.c162
1 files changed, 111 insertions, 51 deletions
diff --git a/c/src/lib/libbsp/i386/i386ex/console/console.c b/c/src/lib/libbsp/i386/i386ex/console/console.c
index 60d9db17dc..3f480ad765 100644
--- a/c/src/lib/libbsp/i386/i386ex/console/console.c
+++ b/c/src/lib/libbsp/i386/i386ex/console/console.c
@@ -1,5 +1,5 @@
/*
- * This file contains the Force CPU386 console IO package.
+ * This file contains the i386ex console IO package.
*
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
* On-Line Applications Research Corporation (OAR).
@@ -14,12 +14,11 @@
#define F386_INIT
+#include <bsp.h>
+#include <rtems/libio.h>
+
#include <stdlib.h>
-#include <stdio.h> /* to be removed */
-#include <rtems.h>
-#include "console.h"
-#include "bsp.h"
#include "../startup/80386ex.h"
/* console_cleanup
@@ -41,12 +40,6 @@ void console_cleanup( void )
inport_byte( RBR0, ignored );
-/* inport_byte( RBR0, ignored );
- * inport_byte( RBR0, ignored );
- * inport_byte( RBR0, ignored );
- * inport_byte( RBR0, ignored );
- */
-
}
/* console_initialize
@@ -63,18 +56,29 @@ void console_cleanup( void )
rtems_device_driver console_initialize(
rtems_device_major_number major,
rtems_device_minor_number minor,
- void *arg,
- rtems_id self,
- rtems_unsigned32 *status
+ void *arg
)
{
- /*
- * flush the console now and at exit. Just in case.
- */
-
- console_cleanup();
-
- atexit( console_cleanup );
+ rtems_status_code status;
+
+ /*
+ * flush the console now and at exit. Just in case.
+ */
+
+ console_cleanup();
+
+ status = rtems_io_register_name(
+ "/dev/console",
+ major,
+ (rtems_device_minor_number) 0
+ );
+
+ if (status != RTEMS_SUCCESSFUL)
+ rtems_fatal_error_occurred(status);
+
+ atexit( console_cleanup );
+
+ return RTEMS_SUCCESSFUL;
}
@@ -173,48 +177,104 @@ void outbyte(
}
/*
- * __read -- read bytes from the serial port. Ignore fd, since
- * we only have stdin.
+ * Open entry point
*/
-
-int __read(
- int fd,
- char *buf,
- int nbytes
+
+rtems_device_driver console_open(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void * arg
)
{
- int i = 0;
-
- for (i = 0; i < nbytes; i++) {
- *(buf + i) = inbyte();
- if ((*(buf + i) == '\n') || (*(buf + i) == '\r')) {
- (*(buf + i++)) = '\n';
- (*(buf + i)) = 0;
+ return RTEMS_SUCCESSFUL;
+}
+
+/*
+ * Close entry point
+ */
+
+rtems_device_driver console_close(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void * arg
+)
+{
+ return RTEMS_SUCCESSFUL;
+}
+
+/*
+ * read bytes from the serial port. We only have stdin.
+ */
+
+rtems_device_driver console_read(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void * arg
+)
+{
+ rtems_libio_rw_args_t *rw_args;
+ char *buffer;
+ int maximum;
+ int count = 0;
+
+ rw_args = (rtems_libio_rw_args_t *) arg;
+
+ buffer = rw_args->buffer;
+ maximum = rw_args->count;
+
+ for (count = 0; count < maximum; count++) {
+ buffer[ count ] = inbyte();
+ if (buffer[ count ] == '\n' || buffer[ count ] == '\r') {
+ buffer[ count++ ] = '\n';
+ buffer[ count ] = 0;
break;
}
}
- return (i);
+
+ rw_args->bytes_moved = count;
+ return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
}
/*
- * __write -- write bytes to the serial port. Ignore fd, since
- * stdout and stderr are the same. Since we have no filesystem,
- * open will only return an error.
+ * write bytes to the serial port. Stdout and stderr are the same.
*/
-
-int __write(
- int fd,
- char *buf,
- int nbytes
+
+rtems_device_driver console_write(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void * arg
)
{
- int i;
-
- for (i = 0; i < nbytes; i++) {
- if (*(buf + i) == '\n') {
- outbyte ('\r');
+ int count;
+ int maximum;
+ rtems_libio_rw_args_t *rw_args;
+ char *buffer;
+
+ rw_args = (rtems_libio_rw_args_t *) arg;
+
+ buffer = rw_args->buffer;
+ maximum = rw_args->count;
+
+ for (count = 0; count < maximum; count++) {
+ if ( buffer[ count ] == '\n') {
+ outbyte('\r');
}
- outbyte (*(buf + i));
+ outbyte( buffer[ count ] );
}
- return (nbytes);
+
+ rw_args->bytes_moved = maximum;
+ return 0;
+}
+
+/*
+ * IO Control entry point
+ */
+
+rtems_device_driver console_control(
+ rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void * arg
+)
+{
+ return RTEMS_SUCCESSFUL;
}