summaryrefslogtreecommitdiff
path: root/sys/arch/sh/dev/scifreg.h
blob: 3baf31f7f90c29f6489d793123855ee769aa0a2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*	$OpenBSD: scifreg.h,v 1.1.1.1 2006/10/06 21:02:55 miod Exp $	*/
/* $NetBSD: scifreg.h,v 1.10 2006/02/18 00:41:32 uwe Exp $ */

/*-
 * Copyright (C) 1999 SAITOH Masanobu.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/*
 * Serial Communication Interface with FIFO (SCIF)
 */

#define SH3_SCIF0_BASE	0xa4000150
#define SH3_SCIF1_BASE	0xa4000140

#define SH4_SCIF_BASE	0xffe80000

#ifdef SH3

/* SH3 definitions */

#define	SCIF_SMR		0x0	/* serial mode */
#define	SCIF_BRR		0x2	/* bit rate */
#define	SCIF_SCR		0x4	/* serial control */
#define	SCIF_FTDR		0x6	/* transmit fifo data */
#define	SCIF_SSR		0x8	/* serial status */
#define	SCIF_FRDR		0xa	/* receive fifo data */
#define	SCIF_FCR		0xc	/* fifo control */
#define	SCIF_FDR		0xe	/* fifo data count set */

#define	SHREG_SCSMR2  (*(volatile uint8_t  *)(SH3_SCIF0_BASE + SCIF_SMR))
#define	SHREG_SCBRR2  (*(volatile uint8_t  *)(SH3_SCIF0_BASE + SCIF_BRR))
#define	SHREG_SCSCR2  (*(volatile uint8_t  *)(SH3_SCIF0_BASE + SCIF_SCR))
#define	SHREG_SCFTDR2 (*(volatile uint8_t  *)(SH3_SCIF0_BASE + SCIF_FTDR))
#define	SHREG_SCSSR2  (*(volatile uint16_t *)(SH3_SCIF0_BASE + SCIF_SSR))
#define	SHREG_SCFRDR2 (*(volatile uint8_t  *)(SH3_SCIF0_BASE + SCIF_FRDR))
#define	SHREG_SCFCR2  (*(volatile uint8_t  *)(SH3_SCIF0_BASE + SCIF_FCR))
#define	SHREG_SCFDR2  (*(volatile uint16_t *)(SH3_SCIF0_BASE + SCIF_FDR))

#else  /* !SH3 */

/* SH4 definitions */

#define	SCIF_SMR		0x00	/* serial mode */
#define	SCIF_BRR		0x04	/* bit rate */
#define	SCIF_SCR		0x08	/* serial control */
#define	SCIF_FTDR		0x0c	/* transmit fifo data */
#define	SCIF_SSR		0x10	/* serial status */
#define	SCIF_FRDR		0x14	/* receive fifo data */
#define	SCIF_FCR		0x18	/* fifo control */
#define	SCIF_FDR		0x1c	/* fifo data count set */

#define SCIF_SPTR		0x20	/* seial port */
#define SCIF_LSR		0x24	/* line status */

#define	SHREG_SCSMR2  (*(volatile uint16_t *)(SH4_SCIF_BASE + SCIF_SMR))
#define	SHREG_SCBRR2  (*(volatile uint8_t  *)(SH4_SCIF_BASE + SCIF_BRR))
#define	SHREG_SCSCR2  (*(volatile uint16_t *)(SH4_SCIF_BASE + SCIF_SCR))
#define	SHREG_SCFTDR2 (*(volatile uint8_t  *)(SH4_SCIF_BASE + SCIF_FTDR))
#define	SHREG_SCSSR2  (*(volatile uint16_t *)(SH4_SCIF_BASE + SCIF_SSR))
#define	SHREG_SCFRDR2 (*(volatile uint8_t  *)(SH4_SCIF_BASE + SCIF_FRDR))
#define	SHREG_SCFCR2  (*(volatile uint16_t *)(SH4_SCIF_BASE + SCIF_FCR))
#define	SHREG_SCFDR2  (*(volatile uint16_t *)(SH4_SCIF_BASE + SCIF_FDR))

#define	SHREG_SCSPTR2 (*(volatile uint16_t *)(SH4_SCIF_BASE + SCIF_SPTR))
#define	SHREG_SCLSR2  (*(volatile uint16_t *)(SH4_SCIF_BASE + SCIF_LSR))

