1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright (c) 1995-1996 by Sun Microsystems, Inc.
24  * All rights reserved.
25  */
26 
27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28 
29 /*
30  * This file contains an array of structures, each of which refers to
31  *	a tuple that we are prepared to handle.  The last structure
32  *	in this array must have a type of CISTPL_END.
33  *
34  * If you want the generic tuple handler to be called for a tuple, use
35  *	the cis_no_tuple_handler() entry point.
36  */
37 
38 #include <sys/types.h>
39 #include <sys/systm.h>
40 #include <sys/user.h>
41 #include <sys/buf.h>
42 #include <sys/file.h>
43 #include <sys/uio.h>
44 #include <sys/conf.h>
45 #include <sys/stat.h>
46 #include <sys/autoconf.h>
47 #include <sys/vtoc.h>
48 #include <sys/dkio.h>
49 #include <sys/ddi.h>
50 #include <sys/sunddi.h>
51 #include <sys/debug.h>
52 #include <sys/ddi_impldefs.h>
53 #include <sys/kstat.h>
54 #include <sys/kmem.h>
55 #include <sys/modctl.h>
56 #include <sys/kobj.h>
57 #include <sys/callb.h>
58 
59 #include <sys/pctypes.h>
60 #include <pcmcia/sys/cs_types.h>
61 #include <pcmcia/sys/cis.h>
62 #include <pcmcia/sys/cis_handlers.h>
63 #include <pcmcia/sys/cs.h>
64 #include <pcmcia/sys/cs_priv.h>
65 #include <pcmcia/sys/cis_protos.h>
66 
67 /*
68  * cistpl_std_callout - callout list for standard tuples
69  */
70 cistpl_callout_t cistpl_std_callout[] = {
71 	{	CISTPL_DEVICE,			/* device information */
72 		0,
73 		0,
74 		cistpl_device_handler,
75 		"CISTPL_DEVICE"		},
76 	{	CISTPL_CHECKSUM,		/* checksum control */
77 		0,
78 		0,
79 		cis_no_tuple_handler,
80 		"CISTPL_CHECKSUM"	},
81 	{	CISTPL_LONGLINK_A,		/* long-link to AM */
82 		0,
83 		0,
84 		cistpl_longlink_ac_handler,
85 		"CISTPL_LONGLINK_A"	},
86 	{	CISTPL_LONGLINK_C,		/* long-link to CM */
87 		0,
88 		0,
89 		cistpl_longlink_ac_handler,
90 		"CISTPL_LONGLINK_C"	},
91 	{	CISTPL_LONGLINK_MFC,		/* long-link to MFC CIS */
92 		0,
93 		0,
94 		cistpl_longlink_mfc_handler,
95 		"CISTPL_LONGLINK_MFC"	},
96 	{	CISTPL_LINKTARGET,		/* link-target control */
97 		0,
98 		0,
99 		cistpl_linktarget_handler,
100 		"CISTPL_LINKTARGET"	},
101 	{	CISTPL_NO_LINK,			/* no-link control */
102 		0,
103 		0,
104 		cis_no_tuple_handler,
105 		"CISTPL_NO_LINK"	},
106 	{	CISTPL_VERS_1,			/* level 1 version info */
107 		0,
108 		0,
109 		cistpl_vers_1_handler,
110 		"CISTPL_VERS_1"		},
111 	{	CISTPL_ALTSTR,			/* alternate language string */
112 		0,
113 		0,
114 		cis_no_tuple_handler,
115 		"CISTPL_ALTSTR"		},
116 	{	CISTPL_DEVICE_A,		/* AM device information */
117 		0,
118 		0,
119 		cistpl_device_handler,
120 		"CISTPL_DEVICE_A"	},
121 	{	CISTPL_JEDEC_C,			/* JEDEC info for CM */
122 		0,
123 		0,
124 		cistpl_jedec_handler,
125 		"CISTPL_JEDEC_C"	},
126 	{	CISTPL_JEDEC_A,			/* JEDEC info for AM */
127 		0,
128 		0,
129 		cistpl_jedec_handler,
130 		"CISTPL_JEDEC_A"	},
131 	{	CISTPL_CONFIG,			/* configuration */
132 		0,
133 		0,
134 		cistpl_config_handler,
135 		"CISTPL_CONFIG"		},
136 	{	CISTPL_CFTABLE_ENTRY,		/* configuration-table-entry */
137 		0,
138 		0,
139 		cistpl_cftable_handler,
140 		"CISTPL_CFTABLE_ENTRY"	},
141 	{	CISTPL_DEVICE_OC,		/* other conditions for CM */
142 		0,
143 		0,
144 		cistpl_device_handler,
145 		"CISTPL_DEVICE_OC"	},
146 	{	CISTPL_DEVICE_OA,		/* other conditions for AM */
147 		0,
148 		0,
149 		cistpl_device_handler,
150 		"CISTPL_DEVICE_OA"	},
151 	{	CISTPL_VERS_2,			/* level 2 version info */
152 		0,
153 		0,
154 		cistpl_vers_2_handler,
155 		"CISTPL_VERS_2"		},
156 	{	CISTPL_FORMAT,			/* format type */
157 		0,
158 		0,
159 		cistpl_format_handler,
160 		"CISTPL_FORMAT"		},
161 	{	CISTPL_FORMAT_A,		/* Attribute Memory */
162 		0,				/* recording format */
163 		0,
164 		cistpl_format_handler,
165 		"CISTPL_FORMAT_A"	},
166 	{	CISTPL_GEOMETRY,		/* geometry */
167 		0,
168 		0,
169 		cistpl_geometry_handler,
170 		"CISTPL_GEOMETRY"	},
171 	{	CISTPL_BYTEORDER,		/* byte order */
172 		0,
173 		0,
174 		cistpl_byteorder_handler,
175 		"CISTPL_BYTEORDER"	},
176 	{	CISTPL_DATE,			/* card initialization date */
177 		0,
178 		0,
179 		cistpl_date_handler,
180 		"CISTPL_DATE"		},
181 	{	CISTPL_BATTERY,			/* battery replacement date */
182 		0,
183 		0,
184 		cistpl_battery_handler,
185 		"CISTPL_BATTERY"	},
186 	{	CISTPL_ORG,			/* organization */
187 		0,
188 		0,
189 		cistpl_org_handler,
190 		"CISTPL_ORG"		},
191 	{	CISTPL_FUNCID,			/* card function ID */
192 		0,
193 		0,
194 		cistpl_funcid_handler,
195 		"CISTPL_FUNCID"		},
196 	{	CISTPL_FUNCE,			/* card function extension */
197 		TPLFUNC_MULTI,		/* for multifunction cards */
198 		0,
199 		cis_no_tuple_handler,
200 		"CISTPL_FUNCE/MULTI"	},
201 	{	CISTPL_FUNCE,			/* card function extension */
202 		TPLFUNC_MEMORY,		/* for memory cards */
203 		0,
204 		cis_no_tuple_handler,
205 		"CISTPL_FUNCE/MEMORY"	},
206 	{	CISTPL_FUNCE,			/* card function extension */
207 		TPLFUNC_SERIAL,		/* for serial port cards */
208 		0,
209 		cistpl_funce_serial_handler,
210 		"CISTPL_FUNCE/SERIAL"	},
211 	{	CISTPL_FUNCE,			/* card function extension */
212 		TPLFUNC_PARALLEL,		/* for parallel port cards */
213 		0,
214 		cis_no_tuple_handler,
215 		"CISTPL_FUNCE/PARALLEL"	},
216 	{	CISTPL_FUNCE,			/* card function extension */
217 		TPLFUNC_FIXED,		/* for fixed disk cards */
218 		0,
219 		cis_no_tuple_handler,
220 		"CISTPL_FUNCE/FIXED"	},
221 	{	CISTPL_FUNCE,			/* card function extension */
222 		TPLFUNC_VIDEO,		/* for video cards */
223 		0,
224 		cis_no_tuple_handler,
225 		"CISTPL_FUNCE/VIDEO"	},
226 	{	CISTPL_FUNCE,			/* card function extension */
227 		TPLFUNC_LAN,		/* for LAN cards */
228 		0,
229 		cistpl_funce_lan_handler,
230 		"CISTPL_FUNCE/LAN"	},
231 
232 	{	CISTPL_FUNCE,			/* card function extension */
233 		TPLFUNC_AIMS,		/* Auto Incrementing Mass Storage */
234 		0,
235 		cis_no_tuple_handler,
236 		"CISTPL_FUNCE/AIMS"	},
237 	{	CISTPL_FUNCE,			/* card function extension */
238 		TPLFUNC_SCSI,		/* SCSI bridge */
239 		0,
240 		cis_no_tuple_handler,
241 		"CISTPL_FUNCE/SCSI"	},
242 	{	CISTPL_FUNCE,			/* card function extension */
243 		TPLFUNC_VENDOR_SPECIFIC,	/* Vendor Specific */
244 		0,
245 		cis_no_tuple_handler,
246 		"CISTPL_FUNCE/VENDOR_SPECIFIC"	},
247 	{	CISTPL_FUNCE,			/* card function extension */
248 		TPLFUNC_UNKNOWN,	/* for unknown functions */
249 		0,
250 		cis_no_tuple_handler,
251 		"CISTPL_FUNCE/unknown"	},
252 	{	CISTPL_MANFID,			/* manufacturer ID */
253 		0,
254 		0,
255 		cistpl_manfid_handler,
256 		"CISTPL_MANFID"		},
257 	{	CISTPL_SPCL,			/* special-purpose tuple */
258 		0,
259 		0,
260 		cis_no_tuple_handler,
261 		"CISTPL_SPCL"		},
262 	{	CISTPL_LONGLINK_CB,		/* longlink to next */
263 		0,				/* tuple chain */
264 		0,
265 		cis_no_tuple_handler,
266 		"CISTPL_LONGLINK_CB"	},
267 	{	CISTPL_CONFIG_CB,		/* configuration tuple */
268 		0,
269 		0,
270 		cis_no_tuple_handler,
271 		"CISTPL_CONFIG_CB"	},
272 	{	CISTPL_CFTABLE_ENTRY_CB,	/* configuration table */
273 		0,				/* entry */
274 		0,
275 		cis_no_tuple_handler,
276 		"CISTPL_CFTABLE_ENTRY_CB"	},
277 	{	CISTPL_BAR,			/* Base Address Register */
278 		0,				/* definition */
279 		0,
280 		cis_no_tuple_handler,
281 		"CISTPL_BAR"		},
282 	{	CISTPL_DEVICEGEO,		/* Common Memory */
283 		0,				/* device geometry */
284 		0,
285 		cis_no_tuple_handler,
286 		"CISTPL_DEVICEGEO"	},
287 	{	CISTPL_DEVICEGEO_A,		/* Attribute Memory */
288 		0,				/* device geometry */
289 		0,
290 		cis_no_tuple_handler,
291 		"CISTPL_DEVICEGEO_A"	},
292 	{	CISTPL_SWIL,			/* software interleave */
293 		0,
294 		0,
295 		cis_no_tuple_handler,
296 		"CISTPL_SWIL"		},
297 	{	CISTPL_VEND_SPEC_80,		/* vendor-specific 0x80 */
298 		0,
299 		0,
300 		cis_unknown_tuple_handler,
301 		"CISTPL_VEND_SPEC_80"	},
302 	{	CISTPL_VEND_SPEC_81,		/* vendor-specific 0x81 */
303 		0,
304 		0,
305 		cis_unknown_tuple_handler,
306 		"CISTPL_VEND_SPEC_81"	},
307 	{	CISTPL_VEND_SPEC_82,		/* vendor-specific 0x82 */
308 		0,
309 		0,
310 		cis_unknown_tuple_handler,
311 		"CISTPL_VEND_SPEC_82"	},
312 	{	CISTPL_VEND_SPEC_83,		/* vendor-specific 0x83 */
313 		0,
314 		0,
315 		cis_unknown_tuple_handler,
316 		"CISTPL_VEND_SPEC_83"	},
317 	{	CISTPL_VEND_SPEC_84,		/* vendor-specific 0x84 */
318 		0,
319 		0,
320 		cis_unknown_tuple_handler,
321 		"CISTPL_VEND_SPEC_84"	},
322 	{	CISTPL_VEND_SPEC_85,		/* vendor-specific 0x85 */
323 		0,
324 		0,
325 		cis_unknown_tuple_handler,
326 		"CISTPL_VEND_SPEC_85"	},
327 	{	CISTPL_VEND_SPEC_86,		/* vendor-specific 0x86 */
328 		0,
329 		0,
330 		cis_unknown_tuple_handler,
331 		"CISTPL_VEND_SPEC_86"	},
332 	{	CISTPL_VEND_SPEC_87,		/* vendor-specific 0x87 */
333 		0,
334 		0,
335 		cis_unknown_tuple_handler,
336 		"CISTPL_VEND_SPEC_87"	},
337 	{	CISTPL_VEND_SPEC_88,		/* vendor-specific 0x88 */
338 		0,
339 		0,
340 		cis_unknown_tuple_handler,
341 		"CISTPL_VEND_SPEC_88"	},
342 	{	CISTPL_VEND_SPEC_89,		/* vendor-specific 0x89 */
343 		0,
344 		0,
345 		cis_unknown_tuple_handler,
346 		"CISTPL_VEND_SPEC_89"	},
347 	{	CISTPL_VEND_SPEC_8a,		/* vendor-specific 0x8a */
348 		0,
349 		0,
350 		cis_unknown_tuple_handler,
351 		"CISTPL_VEND_SPEC_8a"	},
352 	{	CISTPL_VEND_SPEC_8b,		/* vendor-specific 0x8b */
353 		0,
354 		0,
355 		cis_unknown_tuple_handler,
356 		"CISTPL_VEND_SPEC_8b"	},
357 	{	CISTPL_VEND_SPEC_8c,		/* vendor-specific 0x8c */
358 		0,
359 		0,
360 		cis_unknown_tuple_handler,
361 		"CISTPL_VEND_SPEC_8c"	},
362 	{	CISTPL_VEND_SPEC_8d,		/* vendor-specific 0x8d */
363 		0,
364 		0,
365 		cis_unknown_tuple_handler,
366 		"CISTPL_VEND_SPEC_8d"	},
367 	{	CISTPL_VEND_SPEC_8e,		/* vendor-specific 0x8e */
368 		0,
369 		0,
370 		cis_unknown_tuple_handler,
371 		"CISTPL_VEND_SPEC_8e"	},
372 	{	CISTPL_VEND_SPEC_8f,		/* vendor-specific 0x8f */
373 		0,
374 		0,
375 		cis_unknown_tuple_handler,
376 		"CISTPL_VEND_SPEC_8f"	},
377 	{	CISTPL_END,			/* end-of-list tuple */
378 		0,
379 		0,
380 		cis_no_tuple_handler,
381 		"unknown tuple"		},
382 	};
383