Changeset 36a14a96 in rtems


Ignore:
Timestamp:
May 4, 1998, 12:38:53 PM (22 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
f69d686
Parents:
5ee559ac
Message:

Patch from Eric Norum to switch to termios callback structure and
add support for changing the baudrate.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/m68k/gen68360/console/console.c

    r5ee559ac r36a14a96  
    3232
    3333/*
     34 * Declare clock speed -- may be overwritten by downloader or debugger
     35 */
     36int m360_clock_rate     = 25000000;
     37
     38/*
    3439 * Interrupt-driven input buffer
    3540 */
     
    5055/*
    5156 * Device-specific routines
     57 */
     58
     59/*
     60 * Compute baud-rate-generator configuration register value
     61 */
     62static int
     63smc1BRGC (int baud)
     64{
     65        int divisor;
     66        int div16 = 0;
     67
     68        divisor = ((m360_clock_rate / 16) + (baud / 2)) / baud;
     69        if (divisor > 4096) {
     70                div16 = 1;
     71                divisor = (divisor + 8) / 16;
     72        }
     73        return M360_BRG_EN | M360_BRG_EXTC_BRGCLK | ((divisor - 1) << 1) | div16;
     74}
     75
     76/*
     77 * Hardware-dependent portion of tcsetattr().
     78 */
     79static int
     80smc1SetAttributes (int minor, const struct termios *t)
     81{
     82        int baud;
     83
     84        switch (t->c_cflag & CBAUD) {
     85        default:        baud = -1;      break;
     86        case B50:       baud = 50;      break;
     87        case B75:       baud = 75;      break;
     88        case B110:      baud = 110;     break;
     89        case B134:      baud = 134;     break;
     90        case B150:      baud = 150;     break;
     91        case B200:      baud = 200;     break;
     92        case B300:      baud = 300;     break;
     93        case B600:      baud = 600;     break;
     94        case B1200:     baud = 1200;    break;
     95        case B1800:     baud = 1800;    break;
     96        case B2400:     baud = 2400;    break;
     97        case B4800:     baud = 4800;    break;
     98        case B9600:     baud = 9600;    break;
     99        case B19200:    baud = 19200;   break;
     100        case B38400:    baud = 38400;   break;
     101        case B57600:    baud = 57600;   break;
     102        case B115200:   baud = 115200;  break;
     103        case B230400:   baud = 230400;  break;
     104        case B460800:   baud = 460800;  break;
     105        }
     106        if (baud > 0)
     107                m360.brgc1 = smc1BRGC (baud);
     108        return 0;
     109}
     110
     111/*
     112 * Interrupt handler
    52113 */
    53114static rtems_isr
     
    98159         */
    99160        m360.brgc1 = M360_BRG_RST;
    100         m360.brgc1 = M360_BRG_EN | M360_BRG_EXTC_BRGCLK | M360_BRG_9600;
     161        m360.brgc1 = smc1BRGC (9600);
    101162
    102163        /*
     
    167228
    168229static int
    169 smc1Read (int minor)
     230smc1PollRead (int minor)
    170231{
    171232        unsigned char c;
     
    265326{
    266327        rtems_status_code sc;
     328        static const rtems_termios_callbacks intrCallbacks = {
     329                NULL,                   /* firstOpen */
     330                NULL,                   /* lastClose */
     331                NULL,                   /* pollRead */
     332                smc1InterruptWrite,     /* write */
     333                smc1SetAttributes,      /* setAttributes */
     334                NULL,                   /* stopRemoteTx */
     335                NULL,                   /* startRemoteTx */
     336                1                       /* outputUsesInterrupts */
     337        };
     338        static const rtems_termios_callbacks pollCallbacks = {
     339                NULL,                   /* firstOpen */
     340                NULL,                   /* lastClose */
     341                smc1PollRead,           /* pollRead */
     342                smc1PollWrite,          /* write */
     343                smc1SetAttributes,      /* setAttributes */
     344                NULL,                   /* stopRemoteTx */
     345                NULL,                   /* startRemoteTx */
     346                0                       /* outputUsesInterrupts */
     347        };
    267348
    268349        if (m360_smc1_interrupt) {
    269350                rtems_libio_open_close_args_t *args = arg;
    270351
    271                 sc = rtems_termios_open (major, minor, arg,
    272                                         NULL,
    273                                         NULL,
    274                                         NULL,
    275                                         smc1InterruptWrite,
    276                                         1);
     352                sc = rtems_termios_open (major, minor, arg, &intrCallbacks);
    277353                smc1ttyp = args->iop->data1;
    278354        }
    279355        else {
    280                 sc = rtems_termios_open (major, minor, arg,
    281                                         NULL,
    282                                         NULL,
    283                                         smc1Read,
    284                                         smc1PollWrite,
    285                                         0);
     356                sc = rtems_termios_open (major, minor, arg, &pollCallbacks);
    286357        }
    287358        return sc;
     
    326397/*
    327398 * Handle ioctl request.
    328  * Should set hardware line speed, bits/char, etc.
    329399 */
    330400rtems_device_driver console_control(
Note: See TracChangeset for help on using the changeset viewer.