aos/devices/ixp2800_uart.dev
Daniel Schwyn 6d444bf552 Main handout
Signed-off-by: Daniel Schwyn <daniel.schwyn@inf.ethz.ch>
2022-03-03 14:57:51 +01:00

151 lines
5.1 KiB
Plaintext

/*
* Copyright (c) 2007, 2008, 2009, ETH Zurich. All rights reserved.
*
* This file is distributed under the terms in the attached LICENSE file.
* If you do not find this file, copies can be found by writing to:
* ETH Zurich D-INFK, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
*/
/*
* netronome_uart.dev
*
* DESCRIPTION: Netronome Universal Asynchronous Receiver Transmitter
* similar to 16550 UART
*
* This is derived from the Intel IXP2400/IXP2800 Network Processor
* Programmer's Reference Manual (November 2003), p. 364ff
*/
device ixp2800_uart msbfirst ( addr base ) "Netronome UART Memory Represenation" {
/* Bram: I cannot verify this, maybe p.365 gives hints? */
/* ******************************************************/
constants divisor "Baud Rate Divisor" {
baud50 = 2304 "50 bps";
baud75 = 1536 "75 bps";
baud110 = 1047 "110 bps";
baud134_5 = 857 "134.5 bps";
baud150 = 768 "150 bps";
baud300 = 384 "300 bps";
baud600 = 192 "600 bps";
baud1200 = 96 "1200 bps";
baud1800 = 64 "1800 bps";
baud2000 = 58 "2000 bps";
baud2400 = 48 "2400 bps";
baud4800 = 24 "4800 bps";
baud7200 = 16 "7200 bps";
baud9600 = 12 "9600 bps";
baud19200 = 6 "19200 bps";
baud38400 = 3 "38400 bps";
baud57600 = 2 "57600 bps";
baud115200 = 1 "115200 bps";
};
constants interrupt_source "Interrupt Source Encoded" {
request_data = 0b01 "Transmit FIFO requests data";
recv_data_av = 0b10 "Received Data Available";
recv_error = 0b11 "Receive error";
};
constants fifo_type "FIFO Mode Enable Status" {
no_fifo = 0b00 "No FIFO";
fifo_enabled = 0b11 "FIFO enabled";
};
constants interrupt_trigger "Interrupt Trigger Level" {
bytes01 = 0b00 "1 byte in FIFO causes interrupt";
bytes08 = 0b01 "8 byte in FIFO causes interrupt";
bytes16 = 0b10 "16 byte in FIFO causes interrupt";
bytes32 = 0b11 "32 byte in FIFO causes interrupt";
};
constants char_len "Character Length" {
bits5 = 0b00 "5 Bits";
bits6 = 0b01 "6 Bits";
bits7 = 0b10 "7 Bits";
bits8 = 0b11 "8 Bits";
};
register RBR ro addr ( base, 0x0 ) "Receiver buffer" {
_ 24 ro "Reserved";
rbr 8 ro "Receive Buffer Register. Data byte received, least significant bit first";
};
register THR also addr ( base , 0x0 ) "Transmitter holding" {
_ 24 ro "Reserved";
thr 8 wo "Data byte transmitted, least significant bit first";
};
register DLRL also addr (base , 0x0) "Divisor Latch low" {
_ 24 ro "Reserved";
lb 8 rw "Low byte for generating baud rate";
};
register DLRH addr (base , 0x4) "Divisor Latch high" {
_ 24 ro "Reserved";
hb 8 rw "High byte for generating baud rate";
};
register IER also addr ( base, 0x4 ) "Interrupt enable" {
_ 25 ro "Reserved";
uue 1 rw "UART Unit Enable";
nrze 1 rw "NRZ coding Enable";
rtoie 1 rw "Receiver Time out Interrupt Enable";
_ 1 rw "Reserved";
rlse 1 rw "Receiver Line Status Interrupt Enable";
tie 1 rw "Transmit Data request Interrupt Enable";
ravie 1 rw "Receiver Data Available Interrupt Enable";
};
register iir addr ( base, 0x8 ) "Interrupt identification" {
_ 24 ro "Reserved";
FIFOES 2 ro type(fifo_type) "FIFO Mode Enable Status";
_ 2 ro "Reserved";
TOD 1 ro "Time Out Detected (0: No time out interrupt is pending)";
IID 2 ro type(interrupt_source) "Interrupt Source Encoded";
IP 1 ro "Interrupt Pending";
};
register fcr rw also addr ( base, 0x8 ) "FIFO control" {
_ 24 ro "Reserved";
ITL 2 wo type(interrupt_trigger) "Interrupt Trigger Level";
_ 3 ro "Reserved";
RESETTF 1 wo "Reset transmitter FIFO";
RESETRF 1 wo "Reset Receiver FIFO";
TRFIFOE 1 wo "Transmit and Receive FIFO Enable";
};
register LCR addr ( base, 0xC ) "Line control" {
_ 24 ro "Reserved";
dlab 1 rw "Divisor latch access";
sb 1 rw "Set break";
stkyp 1 rw "Stick parity";
eps 1 rw "Even parity select";
pen 1 rw "Parity enable";
stb 1 rw "Number of stop bits";
wls 2 rw type(char_len) "Word length select";
};
register LSR addr ( base, 0x14 ) "Line status" {
_ 24 ro "Reserved";
fifoe 1 ro "FIFO Error Status ";
temt 1 ro "Transmitter empty";
tdrq 1 ro "Transmit Data Request";
bi 1 ro "Break interrupt";
fe 1 ro "Framing error";
pe 1 ro "Parity error";
oe 1 ro "Overrun error";
dr 1 ro "Data ready";
};
register spr addr ( base, 0x1c ) "Scratchpad register" {
_ 24 ro "Reserved";
scratch 8 rw "No effect on UART functionality";
};
};