/* alias */
#define	SHREG_SCSFDR2	SHREG_SCFTDR2
#define	SHREG_SCFSR2	SHREG_SCSSR2

#define	SCSPTR2_RTSIO		0x0080
#define	SCSPTR2_RTSDT		0x0040
#define	SCSPTR2_CTSIO		0x0020
#define	SCSPTR2_CTSDT		0x0010
#define	SCSPTR2_SCKIO		0x0008
#define	SCSPTR2_SCKDT		0x0004
#define	SCSPTR2_SPB2IO		0x0002
#define	SCSPTR2_SPB2DT		0x0001

#define SCLSR2_ORER		0x0001	/* overrun error */

#endif /* !SH3 */

/* SMR: serial mode */
#define SCSMR2_CHR		0x40	/* character width (set = 7bit) */
#define SCSMR2_PE		0x20	/* Parity Enable */
#define SCSMR2_O		0x10	/* parity mode Odd */
#define SCSMR2_STOP		0x08	/* STOP bit (set = 2 stop bits) */
#define	SCSMR2_CKS1		0x02	/* ClocK Select 1 */
#define	SCSMR2_CKS0		0x01	/* ClocK Select 0 */

/* SMR: serial mode (for IrDA) */
#define SCSMR2_IRMOD		0x80	/* IrDA mode */
#define SCSMR2_ICK3		0x40
#define SCSMR2_ICK2		0x20
#define SCSMR2_ICK1		0x10
#define SCSMR2_ICK0		0x08
#define SCSMR2_PSEL		0x04	/* Pulse width SELelect */

/* SCR: serial control */
#define	SCSCR2_TIE		0x80	/* Transmit Interrupt Enable */
#define	SCSCR2_RIE		0x40	/* Recieve Interrupt Enable */
#define	SCSCR2_TE		0x20	/* Transmit Enable */
#define	SCSCR2_RE		0x10	/* Receive Enable */
#define	SCSCR2_CKE1		0x02	/* ClocK Enable 1 */
#define	SCSCR2_CKE0		0x01	/* ClocK Enable 0 (not in sh4) */

/* SSR: serial status */
#define	SCSSR2_ER		0x0080	/* ERror */
#define	SCSSR2_TEND		0x0040	/* Transmit END */
#define	SCSSR2_TDFE		0x0020	/* Transmit Data Fifo Empty */
#define	SCSSR2_BRK		0x0010	/* BReaK detection */
#define	SCSSR2_FER		0x0008	/* Framing ERror */
#define	SCSSR2_PER		0x0004	/* Parity ERror */
#define	SCSSR2_RDF		0x0002	/* Recieve fifo Data Full */
#define	SCSSR2_DR		0x0001	/* Data Ready */

/* FCR: fifo control */
#define	SCFCR2_RTRG1		0x80	/* Receive TRiGger 1 */
#define	SCFCR2_RTRG0		0x40	/* Receive TRiGger 0 */
#define	SCFCR2_TTRG1		0x20	/* Transmit TRiGger 1 */
#define	SCFCR2_TTRG0		0x10	/* Transmit TRiGger 0 */
#define	SCFCR2_MCE		0x08	/* Modem Control Enable */
#define	SCFCR2_TFRST		0x04	/* Transmit Fifo register ReSeT */
#define	SCFCR2_RFRST		0x02	/* Receive Fifo register ReSeT */
#define	SCFCR2_LOOP		0x01	/* LOOP back test */

#define	FIFO_RCV_TRIGGER_1	0x00
#define	FIFO_RCV_TRIGGER_4	0x40
#define	FIFO_RCV_TRIGGER_8	0x80
#define	FIFO_RCV_TRIGGER_14	0xc0

#define	FIFO_XMT_TRIGGER_8	0x00
#define	FIFO_XMT_TRIGGER_4	0x10
#define	FIFO_XMT_TRIGGER_2	0x20
#define	FIFO_XMT_TRIGGER_1	0x30

/* FDR: fifo data count set */
#define	SCFDR2_TXCNT		0xff00	/* Tx CouNT */
#define	SCFDR2_RECVCNT		0x00ff	/* Rx CouNT */
#define	SCFDR2_TXF_FULL		0x1000	/* Tx FULL */
#define	SCFDR2_RXF_EPTY		0x0000	/* Rx EMPTY */