xref: /OK3568_Linux_fs/kernel/include/pcmcia/cistpl.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * cistpl.h
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * The initial developer of the original code is David A. Hinds
6*4882a593Smuzhiyun  * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
7*4882a593Smuzhiyun  * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * (C) 1999             David A. Hinds
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #ifndef _LINUX_CISTPL_H
13*4882a593Smuzhiyun #define _LINUX_CISTPL_H
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun typedef unsigned char cisdata_t;
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define CISTPL_NULL		0x00
18*4882a593Smuzhiyun #define CISTPL_DEVICE		0x01
19*4882a593Smuzhiyun #define CISTPL_LONGLINK_CB	0x02
20*4882a593Smuzhiyun #define CISTPL_INDIRECT		0x03
21*4882a593Smuzhiyun #define CISTPL_CONFIG_CB	0x04
22*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY_CB	0x05
23*4882a593Smuzhiyun #define CISTPL_LONGLINK_MFC	0x06
24*4882a593Smuzhiyun #define CISTPL_BAR		0x07
25*4882a593Smuzhiyun #define CISTPL_PWR_MGMNT	0x08
26*4882a593Smuzhiyun #define CISTPL_EXTDEVICE	0x09
27*4882a593Smuzhiyun #define CISTPL_CHECKSUM		0x10
28*4882a593Smuzhiyun #define CISTPL_LONGLINK_A	0x11
29*4882a593Smuzhiyun #define CISTPL_LONGLINK_C	0x12
30*4882a593Smuzhiyun #define CISTPL_LINKTARGET	0x13
31*4882a593Smuzhiyun #define CISTPL_NO_LINK		0x14
32*4882a593Smuzhiyun #define CISTPL_VERS_1		0x15
33*4882a593Smuzhiyun #define CISTPL_ALTSTR		0x16
34*4882a593Smuzhiyun #define CISTPL_DEVICE_A		0x17
35*4882a593Smuzhiyun #define CISTPL_JEDEC_C		0x18
36*4882a593Smuzhiyun #define CISTPL_JEDEC_A		0x19
37*4882a593Smuzhiyun #define CISTPL_CONFIG		0x1a
38*4882a593Smuzhiyun #define CISTPL_CFTABLE_ENTRY	0x1b
39*4882a593Smuzhiyun #define CISTPL_DEVICE_OC	0x1c
40*4882a593Smuzhiyun #define CISTPL_DEVICE_OA	0x1d
41*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO	0x1e
42*4882a593Smuzhiyun #define CISTPL_DEVICE_GEO_A	0x1f
43*4882a593Smuzhiyun #define CISTPL_MANFID		0x20
44*4882a593Smuzhiyun #define CISTPL_FUNCID		0x21
45*4882a593Smuzhiyun #define CISTPL_FUNCE		0x22
46*4882a593Smuzhiyun #define CISTPL_SWIL		0x23
47*4882a593Smuzhiyun #define CISTPL_END		0xff
48*4882a593Smuzhiyun /* Layer 2 tuples */
49*4882a593Smuzhiyun #define CISTPL_VERS_2		0x40
50*4882a593Smuzhiyun #define CISTPL_FORMAT		0x41
51*4882a593Smuzhiyun #define CISTPL_GEOMETRY		0x42
52*4882a593Smuzhiyun #define CISTPL_BYTEORDER	0x43
53*4882a593Smuzhiyun #define CISTPL_DATE		0x44
54*4882a593Smuzhiyun #define CISTPL_BATTERY		0x45
55*4882a593Smuzhiyun #define CISTPL_FORMAT_A		0x47
56*4882a593Smuzhiyun /* Layer 3 tuples */
57*4882a593Smuzhiyun #define CISTPL_ORG		0x46
58*4882a593Smuzhiyun #define CISTPL_SPCL		0x90
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun typedef struct cistpl_longlink_t {
61*4882a593Smuzhiyun     u_int	addr;
62*4882a593Smuzhiyun } cistpl_longlink_t;
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun typedef struct cistpl_checksum_t {
65*4882a593Smuzhiyun     u_short	addr;
66*4882a593Smuzhiyun     u_short	len;
67*4882a593Smuzhiyun     u_char	sum;
68*4882a593Smuzhiyun } cistpl_checksum_t;
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #define CISTPL_MAX_FUNCTIONS	8
71*4882a593Smuzhiyun #define CISTPL_MFC_ATTR		0x00
72*4882a593Smuzhiyun #define CISTPL_MFC_COMMON	0x01
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun typedef struct cistpl_longlink_mfc_t {
75*4882a593Smuzhiyun     u_char	nfn;
76*4882a593Smuzhiyun     struct {
77*4882a593Smuzhiyun 	u_char	space;
78*4882a593Smuzhiyun 	u_int	addr;
79*4882a593Smuzhiyun     } fn[CISTPL_MAX_FUNCTIONS];
80*4882a593Smuzhiyun } cistpl_longlink_mfc_t;
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun #define CISTPL_MAX_ALTSTR_STRINGS	4
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun typedef struct cistpl_altstr_t {
85*4882a593Smuzhiyun     u_char	ns;
86*4882a593Smuzhiyun     u_char	ofs[CISTPL_MAX_ALTSTR_STRINGS];
87*4882a593Smuzhiyun     char	str[254];
88*4882a593Smuzhiyun } cistpl_altstr_t;
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #define CISTPL_DTYPE_NULL	0x00
91*4882a593Smuzhiyun #define CISTPL_DTYPE_ROM	0x01
92*4882a593Smuzhiyun #define CISTPL_DTYPE_OTPROM	0x02
93*4882a593Smuzhiyun #define CISTPL_DTYPE_EPROM	0x03
94*4882a593Smuzhiyun #define CISTPL_DTYPE_EEPROM	0x04
95*4882a593Smuzhiyun #define CISTPL_DTYPE_FLASH	0x05
96*4882a593Smuzhiyun #define CISTPL_DTYPE_SRAM	0x06
97*4882a593Smuzhiyun #define CISTPL_DTYPE_DRAM	0x07
98*4882a593Smuzhiyun #define CISTPL_DTYPE_FUNCSPEC	0x0d
99*4882a593Smuzhiyun #define CISTPL_DTYPE_EXTEND	0x0e
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun #define CISTPL_MAX_DEVICES	4
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun typedef struct cistpl_device_t {
104*4882a593Smuzhiyun     u_char	ndev;
105*4882a593Smuzhiyun     struct {
106*4882a593Smuzhiyun 	u_char 	type;
107*4882a593Smuzhiyun 	u_char	wp;
108*4882a593Smuzhiyun 	u_int	speed;
109*4882a593Smuzhiyun 	u_int	size;
110*4882a593Smuzhiyun     } dev[CISTPL_MAX_DEVICES];
111*4882a593Smuzhiyun } cistpl_device_t;
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun #define CISTPL_DEVICE_MWAIT	0x01
114*4882a593Smuzhiyun #define CISTPL_DEVICE_3VCC	0x02
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun typedef struct cistpl_device_o_t {
117*4882a593Smuzhiyun     u_char		flags;
118*4882a593Smuzhiyun     cistpl_device_t	device;
119*4882a593Smuzhiyun } cistpl_device_o_t;
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun #define CISTPL_VERS_1_MAX_PROD_STRINGS	4
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun typedef struct cistpl_vers_1_t {
124*4882a593Smuzhiyun     u_char	major;
125*4882a593Smuzhiyun     u_char	minor;
126*4882a593Smuzhiyun     u_char	ns;
127*4882a593Smuzhiyun     u_char	ofs[CISTPL_VERS_1_MAX_PROD_STRINGS];
128*4882a593Smuzhiyun     char	str[254];
129*4882a593Smuzhiyun } cistpl_vers_1_t;
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun typedef struct cistpl_jedec_t {
132*4882a593Smuzhiyun     u_char	nid;
133*4882a593Smuzhiyun     struct {
134*4882a593Smuzhiyun 	u_char	mfr;
135*4882a593Smuzhiyun 	u_char	info;
136*4882a593Smuzhiyun     } id[CISTPL_MAX_DEVICES];
137*4882a593Smuzhiyun } cistpl_jedec_t;
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun typedef struct cistpl_manfid_t {
140*4882a593Smuzhiyun     u_short	manf;
141*4882a593Smuzhiyun     u_short	card;
142*4882a593Smuzhiyun } cistpl_manfid_t;
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun #define CISTPL_FUNCID_MULTI	0x00
145*4882a593Smuzhiyun #define CISTPL_FUNCID_MEMORY	0x01
146*4882a593Smuzhiyun #define CISTPL_FUNCID_SERIAL	0x02
147*4882a593Smuzhiyun #define CISTPL_FUNCID_PARALLEL	0x03
148*4882a593Smuzhiyun #define CISTPL_FUNCID_FIXED	0x04
149*4882a593Smuzhiyun #define CISTPL_FUNCID_VIDEO	0x05
150*4882a593Smuzhiyun #define CISTPL_FUNCID_NETWORK	0x06
151*4882a593Smuzhiyun #define CISTPL_FUNCID_AIMS	0x07
152*4882a593Smuzhiyun #define CISTPL_FUNCID_SCSI	0x08
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun #define CISTPL_SYSINIT_POST	0x01
155*4882a593Smuzhiyun #define CISTPL_SYSINIT_ROM	0x02
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun typedef struct cistpl_funcid_t {
158*4882a593Smuzhiyun     u_char	func;
159*4882a593Smuzhiyun     u_char	sysinit;
160*4882a593Smuzhiyun } cistpl_funcid_t;
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun typedef struct cistpl_funce_t {
163*4882a593Smuzhiyun     u_char	type;
164*4882a593Smuzhiyun     u_char	data[];
165*4882a593Smuzhiyun } cistpl_funce_t;
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun /*======================================================================
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun     Modem Function Extension Tuples
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun ======================================================================*/
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF		0x00
174*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP		0x01
175*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_SERV_DATA	0x02
176*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_SERV_FAX	0x03
177*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_SERV_VOICE	0x04
178*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP_DATA	0x05
179*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP_FAX	0x06
180*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_CAP_VOICE	0x07
181*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF_DATA	0x08
182*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF_FAX	0x09
183*4882a593Smuzhiyun #define CISTPL_FUNCE_SERIAL_IF_VOICE	0x0a
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun /* UART identification */
186*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8250		0x00
187*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_16450	0x01
188*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_16550	0x02
189*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8251		0x03
190*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8530		0x04
191*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_85230	0x05
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /* UART capabilities */
194*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_SPACE	0x01
195*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_MARK		0x02
196*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_ODD		0x04
197*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_EVEN		0x08
198*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_5BIT		0x01
199*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_6BIT		0x02
200*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_7BIT		0x04
201*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_8BIT		0x08
202*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_1STOP	0x10
203*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_MSTOP	0x20
204*4882a593Smuzhiyun #define CISTPL_SERIAL_UART_2STOP	0x40
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun typedef struct cistpl_serial_t {
207*4882a593Smuzhiyun     u_char	uart_type;
208*4882a593Smuzhiyun     u_char	uart_cap_0;
209*4882a593Smuzhiyun     u_char	uart_cap_1;
210*4882a593Smuzhiyun } cistpl_serial_t;
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun typedef struct cistpl_modem_cap_t {
213*4882a593Smuzhiyun     u_char	flow;
214*4882a593Smuzhiyun     u_char	cmd_buf;
215*4882a593Smuzhiyun     u_char	rcv_buf_0, rcv_buf_1, rcv_buf_2;
216*4882a593Smuzhiyun     u_char	xmit_buf_0, xmit_buf_1, xmit_buf_2;
217*4882a593Smuzhiyun } cistpl_modem_cap_t;
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_103		0x01
220*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V21		0x02
221*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V23		0x04
222*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V22		0x08
223*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_212A		0x10
224*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V22BIS	0x20
225*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V26		0x40
226*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V26BIS	0x80
227*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V27BIS	0x01
228*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V29		0x02
229*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V32		0x04
230*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V32BIS	0x08
231*4882a593Smuzhiyun #define CISTPL_SERIAL_MOD_V34		0x10
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun #define CISTPL_SERIAL_ERR_MNP2_4	0x01
234*4882a593Smuzhiyun #define CISTPL_SERIAL_ERR_V42_LAPM	0x02
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun #define CISTPL_SERIAL_CMPR_V42BIS	0x01
237*4882a593Smuzhiyun #define CISTPL_SERIAL_CMPR_MNP5		0x02
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_AT1		0x01
240*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_AT2		0x02
241*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_AT3		0x04
242*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_MNP_AT	0x08
243*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_V25BIS	0x10
244*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_V25A		0x20
245*4882a593Smuzhiyun #define CISTPL_SERIAL_CMD_DMCL		0x40
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun typedef struct cistpl_data_serv_t {
248*4882a593Smuzhiyun     u_char	max_data_0;
249*4882a593Smuzhiyun     u_char	max_data_1;
250*4882a593Smuzhiyun     u_char	modulation_0;
251*4882a593Smuzhiyun     u_char	modulation_1;
252*4882a593Smuzhiyun     u_char	error_control;
253*4882a593Smuzhiyun     u_char	compression;
254*4882a593Smuzhiyun     u_char	cmd_protocol;
255*4882a593Smuzhiyun     u_char	escape;
256*4882a593Smuzhiyun     u_char	encrypt;
257*4882a593Smuzhiyun     u_char	misc_features;
258*4882a593Smuzhiyun     u_char	ccitt_code[];
259*4882a593Smuzhiyun } cistpl_data_serv_t;
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun typedef struct cistpl_fax_serv_t {
262*4882a593Smuzhiyun     u_char	max_data_0;
263*4882a593Smuzhiyun     u_char	max_data_1;
264*4882a593Smuzhiyun     u_char	modulation;
265*4882a593Smuzhiyun     u_char	encrypt;
266*4882a593Smuzhiyun     u_char	features_0;
267*4882a593Smuzhiyun     u_char	features_1;
268*4882a593Smuzhiyun     u_char	ccitt_code[];
269*4882a593Smuzhiyun } cistpl_fax_serv_t;
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun typedef struct cistpl_voice_serv_t {
272*4882a593Smuzhiyun     u_char	max_data_0;
273*4882a593Smuzhiyun     u_char	max_data_1;
274*4882a593Smuzhiyun } cistpl_voice_serv_t;
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun /*======================================================================
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun     LAN Function Extension Tuples
279*4882a593Smuzhiyun 
280*4882a593Smuzhiyun ======================================================================*/
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_TECH		0x01
283*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_SPEED		0x02
284*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_MEDIA		0x03
285*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_NODE_ID	0x04
286*4882a593Smuzhiyun #define CISTPL_FUNCE_LAN_CONNECTOR	0x05
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /* LAN technologies */
289*4882a593Smuzhiyun #define CISTPL_LAN_TECH_ARCNET		0x01
290*4882a593Smuzhiyun #define CISTPL_LAN_TECH_ETHERNET	0x02
291*4882a593Smuzhiyun #define CISTPL_LAN_TECH_TOKENRING	0x03
292*4882a593Smuzhiyun #define CISTPL_LAN_TECH_LOCALTALK	0x04
293*4882a593Smuzhiyun #define CISTPL_LAN_TECH_FDDI		0x05
294*4882a593Smuzhiyun #define CISTPL_LAN_TECH_ATM		0x06
295*4882a593Smuzhiyun #define CISTPL_LAN_TECH_WIRELESS	0x07
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun typedef struct cistpl_lan_tech_t {
298*4882a593Smuzhiyun     u_char	tech;
299*4882a593Smuzhiyun } cistpl_lan_tech_t;
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun typedef struct cistpl_lan_speed_t {
302*4882a593Smuzhiyun     u_int	speed;
303*4882a593Smuzhiyun } cistpl_lan_speed_t;
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun /* LAN media definitions */
306*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_UTP		0x01
307*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_STP		0x02
308*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_THIN_COAX	0x03
309*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_THICK_COAX	0x04
310*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_FIBER		0x05
311*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_900MHZ		0x06
312*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_2GHZ		0x07
313*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_5GHZ		0x08
314*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_DIFF_IR	0x09
315*4882a593Smuzhiyun #define CISTPL_LAN_MEDIA_PTP_IR		0x0a
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun typedef struct cistpl_lan_media_t {
318*4882a593Smuzhiyun     u_char	media;
319*4882a593Smuzhiyun } cistpl_lan_media_t;
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun typedef struct cistpl_lan_node_id_t {
322*4882a593Smuzhiyun     u_char	nb;
323*4882a593Smuzhiyun     u_char	id[16];
324*4882a593Smuzhiyun } cistpl_lan_node_id_t;
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun typedef struct cistpl_lan_connector_t {
327*4882a593Smuzhiyun     u_char	code;
328*4882a593Smuzhiyun } cistpl_lan_connector_t;
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun /*======================================================================
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun     IDE Function Extension Tuples
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun ======================================================================*/
335*4882a593Smuzhiyun 
336*4882a593Smuzhiyun #define CISTPL_IDE_INTERFACE		0x01
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun typedef struct cistpl_ide_interface_t {
339*4882a593Smuzhiyun     u_char	interface;
340*4882a593Smuzhiyun } cistpl_ide_interface_t;
341*4882a593Smuzhiyun 
342*4882a593Smuzhiyun /* First feature byte */
343*4882a593Smuzhiyun #define CISTPL_IDE_SILICON		0x04
344*4882a593Smuzhiyun #define CISTPL_IDE_UNIQUE		0x08
345*4882a593Smuzhiyun #define CISTPL_IDE_DUAL			0x10
346*4882a593Smuzhiyun 
347*4882a593Smuzhiyun /* Second feature byte */
348*4882a593Smuzhiyun #define CISTPL_IDE_HAS_SLEEP		0x01
349*4882a593Smuzhiyun #define CISTPL_IDE_HAS_STANDBY		0x02
350*4882a593Smuzhiyun #define CISTPL_IDE_HAS_IDLE		0x04
351*4882a593Smuzhiyun #define CISTPL_IDE_LOW_POWER		0x08
352*4882a593Smuzhiyun #define CISTPL_IDE_REG_INHIBIT		0x10
353*4882a593Smuzhiyun #define CISTPL_IDE_HAS_INDEX		0x20
354*4882a593Smuzhiyun #define CISTPL_IDE_IOIS16		0x40
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun typedef struct cistpl_ide_feature_t {
357*4882a593Smuzhiyun     u_char	feature1;
358*4882a593Smuzhiyun     u_char	feature2;
359*4882a593Smuzhiyun } cistpl_ide_feature_t;
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_IFACE		0x01
362*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_MASTER		0x02
363*4882a593Smuzhiyun #define CISTPL_FUNCE_IDE_SLAVE		0x03
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun /*======================================================================
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun     Configuration Table Entries
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun ======================================================================*/
370*4882a593Smuzhiyun 
371*4882a593Smuzhiyun #define CISTPL_BAR_SPACE	0x07
372*4882a593Smuzhiyun #define CISTPL_BAR_SPACE_IO	0x10
373*4882a593Smuzhiyun #define CISTPL_BAR_PREFETCH	0x20
374*4882a593Smuzhiyun #define CISTPL_BAR_CACHEABLE	0x40
375*4882a593Smuzhiyun #define CISTPL_BAR_1MEG_MAP	0x80
376*4882a593Smuzhiyun 
377*4882a593Smuzhiyun typedef struct cistpl_bar_t {
378*4882a593Smuzhiyun     u_char	attr;
379*4882a593Smuzhiyun     u_int	size;
380*4882a593Smuzhiyun } cistpl_bar_t;
381*4882a593Smuzhiyun 
382*4882a593Smuzhiyun typedef struct cistpl_config_t {
383*4882a593Smuzhiyun     u_char	last_idx;
384*4882a593Smuzhiyun     u_int	base;
385*4882a593Smuzhiyun     u_int	rmask[4];
386*4882a593Smuzhiyun     u_char	subtuples;
387*4882a593Smuzhiyun } cistpl_config_t;
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun /* These are bits in the 'present' field, and indices in 'param' */
390*4882a593Smuzhiyun #define CISTPL_POWER_VNOM	0
391*4882a593Smuzhiyun #define CISTPL_POWER_VMIN	1
392*4882a593Smuzhiyun #define CISTPL_POWER_VMAX	2
393*4882a593Smuzhiyun #define CISTPL_POWER_ISTATIC	3
394*4882a593Smuzhiyun #define CISTPL_POWER_IAVG	4
395*4882a593Smuzhiyun #define CISTPL_POWER_IPEAK	5
396*4882a593Smuzhiyun #define CISTPL_POWER_IDOWN	6
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun #define CISTPL_POWER_HIGHZ_OK	0x01
399*4882a593Smuzhiyun #define CISTPL_POWER_HIGHZ_REQ	0x02
400*4882a593Smuzhiyun 
401*4882a593Smuzhiyun typedef struct cistpl_power_t {
402*4882a593Smuzhiyun     u_char	present;
403*4882a593Smuzhiyun     u_char	flags;
404*4882a593Smuzhiyun     u_int	param[7];
405*4882a593Smuzhiyun } cistpl_power_t;
406*4882a593Smuzhiyun 
407*4882a593Smuzhiyun typedef struct cistpl_timing_t {
408*4882a593Smuzhiyun     u_int	wait, waitscale;
409*4882a593Smuzhiyun     u_int	ready, rdyscale;
410*4882a593Smuzhiyun     u_int	reserved, rsvscale;
411*4882a593Smuzhiyun } cistpl_timing_t;
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun #define CISTPL_IO_LINES_MASK	0x1f
414*4882a593Smuzhiyun #define CISTPL_IO_8BIT		0x20
415*4882a593Smuzhiyun #define CISTPL_IO_16BIT		0x40
416*4882a593Smuzhiyun #define CISTPL_IO_RANGE		0x80
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun #define CISTPL_IO_MAX_WIN	16
419*4882a593Smuzhiyun 
420*4882a593Smuzhiyun typedef struct cistpl_io_t {
421*4882a593Smuzhiyun     u_char	flags;
422*4882a593Smuzhiyun     u_char	nwin;
423*4882a593Smuzhiyun     struct {
424*4882a593Smuzhiyun 	u_int	base;
425*4882a593Smuzhiyun 	u_int	len;
426*4882a593Smuzhiyun     } win[CISTPL_IO_MAX_WIN];
427*4882a593Smuzhiyun } cistpl_io_t;
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun typedef struct cistpl_irq_t {
430*4882a593Smuzhiyun     u_int	IRQInfo1;
431*4882a593Smuzhiyun     u_int	IRQInfo2;
432*4882a593Smuzhiyun } cistpl_irq_t;
433*4882a593Smuzhiyun 
434*4882a593Smuzhiyun #define CISTPL_MEM_MAX_WIN	8
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun typedef struct cistpl_mem_t {
437*4882a593Smuzhiyun     u_char	flags;
438*4882a593Smuzhiyun     u_char	nwin;
439*4882a593Smuzhiyun     struct {
440*4882a593Smuzhiyun 	u_int	len;
441*4882a593Smuzhiyun 	u_int	card_addr;
442*4882a593Smuzhiyun 	u_int	host_addr;
443*4882a593Smuzhiyun     } win[CISTPL_MEM_MAX_WIN];
444*4882a593Smuzhiyun } cistpl_mem_t;
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun #define CISTPL_CFTABLE_DEFAULT		0x0001
447*4882a593Smuzhiyun #define CISTPL_CFTABLE_BVDS		0x0002
448*4882a593Smuzhiyun #define CISTPL_CFTABLE_WP		0x0004
449*4882a593Smuzhiyun #define CISTPL_CFTABLE_RDYBSY		0x0008
450*4882a593Smuzhiyun #define CISTPL_CFTABLE_MWAIT		0x0010
451*4882a593Smuzhiyun #define CISTPL_CFTABLE_AUDIO		0x0800
452*4882a593Smuzhiyun #define CISTPL_CFTABLE_READONLY		0x1000
453*4882a593Smuzhiyun #define CISTPL_CFTABLE_PWRDOWN		0x2000
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun typedef struct cistpl_cftable_entry_t {
456*4882a593Smuzhiyun     u_char		index;
457*4882a593Smuzhiyun     u_short		flags;
458*4882a593Smuzhiyun     u_char		interface;
459*4882a593Smuzhiyun     cistpl_power_t	vcc, vpp1, vpp2;
460*4882a593Smuzhiyun     cistpl_timing_t	timing;
461*4882a593Smuzhiyun     cistpl_io_t		io;
462*4882a593Smuzhiyun     cistpl_irq_t	irq;
463*4882a593Smuzhiyun     cistpl_mem_t	mem;
464*4882a593Smuzhiyun     u_char		subtuples;
465*4882a593Smuzhiyun } cistpl_cftable_entry_t;
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun #define CISTPL_CFTABLE_MASTER		0x000100
468*4882a593Smuzhiyun #define CISTPL_CFTABLE_INVALIDATE	0x000200
469*4882a593Smuzhiyun #define CISTPL_CFTABLE_VGA_PALETTE	0x000400
470*4882a593Smuzhiyun #define CISTPL_CFTABLE_PARITY		0x000800
471*4882a593Smuzhiyun #define CISTPL_CFTABLE_WAIT		0x001000
472*4882a593Smuzhiyun #define CISTPL_CFTABLE_SERR		0x002000
473*4882a593Smuzhiyun #define CISTPL_CFTABLE_FAST_BACK	0x004000
474*4882a593Smuzhiyun #define CISTPL_CFTABLE_BINARY_AUDIO	0x010000
475*4882a593Smuzhiyun #define CISTPL_CFTABLE_PWM_AUDIO	0x020000
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun typedef struct cistpl_cftable_entry_cb_t {
478*4882a593Smuzhiyun     u_char		index;
479*4882a593Smuzhiyun     u_int		flags;
480*4882a593Smuzhiyun     cistpl_power_t	vcc, vpp1, vpp2;
481*4882a593Smuzhiyun     u_char		io;
482*4882a593Smuzhiyun     cistpl_irq_t	irq;
483*4882a593Smuzhiyun     u_char		mem;
484*4882a593Smuzhiyun     u_char		subtuples;
485*4882a593Smuzhiyun } cistpl_cftable_entry_cb_t;
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun typedef struct cistpl_device_geo_t {
488*4882a593Smuzhiyun     u_char		ngeo;
489*4882a593Smuzhiyun     struct {
490*4882a593Smuzhiyun 	u_char		buswidth;
491*4882a593Smuzhiyun 	u_int		erase_block;
492*4882a593Smuzhiyun 	u_int		read_block;
493*4882a593Smuzhiyun 	u_int		write_block;
494*4882a593Smuzhiyun 	u_int		partition;
495*4882a593Smuzhiyun 	u_int		interleave;
496*4882a593Smuzhiyun     } geo[CISTPL_MAX_DEVICES];
497*4882a593Smuzhiyun } cistpl_device_geo_t;
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun typedef struct cistpl_vers_2_t {
500*4882a593Smuzhiyun     u_char	vers;
501*4882a593Smuzhiyun     u_char	comply;
502*4882a593Smuzhiyun     u_short	dindex;
503*4882a593Smuzhiyun     u_char	vspec8, vspec9;
504*4882a593Smuzhiyun     u_char	nhdr;
505*4882a593Smuzhiyun     u_char	vendor, info;
506*4882a593Smuzhiyun     char	str[244];
507*4882a593Smuzhiyun } cistpl_vers_2_t;
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun typedef struct cistpl_org_t {
510*4882a593Smuzhiyun     u_char	data_org;
511*4882a593Smuzhiyun     char	desc[30];
512*4882a593Smuzhiyun } cistpl_org_t;
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun #define CISTPL_ORG_FS		0x00
515*4882a593Smuzhiyun #define CISTPL_ORG_APPSPEC	0x01
516*4882a593Smuzhiyun #define CISTPL_ORG_XIP		0x02
517*4882a593Smuzhiyun 
518*4882a593Smuzhiyun typedef struct cistpl_format_t {
519*4882a593Smuzhiyun     u_char	type;
520*4882a593Smuzhiyun     u_char	edc;
521*4882a593Smuzhiyun     u_int	offset;
522*4882a593Smuzhiyun     u_int	length;
523*4882a593Smuzhiyun } cistpl_format_t;
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun #define CISTPL_FORMAT_DISK	0x00
526*4882a593Smuzhiyun #define CISTPL_FORMAT_MEM	0x01
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun #define CISTPL_EDC_NONE		0x00
529*4882a593Smuzhiyun #define CISTPL_EDC_CKSUM	0x01
530*4882a593Smuzhiyun #define CISTPL_EDC_CRC		0x02
531*4882a593Smuzhiyun #define CISTPL_EDC_PCC		0x03
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun typedef union cisparse_t {
534*4882a593Smuzhiyun     cistpl_device_t		device;
535*4882a593Smuzhiyun     cistpl_checksum_t		checksum;
536*4882a593Smuzhiyun     cistpl_longlink_t		longlink;
537*4882a593Smuzhiyun     cistpl_longlink_mfc_t	longlink_mfc;
538*4882a593Smuzhiyun     cistpl_vers_1_t		version_1;
539*4882a593Smuzhiyun     cistpl_altstr_t		altstr;
540*4882a593Smuzhiyun     cistpl_jedec_t		jedec;
541*4882a593Smuzhiyun     cistpl_manfid_t		manfid;
542*4882a593Smuzhiyun     cistpl_funcid_t		funcid;
543*4882a593Smuzhiyun     cistpl_funce_t		funce;
544*4882a593Smuzhiyun     cistpl_bar_t		bar;
545*4882a593Smuzhiyun     cistpl_config_t		config;
546*4882a593Smuzhiyun     cistpl_cftable_entry_t	cftable_entry;
547*4882a593Smuzhiyun     cistpl_cftable_entry_cb_t	cftable_entry_cb;
548*4882a593Smuzhiyun     cistpl_device_geo_t		device_geo;
549*4882a593Smuzhiyun     cistpl_vers_2_t		vers_2;
550*4882a593Smuzhiyun     cistpl_org_t		org;
551*4882a593Smuzhiyun     cistpl_format_t		format;
552*4882a593Smuzhiyun } cisparse_t;
553*4882a593Smuzhiyun 
554*4882a593Smuzhiyun typedef struct tuple_t {
555*4882a593Smuzhiyun     u_int	Attributes;
556*4882a593Smuzhiyun     cisdata_t 	DesiredTuple;
557*4882a593Smuzhiyun     u_int	Flags;		/* internal use */
558*4882a593Smuzhiyun     u_int	LinkOffset;	/* internal use */
559*4882a593Smuzhiyun     u_int	CISOffset;	/* internal use */
560*4882a593Smuzhiyun     cisdata_t	TupleCode;
561*4882a593Smuzhiyun     cisdata_t	TupleLink;
562*4882a593Smuzhiyun     cisdata_t	TupleOffset;
563*4882a593Smuzhiyun     cisdata_t	TupleDataMax;
564*4882a593Smuzhiyun     cisdata_t	TupleDataLen;
565*4882a593Smuzhiyun     cisdata_t	*TupleData;
566*4882a593Smuzhiyun } tuple_t;
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun /* Special cisdata_t value */
569*4882a593Smuzhiyun #define RETURN_FIRST_TUPLE	0xff
570*4882a593Smuzhiyun 
571*4882a593Smuzhiyun /* Attributes for tuple calls */
572*4882a593Smuzhiyun #define TUPLE_RETURN_LINK	0x01
573*4882a593Smuzhiyun #define TUPLE_RETURN_COMMON	0x02
574*4882a593Smuzhiyun 
575*4882a593Smuzhiyun #define CISTPL_MAX_CIS_SIZE	0x200
576*4882a593Smuzhiyun 
577*4882a593Smuzhiyun #endif /* LINUX_CISTPL_H */
578