tizen 2.4 release
[profile/mobile/platform/kernel/u-boot-tm1.git] / arch / arm / include / asm / arch-sc8800g / sio_drv.h
1 #ifndef __SIO_DRV_H_
2 #define __SIO_DRV_H_
3
4 #include "fdl_channel.h"
5 #include "sci_types.h"
6 #include "sc_fdl_reg.h"
7 #ifdef __cplusplus
8 extern "C" {
9 #endif /* __cplusplus */
10
11 /* ----------------------------------------------- */
12 //UART0, UART1 Registers
13 #define ARM_UART0_Base        0x83000000
14 #define ARM_UART1_Base        0x84000000
15 #define ARM_UART_TXD    0x0000  //Write data to this address initiates a character transmission through tx fifo.
16 #define ARM_UART_RXD    0x0004  //Reading this register retrieves the next data byte from the rx fifo.
17 #define ARM_UART_STS0   0x0008
18 #define ARM_UART_STS1   0x000C
19 #define ARM_UART_IEN    0x0010
20 #define ARM_UART_ICLR   0x0014
21 #define ARM_UART_CTL0   0x0018
22 #define ARM_UART_CTL1   0x001C
23 #define ARM_UART_CTL2   0x0020
24 #define ARM_UART_CLKD0  0x0024
25 #define ARM_UART_CLKD1  0x0028
26 #define ARM_UART_STS2   0x002C  //Add for sc6600b
27
28 //The corresponding bit of UART_STS0 register.
29 #define UARTSTS_RX_FIFO_FULL_OUT        (1 << 0)        //Row Rx_fifo_full_tout.This bit is set when the number of rx fifo data bytes is larger than the rx interrupt watermark value or when receive time is out.  Auto cleared when the condition disappears.
30 #define UARTSTS_TX_FIFO_EMPTY           (1 << 1)        //Row Tx_fifo_emptyThis bit is set when the number of tx fifo data bytes is less than the tx interrupt watermark value.  Auto cleared when the condition disappears.
31 #define UARTSTS_PARITY_ERR              (1 << 2)        //Row parity_error
32 #define UARTSTS_FRAMING_ERR             (1 << 3)        //Row framing_error
33 #define UARTSTS_RXF_OVERRUN             (1 << 4)        //Row rxf_overrun
34 #define UARTSTS_DSR_CHANGE              (1 << 5)        //Row dsr_change
35 #define UARTSTS_CTS_CHANGE              (1 << 6)        //Row cts_change
36 #define UARTSTS_BREAK_DETECT            (1 << 7)        //Row break_detect
37 #define UARTSTS_DSR                     (1 << 8)        //DSR: Data set ready
38 #define UARTSTS_CTS                     (1 << 9)        //CTS: clear to send
39 #define UARTSTS_RTS                     (1 << 10)       //RTS: Request to send
40 #define UARTSTS_RXD                     (1 << 11)       //RXD: rx data in
41 #define UARTSTS_TXD                     (1 << 12)       //TXD: tx data out
42
43 //The corresponding bit of UART_STS1 register.
44 #define RX_FIFO_CNT_MSK 0x000F
45 #define TX_FIFO_CNT_MSK 0x00F0
46
47 //The corresponding bit of UART_IEN register.
48 #define UARTIEN_RX_FIFO_FULL_OUT        (1 << 0)        //Rx_fifo_full_tout interrupt enable
49 #define UARTIEN_TX_FIFO_EMPTY           (1 << 1)        //Tx_fifo_empty interrupt enable
50 #define UARTIEN_PARITY_ERR              (1 << 2)        //Parity_error interrupt enable
51 #define UARTIEN_FRAMING_ERR             (1 << 3)        //Framing_error interrupt enable
52 #define UARTIEN_RXF_OVERRUN             (1 << 4)        //Rxf_overrun interrupt enable
53 #define UARTIEN_DSR_CHANGE              (1 << 5)        //Dsr_change interrupt enable
54 #define UARTIEN_CTS_CHANGE              (1 << 6)        //Cts_change interrupt enable
55 #define UARTIEN_BREAK_DETECT            (1 << 7)        //Break_detect interrupt enable
56
57 //The corresponding bit of UART_ICLR register.
58 #define UARTICLR_PARITY_ERR             (1 << 2)        //Write "1" Clear parity_error interrupt
59 #define UARTICLR_FRAMING_ERR            (1 << 3)        //Write "1" Clear framing_error interrupt
60 #define UARTICLR_RXF_OVERRUN            (1 << 4)        //Write "1" Clear rx_fifo_overrun interrupt
61 #define UARTICLR_DSR_CHANGE             (1 << 5)        //Write "1" Clear dsr_change interrupt
62 #define UARTICLR_CTS_CHANGE             (1 << 6)        //Write "1" Clear cts_change interrupt
63 #define UARTICLR_BREAK_DETECT           (1 << 7)        //Write "1" Clear break_detect interrupt
64
65 //The corresponding bit of UART_CTL0 register.
66 #define UARTCTL_PARITY_B                (1 << 0)
67 #define UARTCTL_PARITY_EVEN              0
68 #define UARTCTL_PARITY_ODD              (1 << 0)
69
70 #define UARTCTL_PARITY_EN               (1 << 1)
71
72 #define UARTCTL_BL_MSK                  (0x03 << 2)
73 #define UARTCTL_BL5BITS                  0
74 #define UARTCTL_BL6BITS                 (1 << 2)
75 #define UARTCTL_BL7BITS                 (2 << 2)
76 #define UARTCTL_BL8BITS                 (3 << 2)
77
78 #define UARTCTL_SL_MSK                  (0x03 << 4)
79 #define UARTCTL_SL0BITS                  0
80 #define UARTCTL_SL1BITS                 (1 << 4)
81 #define UARTCTL_SL1HBITS                (2 << 4)
82 #define UARTCTL_SL2BITS                 (3 << 4)
83
84 #define UARTCTL_RTS                     (1 << 6)        //Ready To SendWhen receive hardware flow control is not set, this bit controls the output of rtsn. When rhwf is set, this bit is controlled by the rx fifo level.
85 #define UARTCTL_TX_EMPTY                (1 << 7)        //Send BreakWhen tx fifo is empty and tx is idle, setting this bit forces the tx data output low.Need to be cleared by mcu.
86 #define UARTCTL_DTR                     (1 << 8)        //Data Terminal ReadyThis bit controls the dtrn output
87
88 //The corresponding bit of UART_STS2 register.
89 #define RX_FIFO_FULL_OUT_MSK            (1 << 0)        //Masked Rx_fifo_full_toutThis bit is set when the number of rx fifo data bytes is larger than the rx interrupt watermark value or when receive time is out. Auto cleared when the condition disappears.
90 #define TX_FIFO_EMPTY_MSK               (1 << 1)        //Masked Tx_fifo_emptyThis bit is set when the number of tx fifo data bytes is less than the tx interrupt watermark value. Auto cleared when the condition disappears.
91 #define PARITY_ERR_MSK                  (1 << 2)        //Masked Parity_error
92 #define FRAMING_ERR_MSK                 (1 << 3)        //Masked Framing_error
93 #define RXF_CHANGE_MSK                  (1 << 4)        //Masked Rxf_overrun
94 #define DSR_CHANGE_MSK                  (1 << 5)        //Masked Dsr_change
95 #define CTS_MSK                         (1 << 6)        //Masked Cts_change
96 #define BREAK_DETECT_MSK                (1 << 7)        //Masked Break_detect
97
98
99
100 //-----------------------------------------------
101 //Global Register
102 //GREG_BASE     0x8B000000
103 //For Uart Enable
104 //#define GR_GEN0                 (0x8B000008)
105 //#define GR_PCTL                 (0x8B00000C)
106
107 #define GEN0_UART0              (0x1)
108 #define GEN0_UART1              (0x2)
109
110 #define REG( r ) \
111     ( *( ( volatile unsigned int* )( r ) ) )
112
113
114 /* UART primitives */
115 #define SIO_GET_RX_STATUS( p )      ( REG( ( p ) + ARM_UART_STS1 ) & 0xFF )
116 #define SIO_RX_READY( s )           ( 0 != ( s ) )
117 #define SIO_GET_CHAR( p )           ( unsigned char )( REG( ( p ) + ARM_UART_RXD ) & 0xFF )
118
119 #define SIO_GET_TX_STATUS(p)        ( ( ( REG( ( p ) + ARM_UART_STS1 ) ) >> 8 ) && 0xFF )
120 #define SIO_TX_READY(s)             ( 0 == ( s ) )
121 #define SIO_PUT_CHAR(p,c)           ( REG( ( p ) + ARM_UART_TXD ) = ( unsigned int )( ( c ) & 0xFF ) )
122 #define SIO_TRANS_OVER(p)                       ( REG( ( p ) + ARM_UART_STS0 ) & BIT_15)
123
124 #define COM1_DEBUG  (1)
125 #define COM0_USER   (0)
126 #define HWORD(p)    ((p >> 16) & 0x0FFFF)
127 #define LWORD(p)    (p & 0x0FFFF)
128 #define HBYTE(p)    ((p >> 8) & 0x0FF)
129 #define LBYTE(p)    (p & 0x0FF)
130 #define MSB(p)      ((p >> 4) & 0x0F)
131 #define LSB(p)      ((p) & 0x0F)
132
133 #define UART_SET_BAUDRATE_TIMEOUT       (0x10000)
134 #ifdef __cplusplus
135 extern "C" {
136 #endif /* __cplusplus */
137
138 /******************************************************************************
139  * sio_open
140  *
141  * If buadrate is BAUD_NONE, the default baudrate BAUD_115200 is used.
142  ******************************************************************************/
143
144 extern struct FDL_ChannelHandler gUart0Channel;
145 extern struct FDL_ChannelHandler gUart1Channel;
146 #define sio_trace printf
147
148
149 #ifdef __cplusplus
150 }
151 #endif /* __cplusplus */
152 #endif /* SIO_DRV_H */