Files
2024-02-19 00:21:16 -05:00

106 lines
2.6 KiB
C

#ifndef SYS_SERIAL_H
#define SYS_SERIAL_H
/*
* Defines for PC AT serial port.
*/
/*
* serial port addresses and IRQs
*/
#define PORT_0 0x03F8
#define PORT_1 0x02F8
#define IRQ_0 0x04
#define IRQ_1 0x03
/*
* Definitions for INS8250 / 16550 chips
*/
/* defined as offsets from the port address (data port) */
#define DAT 0 /* receive/transmit data */
#define ICR 1 /* interrupt control register */
#define ISR 2 /* interrupt status register */
#define LCR 3 /* line control register */
#define MCR 4 /* modem control register */
#define LSR 5 /* line status register */
#define MSR 6 /* modem status register */
#define DLL 0 /* divisor latch (lsb) */
#define DLH 1 /* divisor latch (msb) */
/* ICR */
#define RIEN 0x01 /* enable receiver interrupt */
#define TIEN 0x02 /* enable transmitter interrupt */
#define SIEN 0x04 /* enable receiver line status interrupt */
#define MIEN 0x08 /* enable modem status interrupt */
/* ISR */
#define FFTMOUT 0x0c /* fifo rcvr timeout */
#define RSTATUS 0x06 /* change in receiver line status */
#define RxRDY 0x04 /* receiver data available */
#define TxRDY 0x02 /* transmitter holding register empty */
#define MSTATUS 0x00 /* change in modem status */
/* LCR 3 */
/* number of data bits per received/transmitted character */
#define RXLEN 0x03
#define STOP1 0x00
#define STOP2 0x04
#define PAREN 0x08
#define PAREVN 0x10
#define PARMARK 0x20
#define SNDBRK 0x40
#define DLAB 0x80
/* baud rate definitions */
#define ASY9600 12
/* definitions for character length (data bits) in RXLEN field */
#define BITS5 0x00
#define BITS6 0x01
#define BITS7 0x02
#define BITS8 0x03
/* MCR */
#define DTR 0x01 /* bring up DTR */
#define RTS 0x02 /* bring up RTS */
#define OUT1 0x04
#define OUT2 0x08
#define LOOP 0x10 /* put chip into loopback state */
/* LSR */
#define RCA 0x01 /* receive char available */
#define OVRRUN 0x02 /* receive overrun */
#define PARERR 0x04 /* parity error */
#define FRMERR 0x08 /* framing/CRC error */
#define BRKDET 0x10 /* break detected (null char + frame error) */
#define XHRE 0x20 /* transmit holding register empty */
#define XSRE 0x40 /* transmit shift register empty */
/* MSR */
#define DCTS 0x01 /* CTS has changed state */
#define DDSR 0x02 /* DSR has changed state */
#define DRI 0x04 /* RI has changed state */
#define DDCD 0x08 /* DCD has changed state */
#define CTS 0x10 /* state of CTS */
#define DSR 0x20 /* state of DSR */
#define RI 0x40 /* state of RI */
#define DCD 0x80 /* state of DCD */
#define DELTAS(x) ((x)&(DCTS|DDSR|DRI|DDCD))
#define STATES(x) ((x)(CTS|DSR|RI|DCD))
#endif /* SYS_SERIAL_H */