1 #ifndef __LINUX_SERIAL_SCI_H
2 #define __LINUX_SERIAL_SCI_H
3 
4 #include <linux/serial_core.h>
5 #include <linux/sh_dma.h>
6 
7 /*
8  * Generic header for SuperH SCI(F) (used by sh/sh64/h8300 and related parts)
9  */
10 
11 enum {
12 	SCBRR_ALGO_1,		/* ((clk + 16 * bps) / (16 * bps) - 1) */
13 	SCBRR_ALGO_2,		/* ((clk + 16 * bps) / (32 * bps) - 1) */
14 	SCBRR_ALGO_3,		/* (((clk * 2) + 16 * bps) / (16 * bps) - 1) */
15 	SCBRR_ALGO_4,		/* (((clk * 2) + 16 * bps) / (32 * bps) - 1) */
16 	SCBRR_ALGO_5,		/* (((clk * 1000 / 32) / bps) - 1) */
17 };
18 
19 #define SCSCR_TIE	(1 << 7)
20 #define SCSCR_RIE	(1 << 6)
21 #define SCSCR_TE	(1 << 5)
22 #define SCSCR_RE	(1 << 4)
23 #define SCSCR_REIE	(1 << 3)	/* not supported by all parts */
24 #define SCSCR_TOIE	(1 << 2)	/* not supported by all parts */
25 #define SCSCR_CKE1	(1 << 1)
26 #define SCSCR_CKE0	(1 << 0)
27 
28 /* Offsets into the sci_port->irqs array */
29 enum {
30 	SCIx_ERI_IRQ,
31 	SCIx_RXI_IRQ,
32 	SCIx_TXI_IRQ,
33 	SCIx_BRI_IRQ,
34 	SCIx_NR_IRQS,
35 };
36 
37 #define SCIx_IRQ_MUXED(irq)		\
38 {					\
39 	[SCIx_ERI_IRQ]	= (irq),	\
40 	[SCIx_RXI_IRQ]	= (irq),	\
41 	[SCIx_TXI_IRQ]	= (irq),	\
42 	[SCIx_BRI_IRQ]	= (irq),	\
43 }
44 
45 struct device;
46 
47 /*
48  * Platform device specific platform_data struct
49  */
50 struct plat_sci_port {
51 	unsigned long	mapbase;		/* resource base */
52 	unsigned int	irqs[SCIx_NR_IRQS];	/* ERI, RXI, TXI, BRI */
53 	unsigned int	type;			/* SCI / SCIF / IRDA */
54 	upf_t		flags;			/* UPF_* flags */
55 
56 	unsigned int	scbrr_algo_id;		/* SCBRR calculation algo */
57 	unsigned int	scscr;			/* SCSCR initialization */
58 
59 	struct device	*dma_dev;
60 
61 	unsigned int	dma_slave_tx;
62 	unsigned int	dma_slave_rx;
63 };
64 
65 #endif /* __LINUX_SERIAL_SCI_H */
66