Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */
0002 /*
0003  * include/linux/serial_reg.h
0004  *
0005  * Copyright (C) 1992, 1994 by Theodore Ts'o.
0006  * 
0007  * Redistribution of this file is permitted under the terms of the GNU 
0008  * Public License (GPL)
0009  * 
0010  * These are the UART port assignments, expressed as offsets from the base
0011  * register.  These assignments should hold for any serial port based on
0012  * a 8250, 16450, or 16550(A).
0013  */
0014 
0015 #ifndef _LINUX_SERIAL_REG_H
0016 #define _LINUX_SERIAL_REG_H
0017 
0018 /*
0019  * DLAB=0
0020  */
0021 #define UART_RX     0   /* In:  Receive buffer */
0022 #define UART_TX     0   /* Out: Transmit buffer */
0023 
0024 #define UART_IER    1   /* Out: Interrupt Enable Register */
0025 #define UART_IER_MSI        0x08 /* Enable Modem status interrupt */
0026 #define UART_IER_RLSI       0x04 /* Enable receiver line status interrupt */
0027 #define UART_IER_THRI       0x02 /* Enable Transmitter holding register int. */
0028 #define UART_IER_RDI        0x01 /* Enable receiver data interrupt */
0029 /*
0030  * Sleep mode for ST16650 and TI16750.  For the ST16650, EFR[4]=1
0031  */
0032 #define UART_IERX_SLEEP     0x10 /* Enable sleep mode */
0033 
0034 #define UART_IIR    2   /* In:  Interrupt ID Register */
0035 #define UART_IIR_NO_INT     0x01 /* No interrupts pending */
0036 #define UART_IIR_ID     0x0e /* Mask for the interrupt ID */
0037 #define UART_IIR_MSI        0x00 /* Modem status interrupt */
0038 #define UART_IIR_THRI       0x02 /* Transmitter holding register empty */
0039 #define UART_IIR_RDI        0x04 /* Receiver data interrupt */
0040 #define UART_IIR_RLSI       0x06 /* Receiver line status interrupt */
0041 
0042 #define UART_IIR_BUSY       0x07 /* DesignWare APB Busy Detect */
0043 
0044 #define UART_IIR_RX_TIMEOUT 0x0c /* OMAP RX Timeout interrupt */
0045 #define UART_IIR_XOFF       0x10 /* OMAP XOFF/Special Character */
0046 #define UART_IIR_CTS_RTS_DSR    0x20 /* OMAP CTS/RTS/DSR Change */
0047 
0048 #define UART_FCR    2   /* Out: FIFO Control Register */
0049 #define UART_FCR_ENABLE_FIFO    0x01 /* Enable the FIFO */
0050 #define UART_FCR_CLEAR_RCVR 0x02 /* Clear the RCVR FIFO */
0051 #define UART_FCR_CLEAR_XMIT 0x04 /* Clear the XMIT FIFO */
0052 #define UART_FCR_DMA_SELECT 0x08 /* For DMA applications */
0053 /*
0054  * Note: The FIFO trigger levels are chip specific:
0055  *  RX:76 = 00  01  10  11  TX:54 = 00  01  10  11
0056  * PC16550D:     1   4   8  14      xx  xx  xx  xx
0057  * TI16C550A:    1   4   8  14          xx  xx  xx  xx
0058  * TI16C550C:    1   4   8  14          xx  xx  xx  xx
0059  * ST16C550:     1   4   8  14      xx  xx  xx  xx
0060  * ST16C650:     8  16  24  28      16   8  24  30  PORT_16650V2
0061  * NS16C552:     1   4   8  14      xx  xx  xx  xx
0062  * ST16C654:     8  16  56  60       8  16  32  56  PORT_16654
0063  * TI16C750:     1  16  32  56      xx  xx  xx  xx  PORT_16750
0064  * TI16C752:     8  16  56  60       8  16  32  56
0065  * OX16C950:    16  32 112 120      16  32  64 112  PORT_16C950
0066  * Tegra:    1   4   8  14      16   8   4   1  PORT_TEGRA
0067  */
0068 #define UART_FCR_R_TRIG_00  0x00
0069 #define UART_FCR_R_TRIG_01  0x40
0070 #define UART_FCR_R_TRIG_10  0x80
0071 #define UART_FCR_R_TRIG_11  0xc0
0072 #define UART_FCR_T_TRIG_00  0x00
0073 #define UART_FCR_T_TRIG_01  0x10
0074 #define UART_FCR_T_TRIG_10  0x20
0075 #define UART_FCR_T_TRIG_11  0x30
0076 
0077 #define UART_FCR_TRIGGER_MASK   0xC0 /* Mask for the FIFO trigger range */
0078 #define UART_FCR_TRIGGER_1  0x00 /* Mask for trigger set at 1 */
0079 #define UART_FCR_TRIGGER_4  0x40 /* Mask for trigger set at 4 */
0080 #define UART_FCR_TRIGGER_8  0x80 /* Mask for trigger set at 8 */
0081 #define UART_FCR_TRIGGER_14 0xC0 /* Mask for trigger set at 14 */
0082 /* 16650 definitions */
0083 #define UART_FCR6_R_TRIGGER_8   0x00 /* Mask for receive trigger set at 1 */
0084 #define UART_FCR6_R_TRIGGER_16  0x40 /* Mask for receive trigger set at 4 */
0085 #define UART_FCR6_R_TRIGGER_24  0x80 /* Mask for receive trigger set at 8 */
0086 #define UART_FCR6_R_TRIGGER_28  0xC0 /* Mask for receive trigger set at 14 */
0087 #define UART_FCR6_T_TRIGGER_16  0x00 /* Mask for transmit trigger set at 16 */
0088 #define UART_FCR6_T_TRIGGER_8   0x10 /* Mask for transmit trigger set at 8 */
0089 #define UART_FCR6_T_TRIGGER_24  0x20 /* Mask for transmit trigger set at 24 */
0090 #define UART_FCR6_T_TRIGGER_30  0x30 /* Mask for transmit trigger set at 30 */
0091 #define UART_FCR7_64BYTE    0x20 /* Go into 64 byte mode (TI16C750 and
0092                     some Freescale UARTs) */
0093 
0094 #define UART_FCR_R_TRIG_SHIFT       6
0095 #define UART_FCR_R_TRIG_BITS(x)     \
0096     (((x) & UART_FCR_TRIGGER_MASK) >> UART_FCR_R_TRIG_SHIFT)
0097 #define UART_FCR_R_TRIG_MAX_STATE   4
0098 
0099 #define UART_LCR    3   /* Out: Line Control Register */
0100 /*
0101  * Note: if the word length is 5 bits (UART_LCR_WLEN5), then setting 
0102  * UART_LCR_STOP will select 1.5 stop bits, not 2 stop bits.
0103  */
0104 #define UART_LCR_DLAB       0x80 /* Divisor latch access bit */
0105 #define UART_LCR_SBC        0x40 /* Set break control */
0106 #define UART_LCR_SPAR       0x20 /* Stick parity (?) */
0107 #define UART_LCR_EPAR       0x10 /* Even parity select */
0108 #define UART_LCR_PARITY     0x08 /* Parity Enable */
0109 #define UART_LCR_STOP       0x04 /* Stop bits: 0=1 bit, 1=2 bits */
0110 #define UART_LCR_WLEN5      0x00 /* Wordlength: 5 bits */
0111 #define UART_LCR_WLEN6      0x01 /* Wordlength: 6 bits */
0112 #define UART_LCR_WLEN7      0x02 /* Wordlength: 7 bits */
0113 #define UART_LCR_WLEN8      0x03 /* Wordlength: 8 bits */
0114 
0115 /*
0116  * Access to some registers depends on register access / configuration
0117  * mode.
0118  */
0119 #define UART_LCR_CONF_MODE_A    UART_LCR_DLAB   /* Configutation mode A */
0120 #define UART_LCR_CONF_MODE_B    0xBF        /* Configutation mode B */
0121 
0122 #define UART_MCR    4   /* Out: Modem Control Register */
0123 #define UART_MCR_CLKSEL     0x80 /* Divide clock by 4 (TI16C752, EFR[4]=1) */
0124 #define UART_MCR_TCRTLR     0x40 /* Access TCR/TLR (TI16C752, EFR[4]=1) */
0125 #define UART_MCR_XONANY     0x20 /* Enable Xon Any (TI16C752, EFR[4]=1) */
0126 #define UART_MCR_AFE        0x20 /* Enable auto-RTS/CTS (TI16C550C/TI16C750) */
0127 #define UART_MCR_LOOP       0x10 /* Enable loopback test mode */
0128 #define UART_MCR_OUT2       0x08 /* Out2 complement */
0129 #define UART_MCR_OUT1       0x04 /* Out1 complement */
0130 #define UART_MCR_RTS        0x02 /* RTS complement */
0131 #define UART_MCR_DTR        0x01 /* DTR complement */
0132 
0133 #define UART_LSR    5   /* In:  Line Status Register */
0134 #define UART_LSR_FIFOE      0x80 /* Fifo error */
0135 #define UART_LSR_TEMT       0x40 /* Transmitter empty */
0136 #define UART_LSR_THRE       0x20 /* Transmit-hold-register empty */
0137 #define UART_LSR_BI     0x10 /* Break interrupt indicator */
0138 #define UART_LSR_FE     0x08 /* Frame error indicator */
0139 #define UART_LSR_PE     0x04 /* Parity error indicator */
0140 #define UART_LSR_OE     0x02 /* Overrun error indicator */
0141 #define UART_LSR_DR     0x01 /* Receiver data ready */
0142 #define UART_LSR_BRK_ERROR_BITS (UART_LSR_BI|UART_LSR_FE|UART_LSR_PE|UART_LSR_OE)
0143 
0144 #define UART_MSR    6   /* In:  Modem Status Register */
0145 #define UART_MSR_DCD        0x80 /* Data Carrier Detect */
0146 #define UART_MSR_RI     0x40 /* Ring Indicator */
0147 #define UART_MSR_DSR        0x20 /* Data Set Ready */
0148 #define UART_MSR_CTS        0x10 /* Clear to Send */
0149 #define UART_MSR_DDCD       0x08 /* Delta DCD */
0150 #define UART_MSR_TERI       0x04 /* Trailing edge ring indicator */
0151 #define UART_MSR_DDSR       0x02 /* Delta DSR */
0152 #define UART_MSR_DCTS       0x01 /* Delta CTS */
0153 #define UART_MSR_ANY_DELTA  (UART_MSR_DDCD|UART_MSR_TERI|UART_MSR_DDSR|UART_MSR_DCTS)
0154 
0155 #define UART_SCR    7   /* I/O: Scratch Register */
0156 
0157 /*
0158  * DLAB=1
0159  */
0160 #define UART_DLL    0   /* Out: Divisor Latch Low */
0161 #define UART_DLM    1   /* Out: Divisor Latch High */
0162 #define UART_DIV_MAX    0xFFFF  /* Max divisor value */
0163 
0164 /*
0165  * LCR=0xBF (or DLAB=1 for 16C660)
0166  */
0167 #define UART_EFR    2   /* I/O: Extended Features Register */
0168 #define UART_XR_EFR 9   /* I/O: Extended Features Register (XR17D15x) */
0169 #define UART_EFR_CTS        0x80 /* CTS flow control */
0170 #define UART_EFR_RTS        0x40 /* RTS flow control */
0171 #define UART_EFR_SCD        0x20 /* Special character detect */
0172 #define UART_EFR_ECB        0x10 /* Enhanced control bit */
0173 /*
0174  * the low four bits control software flow control
0175  */
0176 
0177 /*
0178  * LCR=0xBF, TI16C752, ST16650, ST16650A, ST16654
0179  */
0180 #define UART_XON1   4   /* I/O: Xon character 1 */
0181 #define UART_XON2   5   /* I/O: Xon character 2 */
0182 #define UART_XOFF1  6   /* I/O: Xoff character 1 */
0183 #define UART_XOFF2  7   /* I/O: Xoff character 2 */
0184 
0185 /*
0186  * EFR[4]=1 MCR[6]=1, TI16C752
0187  */
0188 #define UART_TI752_TCR  6   /* I/O: transmission control register */
0189 #define UART_TI752_TLR  7   /* I/O: trigger level register */
0190 
0191 /*
0192  * LCR=0xBF, XR16C85x
0193  */
0194 #define UART_TRG    0   /* FCTR bit 7 selects Rx or Tx
0195                  * In: Fifo count
0196                  * Out: Fifo custom trigger levels */
0197 /*
0198  * These are the definitions for the Programmable Trigger Register
0199  */
0200 #define UART_TRG_1      0x01
0201 #define UART_TRG_4      0x04
0202 #define UART_TRG_8      0x08
0203 #define UART_TRG_16     0x10
0204 #define UART_TRG_32     0x20
0205 #define UART_TRG_64     0x40
0206 #define UART_TRG_96     0x60
0207 #define UART_TRG_120        0x78
0208 #define UART_TRG_128        0x80
0209 
0210 #define UART_FCTR   1   /* Feature Control Register */
0211 #define UART_FCTR_RTS_NODELAY   0x00  /* RTS flow control delay */
0212 #define UART_FCTR_RTS_4DELAY    0x01
0213 #define UART_FCTR_RTS_6DELAY    0x02
0214 #define UART_FCTR_RTS_8DELAY    0x03
0215 #define UART_FCTR_IRDA      0x04  /* IrDa data encode select */
0216 #define UART_FCTR_TX_INT    0x08  /* Tx interrupt type select */
0217 #define UART_FCTR_TRGA      0x00  /* Tx/Rx 550 trigger table select */
0218 #define UART_FCTR_TRGB      0x10  /* Tx/Rx 650 trigger table select */
0219 #define UART_FCTR_TRGC      0x20  /* Tx/Rx 654 trigger table select */
0220 #define UART_FCTR_TRGD      0x30  /* Tx/Rx 850 programmable trigger select */
0221 #define UART_FCTR_SCR_SWAP  0x40  /* Scratch pad register swap */
0222 #define UART_FCTR_RX        0x00  /* Programmable trigger mode select */
0223 #define UART_FCTR_TX        0x80  /* Programmable trigger mode select */
0224 
0225 /*
0226  * LCR=0xBF, FCTR[6]=1
0227  */
0228 #define UART_EMSR   7   /* Extended Mode Select Register */
0229 #define UART_EMSR_FIFO_COUNT    0x01  /* Rx/Tx select */
0230 #define UART_EMSR_ALT_COUNT 0x02  /* Alternating count select */
0231 
0232 /*
0233  * The Intel XScale on-chip UARTs define these bits
0234  */
0235 #define UART_IER_DMAE   0x80    /* DMA Requests Enable */
0236 #define UART_IER_UUE    0x40    /* UART Unit Enable */
0237 #define UART_IER_NRZE   0x20    /* NRZ coding Enable */
0238 #define UART_IER_RTOIE  0x10    /* Receiver Time Out Interrupt Enable */
0239 
0240 #define UART_IIR_TOD    0x08    /* Character Timeout Indication Detected */
0241 
0242 #define UART_FCR_PXAR1  0x00    /* receive FIFO threshold = 1 */
0243 #define UART_FCR_PXAR8  0x40    /* receive FIFO threshold = 8 */
0244 #define UART_FCR_PXAR16 0x80    /* receive FIFO threshold = 16 */
0245 #define UART_FCR_PXAR32 0xc0    /* receive FIFO threshold = 32 */
0246 
0247 /*
0248  * These register definitions are for the 16C950
0249  */
0250 #define UART_ASR    0x01    /* Additional Status Register */
0251 #define UART_RFL    0x03    /* Receiver FIFO level */
0252 #define UART_TFL    0x04    /* Transmitter FIFO level */
0253 #define UART_ICR    0x05    /* Index Control Register */
0254 
0255 /* The 16950 ICR registers */
0256 #define UART_ACR    0x00    /* Additional Control Register */
0257 #define UART_CPR    0x01    /* Clock Prescalar Register */
0258 #define UART_TCR    0x02    /* Times Clock Register */
0259 #define UART_CKS    0x03    /* Clock Select Register */
0260 #define UART_TTL    0x04    /* Transmitter Interrupt Trigger Level */
0261 #define UART_RTL    0x05    /* Receiver Interrupt Trigger Level */
0262 #define UART_FCL    0x06    /* Flow Control Level Lower */
0263 #define UART_FCH    0x07    /* Flow Control Level Higher */
0264 #define UART_ID1    0x08    /* ID #1 */
0265 #define UART_ID2    0x09    /* ID #2 */
0266 #define UART_ID3    0x0A    /* ID #3 */
0267 #define UART_REV    0x0B    /* Revision */
0268 #define UART_CSR    0x0C    /* Channel Software Reset */
0269 #define UART_NMR    0x0D    /* Nine-bit Mode Register */
0270 #define UART_CTR    0xFF
0271 
0272 /*
0273  * The 16C950 Additional Control Register
0274  */
0275 #define UART_ACR_RXDIS  0x01    /* Receiver disable */
0276 #define UART_ACR_TXDIS  0x02    /* Transmitter disable */
0277 #define UART_ACR_DSRFC  0x04    /* DSR Flow Control */
0278 #define UART_ACR_TLENB  0x20    /* 950 trigger levels enable */
0279 #define UART_ACR_ICRRD  0x40    /* ICR Read enable */
0280 #define UART_ACR_ASREN  0x80    /* Additional status enable */
0281 
0282 
0283 
0284 /*
0285  * These definitions are for the RSA-DV II/S card, from
0286  *
0287  * Kiyokazu SUTO <suto@ks-and-ks.ne.jp>
0288  */
0289 
0290 #define UART_RSA_BASE (-8)
0291 
0292 #define UART_RSA_MSR ((UART_RSA_BASE) + 0) /* I/O: Mode Select Register */
0293 
0294 #define UART_RSA_MSR_SWAP (1 << 0) /* Swap low/high 8 bytes in I/O port addr */
0295 #define UART_RSA_MSR_FIFO (1 << 2) /* Enable the external FIFO */
0296 #define UART_RSA_MSR_FLOW (1 << 3) /* Enable the auto RTS/CTS flow control */
0297 #define UART_RSA_MSR_ITYP (1 << 4) /* Level (1) / Edge triger (0) */
0298 
0299 #define UART_RSA_IER ((UART_RSA_BASE) + 1) /* I/O: Interrupt Enable Register */
0300 
0301 #define UART_RSA_IER_Rx_FIFO_H (1 << 0) /* Enable Rx FIFO half full int. */
0302 #define UART_RSA_IER_Tx_FIFO_H (1 << 1) /* Enable Tx FIFO half full int. */
0303 #define UART_RSA_IER_Tx_FIFO_E (1 << 2) /* Enable Tx FIFO empty int. */
0304 #define UART_RSA_IER_Rx_TOUT (1 << 3) /* Enable char receive timeout int */
0305 #define UART_RSA_IER_TIMER (1 << 4) /* Enable timer interrupt */
0306 
0307 #define UART_RSA_SRR ((UART_RSA_BASE) + 2) /* IN: Status Read Register */
0308 
0309 #define UART_RSA_SRR_Tx_FIFO_NEMP (1 << 0) /* Tx FIFO is not empty (1) */
0310 #define UART_RSA_SRR_Tx_FIFO_NHFL (1 << 1) /* Tx FIFO is not half full (1) */
0311 #define UART_RSA_SRR_Tx_FIFO_NFUL (1 << 2) /* Tx FIFO is not full (1) */
0312 #define UART_RSA_SRR_Rx_FIFO_NEMP (1 << 3) /* Rx FIFO is not empty (1) */
0313 #define UART_RSA_SRR_Rx_FIFO_NHFL (1 << 4) /* Rx FIFO is not half full (1) */
0314 #define UART_RSA_SRR_Rx_FIFO_NFUL (1 << 5) /* Rx FIFO is not full (1) */
0315 #define UART_RSA_SRR_Rx_TOUT (1 << 6) /* Character reception timeout occurred (1) */
0316 #define UART_RSA_SRR_TIMER (1 << 7) /* Timer interrupt occurred */
0317 
0318 #define UART_RSA_FRR ((UART_RSA_BASE) + 2) /* OUT: FIFO Reset Register */
0319 
0320 #define UART_RSA_TIVSR ((UART_RSA_BASE) + 3) /* I/O: Timer Interval Value Set Register */
0321 
0322 #define UART_RSA_TCR ((UART_RSA_BASE) + 4) /* OUT: Timer Control Register */
0323 
0324 #define UART_RSA_TCR_SWITCH (1 << 0) /* Timer on */
0325 
0326 /*
0327  * The RSA DSV/II board has two fixed clock frequencies.  One is the
0328  * standard rate, and the other is 8 times faster.
0329  */
0330 #define SERIAL_RSA_BAUD_BASE (921600)
0331 #define SERIAL_RSA_BAUD_BASE_LO (SERIAL_RSA_BAUD_BASE / 8)
0332 
0333 /* Extra registers for TI DA8xx/66AK2x */
0334 #define UART_DA830_PWREMU_MGMT  12
0335 
0336 /* PWREMU_MGMT register bits */
0337 #define UART_DA830_PWREMU_MGMT_FREE (1 << 0)  /* Free-running mode */
0338 #define UART_DA830_PWREMU_MGMT_URRST    (1 << 13) /* Receiver reset/enable */
0339 #define UART_DA830_PWREMU_MGMT_UTRST    (1 << 14) /* Transmitter reset/enable */
0340 
0341 /*
0342  * Extra serial register definitions for the internal UARTs
0343  * in TI OMAP processors.
0344  */
0345 #define OMAP1_UART1_BASE    0xfffb0000
0346 #define OMAP1_UART2_BASE    0xfffb0800
0347 #define OMAP1_UART3_BASE    0xfffb9800
0348 #define UART_OMAP_MDR1      0x08    /* Mode definition register */
0349 #define UART_OMAP_MDR2      0x09    /* Mode definition register 2 */
0350 #define UART_OMAP_SCR       0x10    /* Supplementary control register */
0351 #define UART_OMAP_SSR       0x11    /* Supplementary status register */
0352 #define UART_OMAP_EBLR      0x12    /* BOF length register */
0353 #define UART_OMAP_OSC_12M_SEL   0x13    /* OMAP1510 12MHz osc select */
0354 #define UART_OMAP_MVER      0x14    /* Module version register */
0355 #define UART_OMAP_SYSC      0x15    /* System configuration register */
0356 #define UART_OMAP_SYSS      0x16    /* System status register */
0357 #define UART_OMAP_WER       0x17    /* Wake-up enable register */
0358 #define UART_OMAP_TX_LVL    0x1a    /* TX FIFO level register */
0359 
0360 /*
0361  * These are the definitions for the MDR1 register
0362  */
0363 #define UART_OMAP_MDR1_16X_MODE     0x00    /* UART 16x mode */
0364 #define UART_OMAP_MDR1_SIR_MODE     0x01    /* SIR mode */
0365 #define UART_OMAP_MDR1_16X_ABAUD_MODE   0x02    /* UART 16x auto-baud */
0366 #define UART_OMAP_MDR1_13X_MODE     0x03    /* UART 13x mode */
0367 #define UART_OMAP_MDR1_MIR_MODE     0x04    /* MIR mode */
0368 #define UART_OMAP_MDR1_FIR_MODE     0x05    /* FIR mode */
0369 #define UART_OMAP_MDR1_CIR_MODE     0x06    /* CIR mode */
0370 #define UART_OMAP_MDR1_DISABLE      0x07    /* Disable (default state) */
0371 
0372 /*
0373  * These are definitions for the Altera ALTR_16550_F32/F64/F128
0374  * Normalized from 0x100 to 0x40 because of shift by 2 (32 bit regs).
0375  */
0376 #define UART_ALTR_AFR       0x40    /* Additional Features Register */
0377 #define UART_ALTR_EN_TXFIFO_LW  0x01    /* Enable the TX FIFO Low Watermark */
0378 #define UART_ALTR_TX_LOW    0x41    /* Tx FIFO Low Watermark */
0379 
0380 #endif /* _LINUX_SERIAL_REG_H */
0381