[ LUGOS ] hitrejsi UART - rezultati (ali pa ne)
Metod Kozelj
metod.kozelj na rzs-hm.si
Sre Jun 17 12:56:14 CEST 1998
Howdy!
On Wed, 17 Jun 1998, BlaY0 wrote:
> Se pravi mene zanima ce UART 16650 pod Linux-om res deluje in kako bi to
> sprobal? Btw v Serial-HOWTO UART 16650 sploh ni omenjen...
Prava stvar je vpogled v linux/drivers/char/serial.c
V kernelu 2.0.34 je UART 16650 sicer podprt (celo sam naj bi ga
razpoznal), v komentarjih pa recimo pise:
} else if (info->type == PORT_16650) {
/*
* On the 16650, we disable the FIFOs altogether
* because of a design bug in how the implement
* things. We could support it by completely changing
* how we handle the interrupt driver, but not today....
*
* N.B. Because there's no way to set a FIFO trigger
* at 1 char, we'd probably disable at speed below
* 2400 baud anyway...
*/
Torej je v bistvu nevarno UART 16650 goniti kot 16550A (z uporabo 16
bytnega FIFOta).
V bistvu je bolje uporabiti kartico z UARTom 16750. Driver v 2.1.106 je
malo bolje zalozen z vsemi moznimi UARTi:
/*
* Here we define the default xmit fifo size used for each type of
* UART
*/
static struct serial_uart_config uart_config[] = {
{ "unknown", 1, 0 },
{ "8250", 1, 0 },
{ "16450", 1, 0 },
{ "16550", 1, 0 },
{ "16550A", 16, UART_CLEAR_FIFO | UART_USE_FIFO },
{ "cirrus", 1, 0 },
{ "ST16650", 1, UART_CLEAR_FIFO | UART_STARTECH },
{ "ST16650V2", 32, UART_CLEAR_FIFO | UART_USE_FIFO | UART_STARTECH },
{ "TI16750", 64, UART_CLEAR_FIFO | UART_USE_FIFO},
{ 0, 0}
};
Iz zgornje kode (pa tudi iz debate na mailing listi od kernel
developerjev) je razvidno, da je 16650 (dve verziji, proizvajalec
StarTech) v bistvu en junk, ki ni kompatibilen niti sam s seboj. V vsakem
primeru pa je treba biti pri uporabi FIFOta pazljiv, vsekakor pa se znjim
ne da delati kot da bi bil 16550A. TIjev 16750 ima 64 bytov FIFOta, pa se
kompatibilen je z 16550A.
Peace!
Mkx
Dodatne informacije o seznamu Starilist