Changeset 8739322 in rtems


Ignore:
Timestamp:
Jul 25, 1998, 5:17:46 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
cae0504
Parents:
b636d56
Message:

Added ns16550_set_attributes.

Location:
c/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libchip/serial/ns16550.c

    rb636d56 r8739322  
    5454  ns16550_initialize_interrupts,  /* deviceInitialize */
    5555  ns16550_write_polled,           /* deviceWritePolled */
    56   NULL,                           /* deviceSetAttributes */
    57   FALSE,                          /* deviceOutputUsesInterrupts */
     56  ns16550_set_attributes,         /* deviceSetAttributes */
     57  TRUE                            /* deviceOutputUsesInterrupts */
    5858};
    5959
     
    6767  ns16550_init,                        /* deviceInitialize */
    6868  ns16550_write_polled,                /* deviceWritePolled */
    69   NULL,                                /* deviceSetAttributes */
    70   FALSE,                               /* deviceOutputUsesInterrupts */
     69  ns16550_set_attributes,              /* deviceSetAttributes */
     70  FALSE                                /* deviceOutputUsesInterrupts */
    7171};
    7272
     
    293293 *  ns16550_negate_DTR
    294294 */
     295
    295296NS16550_STATIC int ns16550_negate_DTR(int minor)
    296297{
     
    313314  rtems_interrupt_enable(Irql);
    314315  return 0;
     316}
     317
     318/*
     319 *  ns16550_set_attributes
     320 *
     321 *  This function sets the channel to reflect the requested termios
     322 *  port settings.
     323 */
     324
     325NS16550_STATIC int ns16550_set_attributes(
     326  int                   minor,
     327  const struct termios *t
     328)
     329{
     330  unsigned32              pNS16550;
     331  unsigned32              ulBaudDivisor;
     332  unsigned8               ucLineControl;
     333  unsigned32              baud_requested;
     334  setRegister_f           setReg;
     335  getRegister_f           getReg;
     336  unsigned32              Irql;
     337
     338  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
     339  setReg   = Console_Port_Tbl[minor].setRegister;
     340  getReg   = Console_Port_Tbl[minor].getRegister;
     341
     342  /*
     343   *  Calculate the baud rate divisor
     344   */
     345
     346  baud_requested = t->c_cflag & CBAUD;
     347  if (!baud_requested)
     348    baud_requested = B9600;              /* default to 9600 baud */
     349
     350  ulBaudDivisor = termios_baud_to_number(baud_requested);
     351
     352  ucLineControl = 0;
     353
     354  /*
     355   *  Parity
     356   */
     357
     358  if (t->c_cflag & PARENB) {
     359    ucLineControl |= SP_LINE_PAR;
     360    if (!(t->c_cflag & PARODD))
     361      ucLineControl |= SP_LINE_ODD;
     362  }
     363
     364  /*
     365   *  Character Size
     366   */
     367
     368  if (t->c_cflag & CSIZE) {
     369    switch (t->c_cflag & CSIZE) {
     370      case CS5:  ucLineControl |= FIVE_BITS;  break;
     371      case CS6:  ucLineControl |= SIX_BITS;   break;
     372      case CS7:  ucLineControl |= SEVEN_BITS; break;
     373      case CS8:  ucLineControl |= EIGHT_BITS; break;
     374    }
     375  } else {
     376    ucLineControl |= EIGHT_BITS;               /* default to 9600,8,N,1 */
     377  }
     378
     379  /*
     380   *  Stop Bits
     381   */
     382
     383  if (t->c_cflag & CSTOPB) {
     384    ucLineControl |= SP_LINE_STOP;              /* 2 stop bits */
     385  } else {
     386    ;                                           /* 1 stop bit */
     387  }
     388
     389  /*
     390   *  Now actually set the chip
     391   */
     392
     393  rtems_interrupt_disable(Irql);
     394
     395    /*
     396     *  Set the baud rate
     397     */
     398
     399    (*setReg)(pNS16550, NS16550_LINE_CONTROL, SP_LINE_DLAB);
     400    /* XXX are these registers right? */
     401    (*setReg)(pNS16550, NS16550_TRANSMIT_BUFFER, ulBaudDivisor&0xff);
     402    (*setReg)(pNS16550, NS16550_INTERRUPT_ENABLE, (ulBaudDivisor>>8)&0xff);
     403
     404    /*
     405     *  Now write the line control
     406     */
     407    (*setReg)(pNS16550, NS16550_LINE_CONTROL, ucLineControl );
     408
     409  rtems_interrupt_enable(Irql);
     410
    315411}
    316412
  • c/src/lib/libchip/serial/ns16550_p.h

    rb636d56 r8739322  
    227227);
    228228
     229NS16550_STATIC int ns16550_set_attributes(
     230  int                   minor,
     231  const struct termios *t
     232);
     233
    229234#ifdef __cplusplus
    230235}
  • c/src/libchip/serial/ns16550.c

    rb636d56 r8739322  
    5454  ns16550_initialize_interrupts,  /* deviceInitialize */
    5555  ns16550_write_polled,           /* deviceWritePolled */
    56   NULL,                           /* deviceSetAttributes */
    57   FALSE,                          /* deviceOutputUsesInterrupts */
     56  ns16550_set_attributes,         /* deviceSetAttributes */
     57  TRUE                            /* deviceOutputUsesInterrupts */
    5858};
    5959
     
    6767  ns16550_init,                        /* deviceInitialize */
    6868  ns16550_write_polled,                /* deviceWritePolled */
    69   NULL,                                /* deviceSetAttributes */
    70   FALSE,                               /* deviceOutputUsesInterrupts */
     69  ns16550_set_attributes,              /* deviceSetAttributes */
     70  FALSE                                /* deviceOutputUsesInterrupts */
    7171};
    7272
     
    293293 *  ns16550_negate_DTR
    294294 */
     295
    295296NS16550_STATIC int ns16550_negate_DTR(int minor)
    296297{
     
    313314  rtems_interrupt_enable(Irql);
    314315  return 0;
     316}
     317
     318/*
     319 *  ns16550_set_attributes
     320 *
     321 *  This function sets the channel to reflect the requested termios
     322 *  port settings.
     323 */
     324
     325NS16550_STATIC int ns16550_set_attributes(
     326  int                   minor,
     327  const struct termios *t
     328)
     329{
     330  unsigned32              pNS16550;
     331  unsigned32              ulBaudDivisor;
     332  unsigned8               ucLineControl;
     333  unsigned32              baud_requested;
     334  setRegister_f           setReg;
     335  getRegister_f           getReg;
     336  unsigned32              Irql;
     337
     338  pNS16550 = Console_Port_Tbl[minor].ulCtrlPort1;
     339  setReg   = Console_Port_Tbl[minor].setRegister;
     340  getReg   = Console_Port_Tbl[minor].getRegister;
     341
     342  /*
     343   *  Calculate the baud rate divisor
     344   */
     345
     346  baud_requested = t->c_cflag & CBAUD;
     347  if (!baud_requested)
     348    baud_requested = B9600;              /* default to 9600 baud */
     349
     350  ulBaudDivisor = termios_baud_to_number(baud_requested);
     351
     352  ucLineControl = 0;
     353
     354  /*
     355   *  Parity
     356   */
     357
     358  if (t->c_cflag & PARENB) {
     359    ucLineControl |= SP_LINE_PAR;
     360    if (!(t->c_cflag & PARODD))
     361      ucLineControl |= SP_LINE_ODD;
     362  }
     363
     364  /*
     365   *  Character Size
     366   */
     367
     368  if (t->c_cflag & CSIZE) {
     369    switch (t->c_cflag & CSIZE) {
     370      case CS5:  ucLineControl |= FIVE_BITS;  break;
     371      case CS6:  ucLineControl |= SIX_BITS;   break;
     372      case CS7:  ucLineControl |= SEVEN_BITS; break;
     373      case CS8:  ucLineControl |= EIGHT_BITS; break;
     374    }
     375  } else {
     376    ucLineControl |= EIGHT_BITS;               /* default to 9600,8,N,1 */
     377  }
     378
     379  /*
     380   *  Stop Bits
     381   */
     382
     383  if (t->c_cflag & CSTOPB) {
     384    ucLineControl |= SP_LINE_STOP;              /* 2 stop bits */
     385  } else {
     386    ;                                           /* 1 stop bit */
     387  }
     388
     389  /*
     390   *  Now actually set the chip
     391   */
     392
     393  rtems_interrupt_disable(Irql);
     394
     395    /*
     396     *  Set the baud rate
     397     */
     398
     399    (*setReg)(pNS16550, NS16550_LINE_CONTROL, SP_LINE_DLAB);
     400    /* XXX are these registers right? */
     401    (*setReg)(pNS16550, NS16550_TRANSMIT_BUFFER, ulBaudDivisor&0xff);
     402    (*setReg)(pNS16550, NS16550_INTERRUPT_ENABLE, (ulBaudDivisor>>8)&0xff);
     403
     404    /*
     405     *  Now write the line control
     406     */
     407    (*setReg)(pNS16550, NS16550_LINE_CONTROL, ucLineControl );
     408
     409  rtems_interrupt_enable(Irql);
     410
    315411}
    316412
  • c/src/libchip/serial/ns16550_p.h

    rb636d56 r8739322  
    227227);
    228228
     229NS16550_STATIC int ns16550_set_attributes(
     230  int                   minor,
     231  const struct termios *t
     232);
     233
    229234#ifdef __cplusplus
    230235}
Note: See TracChangeset for help on using the changeset viewer.