xref: /OK3568_Linux_fs/kernel/include/uapi/linux/synclink.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * SyncLink Multiprotocol Serial Adapter Driver
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * $Id: synclink.h,v 3.14 2006/07/17 20:15:43 paulkf Exp $
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Copyright (C) 1998-2000 by Microgate Corporation
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Redistribution of this file is permitted under
10*4882a593Smuzhiyun  * the terms of the GNU Public License (GPL)
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #ifndef _UAPI_SYNCLINK_H_
14*4882a593Smuzhiyun #define _UAPI_SYNCLINK_H_
15*4882a593Smuzhiyun #define SYNCLINK_H_VERSION 3.6
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include <linux/types.h>
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define BIT0	0x0001
20*4882a593Smuzhiyun #define BIT1	0x0002
21*4882a593Smuzhiyun #define BIT2	0x0004
22*4882a593Smuzhiyun #define BIT3	0x0008
23*4882a593Smuzhiyun #define BIT4	0x0010
24*4882a593Smuzhiyun #define BIT5	0x0020
25*4882a593Smuzhiyun #define BIT6	0x0040
26*4882a593Smuzhiyun #define BIT7	0x0080
27*4882a593Smuzhiyun #define BIT8	0x0100
28*4882a593Smuzhiyun #define BIT9	0x0200
29*4882a593Smuzhiyun #define BIT10	0x0400
30*4882a593Smuzhiyun #define BIT11	0x0800
31*4882a593Smuzhiyun #define BIT12	0x1000
32*4882a593Smuzhiyun #define BIT13	0x2000
33*4882a593Smuzhiyun #define BIT14	0x4000
34*4882a593Smuzhiyun #define BIT15	0x8000
35*4882a593Smuzhiyun #define BIT16	0x00010000
36*4882a593Smuzhiyun #define BIT17	0x00020000
37*4882a593Smuzhiyun #define BIT18	0x00040000
38*4882a593Smuzhiyun #define BIT19	0x00080000
39*4882a593Smuzhiyun #define BIT20	0x00100000
40*4882a593Smuzhiyun #define BIT21	0x00200000
41*4882a593Smuzhiyun #define BIT22	0x00400000
42*4882a593Smuzhiyun #define BIT23	0x00800000
43*4882a593Smuzhiyun #define BIT24	0x01000000
44*4882a593Smuzhiyun #define BIT25	0x02000000
45*4882a593Smuzhiyun #define BIT26	0x04000000
46*4882a593Smuzhiyun #define BIT27	0x08000000
47*4882a593Smuzhiyun #define BIT28	0x10000000
48*4882a593Smuzhiyun #define BIT29	0x20000000
49*4882a593Smuzhiyun #define BIT30	0x40000000
50*4882a593Smuzhiyun #define BIT31	0x80000000
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #define HDLC_MAX_FRAME_SIZE	65535
54*4882a593Smuzhiyun #define MAX_ASYNC_TRANSMIT	4096
55*4882a593Smuzhiyun #define MAX_ASYNC_BUFFER_SIZE	4096
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define ASYNC_PARITY_NONE		0
58*4882a593Smuzhiyun #define ASYNC_PARITY_EVEN		1
59*4882a593Smuzhiyun #define ASYNC_PARITY_ODD		2
60*4882a593Smuzhiyun #define ASYNC_PARITY_SPACE		3
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun #define HDLC_FLAG_UNDERRUN_ABORT7	0x0000
63*4882a593Smuzhiyun #define HDLC_FLAG_UNDERRUN_ABORT15	0x0001
64*4882a593Smuzhiyun #define HDLC_FLAG_UNDERRUN_FLAG		0x0002
65*4882a593Smuzhiyun #define HDLC_FLAG_UNDERRUN_CRC		0x0004
66*4882a593Smuzhiyun #define HDLC_FLAG_SHARE_ZERO		0x0010
67*4882a593Smuzhiyun #define HDLC_FLAG_AUTO_CTS		0x0020
68*4882a593Smuzhiyun #define HDLC_FLAG_AUTO_DCD		0x0040
69*4882a593Smuzhiyun #define HDLC_FLAG_AUTO_RTS		0x0080
70*4882a593Smuzhiyun #define HDLC_FLAG_RXC_DPLL		0x0100
71*4882a593Smuzhiyun #define HDLC_FLAG_RXC_BRG		0x0200
72*4882a593Smuzhiyun #define HDLC_FLAG_RXC_TXCPIN		0x8000
73*4882a593Smuzhiyun #define HDLC_FLAG_RXC_RXCPIN		0x0000
74*4882a593Smuzhiyun #define HDLC_FLAG_TXC_DPLL		0x0400
75*4882a593Smuzhiyun #define HDLC_FLAG_TXC_BRG		0x0800
76*4882a593Smuzhiyun #define HDLC_FLAG_TXC_TXCPIN		0x0000
77*4882a593Smuzhiyun #define HDLC_FLAG_TXC_RXCPIN		0x0008
78*4882a593Smuzhiyun #define HDLC_FLAG_DPLL_DIV8		0x1000
79*4882a593Smuzhiyun #define HDLC_FLAG_DPLL_DIV16		0x2000
80*4882a593Smuzhiyun #define HDLC_FLAG_DPLL_DIV32		0x0000
81*4882a593Smuzhiyun #define HDLC_FLAG_HDLC_LOOPMODE		0x4000
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #define HDLC_CRC_NONE			0
84*4882a593Smuzhiyun #define HDLC_CRC_16_CCITT		1
85*4882a593Smuzhiyun #define HDLC_CRC_32_CCITT		2
86*4882a593Smuzhiyun #define HDLC_CRC_MASK			0x00ff
87*4882a593Smuzhiyun #define HDLC_CRC_RETURN_EX		0x8000
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #define RX_OK				0
90*4882a593Smuzhiyun #define RX_CRC_ERROR			1
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #define HDLC_TXIDLE_FLAGS		0
93*4882a593Smuzhiyun #define HDLC_TXIDLE_ALT_ZEROS_ONES	1
94*4882a593Smuzhiyun #define HDLC_TXIDLE_ZEROS		2
95*4882a593Smuzhiyun #define HDLC_TXIDLE_ONES		3
96*4882a593Smuzhiyun #define HDLC_TXIDLE_ALT_MARK_SPACE	4
97*4882a593Smuzhiyun #define HDLC_TXIDLE_SPACE		5
98*4882a593Smuzhiyun #define HDLC_TXIDLE_MARK		6
99*4882a593Smuzhiyun #define HDLC_TXIDLE_CUSTOM_8            0x10000000
100*4882a593Smuzhiyun #define HDLC_TXIDLE_CUSTOM_16           0x20000000
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun #define HDLC_ENCODING_NRZ			0
103*4882a593Smuzhiyun #define HDLC_ENCODING_NRZB			1
104*4882a593Smuzhiyun #define HDLC_ENCODING_NRZI_MARK			2
105*4882a593Smuzhiyun #define HDLC_ENCODING_NRZI_SPACE		3
106*4882a593Smuzhiyun #define HDLC_ENCODING_NRZI			HDLC_ENCODING_NRZI_SPACE
107*4882a593Smuzhiyun #define HDLC_ENCODING_BIPHASE_MARK		4
108*4882a593Smuzhiyun #define HDLC_ENCODING_BIPHASE_SPACE		5
109*4882a593Smuzhiyun #define HDLC_ENCODING_BIPHASE_LEVEL		6
110*4882a593Smuzhiyun #define HDLC_ENCODING_DIFF_BIPHASE_LEVEL	7
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #define HDLC_PREAMBLE_LENGTH_8BITS	0
113*4882a593Smuzhiyun #define HDLC_PREAMBLE_LENGTH_16BITS	1
114*4882a593Smuzhiyun #define HDLC_PREAMBLE_LENGTH_32BITS	2
115*4882a593Smuzhiyun #define HDLC_PREAMBLE_LENGTH_64BITS	3
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun #define HDLC_PREAMBLE_PATTERN_NONE	0
118*4882a593Smuzhiyun #define HDLC_PREAMBLE_PATTERN_ZEROS	1
119*4882a593Smuzhiyun #define HDLC_PREAMBLE_PATTERN_FLAGS	2
120*4882a593Smuzhiyun #define HDLC_PREAMBLE_PATTERN_10	3
121*4882a593Smuzhiyun #define HDLC_PREAMBLE_PATTERN_01	4
122*4882a593Smuzhiyun #define HDLC_PREAMBLE_PATTERN_ONES	5
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun #define MGSL_MODE_ASYNC		1
125*4882a593Smuzhiyun #define MGSL_MODE_HDLC		2
126*4882a593Smuzhiyun #define MGSL_MODE_MONOSYNC	3
127*4882a593Smuzhiyun #define MGSL_MODE_BISYNC	4
128*4882a593Smuzhiyun #define MGSL_MODE_RAW		6
129*4882a593Smuzhiyun #define MGSL_MODE_BASE_CLOCK    7
130*4882a593Smuzhiyun #define MGSL_MODE_XSYNC         8
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun #define MGSL_BUS_TYPE_ISA	1
133*4882a593Smuzhiyun #define MGSL_BUS_TYPE_EISA	2
134*4882a593Smuzhiyun #define MGSL_BUS_TYPE_PCI	5
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun #define MGSL_INTERFACE_MASK     0xf
137*4882a593Smuzhiyun #define MGSL_INTERFACE_DISABLE  0
138*4882a593Smuzhiyun #define MGSL_INTERFACE_RS232    1
139*4882a593Smuzhiyun #define MGSL_INTERFACE_V35      2
140*4882a593Smuzhiyun #define MGSL_INTERFACE_RS422    3
141*4882a593Smuzhiyun #define MGSL_INTERFACE_RTS_EN   0x10
142*4882a593Smuzhiyun #define MGSL_INTERFACE_LL       0x20
143*4882a593Smuzhiyun #define MGSL_INTERFACE_RL       0x40
144*4882a593Smuzhiyun #define MGSL_INTERFACE_MSB_FIRST 0x80
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun typedef struct _MGSL_PARAMS
147*4882a593Smuzhiyun {
148*4882a593Smuzhiyun 	/* Common */
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun 	unsigned long	mode;		/* Asynchronous or HDLC */
151*4882a593Smuzhiyun 	unsigned char	loopback;	/* internal loopback mode */
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun 	/* HDLC Only */
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun 	unsigned short	flags;
156*4882a593Smuzhiyun 	unsigned char	encoding;	/* NRZ, NRZI, etc. */
157*4882a593Smuzhiyun 	unsigned long	clock_speed;	/* external clock speed in bits per second */
158*4882a593Smuzhiyun 	unsigned char	addr_filter;	/* receive HDLC address filter, 0xFF = disable */
159*4882a593Smuzhiyun 	unsigned short	crc_type;	/* None, CRC16-CCITT, or CRC32-CCITT */
160*4882a593Smuzhiyun 	unsigned char	preamble_length;
161*4882a593Smuzhiyun 	unsigned char	preamble;
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun 	/* Async Only */
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun 	unsigned long	data_rate;	/* bits per second */
166*4882a593Smuzhiyun 	unsigned char	data_bits;	/* 7 or 8 data bits */
167*4882a593Smuzhiyun 	unsigned char	stop_bits;	/* 1 or 2 stop bits */
168*4882a593Smuzhiyun 	unsigned char	parity;		/* none, even, or odd */
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun } MGSL_PARAMS, *PMGSL_PARAMS;
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun #define MICROGATE_VENDOR_ID 0x13c0
173*4882a593Smuzhiyun #define SYNCLINK_DEVICE_ID 0x0010
174*4882a593Smuzhiyun #define MGSCC_DEVICE_ID 0x0020
175*4882a593Smuzhiyun #define SYNCLINK_SCA_DEVICE_ID 0x0030
176*4882a593Smuzhiyun #define SYNCLINK_GT_DEVICE_ID 0x0070
177*4882a593Smuzhiyun #define SYNCLINK_GT4_DEVICE_ID 0x0080
178*4882a593Smuzhiyun #define SYNCLINK_AC_DEVICE_ID  0x0090
179*4882a593Smuzhiyun #define SYNCLINK_GT2_DEVICE_ID 0x00A0
180*4882a593Smuzhiyun #define MGSL_MAX_SERIAL_NUMBER 30
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun /*
183*4882a593Smuzhiyun ** device diagnostics status
184*4882a593Smuzhiyun */
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun #define DiagStatus_OK				0
187*4882a593Smuzhiyun #define DiagStatus_AddressFailure		1
188*4882a593Smuzhiyun #define DiagStatus_AddressConflict		2
189*4882a593Smuzhiyun #define DiagStatus_IrqFailure			3
190*4882a593Smuzhiyun #define DiagStatus_IrqConflict			4
191*4882a593Smuzhiyun #define DiagStatus_DmaFailure			5
192*4882a593Smuzhiyun #define DiagStatus_DmaConflict			6
193*4882a593Smuzhiyun #define DiagStatus_PciAdapterNotFound		7
194*4882a593Smuzhiyun #define DiagStatus_CantAssignPciResources	8
195*4882a593Smuzhiyun #define DiagStatus_CantAssignPciMemAddr		9
196*4882a593Smuzhiyun #define DiagStatus_CantAssignPciIoAddr		10
197*4882a593Smuzhiyun #define DiagStatus_CantAssignPciIrq		11
198*4882a593Smuzhiyun #define DiagStatus_MemoryError			12
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun #define SerialSignal_DCD            0x01     /* Data Carrier Detect */
201*4882a593Smuzhiyun #define SerialSignal_TXD            0x02     /* Transmit Data */
202*4882a593Smuzhiyun #define SerialSignal_RI             0x04     /* Ring Indicator */
203*4882a593Smuzhiyun #define SerialSignal_RXD            0x08     /* Receive Data */
204*4882a593Smuzhiyun #define SerialSignal_CTS            0x10     /* Clear to Send */
205*4882a593Smuzhiyun #define SerialSignal_RTS            0x20     /* Request to Send */
206*4882a593Smuzhiyun #define SerialSignal_DSR            0x40     /* Data Set Ready */
207*4882a593Smuzhiyun #define SerialSignal_DTR            0x80     /* Data Terminal Ready */
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun /*
211*4882a593Smuzhiyun  * Counters of the input lines (CTS, DSR, RI, CD) interrupts
212*4882a593Smuzhiyun  */
213*4882a593Smuzhiyun struct mgsl_icount {
214*4882a593Smuzhiyun 	__u32	cts, dsr, rng, dcd, tx, rx;
215*4882a593Smuzhiyun 	__u32	frame, parity, overrun, brk;
216*4882a593Smuzhiyun 	__u32	buf_overrun;
217*4882a593Smuzhiyun 	__u32	txok;
218*4882a593Smuzhiyun 	__u32	txunder;
219*4882a593Smuzhiyun 	__u32	txabort;
220*4882a593Smuzhiyun 	__u32	txtimeout;
221*4882a593Smuzhiyun 	__u32	rxshort;
222*4882a593Smuzhiyun 	__u32	rxlong;
223*4882a593Smuzhiyun 	__u32	rxabort;
224*4882a593Smuzhiyun 	__u32	rxover;
225*4882a593Smuzhiyun 	__u32	rxcrc;
226*4882a593Smuzhiyun 	__u32	rxok;
227*4882a593Smuzhiyun 	__u32	exithunt;
228*4882a593Smuzhiyun 	__u32	rxidle;
229*4882a593Smuzhiyun };
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun struct gpio_desc {
232*4882a593Smuzhiyun 	__u32 state;
233*4882a593Smuzhiyun 	__u32 smask;
234*4882a593Smuzhiyun 	__u32 dir;
235*4882a593Smuzhiyun 	__u32 dmask;
236*4882a593Smuzhiyun };
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun #define DEBUG_LEVEL_DATA	1
239*4882a593Smuzhiyun #define DEBUG_LEVEL_ERROR 	2
240*4882a593Smuzhiyun #define DEBUG_LEVEL_INFO  	3
241*4882a593Smuzhiyun #define DEBUG_LEVEL_BH    	4
242*4882a593Smuzhiyun #define DEBUG_LEVEL_ISR		5
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun /*
245*4882a593Smuzhiyun ** Event bit flags for use with MgslWaitEvent
246*4882a593Smuzhiyun */
247*4882a593Smuzhiyun 
248*4882a593Smuzhiyun #define MgslEvent_DsrActive	0x0001
249*4882a593Smuzhiyun #define MgslEvent_DsrInactive	0x0002
250*4882a593Smuzhiyun #define MgslEvent_Dsr		0x0003
251*4882a593Smuzhiyun #define MgslEvent_CtsActive	0x0004
252*4882a593Smuzhiyun #define MgslEvent_CtsInactive	0x0008
253*4882a593Smuzhiyun #define MgslEvent_Cts		0x000c
254*4882a593Smuzhiyun #define MgslEvent_DcdActive	0x0010
255*4882a593Smuzhiyun #define MgslEvent_DcdInactive	0x0020
256*4882a593Smuzhiyun #define MgslEvent_Dcd		0x0030
257*4882a593Smuzhiyun #define MgslEvent_RiActive	0x0040
258*4882a593Smuzhiyun #define MgslEvent_RiInactive	0x0080
259*4882a593Smuzhiyun #define MgslEvent_Ri		0x00c0
260*4882a593Smuzhiyun #define MgslEvent_ExitHuntMode	0x0100
261*4882a593Smuzhiyun #define MgslEvent_IdleReceived	0x0200
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun /* Private IOCTL codes:
264*4882a593Smuzhiyun  *
265*4882a593Smuzhiyun  * MGSL_IOCSPARAMS	set MGSL_PARAMS structure values
266*4882a593Smuzhiyun  * MGSL_IOCGPARAMS	get current MGSL_PARAMS structure values
267*4882a593Smuzhiyun  * MGSL_IOCSTXIDLE	set current transmit idle mode
268*4882a593Smuzhiyun  * MGSL_IOCGTXIDLE	get current transmit idle mode
269*4882a593Smuzhiyun  * MGSL_IOCTXENABLE	enable or disable transmitter
270*4882a593Smuzhiyun  * MGSL_IOCRXENABLE	enable or disable receiver
271*4882a593Smuzhiyun  * MGSL_IOCTXABORT	abort transmitting frame (HDLC)
272*4882a593Smuzhiyun  * MGSL_IOCGSTATS	return current statistics
273*4882a593Smuzhiyun  * MGSL_IOCWAITEVENT	wait for specified event to occur
274*4882a593Smuzhiyun  * MGSL_LOOPTXDONE	transmit in HDLC LoopMode done
275*4882a593Smuzhiyun  * MGSL_IOCSIF          set the serial interface type
276*4882a593Smuzhiyun  * MGSL_IOCGIF          get the serial interface type
277*4882a593Smuzhiyun  */
278*4882a593Smuzhiyun #define MGSL_MAGIC_IOC	'm'
279*4882a593Smuzhiyun #define MGSL_IOCSPARAMS		_IOW(MGSL_MAGIC_IOC,0,struct _MGSL_PARAMS)
280*4882a593Smuzhiyun #define MGSL_IOCGPARAMS		_IOR(MGSL_MAGIC_IOC,1,struct _MGSL_PARAMS)
281*4882a593Smuzhiyun #define MGSL_IOCSTXIDLE		_IO(MGSL_MAGIC_IOC,2)
282*4882a593Smuzhiyun #define MGSL_IOCGTXIDLE		_IO(MGSL_MAGIC_IOC,3)
283*4882a593Smuzhiyun #define MGSL_IOCTXENABLE	_IO(MGSL_MAGIC_IOC,4)
284*4882a593Smuzhiyun #define MGSL_IOCRXENABLE	_IO(MGSL_MAGIC_IOC,5)
285*4882a593Smuzhiyun #define MGSL_IOCTXABORT		_IO(MGSL_MAGIC_IOC,6)
286*4882a593Smuzhiyun #define MGSL_IOCGSTATS		_IO(MGSL_MAGIC_IOC,7)
287*4882a593Smuzhiyun #define MGSL_IOCWAITEVENT	_IOWR(MGSL_MAGIC_IOC,8,int)
288*4882a593Smuzhiyun #define MGSL_IOCCLRMODCOUNT	_IO(MGSL_MAGIC_IOC,15)
289*4882a593Smuzhiyun #define MGSL_IOCLOOPTXDONE	_IO(MGSL_MAGIC_IOC,9)
290*4882a593Smuzhiyun #define MGSL_IOCSIF		_IO(MGSL_MAGIC_IOC,10)
291*4882a593Smuzhiyun #define MGSL_IOCGIF		_IO(MGSL_MAGIC_IOC,11)
292*4882a593Smuzhiyun #define MGSL_IOCSGPIO		_IOW(MGSL_MAGIC_IOC,16,struct gpio_desc)
293*4882a593Smuzhiyun #define MGSL_IOCGGPIO		_IOR(MGSL_MAGIC_IOC,17,struct gpio_desc)
294*4882a593Smuzhiyun #define MGSL_IOCWAITGPIO	_IOWR(MGSL_MAGIC_IOC,18,struct gpio_desc)
295*4882a593Smuzhiyun #define MGSL_IOCSXSYNC		_IO(MGSL_MAGIC_IOC, 19)
296*4882a593Smuzhiyun #define MGSL_IOCGXSYNC		_IO(MGSL_MAGIC_IOC, 20)
297*4882a593Smuzhiyun #define MGSL_IOCSXCTRL		_IO(MGSL_MAGIC_IOC, 21)
298*4882a593Smuzhiyun #define MGSL_IOCGXCTRL		_IO(MGSL_MAGIC_IOC, 22)
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun #endif /* _UAPI_SYNCLINK_H_ */
302