forked from Imagelibrary/rtems
2008-05-22 Joel Sherrill <joel.sherrill@oarcorp.com>
* shared/console/console.c: Remove explicit switch and call termios_baud_to_number().
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
2008-05-22 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||
|
||||
* shared/console/console.c: Remove explicit switch and call
|
||||
termios_baud_to_number().
|
||||
|
||||
2008-05-15 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||
|
||||
* shared/startup/pretaskinghook.c: Add capability for bootcard.c BSP
|
||||
|
||||
@@ -35,14 +35,14 @@ extern int close(int fd);
|
||||
#include <rtems/termiostypes.h>
|
||||
#include <termios.h>
|
||||
#include <bsp/uart.h>
|
||||
#include <rtems/bspIo.h> /* printk */
|
||||
#include <rtems/bspIo.h> /* printk */
|
||||
|
||||
/* Definitions for BSPConsolePort */
|
||||
/*
|
||||
* Possible value for console input/output :
|
||||
* BSP_CONSOLE_PORT_CONSOLE
|
||||
* BSP_UART_COM1
|
||||
* BSP_UART_COM2
|
||||
* BSP_CONSOLE_PORT_CONSOLE
|
||||
* BSP_UART_COM1
|
||||
* BSP_UART_COM2
|
||||
*/
|
||||
int BSPConsolePort = BSP_CONSOLE_PORT;
|
||||
|
||||
@@ -54,15 +54,15 @@ int BSPBaseBaud = BSP_UART_BAUD_BASE;
|
||||
* small changes)...
|
||||
*/
|
||||
#ifndef TERMIOS_OUTPUT_MODE
|
||||
#if 1
|
||||
#define TERMIOS_OUTPUT_MODE TERMIOS_IRQ_DRIVEN
|
||||
#else
|
||||
#define TERMIOS_OUTPUT_MODE TERMIOS_TASK_DRIVEN
|
||||
#endif
|
||||
#if 1
|
||||
#define TERMIOS_OUTPUT_MODE TERMIOS_IRQ_DRIVEN
|
||||
#else
|
||||
#define TERMIOS_OUTPUT_MODE TERMIOS_TASK_DRIVEN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ! defined(USE_POLLED_IO) && (TERMIOS_OUTPUT_MODE == TERMIOS_POLLED)
|
||||
#define USE_POLLED_IO
|
||||
#define USE_POLLED_IO
|
||||
#endif
|
||||
|
||||
/*-------------------------------------------------------------------------+
|
||||
@@ -72,25 +72,25 @@ int BSPBaseBaud = BSP_UART_BAUD_BASE;
|
||||
static int conSetAttr(int minor, const struct termios *);
|
||||
|
||||
typedef struct TtySTblRec_ {
|
||||
char *name;
|
||||
rtems_irq_hdl isr;
|
||||
char *name;
|
||||
rtems_irq_hdl isr;
|
||||
} TtySTblRec, *TtySTbl;
|
||||
|
||||
static TtySTblRec ttyS[]={
|
||||
{ "/dev/ttyS0",
|
||||
{ "/dev/ttyS0",
|
||||
#ifdef BSP_UART_IOBASE_COM1
|
||||
BSP_uart_termios_isr_com1
|
||||
BSP_uart_termios_isr_com1
|
||||
#else
|
||||
0
|
||||
0
|
||||
#endif
|
||||
},
|
||||
{ "/dev/ttyS1",
|
||||
},
|
||||
{ "/dev/ttyS1",
|
||||
#ifdef BSP_UART_IOBASE_COM2
|
||||
BSP_uart_termios_isr_com2
|
||||
BSP_uart_termios_isr_com2
|
||||
#else
|
||||
0
|
||||
0
|
||||
#endif
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
/*-------------------------------------------------------------------------+
|
||||
@@ -98,10 +98,11 @@ static TtySTblRec ttyS[]={
|
||||
+--------------------------------------------------------------------------+
|
||||
| Initilizes the I/O console (keyboard + VGA display) driver.
|
||||
+--------------------------------------------------------------------------*/
|
||||
rtems_device_driver
|
||||
console_initialize(rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg)
|
||||
rtems_device_driver console_initialize(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
|
||||
@@ -113,7 +114,7 @@ console_initialize(rtems_device_major_number major,
|
||||
/*
|
||||
* Set up TERMIOS
|
||||
*/
|
||||
rtems_termios_initialize ();
|
||||
rtems_termios_initialize();
|
||||
|
||||
/*
|
||||
* Do device-specific initialization
|
||||
@@ -124,32 +125,28 @@ console_initialize(rtems_device_major_number major,
|
||||
*/
|
||||
|
||||
for (minor=0; minor < sizeof(ttyS)/sizeof(ttyS[0]); minor++) {
|
||||
char *nm;
|
||||
/*
|
||||
* Skip ports (possibly not supported by BSP...) we have no ISR for
|
||||
*/
|
||||
if ( ! ttyS[minor].isr )
|
||||
continue;
|
||||
/*
|
||||
* Register the device
|
||||
*/
|
||||
status = rtems_io_register_name ((nm=ttyS[minor].name), major, minor);
|
||||
if ( RTEMS_SUCCESSFUL==status && BSPConsolePort == minor)
|
||||
{
|
||||
printk("Registering /dev/console as minor %d (==%s)\n",
|
||||
minor,
|
||||
ttyS[minor].name);
|
||||
/* also register an alias */
|
||||
status = rtems_io_register_name (
|
||||
(nm="/dev/console"),
|
||||
major,
|
||||
minor);
|
||||
}
|
||||
if (status != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
printk("Error registering %s!\n",nm);
|
||||
rtems_fatal_error_occurred (status);
|
||||
}
|
||||
char *nm;
|
||||
/*
|
||||
* Skip ports (possibly not supported by BSP...) we have no ISR for
|
||||
*/
|
||||
if ( ! ttyS[minor].isr )
|
||||
continue;
|
||||
/*
|
||||
* Register the device
|
||||
*/
|
||||
status = rtems_io_register_name ((nm=ttyS[minor].name), major, minor);
|
||||
if ( RTEMS_SUCCESSFUL==status && BSPConsolePort == minor) {
|
||||
printk("Registering /dev/console as minor %d (==%s)\n",
|
||||
minor,
|
||||
ttyS[minor].name);
|
||||
/* also register an alias */
|
||||
status = rtems_io_register_name ( (nm="/dev/console"), major, minor);
|
||||
}
|
||||
|
||||
if (status != RTEMS_SUCCESSFUL) {
|
||||
printk("Error registering %s!\n",nm);
|
||||
rtems_fatal_error_occurred (status);
|
||||
}
|
||||
}
|
||||
|
||||
return RTEMS_SUCCESSFUL;
|
||||
@@ -159,19 +156,18 @@ static int console_first_open(int major, int minor, void *arg)
|
||||
{
|
||||
rtems_status_code status;
|
||||
|
||||
/* must not open a minor device we have no ISR for */
|
||||
assert( minor>=0 && minor < sizeof(ttyS)/sizeof(ttyS[0]) && ttyS[minor].isr );
|
||||
/* must not open a minor device we have no ISR for */
|
||||
assert( minor>=0 && minor < sizeof(ttyS)/sizeof(ttyS[0]) && ttyS[minor].isr );
|
||||
|
||||
/* 9600-8-N-1 */
|
||||
BSP_uart_init(minor, 9600, 0);
|
||||
status = BSP_uart_install_isr(minor, ttyS[minor].isr);
|
||||
if (!status)
|
||||
{
|
||||
printk("Error installing serial console interrupt handler for '%s'!\n",
|
||||
ttyS[minor].name);
|
||||
rtems_fatal_error_occurred(status);
|
||||
}
|
||||
return 0;
|
||||
/* 9600-8-N-1 */
|
||||
BSP_uart_init(minor, 9600, 0);
|
||||
status = BSP_uart_install_isr(minor, ttyS[minor].isr);
|
||||
if (!status) {
|
||||
printk("Error installing serial console interrupt handler for '%s'!\n",
|
||||
ttyS[minor].name);
|
||||
rtems_fatal_error_occurred(status);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int console_last_close(int major, int minor, void *arg)
|
||||
@@ -183,10 +179,11 @@ static int console_last_close(int major, int minor, void *arg)
|
||||
/*-------------------------------------------------------------------------+
|
||||
| Console device driver OPEN entry point
|
||||
+--------------------------------------------------------------------------*/
|
||||
rtems_device_driver
|
||||
console_open(rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg)
|
||||
rtems_device_driver console_open(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
static rtems_termios_callbacks cb =
|
||||
@@ -220,17 +217,16 @@ console_open(rtems_device_major_number major,
|
||||
|
||||
status = rtems_termios_open (major, minor, arg, &cb);
|
||||
|
||||
if(status != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
printk("Error opening console device\n");
|
||||
return status;
|
||||
}
|
||||
if (status != RTEMS_SUCCESSFUL) {
|
||||
printk("Error opening console device\n");
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Pass data area info down to driver
|
||||
*/
|
||||
BSP_uart_termios_set(minor,
|
||||
((rtems_libio_open_close_args_t *)arg)->iop->data1);
|
||||
((rtems_libio_open_close_args_t *)arg)->iop->data1);
|
||||
/* Enable interrupts on channel */
|
||||
BSP_uart_intr_ctrl(minor, BSP_UART_INTR_CTRL_TERMIOS);
|
||||
|
||||
@@ -241,9 +237,11 @@ console_open(rtems_device_major_number major,
|
||||
| Console device driver CLOSE entry point
|
||||
+--------------------------------------------------------------------------*/
|
||||
rtems_device_driver
|
||||
console_close(rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg)
|
||||
console_close(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
rtems_device_driver res = RTEMS_SUCCESSFUL;
|
||||
|
||||
@@ -257,12 +255,12 @@ console_close(rtems_device_major_number major,
|
||||
+--------------------------------------------------------------------------+
|
||||
| Read characters from the I/O console. We only have stdin.
|
||||
+--------------------------------------------------------------------------*/
|
||||
rtems_device_driver
|
||||
console_read(rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg)
|
||||
rtems_device_driver console_read(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
|
||||
return rtems_termios_read (arg);
|
||||
} /* console_read */
|
||||
|
||||
@@ -271,104 +269,47 @@ console_read(rtems_device_major_number major,
|
||||
+--------------------------------------------------------------------------+
|
||||
| Write characters to the I/O console. Stderr and stdout are the same.
|
||||
+--------------------------------------------------------------------------*/
|
||||
rtems_device_driver
|
||||
console_write(rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void * arg)
|
||||
rtems_device_driver console_write(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
|
||||
return rtems_termios_write (arg);
|
||||
|
||||
} /* console_write */
|
||||
|
||||
/*
|
||||
* Handle ioctl request.
|
||||
*/
|
||||
rtems_device_driver
|
||||
console_control(rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
rtems_device_driver console_control(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
)
|
||||
)
|
||||
{
|
||||
/* does the BSP support break callbacks ? */
|
||||
#if defined(BIOCSETBREAKCB) && defined(BIOCGETBREAKCB)
|
||||
rtems_libio_ioctl_args_t *ioa=arg;
|
||||
switch (ioa->command) {
|
||||
case BIOCSETBREAKCB:
|
||||
return BSP_uart_set_break_cb(minor, ioa);
|
||||
case BIOCGETBREAKCB:
|
||||
return BSP_uart_get_break_cb(minor, ioa);
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
rtems_libio_ioctl_args_t *ioa=arg;
|
||||
switch (ioa->command) {
|
||||
case BIOCSETBREAKCB: return BSP_uart_set_break_cb(minor, ioa);
|
||||
case BIOCGETBREAKCB: return BSP_uart_get_break_cb(minor, ioa);
|
||||
default: break;
|
||||
}
|
||||
#endif
|
||||
return rtems_termios_ioctl (arg);
|
||||
}
|
||||
|
||||
static int
|
||||
conSetAttr(int minor, const struct termios *t)
|
||||
static int conSetAttr(
|
||||
int minor,
|
||||
const struct termios *t
|
||||
)
|
||||
{
|
||||
int baud;
|
||||
|
||||
switch (t->c_cflag & CBAUD)
|
||||
{
|
||||
case B50:
|
||||
baud = 50;
|
||||
break;
|
||||
case B75:
|
||||
baud = 75;
|
||||
break;
|
||||
case B110:
|
||||
baud = 110;
|
||||
break;
|
||||
case B134:
|
||||
baud = 134;
|
||||
break;
|
||||
case B150:
|
||||
baud = 150;
|
||||
break;
|
||||
case B200:
|
||||
baud = 200;
|
||||
break;
|
||||
case B300:
|
||||
baud = 300;
|
||||
break;
|
||||
case B600:
|
||||
baud = 600;
|
||||
break;
|
||||
case B1200:
|
||||
baud = 1200;
|
||||
break;
|
||||
case B1800:
|
||||
baud = 1800;
|
||||
break;
|
||||
case B2400:
|
||||
baud = 2400;
|
||||
break;
|
||||
case B4800:
|
||||
baud = 4800;
|
||||
break;
|
||||
case B9600:
|
||||
baud = 9600;
|
||||
break;
|
||||
case B19200:
|
||||
baud = 19200;
|
||||
break;
|
||||
case B38400:
|
||||
baud = 38400;
|
||||
break;
|
||||
case B57600:
|
||||
baud = 57600;
|
||||
break;
|
||||
case B115200:
|
||||
baud = 115200;
|
||||
break;
|
||||
default:
|
||||
baud = 0;
|
||||
rtems_fatal_error_occurred (RTEMS_INTERNAL_ERROR);
|
||||
return 0;
|
||||
}
|
||||
baud = termios_baud_to_number(t->c_cflag & CBAUD);
|
||||
if ( baud > 115200 )
|
||||
rtems_fatal_error_occurred (RTEMS_INTERNAL_ERROR);
|
||||
|
||||
BSP_uart_set_baud(minor, baud);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user