Changeset 923dd7a in rtems


Ignore:
Timestamp:
May 22, 2008, 8:34:27 PM (12 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.9, master
Children:
cdc8309
Parents:
07edbef5
Message:

2008-05-22 Joel Sherrill <joel.sherrill@…>

  • shared/console/console.c: Remove explicit switch and call termios_baud_to_number().
Location:
c/src/lib/libbsp/powerpc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/powerpc/ChangeLog

    r07edbef5 r923dd7a  
     12008-05-22      Joel Sherrill <joel.sherrill@oarcorp.com>
     2
     3        * shared/console/console.c: Remove explicit switch and call
     4        termios_baud_to_number().
     5
    162008-05-15      Joel Sherrill <joel.sherrill@OARcorp.com>
    27
  • c/src/lib/libbsp/powerpc/shared/console/console.c

    r07edbef5 r923dd7a  
    3636#include <termios.h>
    3737#include <bsp/uart.h>
    38 #include <rtems/bspIo.h>        /* printk */
     38#include <rtems/bspIo.h>  /* printk */
    3939
    4040/* Definitions for BSPConsolePort */
    4141/*
    4242 * Possible value for console input/output :
    43  *      BSP_CONSOLE_PORT_CONSOLE
    44  *      BSP_UART_COM1
    45  *      BSP_UART_COM2
     43 *    BSP_CONSOLE_PORT_CONSOLE
     44 *    BSP_UART_COM1
     45 *    BSP_UART_COM2
    4646 */
    4747int BSPConsolePort = BSP_CONSOLE_PORT;
     
    5555 */
    5656#ifndef TERMIOS_OUTPUT_MODE
    57 #if 1
    58 #define TERMIOS_OUTPUT_MODE TERMIOS_IRQ_DRIVEN
     57  #if 1
     58    #define TERMIOS_OUTPUT_MODE TERMIOS_IRQ_DRIVEN
     59  #else
     60    #define TERMIOS_OUTPUT_MODE TERMIOS_TASK_DRIVEN
     61  #endif
     62#endif
     63
     64#if ! defined(USE_POLLED_IO) && (TERMIOS_OUTPUT_MODE == TERMIOS_POLLED)
     65  #define USE_POLLED_IO
     66#endif
     67
     68/*-------------------------------------------------------------------------+
     69| External Prototypes
     70+--------------------------------------------------------------------------*/
     71
     72static int  conSetAttr(int minor, const struct termios *);
     73
     74typedef struct TtySTblRec_ {
     75  char          *name;
     76  rtems_irq_hdl  isr;
     77} TtySTblRec, *TtySTbl;               
     78
     79static TtySTblRec ttyS[]={
     80    { "/dev/ttyS0",
     81#ifdef BSP_UART_IOBASE_COM1
     82      BSP_uart_termios_isr_com1
    5983#else
    60 #define TERMIOS_OUTPUT_MODE TERMIOS_TASK_DRIVEN
    61 #endif
    62 #endif
    63 
    64 #if ! defined(USE_POLLED_IO) && (TERMIOS_OUTPUT_MODE == TERMIOS_POLLED)
    65 #define USE_POLLED_IO
    66 #endif
    67 
    68 /*-------------------------------------------------------------------------+
    69 | External Prototypes
    70 +--------------------------------------------------------------------------*/
    71 
    72 static int  conSetAttr(int minor, const struct termios *);
    73 
    74 typedef struct TtySTblRec_ {
    75                 char          *name;
    76                 rtems_irq_hdl isr;
    77 } TtySTblRec, *TtySTbl;               
    78 
    79 static TtySTblRec ttyS[]={
    80                 { "/dev/ttyS0",
    81 #ifdef BSP_UART_IOBASE_COM1
    82                   BSP_uart_termios_isr_com1
     84      0
     85#endif
     86    },
     87    { "/dev/ttyS1",
     88#ifdef BSP_UART_IOBASE_COM2
     89      BSP_uart_termios_isr_com2
    8390#else
    84                   0
    85 #endif
    86                 },
    87                 { "/dev/ttyS1",
    88 #ifdef BSP_UART_IOBASE_COM2
    89                   BSP_uart_termios_isr_com2
    90 #else
    91                   0
    92 #endif
    93                 },
     91      0
     92#endif
     93    },
    9494};
    9595
     
    9999| Initilizes the I/O console (keyboard + VGA display) driver.
    100100+--------------------------------------------------------------------------*/
    101 rtems_device_driver
    102 console_initialize(rtems_device_major_number major,
    103                    rtems_device_minor_number minor,
    104                    void                      *arg)
     101rtems_device_driver console_initialize(
     102  rtems_device_major_number major,
     103  rtems_device_minor_number minor,
     104  void                      *arg
     105)
    105106{
    106107  rtems_status_code status;
     
    114115   * Set up TERMIOS
    115116   */
    116   rtems_termios_initialize ();
     117  rtems_termios_initialize();
    117118
    118119  /*
     
    125126
    126127  for (minor=0; minor < sizeof(ttyS)/sizeof(ttyS[0]); minor++) {
    127         char *nm;
    128           /*
    129            * Skip ports (possibly not supported by BSP...) we have no ISR for
    130            */
    131           if ( ! ttyS[minor].isr )
    132                 continue;
    133           /*
    134            * Register the device
    135            */
    136           status = rtems_io_register_name ((nm=ttyS[minor].name), major, minor);
    137           if ( RTEMS_SUCCESSFUL==status && BSPConsolePort == minor)
    138                 {
    139                   printk("Registering /dev/console as minor %d (==%s)\n",
    140                                                         minor,
    141                                                         ttyS[minor].name);
    142                   /* also register an alias */
    143                   status = rtems_io_register_name (
    144                                                         (nm="/dev/console"),
    145                                                         major,
    146                                                         minor);
    147                 }
    148           if (status != RTEMS_SUCCESSFUL)
    149                 {
    150                   printk("Error registering %s!\n",nm);
    151                   rtems_fatal_error_occurred (status);
    152                 }
     128    char *nm;
     129    /*
     130     * Skip ports (possibly not supported by BSP...) we have no ISR for
     131     */
     132    if ( ! ttyS[minor].isr )
     133      continue;
     134    /*
     135     * Register the device
     136     */
     137    status = rtems_io_register_name ((nm=ttyS[minor].name), major, minor);
     138    if ( RTEMS_SUCCESSFUL==status && BSPConsolePort == minor) {
     139      printk("Registering /dev/console as minor %d (==%s)\n",
     140              minor,
     141              ttyS[minor].name);
     142      /* also register an alias */
     143      status = rtems_io_register_name ( (nm="/dev/console"), major, minor);
     144    }
     145
     146    if (status != RTEMS_SUCCESSFUL) {
     147      printk("Error registering %s!\n",nm);
     148      rtems_fatal_error_occurred (status);
     149    }
    153150  }
    154151
     
    160157  rtems_status_code status;
    161158
    162           /* must not open a minor device we have no ISR for */
    163           assert( minor>=0 && minor < sizeof(ttyS)/sizeof(ttyS[0]) && ttyS[minor].isr );
    164 
    165           /* 9600-8-N-1 */
    166           BSP_uart_init(minor, 9600, 0);
    167           status = BSP_uart_install_isr(minor, ttyS[minor].isr);
    168           if (!status)
    169                 {
    170                   printk("Error installing serial console interrupt handler for '%s'!\n",
    171                                 ttyS[minor].name);
    172                   rtems_fatal_error_occurred(status);
    173                 }
    174           return 0;
     159  /* must not open a minor device we have no ISR for */
     160  assert( minor>=0 && minor < sizeof(ttyS)/sizeof(ttyS[0]) && ttyS[minor].isr );
     161
     162  /* 9600-8-N-1 */
     163  BSP_uart_init(minor, 9600, 0);
     164  status = BSP_uart_install_isr(minor, ttyS[minor].isr);
     165  if (!status) {
     166    printk("Error installing serial console interrupt handler for '%s'!\n",
     167      ttyS[minor].name);
     168    rtems_fatal_error_occurred(status);
     169  }
     170  return 0;
    175171}
    176172
     
    184180| Console device driver OPEN entry point
    185181+--------------------------------------------------------------------------*/
    186 rtems_device_driver
    187 console_open(rtems_device_major_number major,
    188                 rtems_device_minor_number minor,
    189                 void                      *arg)
     182rtems_device_driver console_open(
     183  rtems_device_major_number major,
     184  rtems_device_minor_number minor,
     185  void                      *arg
     186)
    190187{
    191188  rtems_status_code              status;
     
    221218  status = rtems_termios_open (major, minor, arg, &cb);
    222219
    223   if(status != RTEMS_SUCCESSFUL)
    224     {
    225       printk("Error opening console device\n");
    226       return status;
    227     }
     220  if (status != RTEMS_SUCCESSFUL) {
     221    printk("Error opening console device\n");
     222    return status;
     223  }
    228224
    229225  /*
     
    231227   */
    232228  BSP_uart_termios_set(minor,
    233                         ((rtems_libio_open_close_args_t *)arg)->iop->data1);
     229      ((rtems_libio_open_close_args_t *)arg)->iop->data1);
    234230  /* Enable interrupts  on channel */
    235231  BSP_uart_intr_ctrl(minor, BSP_UART_INTR_CTRL_TERMIOS);
     
    242238+--------------------------------------------------------------------------*/
    243239rtems_device_driver
    244 console_close(rtems_device_major_number major,
    245               rtems_device_minor_number minor,
    246               void                      *arg)
     240console_close(
     241  rtems_device_major_number major,
     242  rtems_device_minor_number minor,
     243  void                      *arg
     244)
    247245{
    248246  rtems_device_driver res = RTEMS_SUCCESSFUL;
     
    258256| Read characters from the I/O console. We only have stdin.
    259257+--------------------------------------------------------------------------*/
    260 rtems_device_driver
    261 console_read(rtems_device_major_number major,
    262              rtems_device_minor_number minor,
    263              void                      *arg)
    264 {
    265 
     258rtems_device_driver console_read(
     259  rtems_device_major_number major,
     260  rtems_device_minor_number minor,
     261  void                      *arg
     262)
     263{
    266264  return rtems_termios_read (arg);
    267265} /* console_read */
     
    272270| Write characters to the I/O console. Stderr and stdout are the same.
    273271+--------------------------------------------------------------------------*/
    274 rtems_device_driver
    275 console_write(rtems_device_major_number major,
    276               rtems_device_minor_number minor,
    277               void                    * arg)
    278 {
    279 
     272rtems_device_driver console_write(
     273  rtems_device_major_number major,
     274  rtems_device_minor_number minor,
     275  void                      *arg
     276)
     277{
    280278  return rtems_termios_write (arg);
    281 
    282279} /* console_write */
    283280
     
    285282 * Handle ioctl request.
    286283 */
    287 rtems_device_driver
    288 console_control(rtems_device_major_number       major,
    289                 rtems_device_minor_number                       minor,
    290                 void                                            *arg
     284rtems_device_driver console_control(
     285  rtems_device_major_number major,
     286  rtems_device_minor_number minor,
     287  void                      *arg
     288)
    291289)
    292290{
    293291/* does the BSP support break callbacks ? */
    294292#if defined(BIOCSETBREAKCB) && defined(BIOCGETBREAKCB)
    295 rtems_libio_ioctl_args_t        *ioa=arg;
    296         switch (ioa->command) {
    297                         case BIOCSETBREAKCB:
    298                                 return BSP_uart_set_break_cb(minor, ioa);
    299                         case BIOCGETBREAKCB:
    300                                 return BSP_uart_get_break_cb(minor, ioa);
    301 
    302                         default:
    303                                 break;
    304         }
     293  rtems_libio_ioctl_args_t  *ioa=arg;
     294  switch (ioa->command) {
     295    case BIOCSETBREAKCB: return BSP_uart_set_break_cb(minor, ioa);
     296    case BIOCGETBREAKCB: return BSP_uart_get_break_cb(minor, ioa);
     297    default:             break;
     298  }
    305299#endif
    306300  return rtems_termios_ioctl (arg);
    307301}
    308302
    309 static int
    310 conSetAttr(int minor, const struct termios *t)
     303static int conSetAttr(
     304  int                   minor,
     305  const struct termios *t
     306)
    311307{
    312308  int baud;
    313309
    314   switch (t->c_cflag & CBAUD)
    315     {
    316     case B50:
    317       baud = 50;
    318       break;
    319     case B75:
    320       baud = 75;
    321       break;
    322     case B110:
    323       baud = 110;
    324       break;
    325     case B134:
    326       baud = 134;
    327       break;
    328     case B150:
    329       baud = 150;
    330       break;
    331     case B200:
    332       baud = 200;
    333       break;
    334     case B300:
    335       baud = 300;
    336       break;
    337     case B600:
    338       baud = 600;
    339       break;
    340     case B1200:
    341       baud = 1200;
    342       break;
    343     case B1800:
    344       baud = 1800;
    345       break;
    346     case B2400:
    347       baud = 2400;
    348       break;
    349     case B4800:
    350       baud = 4800;
    351       break;
    352     case B9600:
    353       baud = 9600;
    354       break;
    355     case B19200:
    356       baud = 19200;
    357       break;
    358     case B38400:
    359       baud = 38400;
    360       break;
    361     case B57600:
    362       baud = 57600;
    363       break;
    364     case B115200:
    365       baud = 115200;
    366       break;
    367     default:
    368       baud = 0;
    369       rtems_fatal_error_occurred (RTEMS_INTERNAL_ERROR);
    370       return 0;
    371     }
     310  baud = termios_baud_to_number(t->c_cflag & CBAUD);
     311  if ( baud > 115200 )
     312    rtems_fatal_error_occurred (RTEMS_INTERNAL_ERROR);
    372313
    373314  BSP_uart_set_baud(minor, baud);
Note: See TracChangeset for help on using the changeset viewer.