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