forked from Imagelibrary/rtems
Updated to indicate that it has been tested and that the ulClock
parameter now supports overrides.
This commit is contained in:
@@ -2,4 +2,94 @@
|
|||||||
# $Id$
|
# $Id$
|
||||||
#
|
#
|
||||||
|
|
||||||
This driver needs to be debugged before this is written.
|
Status
|
||||||
|
======
|
||||||
|
|
||||||
|
This driver appears to work OK for polled output at this point.
|
||||||
|
|
||||||
|
It needs to be tested for:
|
||||||
|
|
||||||
|
+ polled input
|
||||||
|
+ interrupt driver output
|
||||||
|
+ interrupt driver input
|
||||||
|
|
||||||
|
This driver does not support the new style RTEMS interrupt processing
|
||||||
|
used on the i386 and some PowerPC models.
|
||||||
|
|
||||||
|
Configuration Table Use
|
||||||
|
=======================
|
||||||
|
|
||||||
|
sDeviceName
|
||||||
|
|
||||||
|
The name of this device.
|
||||||
|
|
||||||
|
deviceType
|
||||||
|
|
||||||
|
This field must be SERIAL_NS16550.
|
||||||
|
|
||||||
|
pDeviceFns
|
||||||
|
|
||||||
|
The device interface control table. This may be:
|
||||||
|
+ ns16550_fns for interrupt driven IO
|
||||||
|
+ ns16550_fns_polled for polled IO
|
||||||
|
|
||||||
|
deviceProbe
|
||||||
|
|
||||||
|
This is the address of the routine which probes to see if the device
|
||||||
|
is present.
|
||||||
|
|
||||||
|
pDeviceFlow
|
||||||
|
|
||||||
|
This field is ignored as hardware flow control is not currently supported.
|
||||||
|
|
||||||
|
ulMargin
|
||||||
|
|
||||||
|
This is currently unused.
|
||||||
|
|
||||||
|
ulHysteresis
|
||||||
|
|
||||||
|
This is currently unused.
|
||||||
|
|
||||||
|
pDeviceParams
|
||||||
|
|
||||||
|
This is set to the default settings. At this point, it is the default
|
||||||
|
baud rate cast as a (void *).
|
||||||
|
|
||||||
|
ulCtrlPort1
|
||||||
|
|
||||||
|
This field is the base address of this port on the UART.
|
||||||
|
|
||||||
|
ulCtrlPort2
|
||||||
|
|
||||||
|
This field is unused for the NS16550.
|
||||||
|
|
||||||
|
ulDataPort
|
||||||
|
|
||||||
|
This field is the base address of this port on the UART.
|
||||||
|
|
||||||
|
getRegister
|
||||||
|
setRegister
|
||||||
|
|
||||||
|
These follow standard conventions.
|
||||||
|
|
||||||
|
getData
|
||||||
|
setData
|
||||||
|
|
||||||
|
These are unused since the TX and RX data registers can be accessed
|
||||||
|
as regular registers.
|
||||||
|
|
||||||
|
ulClock
|
||||||
|
|
||||||
|
This is the clock constant which is divided by the desired baud
|
||||||
|
to get the value programmed into the part. The formula for this
|
||||||
|
for 9600 baud is:
|
||||||
|
|
||||||
|
chip_divisor_value = ulClock / 9600.
|
||||||
|
|
||||||
|
NOTE: When ulClock is 0, the correct value for a PC (115,200) is
|
||||||
|
used.
|
||||||
|
|
||||||
|
ulIntVector
|
||||||
|
|
||||||
|
This is the interrupt vector number associated with this chip.
|
||||||
|
|
||||||
|
|||||||
@@ -37,12 +37,6 @@ MC68681
|
|||||||
NS16650
|
NS16650
|
||||||
=======
|
=======
|
||||||
|
|
||||||
+ Not tested in libchip context. Based on Radstone PPC2 driver which worked
|
|
||||||
well.
|
|
||||||
|
|
||||||
+ Interrupt code has been reworked to not use ring buffer and may be broken
|
|
||||||
as it has not been tested since this was done.
|
|
||||||
|
|
||||||
+ ns16550_set-attributes function is untested.
|
+ ns16550_set-attributes function is untested.
|
||||||
|
|
||||||
+ Hardware flow control included but is currently disabled in ISR.
|
+ Hardware flow control included but is currently disabled in ISR.
|
||||||
|
|||||||
@@ -102,7 +102,10 @@ NS16550_STATIC void ns16550_init(int minor)
|
|||||||
|
|
||||||
/* Set the divisor latch and set the baud rate. */
|
/* Set the divisor latch and set the baud rate. */
|
||||||
|
|
||||||
ulBaudDivisor=NS16550_Baud((unsigned32)Console_Port_Tbl[minor].pDeviceParams);
|
ulBaudDivisor = NS16550_Baud(
|
||||||
|
(unsigned32) Console_Port_Tbl[minor].ulClock,
|
||||||
|
(unsigned32) Console_Port_Tbl[minor].pDeviceParams
|
||||||
|
);
|
||||||
ucDataByte = SP_LINE_DLAB;
|
ucDataByte = SP_LINE_DLAB;
|
||||||
(*setReg)(pNS16550, NS16550_LINE_CONTROL, ucDataByte);
|
(*setReg)(pNS16550, NS16550_LINE_CONTROL, ucDataByte);
|
||||||
|
|
||||||
@@ -363,7 +366,10 @@ NS16550_STATIC int ns16550_set_attributes(
|
|||||||
if (!baud_requested)
|
if (!baud_requested)
|
||||||
baud_requested = B9600; /* default to 9600 baud */
|
baud_requested = B9600; /* default to 9600 baud */
|
||||||
|
|
||||||
ulBaudDivisor = NS16550_Baud(termios_baud_to_number(baud_requested));
|
ulBaudDivisor = NS16550_Baud(
|
||||||
|
(unsigned32) Console_Port_Tbl[minor].ulClock,
|
||||||
|
termios_baud_to_number(baud_requested)
|
||||||
|
);
|
||||||
|
|
||||||
ucLineControl = 0;
|
ucLineControl = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -132,7 +132,8 @@ typedef struct _SP_INTERRUPT_ID {
|
|||||||
* Line speed divisor definition.
|
* Line speed divisor definition.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define NS16550_Baud(baud_rate) (115200/baud_rate)
|
#define NS16550_Baud(_clock, _baud_rate) \
|
||||||
|
((((_clock) == 0) ? 115200 : (_clock))/(_baud_rate))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define serial port modem control register structure.
|
* Define serial port modem control register structure.
|
||||||
|
|||||||
Reference in New Issue
Block a user