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 };