summaryrefslogtreecommitdiff
path: root/arch/mips/cpu/mips32/incaip/asc_serial.h
blob: 7ffdcfaf8b78343d7f248d90976f5f66cbe068c8 (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
165
166
167
168
169
170
171
172
173
174
175
176
177
/* incaAscSio.h - (INCA) ASC UART tty driver header */

#ifndef __INCincaAscSioh
#define __INCincaAscSioh

#include <asm/inca-ip.h>

/* channel operating modes */
#define	ASCOPT_CSIZE	0x00000003
#define	ASCOPT_CS7	0x00000001
#define	ASCOPT_CS8	0x00000002
#define	ASCOPT_PARENB	0x00000004
#define	ASCOPT_STOPB	0x00000008
#define	ASCOPT_PARODD	0x00000010
#define	ASCOPT_CREAD	0x00000020

#define ASC_OPTIONS		(ASCOPT_CREAD | ASCOPT_CS8)

/* ASC input select (0 or 1) */
#define CONSOLE_TTY	0

/* use fractional divider for baudrate settings */
#define INCAASC_USE_FDV

#ifdef INCAASC_USE_FDV
   #define INCAASC_FDV_LOW_BAUDRATE        71
   #define INCAASC_FDV_HIGH_BAUDRATE       453
#endif /*INCAASC_USE_FDV*/


#define INCAASC_TXFIFO_FL       1
#define INCAASC_RXFIFO_FL       1
#define INCAASC_TXFIFO_FULL     16

/* interrupt lines masks for the ASC device interrupts*/
/* change these macroses if it's necessary */
#define INCAASC_IRQ_LINE_ALL        0x000F0000  /* all IRQs */

#define INCAASC_IRQ_LINE_TIR            0x00010000      /* TIR - Tx */
#define INCAASC_IRQ_LINE_RIR            0x00020000      /* RIR - Rx */
#define INCAASC_IRQ_LINE_EIR            0x00040000      /* EIR - Err */
#define INCAASC_IRQ_LINE_TBIR           0x00080000      /* TBIR - Tx Buf*/

/* interrupt controller access macros */
#define ASC_INTERRUPTS_ENABLE(X)  \
   *((volatile unsigned int*) INCA_IP_ICU_IM2_IER) |= X;
#define ASC_INTERRUPTS_DISABLE(X) \
   *((volatile unsigned int*) INCA_IP_ICU_IM2_IER) &= ~X;
#define ASC_INTERRUPTS_CLEAR(X)   \
   *((volatile unsigned int*) INCA_IP_ICU_IM2_ISR) = X;

/* CLC register's bits and bitfields */
#define ASCCLC_DISR        0x00000001
#define ASCCLC_DISS        0x00000002
#define ASCCLC_RMCMASK     0x0000FF00
#define ASCCLC_RMCOFFSET   8

/* CON register's bits and bitfields */
#define ASCCON_MODEMASK 0x0007
    #define ASCCON_M_8SYNC          0x0
    #define ASCCON_M_8ASYNC         0x1
    #define ASCCON_M_8IRDAASYNC     0x2
    #define ASCCON_M_7ASYNCPAR      0x3
    #define ASCCON_M_9ASYNC         0x4
    #define ASCCON_M_8WAKEUPASYNC   0x5
    #define ASCCON_M_8ASYNCPAR      0x7
#define ASCCON_STP      0x0008
#define ASCCON_REN      0x0010
#define ASCCON_PEN      0x0020
#define ASCCON_FEN      0x0040
#define ASCCON_OEN      0x0080
#define ASCCON_PE       0x0100
#define ASCCON_FE       0x0200
#define ASCCON_OE       0x0400
#define ASCCON_FDE      0x0800
#define ASCCON_ODD      0x1000
#define ASCCON_BRS      0x2000
#define ASCCON_LB       0x4000
#define ASCCON_R        0x8000

/* WHBCON register's bits and bitfields */
#define ASCWHBCON_CLRREN    0x0010
#define ASCWHBCON_SETREN    0x0020
#define ASCWHBCON_CLRPE     0x0100
#define ASCWHBCON_CLRFE     0x0200
#define ASCWHBCON_CLROE     0x0400
#define ASCWHBCON_SETPE     0x0800
#define ASCWHBCON_SETFE     0x1000
#define ASCWHBCON_SETOE     0x2000

/* ABCON register's bits and bitfields */
#define ASCABCON_ABEN       0x0001
#define ASCABCON_AUREN      0x0002
#define ASCABCON_ABSTEN     0x0004
#define ASCABCON_ABDETEN    0x0008
#define ASCABCON_FCDETEN    0x0010
#define ASCABCON_EMMASK     0x0300
    #define ASCABCON_EMOFF          8
	#define ASCABCON_EM_DISAB       0x0
	#define ASCABCON_EM_DURAB       0x1
	#define ASCABCON_EM_ALWAYS      0x2
#define ASCABCON_TXINV      0x0400
#define ASCABCON_RXINV      0x0800

/* FDV register mask, offset and bitfields*/
#define ASCFDV_VALUE_MASK     0x000001FF

/* WHBABCON register's bits and bitfields */
#define ASCWHBABCON_SETABEN     0x0001
#define ASCWHBABCON_CLRABEN     0x0002

/* ABSTAT register's bits and bitfields */
#define ASCABSTAT_FCSDET    0x0001
#define ASCABSTAT_FCCDET    0x0002
#define ASCABSTAT_SCSDET    0x0004
#define ASCABSTAT_SCCDET    0x0008
#define ASCABSTAT_DETWAIT   0x0010

/* WHBABSTAT register's bits and bitfields */
#define ASCWHBABSTAT_CLRFCSDET  0x0001
#define ASCWHBABSTAT_SETFCSDET  0x0002
#define ASCWHBABSTAT_CLRFCCDET  0x0004
#define ASCWHBABSTAT_SETFCCDET  0x0008
#define ASCWHBABSTAT_CLRSCSDET  0x0010
#define ASCWHBABSTAT_SETSCSDET  0x0020
#define ASCWHBABSTAT_SETSCCDET  0x0040
#define ASCWHBABSTAT_CLRSCCDET  0x0080
#define ASCWHBABSTAT_CLRDETWAIT 0x0100
#define ASCWHBABSTAT_SETDETWAIT 0x0200

/* TXFCON register's bits and bitfields */
#define ASCTXFCON_TXFEN         0x0001
#define ASCTXFCON_TXFFLU        0x0002
#define ASCTXFCON_TXTMEN        0x0004
#define ASCTXFCON_TXFITLMASK    0x3F00
#define ASCTXFCON_TXFITLOFF     8

/* RXFCON register's bits and bitfields */
#define ASCRXFCON_RXFEN         0x0001
#define ASCRXFCON_RXFFLU        0x0002
#define ASCRXFCON_RXTMEN        0x0004
#define ASCRXFCON_RXFITLMASK    0x3F00
#define ASCRXFCON_RXFITLOFF     8

/* FSTAT register's bits and bitfields */
#define ASCFSTAT_RXFFLMASK      0x003F
#define ASCFSTAT_TXFFLMASK      0x3F00
#define ASCFSTAT_TXFFLOFF       8

#define INCAASC_PMU_ENABLE(BIT) *((volatile ulong*)0xBF102000) |= (0x1 << BIT);

typedef  struct         /* incaAsc_t */
{
    volatile unsigned long  asc_clc;                            /*0x0000*/
    volatile unsigned long  asc_pisel;                          /*0x0004*/
    volatile unsigned long  asc_rsvd1[2];   /* for mapping */   /*0x0008*/
    volatile unsigned long  asc_con;                            /*0x0010*/
    volatile unsigned long  asc_bg;                             /*0x0014*/
    volatile unsigned long  asc_fdv;                            /*0x0018*/
    volatile unsigned long  asc_pmw;        /* not used */      /*0x001C*/
    volatile unsigned long  asc_tbuf;                           /*0x0020*/
    volatile unsigned long  asc_rbuf;                           /*0x0024*/
    volatile unsigned long  asc_rsvd2[2];   /* for mapping */   /*0x0028*/
    volatile unsigned long  asc_abcon;                          /*0x0030*/
    volatile unsigned long  asc_abstat;     /* not used */      /*0x0034*/
    volatile unsigned long  asc_rsvd3[2];   /* for mapping */   /*0x0038*/
    volatile unsigned long  asc_rxfcon;                         /*0x0040*/
    volatile unsigned long  asc_txfcon;                         /*0x0044*/
    volatile unsigned long  asc_fstat;                          /*0x0048*/
    volatile unsigned long  asc_rsvd4;      /* for mapping */   /*0x004C*/
    volatile unsigned long  asc_whbcon;                         /*0x0050*/
    volatile unsigned long  asc_whbabcon;                       /*0x0054*/
    volatile unsigned long  asc_whbabstat;  /* not used */      /*0x0058*/

} incaAsc_t;

#endif /* __INCincaAscSioh */