0001
0002 #include <linux/bitops.h>
0003 #include <linux/serial_core.h>
0004 #include <linux/io.h>
0005
0006 #define SCI_MAJOR 204
0007 #define SCI_MINOR_START 8
0008
0009
0010
0011
0012
0013
0014 enum {
0015 SCSMR,
0016 SCBRR,
0017 SCSCR,
0018 SCxSR,
0019 SCFCR,
0020 SCFDR,
0021 SCxTDR,
0022 SCxRDR,
0023 SCLSR,
0024 SCTFDR,
0025 SCRFDR,
0026 SCSPTR,
0027 HSSRR,
0028 SCPCR,
0029 SCPDR,
0030 SCDL,
0031 SCCKS,
0032 HSRTRGR,
0033 HSTTRGR,
0034 SEMR,
0035
0036 SCIx_NR_REGS,
0037 };
0038
0039
0040
0041 #define SCSMR_C_A BIT(7)
0042 #define SCSMR_CSYNC BIT(7)
0043 #define SCSMR_ASYNC 0
0044 #define SCSMR_CHR BIT(6)
0045 #define SCSMR_PE BIT(5)
0046 #define SCSMR_ODD BIT(4)
0047 #define SCSMR_STOP BIT(3)
0048 #define SCSMR_CKS 0x0003
0049
0050
0051 #define SCSMR_CKEDG BIT(12)
0052 #define SCSMR_SRC_MASK 0x0700
0053 #define SCSMR_SRC_16 0x0000
0054 #define SCSMR_SRC_5 0x0100
0055 #define SCSMR_SRC_7 0x0200
0056 #define SCSMR_SRC_11 0x0300
0057 #define SCSMR_SRC_13 0x0400
0058 #define SCSMR_SRC_17 0x0500
0059 #define SCSMR_SRC_19 0x0600
0060 #define SCSMR_SRC_27 0x0700
0061
0062
0063 #define SCSCR_TDRQE BIT(15)
0064 #define SCSCR_RDRQE BIT(14)
0065
0066
0067 #define HSSCR_TOT_SHIFT 14
0068
0069
0070 #define SCI_TDRE BIT(7)
0071 #define SCI_RDRF BIT(6)
0072 #define SCI_ORER BIT(5)
0073 #define SCI_FER BIT(4)
0074 #define SCI_PER BIT(3)
0075 #define SCI_TEND BIT(2)
0076 #define SCI_RESERVED 0x03
0077
0078 #define SCI_DEFAULT_ERROR_MASK (SCI_PER | SCI_FER)
0079
0080 #define SCI_RDxF_CLEAR (u32)(~(SCI_RESERVED | SCI_RDRF))
0081 #define SCI_ERROR_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
0082 #define SCI_TDxE_CLEAR (u32)(~(SCI_RESERVED | SCI_TEND | SCI_TDRE))
0083 #define SCI_BREAK_CLEAR (u32)(~(SCI_RESERVED | SCI_PER | SCI_FER | SCI_ORER))
0084
0085
0086 #define SCIF_ER BIT(7)
0087 #define SCIF_TEND BIT(6)
0088 #define SCIF_TDFE BIT(5)
0089 #define SCIF_BRK BIT(4)
0090 #define SCIF_FER BIT(3)
0091 #define SCIF_PER BIT(2)
0092 #define SCIF_RDF BIT(1)
0093 #define SCIF_DR BIT(0)
0094
0095 #define SCIF_PERC 0xf000
0096 #define SCIF_FERC 0x0f00
0097
0098 #define SCIFA_ORER BIT(9)
0099
0100 #define SCIF_DEFAULT_ERROR_MASK (SCIF_PER | SCIF_FER | SCIF_BRK | SCIF_ER)
0101
0102 #define SCIF_RDxF_CLEAR (u32)(~(SCIF_DR | SCIF_RDF))
0103 #define SCIF_ERROR_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_ER))
0104 #define SCIF_TDxE_CLEAR (u32)(~(SCIF_TDFE))
0105 #define SCIF_BREAK_CLEAR (u32)(~(SCIF_PER | SCIF_FER | SCIF_BRK))
0106
0107
0108 #define SCFCR_RTRG1 BIT(7)
0109 #define SCFCR_RTRG0 BIT(6)
0110 #define SCFCR_TTRG1 BIT(5)
0111 #define SCFCR_TTRG0 BIT(4)
0112 #define SCFCR_MCE BIT(3)
0113 #define SCFCR_TFRST BIT(2)
0114 #define SCFCR_RFRST BIT(1)
0115 #define SCFCR_LOOP BIT(0)
0116
0117
0118 #define SCLSR_TO BIT(2)
0119 #define SCLSR_ORER BIT(0)
0120
0121
0122 #define SCSPTR_RTSIO BIT(7)
0123 #define SCSPTR_RTSDT BIT(6)
0124 #define SCSPTR_CTSIO BIT(5)
0125 #define SCSPTR_CTSDT BIT(4)
0126 #define SCSPTR_SCKIO BIT(3)
0127 #define SCSPTR_SCKDT BIT(2)
0128 #define SCSPTR_SPB2IO BIT(1)
0129 #define SCSPTR_SPB2DT BIT(0)
0130
0131
0132 #define HSCIF_SRE BIT(15)
0133 #define HSCIF_SRDE BIT(14)
0134
0135 #define HSCIF_SRHP_SHIFT 8
0136 #define HSCIF_SRHP_MASK 0x0f00
0137
0138
0139 #define SCPCR_RTSC BIT(4)
0140 #define SCPCR_CTSC BIT(3)
0141 #define SCPCR_SCKC BIT(2)
0142 #define SCPCR_RXDC BIT(1)
0143 #define SCPCR_TXDC BIT(0)
0144
0145
0146 #define SCPDR_RTSD BIT(4)
0147 #define SCPDR_CTSD BIT(3)
0148 #define SCPDR_SCKD BIT(2)
0149 #define SCPDR_RXDD BIT(1)
0150 #define SCPDR_TXDD BIT(0)
0151
0152
0153
0154
0155
0156
0157
0158 #define SCCKS_CKS BIT(15)
0159 #define SCCKS_XIN BIT(14)
0160
0161 #define SCxSR_TEND(port) (((port)->type == PORT_SCI) ? SCI_TEND : SCIF_TEND)
0162 #define SCxSR_RDxF(port) (((port)->type == PORT_SCI) ? SCI_RDRF : SCIF_DR | SCIF_RDF)
0163 #define SCxSR_TDxE(port) (((port)->type == PORT_SCI) ? SCI_TDRE : SCIF_TDFE)
0164 #define SCxSR_FER(port) (((port)->type == PORT_SCI) ? SCI_FER : SCIF_FER)
0165 #define SCxSR_PER(port) (((port)->type == PORT_SCI) ? SCI_PER : SCIF_PER)
0166 #define SCxSR_BRK(port) (((port)->type == PORT_SCI) ? 0x00 : SCIF_BRK)
0167
0168 #define SCxSR_ERRORS(port) (to_sci_port(port)->params->error_mask)
0169
0170 #define SCxSR_RDxF_CLEAR(port) \
0171 (((port)->type == PORT_SCI) ? SCI_RDxF_CLEAR : SCIF_RDxF_CLEAR)
0172 #define SCxSR_ERROR_CLEAR(port) \
0173 (to_sci_port(port)->params->error_clear)
0174 #define SCxSR_TDxE_CLEAR(port) \
0175 (((port)->type == PORT_SCI) ? SCI_TDxE_CLEAR : SCIF_TDxE_CLEAR)
0176 #define SCxSR_BREAK_CLEAR(port) \
0177 (((port)->type == PORT_SCI) ? SCI_BREAK_CLEAR : SCIF_BREAK_CLEAR)