summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/shared/comm/uart.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2000-08-30 08:18:56 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2000-08-30 08:18:56 +0000
commitb45952659c490c7ccebba3c7e05c8f271776c2ca (patch)
treedea1ba110846cb23f6efc63e9663212802bcd616 /c/src/lib/libbsp/i386/shared/comm/uart.c
parent2000-08-26 Rosimildo da Silva <rdasilva@connecttel.com> (diff)
downloadrtems-b45952659c490c7ccebba3c7e05c8f271776c2ca.tar.bz2
2000-08-26 Rosimildo da Silva <rdasilva@connecttel.com>
* shared/comm: Added "/dev/ttyS1" & "/dev/ttyS2" support for the i386 BSPs. * shared/comm/gdb_glue.c: New file. * shared/comm/i386_io.c: New file. * shared/comm/tty_drv.c: New file. * shared/comm/tty_drv.h: New file. * shared/comm/Makefile.am: Account for new files. * shared/comm/uart.c: Adds support for sending characters to another "line discipline."
Diffstat (limited to 'c/src/lib/libbsp/i386/shared/comm/uart.c')
-rw-r--r--c/src/lib/libbsp/i386/shared/comm/uart.c45
1 files changed, 39 insertions, 6 deletions
diff --git a/c/src/lib/libbsp/i386/shared/comm/uart.c b/c/src/lib/libbsp/i386/shared/comm/uart.c
index b55be1a01e..c794e922a3 100644
--- a/c/src/lib/libbsp/i386/shared/comm/uart.c
+++ b/c/src/lib/libbsp/i386/shared/comm/uart.c
@@ -424,6 +424,28 @@ static void* termios_ttyp_com2 = NULL;
static char termios_tx_hold_com2 = 0;
static volatile char termios_tx_hold_valid_com2 = 0;
+static void ( *driver_input_handler_com1 )( void *, char *, int ) = 0;
+static void ( *driver_input_handler_com2 )( void *, char *, int ) = 0;
+
+/*
+ * This routine sets the handler to handle the characters received
+ * from the serial port.
+ */
+void uart_set_driver_handler( int port, void ( *handler )( void *, char *, int ) )
+{
+ switch( port )
+ {
+ case BSP_UART_COM1:
+ driver_input_handler_com1 = handler;
+ break;
+
+ case BSP_UART_COM2:
+ driver_input_handler_com2 = handler;
+ break;
+ }
+}
+
+
/*
* Set channel parameters
*/
@@ -616,9 +638,15 @@ BSP_uart_termios_isr_com1(void)
if(off != 0)
{
/* Update rx buffer */
- rtems_termios_enqueue_raw_characters(termios_ttyp_com1,
- (char *)buf,
- off);
+ if( driver_input_handler_com1 )
+ {
+ driver_input_handler_com1( termios_ttyp_com1, (char *)buf, off );
+ }
+ else
+ {
+ /* Update rx buffer */
+ rtems_termios_enqueue_raw_characters(termios_ttyp_com1, (char *)buf, off );
+ }
}
return;
case TRANSMITTER_HODING_REGISTER_EMPTY :
@@ -710,9 +738,14 @@ BSP_uart_termios_isr_com2()
if(off != 0)
{
/* Update rx buffer */
- rtems_termios_enqueue_raw_characters(termios_ttyp_com2,
- (char *)buf,
- off);
+ if( driver_input_handler_com2 )
+ {
+ driver_input_handler_com2( termios_ttyp_com2, (char *)buf, off );
+ }
+ else
+ {
+ rtems_termios_enqueue_raw_characters(termios_ttyp_com2, (char *)buf, off);
+ }
}
return;
case TRANSMITTER_HODING_REGISTER_EMPTY :