ReactOS 0.4.16-dev-2528-g7139e57
serial.h
Go to the documentation of this file.
1/*
2 * PROJECT: NEC PC-98 series onboard hardware
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Intel 8251A-based UART header file
5 * COPYRIGHT: Copyright 2020-2026 Dmitry Borisov <di.sean@protonmail.com>
6 */
7
8#pragma once
9
10#define SER_8251A_REG_DATA 0x30
11#define SER_8251A_REG_STATUS 0x32
12
13#define SR_8251A_STATUS_TxRDY 0x01 /* Transmitter ready */
14#define SR_8251A_STATUS_RxRDY 0x02 /* Receiver ready */
15#define SR_8251A_STATUS_TxEMPTY 0x04 /* Transmitter empty */
16#define SR_8251A_STATUS_PE 0x08 /* Parity error */
17#define SR_8251A_STATUS_OE 0x10 /* Overrun error */
18#define SR_8251A_STATUS_FE 0x20 /* Framing error */
19#define SR_8251A_STATUS_SYNDET 0x40 /* Sync detect / Break detect */
20#define SR_8251A_STATUS_DSR 0x80 /* Data set ready */
21
22/* Parity generate/check */
23#define SR_8251A_MODE_PEN 0x10 /* Parity enable */
24#define SR_8251A_MODE_EP 0x20 /* Even parity generation/check */
25#define SR_8251A_MODE_ESD 0x40 /* External sync detect */
26#define SR_8251A_MODE_SCS 0x80 /* Single character sync */
27/* Character length */
28#define SR_8251A_MODE_LENGTH_5 0x00
29#define SR_8251A_MODE_LENGTH_6 0x04
30#define SR_8251A_MODE_LENGTH_7 0x08
31#define SR_8251A_MODE_LENGTH_8 0x0C
32/* Baud rate factor */
33#define SR_8251A_MODE_SYNC 0x00
34#define SR_8251A_MODE_CLOCKx1 0x01
35#define SR_8251A_MODE_CLOCKx16 0x02
36#define SR_8251A_MODE_CLOCKx64 0x03
37/* Number of stop bits */
38#define SR_8251A_MODE_1_STOP 0x40
39#define SR_8251A_MODE_1_5_STOP 0x80
40#define SR_8251A_MODE_2_STOP 0xC0
41/* Command bits */
42#define SR_8251A_COMMMAND_TxEN 0x01 /* Transmit enable */
43#define SR_8251A_COMMMAND_DTR 0x02 /* Data terminal ready */
44#define SR_8251A_COMMMAND_RxEN 0x04 /* Receive enable */
45#define SR_8251A_COMMMAND_SBRK 0x08 /* Send break character */
46#define SR_8251A_COMMMAND_ER 0x10 /* Error reset */
47#define SR_8251A_COMMMAND_RTS 0x20 /* Request to send */
48#define SR_8251A_COMMMAND_IR 0x40 /* Internal reset */
49#define SR_8251A_COMMMAND_EH 0x80 /* Enter hunt mode */
50
51#define SER_8251F_REG_RBR 0x130 /* Receive Buffer */
52#define SER_8251F_REG_LSR 0x132 /* Line Status */
53#define SER_8251F_REG_MSR 0x134 /* Modem Status */
54#define SER_8251F_REG_IIR 0x136 /* Interrupt ID */
55#define SER_8251F_REG_FCR 0x138 /* FIFO Control */
56#define SER_8251F_REG_DLR 0x13A /* Divisor Latch */
57
58#define SR_8251F_LSR_TxEMPTY 0x01 /* Transmitter empty */
59#define SR_8251F_LSR_TxRDY 0x02 /* Transmitter ready */
60#define SR_8251F_LSR_RxRDY 0x04 /* Receiver ready */
61#define SR_8251F_LSR_OE 0x10 /* Overrun error */
62#define SR_8251F_LSR_PE 0x20 /* Parity error */
63#define SR_8251F_LSR_BI 0x80 /* Break detect */
64
65#define SR_8251F_MSR_CTS_CHANGED 0x01 /* Change in clear to send */
66#define SR_8251F_MSR_DSR_CHANGED 0x02 /* Change in data set ready */
67#define SR_8251F_MSR_RI_CHANGED 0x04 /* Trailing edge ring indicator */
68#define SR_8251F_MSR_DCD_CHANGED 0x08 /* Change in carrier detect */
69#define SR_8251F_MSR_CTS 0x10 /* Clear to send */
70#define SR_8251F_MSR_DSR 0x20 /* Data set ready */
71#define SR_8251F_MSR_RI 0x40 /* Ring indicator */
72#define SR_8251F_MSR_DCD 0x80 /* Data carrier detect */
73
74#define SR_8251F_IIR_MS 0x00 /* Modem status change */
75#define SR_8251F_IIR_THR 0x02 /* Transmitter holding register empty */
76#define SR_8251F_IIR_RDA 0x04 /* Received data acailable */
77#define SR_8251F_IIR_RLS 0x06 /* Receiver line status change */
78#define SR_8251F_IIR_CTI 0x0C /* Character timeout */
79#define SR_8251F_IIR_ID_MASK 0x0F
80#define SR_8251F_IIR_SELF 0x01 /* No interrupt pending */
81#define SR_8251F_IIR_MUST_BE_ZERO 0x20
82#define SR_8251F_IIR_FIFO_DET 0x40 /* Toggles for each read */
83
84#define SR_8251F_FCR_DISABLE 0x00 /* Disable FIFO */
85#define SR_8251F_FCR_ENABLE 0x01 /* Enable FIFO */
86#define SR_8251F_FCR_RCVR_RESET 0x02 /* Clear receive FIFO */
87#define SR_8251F_FCR_TXMT_RESET 0x04 /* Clear transmit FIFO */
88/* Receive FIFO interrupt trigger level */
89#define SR_8251F_FCR_1_BYTE_HIGH_WATER 0x00
90#define SR_8251F_FCR_4_BYTE_HIGH_WATER 0x40
91#define SR_8251F_FCR_8_BYTE_HIGH_WATER 0x80
92#define SR_8251F_FCR_14_BYTE_HIGH_WATER 0xC0
93
94#define SR_8251F_DLR_BAUD_115200 0x01
95#define SR_8251F_DLR_BAUD_57600 0x02
96#define SR_8251F_DLR_BAUD_38400 0x03
97#define SR_8251F_DLR_BAUD_28800 0x04
98#define SR_8251F_DLR_BAUD_19200 0x06
99#define SR_8251F_DLR_BAUD_14400 0x08
100#define SR_8251F_DLR_BAUD_9600 0x0C
101#define SR_8251F_DLR_MODE_VFAST 0x80
102#define SR_8251F_DLR_MODE_LEGACY 0x00