xref: /OK3568_Linux_fs/kernel/drivers/tty/moxa.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef MOXA_H_FILE
3*4882a593Smuzhiyun #define MOXA_H_FILE
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #define	MOXA		0x400
6*4882a593Smuzhiyun #define MOXA_GET_IQUEUE 	(MOXA + 1)	/* get input buffered count */
7*4882a593Smuzhiyun #define MOXA_GET_OQUEUE 	(MOXA + 2)	/* get output buffered count */
8*4882a593Smuzhiyun #define MOXA_GETDATACOUNT       (MOXA + 23)
9*4882a593Smuzhiyun #define MOXA_GET_IOQUEUE	(MOXA + 27)
10*4882a593Smuzhiyun #define MOXA_FLUSH_QUEUE	(MOXA + 28)
11*4882a593Smuzhiyun #define MOXA_GETMSTATUS         (MOXA + 65)
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /*
14*4882a593Smuzhiyun  *    System Configuration
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define Magic_code	0x404
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun /*
20*4882a593Smuzhiyun  *    for C218 BIOS initialization
21*4882a593Smuzhiyun  */
22*4882a593Smuzhiyun #define C218_ConfBase	0x800
23*4882a593Smuzhiyun #define C218_status	(C218_ConfBase + 0)	/* BIOS running status    */
24*4882a593Smuzhiyun #define C218_diag	(C218_ConfBase + 2)	/* diagnostic status      */
25*4882a593Smuzhiyun #define C218_key	(C218_ConfBase + 4)	/* WORD (0x218 for C218) */
26*4882a593Smuzhiyun #define C218DLoad_len	(C218_ConfBase + 6)	/* WORD           */
27*4882a593Smuzhiyun #define C218check_sum	(C218_ConfBase + 8)	/* BYTE           */
28*4882a593Smuzhiyun #define C218chksum_ok	(C218_ConfBase + 0x0a)	/* BYTE (1:ok)            */
29*4882a593Smuzhiyun #define C218_TestRx	(C218_ConfBase + 0x10)	/* 8 bytes for 8 ports    */
30*4882a593Smuzhiyun #define C218_TestTx	(C218_ConfBase + 0x18)	/* 8 bytes for 8 ports    */
31*4882a593Smuzhiyun #define C218_RXerr	(C218_ConfBase + 0x20)	/* 8 bytes for 8 ports    */
32*4882a593Smuzhiyun #define C218_ErrFlag	(C218_ConfBase + 0x28)	/* 8 bytes for 8 ports    */
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #define C218_LoadBuf	0x0F00
35*4882a593Smuzhiyun #define C218_KeyCode	0x218
36*4882a593Smuzhiyun #define CP204J_KeyCode	0x204
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /*
39*4882a593Smuzhiyun  *    for C320 BIOS initialization
40*4882a593Smuzhiyun  */
41*4882a593Smuzhiyun #define C320_ConfBase	0x800
42*4882a593Smuzhiyun #define C320_LoadBuf	0x0f00
43*4882a593Smuzhiyun #define STS_init	0x05	/* for C320_status        */
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define C320_status	C320_ConfBase + 0	/* BIOS running status    */
46*4882a593Smuzhiyun #define C320_diag	C320_ConfBase + 2	/* diagnostic status      */
47*4882a593Smuzhiyun #define C320_key	C320_ConfBase + 4	/* WORD (0320H for C320) */
48*4882a593Smuzhiyun #define C320DLoad_len	C320_ConfBase + 6	/* WORD           */
49*4882a593Smuzhiyun #define C320check_sum	C320_ConfBase + 8	/* WORD           */
50*4882a593Smuzhiyun #define C320chksum_ok	C320_ConfBase + 0x0a	/* WORD (1:ok)            */
51*4882a593Smuzhiyun #define C320bapi_len	C320_ConfBase + 0x0c	/* WORD           */
52*4882a593Smuzhiyun #define C320UART_no	C320_ConfBase + 0x0e	/* WORD           */
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #define C320_KeyCode	0x320
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun #define FixPage_addr	0x0000	/* starting addr of static page  */
57*4882a593Smuzhiyun #define DynPage_addr	0x2000	/* starting addr of dynamic page */
58*4882a593Smuzhiyun #define C218_start	0x3000	/* starting addr of C218 BIOS prg */
59*4882a593Smuzhiyun #define Control_reg	0x1ff0	/* select page and reset control */
60*4882a593Smuzhiyun #define HW_reset	0x80
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /*
63*4882a593Smuzhiyun  *    Function Codes
64*4882a593Smuzhiyun  */
65*4882a593Smuzhiyun #define FC_CardReset	0x80
66*4882a593Smuzhiyun #define FC_ChannelReset 1	/* C320 firmware not supported */
67*4882a593Smuzhiyun #define FC_EnableCH	2
68*4882a593Smuzhiyun #define FC_DisableCH	3
69*4882a593Smuzhiyun #define FC_SetParam	4
70*4882a593Smuzhiyun #define FC_SetMode	5
71*4882a593Smuzhiyun #define FC_SetRate	6
72*4882a593Smuzhiyun #define FC_LineControl	7
73*4882a593Smuzhiyun #define FC_LineStatus	8
74*4882a593Smuzhiyun #define FC_XmitControl	9
75*4882a593Smuzhiyun #define FC_FlushQueue	10
76*4882a593Smuzhiyun #define FC_SendBreak	11
77*4882a593Smuzhiyun #define FC_StopBreak	12
78*4882a593Smuzhiyun #define FC_LoopbackON	13
79*4882a593Smuzhiyun #define FC_LoopbackOFF	14
80*4882a593Smuzhiyun #define FC_ClrIrqTable	15
81*4882a593Smuzhiyun #define FC_SendXon	16
82*4882a593Smuzhiyun #define FC_SetTermIrq	17	/* C320 firmware not supported */
83*4882a593Smuzhiyun #define FC_SetCntIrq	18	/* C320 firmware not supported */
84*4882a593Smuzhiyun #define FC_SetBreakIrq	19
85*4882a593Smuzhiyun #define FC_SetLineIrq	20
86*4882a593Smuzhiyun #define FC_SetFlowCtl	21
87*4882a593Smuzhiyun #define FC_GenIrq	22
88*4882a593Smuzhiyun #define FC_InCD180	23
89*4882a593Smuzhiyun #define FC_OutCD180	24
90*4882a593Smuzhiyun #define FC_InUARTreg	23
91*4882a593Smuzhiyun #define FC_OutUARTreg	24
92*4882a593Smuzhiyun #define FC_SetXonXoff	25
93*4882a593Smuzhiyun #define FC_OutCD180CCR	26
94*4882a593Smuzhiyun #define FC_ExtIQueue	27
95*4882a593Smuzhiyun #define FC_ExtOQueue	28
96*4882a593Smuzhiyun #define FC_ClrLineIrq	29
97*4882a593Smuzhiyun #define FC_HWFlowCtl	30
98*4882a593Smuzhiyun #define FC_GetClockRate 35
99*4882a593Smuzhiyun #define FC_SetBaud	36
100*4882a593Smuzhiyun #define FC_SetDataMode  41
101*4882a593Smuzhiyun #define FC_GetCCSR      43
102*4882a593Smuzhiyun #define FC_GetDataError 45
103*4882a593Smuzhiyun #define FC_RxControl	50
104*4882a593Smuzhiyun #define FC_ImmSend	51
105*4882a593Smuzhiyun #define FC_SetXonState	52
106*4882a593Smuzhiyun #define FC_SetXoffState	53
107*4882a593Smuzhiyun #define FC_SetRxFIFOTrig 54
108*4882a593Smuzhiyun #define FC_SetTxFIFOCnt 55
109*4882a593Smuzhiyun #define FC_UnixRate	56
110*4882a593Smuzhiyun #define FC_UnixResetTimer 57
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define	RxFIFOTrig1	0
113*4882a593Smuzhiyun #define	RxFIFOTrig4	1
114*4882a593Smuzhiyun #define	RxFIFOTrig8	2
115*4882a593Smuzhiyun #define	RxFIFOTrig14	3
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun /*
118*4882a593Smuzhiyun  *    Dual-Ported RAM
119*4882a593Smuzhiyun  */
120*4882a593Smuzhiyun #define DRAM_global	0
121*4882a593Smuzhiyun #define INT_data	(DRAM_global + 0)
122*4882a593Smuzhiyun #define Config_base	(DRAM_global + 0x108)
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun #define IRQindex	(INT_data + 0)
125*4882a593Smuzhiyun #define IRQpending	(INT_data + 4)
126*4882a593Smuzhiyun #define IRQtable	(INT_data + 8)
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /*
129*4882a593Smuzhiyun  *    Interrupt Status
130*4882a593Smuzhiyun  */
131*4882a593Smuzhiyun #define IntrRx		0x01	/* receiver data O.K.             */
132*4882a593Smuzhiyun #define IntrTx		0x02	/* transmit buffer empty  */
133*4882a593Smuzhiyun #define IntrFunc	0x04	/* function complete              */
134*4882a593Smuzhiyun #define IntrBreak	0x08	/* received break         */
135*4882a593Smuzhiyun #define IntrLine	0x10	/* line status change
136*4882a593Smuzhiyun 				   for transmitter                */
137*4882a593Smuzhiyun #define IntrIntr	0x20	/* received INTR code             */
138*4882a593Smuzhiyun #define IntrQuit	0x40	/* received QUIT code             */
139*4882a593Smuzhiyun #define IntrEOF 	0x80	/* received EOF code              */
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun #define IntrRxTrigger 	0x100	/* rx data count reach trigger value */
142*4882a593Smuzhiyun #define IntrTxTrigger 	0x200	/* tx data count below trigger value */
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #define Magic_no	(Config_base + 0)
145*4882a593Smuzhiyun #define Card_model_no	(Config_base + 2)
146*4882a593Smuzhiyun #define Total_ports	(Config_base + 4)
147*4882a593Smuzhiyun #define Module_cnt	(Config_base + 8)
148*4882a593Smuzhiyun #define Module_no	(Config_base + 10)
149*4882a593Smuzhiyun #define Timer_10ms	(Config_base + 14)
150*4882a593Smuzhiyun #define Disable_IRQ	(Config_base + 20)
151*4882a593Smuzhiyun #define TMS320_PORT1	(Config_base + 22)
152*4882a593Smuzhiyun #define TMS320_PORT2	(Config_base + 24)
153*4882a593Smuzhiyun #define TMS320_CLOCK	(Config_base + 26)
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun /*
156*4882a593Smuzhiyun  *    DATA BUFFER in DRAM
157*4882a593Smuzhiyun  */
158*4882a593Smuzhiyun #define Extern_table	0x400	/* Base address of the external table
159*4882a593Smuzhiyun 				   (24 words *    64) total 3K bytes
160*4882a593Smuzhiyun 				   (24 words * 128) total 6K bytes */
161*4882a593Smuzhiyun #define Extern_size	0x60	/* 96 bytes                       */
162*4882a593Smuzhiyun #define RXrptr		0x00	/* read pointer for RX buffer     */
163*4882a593Smuzhiyun #define RXwptr		0x02	/* write pointer for RX buffer    */
164*4882a593Smuzhiyun #define TXrptr		0x04	/* read pointer for TX buffer     */
165*4882a593Smuzhiyun #define TXwptr		0x06	/* write pointer for TX buffer    */
166*4882a593Smuzhiyun #define HostStat	0x08	/* IRQ flag and general flag      */
167*4882a593Smuzhiyun #define FlagStat	0x0A
168*4882a593Smuzhiyun #define FlowControl	0x0C	/* B7 B6 B5 B4 B3 B2 B1 B0              */
169*4882a593Smuzhiyun 				/*  x  x  x  x  |  |  |  |            */
170*4882a593Smuzhiyun 				/*              |  |  |  + CTS flow   */
171*4882a593Smuzhiyun 				/*              |  |  +--- RTS flow   */
172*4882a593Smuzhiyun 				/*              |  +------ TX Xon/Xoff */
173*4882a593Smuzhiyun 				/*              +--------- RX Xon/Xoff */
174*4882a593Smuzhiyun #define Break_cnt	0x0E	/* received break count   */
175*4882a593Smuzhiyun #define CD180TXirq	0x10	/* if non-0: enable TX irq        */
176*4882a593Smuzhiyun #define RX_mask 	0x12
177*4882a593Smuzhiyun #define TX_mask 	0x14
178*4882a593Smuzhiyun #define Ofs_rxb 	0x16
179*4882a593Smuzhiyun #define Ofs_txb 	0x18
180*4882a593Smuzhiyun #define Page_rxb	0x1A
181*4882a593Smuzhiyun #define Page_txb	0x1C
182*4882a593Smuzhiyun #define EndPage_rxb	0x1E
183*4882a593Smuzhiyun #define EndPage_txb	0x20
184*4882a593Smuzhiyun #define Data_error	0x22
185*4882a593Smuzhiyun #define RxTrigger	0x28
186*4882a593Smuzhiyun #define TxTrigger	0x2a
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun #define rRXwptr 	0x34
189*4882a593Smuzhiyun #define Low_water	0x36
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun #define FuncCode	0x40
192*4882a593Smuzhiyun #define FuncArg 	0x42
193*4882a593Smuzhiyun #define FuncArg1	0x44
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun #define C218rx_size	0x2000	/* 8K bytes */
196*4882a593Smuzhiyun #define C218tx_size	0x8000	/* 32K bytes */
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun #define C218rx_mask	(C218rx_size - 1)
199*4882a593Smuzhiyun #define C218tx_mask	(C218tx_size - 1)
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun #define C320p8rx_size	0x2000
202*4882a593Smuzhiyun #define C320p8tx_size	0x8000
203*4882a593Smuzhiyun #define C320p8rx_mask	(C320p8rx_size - 1)
204*4882a593Smuzhiyun #define C320p8tx_mask	(C320p8tx_size - 1)
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun #define C320p16rx_size	0x2000
207*4882a593Smuzhiyun #define C320p16tx_size	0x4000
208*4882a593Smuzhiyun #define C320p16rx_mask	(C320p16rx_size - 1)
209*4882a593Smuzhiyun #define C320p16tx_mask	(C320p16tx_size - 1)
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun #define C320p24rx_size	0x2000
212*4882a593Smuzhiyun #define C320p24tx_size	0x2000
213*4882a593Smuzhiyun #define C320p24rx_mask	(C320p24rx_size - 1)
214*4882a593Smuzhiyun #define C320p24tx_mask	(C320p24tx_size - 1)
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun #define C320p32rx_size	0x1000
217*4882a593Smuzhiyun #define C320p32tx_size	0x1000
218*4882a593Smuzhiyun #define C320p32rx_mask	(C320p32rx_size - 1)
219*4882a593Smuzhiyun #define C320p32tx_mask	(C320p32tx_size - 1)
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun #define Page_size	0x2000U
222*4882a593Smuzhiyun #define Page_mask	(Page_size - 1)
223*4882a593Smuzhiyun #define C218rx_spage	3
224*4882a593Smuzhiyun #define C218tx_spage	4
225*4882a593Smuzhiyun #define C218rx_pageno	1
226*4882a593Smuzhiyun #define C218tx_pageno	4
227*4882a593Smuzhiyun #define C218buf_pageno	5
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun #define C320p8rx_spage	3
230*4882a593Smuzhiyun #define C320p8tx_spage	4
231*4882a593Smuzhiyun #define C320p8rx_pgno	1
232*4882a593Smuzhiyun #define C320p8tx_pgno	4
233*4882a593Smuzhiyun #define C320p8buf_pgno	5
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun #define C320p16rx_spage 3
236*4882a593Smuzhiyun #define C320p16tx_spage 4
237*4882a593Smuzhiyun #define C320p16rx_pgno	1
238*4882a593Smuzhiyun #define C320p16tx_pgno	2
239*4882a593Smuzhiyun #define C320p16buf_pgno 3
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun #define C320p24rx_spage 3
242*4882a593Smuzhiyun #define C320p24tx_spage 4
243*4882a593Smuzhiyun #define C320p24rx_pgno	1
244*4882a593Smuzhiyun #define C320p24tx_pgno	1
245*4882a593Smuzhiyun #define C320p24buf_pgno 2
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun #define C320p32rx_spage 3
248*4882a593Smuzhiyun #define C320p32tx_ofs	C320p32rx_size
249*4882a593Smuzhiyun #define C320p32tx_spage 3
250*4882a593Smuzhiyun #define C320p32buf_pgno 1
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun /*
253*4882a593Smuzhiyun  *    Host Status
254*4882a593Smuzhiyun  */
255*4882a593Smuzhiyun #define WakeupRx	0x01
256*4882a593Smuzhiyun #define WakeupTx	0x02
257*4882a593Smuzhiyun #define WakeupBreak	0x08
258*4882a593Smuzhiyun #define WakeupLine	0x10
259*4882a593Smuzhiyun #define WakeupIntr	0x20
260*4882a593Smuzhiyun #define WakeupQuit	0x40
261*4882a593Smuzhiyun #define WakeupEOF	0x80	/* used in VTIME control */
262*4882a593Smuzhiyun #define WakeupRxTrigger	0x100
263*4882a593Smuzhiyun #define WakeupTxTrigger	0x200
264*4882a593Smuzhiyun /*
265*4882a593Smuzhiyun  *    Flag status
266*4882a593Smuzhiyun  */
267*4882a593Smuzhiyun #define Rx_over		0x01
268*4882a593Smuzhiyun #define Xoff_state	0x02
269*4882a593Smuzhiyun #define Tx_flowOff	0x04
270*4882a593Smuzhiyun #define Tx_enable	0x08
271*4882a593Smuzhiyun #define CTS_state	0x10
272*4882a593Smuzhiyun #define DSR_state	0x20
273*4882a593Smuzhiyun #define DCD_state	0x80
274*4882a593Smuzhiyun /*
275*4882a593Smuzhiyun  *    FlowControl
276*4882a593Smuzhiyun  */
277*4882a593Smuzhiyun #define CTS_FlowCtl	1
278*4882a593Smuzhiyun #define RTS_FlowCtl	2
279*4882a593Smuzhiyun #define Tx_FlowCtl	4
280*4882a593Smuzhiyun #define Rx_FlowCtl	8
281*4882a593Smuzhiyun #define IXM_IXANY	0x10
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun #define LowWater	128
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun #define DTR_ON		1
286*4882a593Smuzhiyun #define RTS_ON		2
287*4882a593Smuzhiyun #define CTS_ON		1
288*4882a593Smuzhiyun #define DSR_ON		2
289*4882a593Smuzhiyun #define DCD_ON		8
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /* mode definition */
292*4882a593Smuzhiyun #define	MX_CS8		0x03
293*4882a593Smuzhiyun #define	MX_CS7		0x02
294*4882a593Smuzhiyun #define	MX_CS6		0x01
295*4882a593Smuzhiyun #define	MX_CS5		0x00
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun #define	MX_STOP1	0x00
298*4882a593Smuzhiyun #define	MX_STOP15	0x04
299*4882a593Smuzhiyun #define	MX_STOP2	0x08
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun #define	MX_PARNONE	0x00
302*4882a593Smuzhiyun #define	MX_PAREVEN	0x40
303*4882a593Smuzhiyun #define	MX_PARODD	0xC0
304*4882a593Smuzhiyun #define	MX_PARMARK	0xA0
305*4882a593Smuzhiyun #define	MX_PARSPACE	0x20
306*4882a593Smuzhiyun 
307*4882a593Smuzhiyun #endif
308