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
|
/*
* linux/include/asm/arch-W90N745/serial.h
* 2003 winbond
*/
#ifndef __ASM_ARCH_SERIAL_H
#define __ASM_ARCH_SERIAL_H
#include <asm/arch/hardware.h>
#include <asm/irq.h>
#define RS_TABLE_SIZE 1
#define BASE_BAUD 115200
#define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
#define STD_SERIAL_PORT_DEFNS \
/* UART CLK PORT IRQ FLAGS */ \
{ 0, BASE_BAUD, UART_BASE0, INT_UARTINT, STD_COM_FLAGS }, /* ttyS0 */
#define EXTRA_SERIAL_PORT_DEFNS
#define UART_LSR_OE 0x02 // Overrun error
#define UART_LSR_PE 0x04 // Parity error
#define UART_LSR_FE 0x08 // Frame error
#define UART_LSR_BI 0x10 // Break detect
//#define UART_LSR_DTR 0x10 // Data terminal ready
#define UART_LSR_DR 0x01
#define UART_LSR_THRE 0x20
#define UART_IIR_DR 0x04 // Receive data ready
#define UART_IIR_THRE 0x02 // Transmit buffer register empty
#define UART_LSR_TEMT 0x40 // Transmit complete
#define UART_LCR_WLEN5 0x00
#define UART_LCR_WLEN6 0x01
#define UART_LCR_WLEN7 0x02
#define UART_LCR_WLEN8 0x03
#define UART_LCR_PARITY 0x08
#define UART_LCR_NPAR 0x00
#define UART_LCR_OPAR 0x00
#define UART_LCR_EPAR 0x10
#define UART_LCR_SPAR 0x20
#define UART_LCR_SBC 0x40
#define UART_LCR_NSB 0x04
#define UART_GCR_RX_INT 0x01
#define UART_GCR_TX_INT 0x08
#define UART_GCR_RX_STAT_INT 0x04
#define UART_IER_RLSI 0x04
#define UART_IER_THRI 0x02
#define UART_IER_RDI 0x01
#define UART_MSR 0
#define UART_MSR_DCD 0
#define UART_MSR_RI 0
#define UART_MSR_DSR 0
#define UART_MSR_CTS 0
#define UART_MSR_DDCD 0
#define UART_MSR_TERI 0
#define UART_MSR_DDSR 0
#define UART_MSR_DCTS 0
#define UART_MSR_ANY_DELTA 0
#define PORT_W90N745 14
struct serial_baudtable
{
unsigned int baudrate;
unsigned int div;
};
static struct serial_baudtable uart_baudrate[] =
{
{ 1200, 0x30B},
{ 2400, 0x184},
{ 4800, 0xC1},
{ 9600, 0x5F},
{ 19200, 0x2E},
{ 38400, 0x16},
{ 57600, 0x0E},
{115200, 0x06},
{230400, 0x02},
{460860, 0x00}
};
static unsigned int baudrate_div(unsigned int baudrate)
{
int i;
int len = sizeof(uart_baudrate)/sizeof(struct serial_baudtable);
for(i = 0; i < len; i++)
if(uart_baudrate[i].baudrate == baudrate)
return uart_baudrate[i].div;
return 0;
}
#define disable_uart_tx_interrupt(line) \
{ \
if(line) { \
} \
else { \
CSR_WRITE(COM_IER, CSR_READ(COM_IER)&0x1D); \
} \
}
#define disable_uart_rx_interrupt(line) \
{ \
if(line) { \
} \
else { \
CSR_WRITE(COM_IER, CSR_READ(COM_IER)&0x1E); \
} \
}
#define enable_uart_tx_interrupt(line) \
{ \
if(line) { \
} \
else { \
if(!(CSR_READ(COM_IER)&0x02)) \
CSR_WRITE(COM_IER, CSR_READ(COM_IER)|0x02); \
} \
}
#define enable_uart_rx_interrupt(line) \
{ \
if(line) { \
} \
else { \
CSR_WRITE(COM_IER, CSR_READ(COM_IER)|0x1); \
} \
}
#endif /* __ASM_ARCH_SERIAL_H */
|