• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/arch/mn10300/kernel/
1/* MN10300 On-chip serial port driver definitions
2 *
3 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public Licence
8 * as published by the Free Software Foundation; either version
9 * 2 of the Licence, or (at your option) any later version.
10 */
11#ifndef _MN10300_SERIAL_H
12#define _MN10300_SERIAL_H
13
14#ifndef __ASSEMBLY__
15#include <linux/serial_core.h>
16#include <linux/termios.h>
17#endif
18
19#include <asm/page.h>
20#include <asm/serial-regs.h>
21
22#define NR_PORTS		3		/* should be set 3 or 9 or 16 */
23
24#define MNSC_BUFFER_SIZE	+(PAGE_SIZE / 2)
25
26/* intr_flags bits */
27#define MNSCx_RX_AVAIL		0x01
28#define MNSCx_RX_OVERF		0x02
29#define MNSCx_TX_SPACE		0x04
30#define MNSCx_TX_EMPTY		0x08
31
32#ifndef __ASSEMBLY__
33
34struct mn10300_serial_port {
35	char			*rx_buffer;	/* reception buffer base */
36	unsigned		rx_inp;		/* pointer to rx input offset */
37	unsigned		rx_outp;	/* pointer to rx output offset */
38	u8			tx_xchar;	/* high-priority XON/XOFF buffer */
39	u8			tx_break;	/* transmit break request */
40	u8			intr_flags;	/* interrupt flags */
41	volatile u16		*rx_icr;	/* Rx interrupt control register */
42	volatile u16		*tx_icr;	/* Tx interrupt control register */
43	int			rx_irq;		/* reception IRQ */
44	int			tx_irq;		/* transmission IRQ */
45	int			tm_irq;		/* timer IRQ */
46
47	const char		*name;		/* name of serial port */
48	const char		*rx_name;	/* Rx interrupt handler name of serial port */
49	const char		*tx_name;	/* Tx interrupt handler name of serial port */
50	const char		*tm_name;	/* Timer interrupt handler name */
51	unsigned short		type;		/* type of serial port */
52	unsigned char		isconsole;	/* T if it's a console */
53	volatile void		*_iobase;	/* pointer to base of I/O control regs */
54	volatile u16		*_control;	/* control register pointer */
55	volatile u8		*_status;	/* status register pointer */
56	volatile u8		*_intr;		/* interrupt register pointer */
57	volatile void		*_rxb;		/* receive buffer register pointer */
58	volatile void		*_txb;		/* transmit buffer register pointer */
59	volatile u16		*_tmicr;	/* timer interrupt control register */
60	volatile u8		*_tmxmd;	/* baud rate timer mode register */
61	volatile u16		*_tmxbr;	/* baud rate timer base register */
62
63	/* this must come down here so that assembly can use BSET to access the
64	 * above fields */
65	struct uart_port	uart;
66
67	unsigned short		rx_brk;		/* current break reception status */
68	u16			tx_cts;		/* current CTS status */
69	int			gdbstub;	/* preemptively stolen by GDB stub */
70
71	u8			clock_src;	/* clock source */
72#define MNSCx_CLOCK_SRC_IOCLK	0
73#define MNSCx_CLOCK_SRC_IOBCLK	1
74
75	u8			div_timer;	/* timer used as divisor */
76#define MNSCx_DIV_TIMER_16BIT	0
77#define MNSCx_DIV_TIMER_8BIT	1
78
79	u16			options;	/* options */
80#define MNSCx_OPT_CTS		0x0001
81
82	unsigned long		ioclk;		/* base clock rate */
83};
84
85#ifdef CONFIG_MN10300_TTYSM0
86extern struct mn10300_serial_port mn10300_serial_port_sif0;
87#endif
88
89#ifdef CONFIG_MN10300_TTYSM1
90extern struct mn10300_serial_port mn10300_serial_port_sif1;
91#endif
92
93#ifdef CONFIG_MN10300_TTYSM2
94extern struct mn10300_serial_port mn10300_serial_port_sif2;
95#endif
96
97extern struct mn10300_serial_port *mn10300_serial_ports[];
98
99struct mn10300_serial_int {
100	struct mn10300_serial_port *port;
101	asmlinkage void (*vdma)(void);
102};
103
104extern struct mn10300_serial_int mn10300_serial_int_tbl[];
105
106extern asmlinkage void mn10300_serial_vdma_interrupt(void);
107extern asmlinkage void mn10300_serial_vdma_rx_handler(void);
108extern asmlinkage void mn10300_serial_vdma_tx_handler(void);
109
110#endif /* __ASSEMBLY__ */
111
112#if defined(CONFIG_GDBSTUB_ON_TTYSM0)
113#define SCgSTR SC0STR
114#define SCgRXB SC0RXB
115#define SCgRXIRQ SC0RXIRQ
116#elif defined(CONFIG_GDBSTUB_ON_TTYSM1)
117#define SCgSTR SC1STR
118#define SCgRXB SC1RXB
119#define SCgRXIRQ SC1RXIRQ
120#elif defined(CONFIG_GDBSTUB_ON_TTYSM2)
121#define SCgSTR SC2STR
122#define SCgRXB SC2RXB
123#define SCgRXIRQ SC2RXIRQ
124#endif
125
126#endif /* _MN10300_SERIAL_H */
127