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-1999 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 #include <sys/types.h> 30 #include <sys/systm.h> 31 #include <sys/user.h> 32 #include <sys/buf.h> 33 #include <sys/file.h> 34 #include <sys/uio.h> 35 #include <sys/conf.h> 36 #include <sys/stat.h> 37 #include <sys/autoconf.h> 38 #include <sys/vtoc.h> 39 #include <sys/dkio.h> 40 #include <sys/ddi.h> 41 #include <sys/sunddi.h> 42 #include <sys/ddi_impldefs.h> 43 #include <sys/kstat.h> 44 #include <sys/kmem.h> 45 #include <sys/modctl.h> 46 #include <sys/kobj.h> 47 48 #include <sys/pctypes.h> 49 #include <pcmcia/sys/cs_types.h> 50 #include <pcmcia/sys/cis.h> 51 #include <pcmcia/sys/cis_handlers.h> 52 53 /* 54 * 55 * The following speed tables are used by cistpl_devspeed() to generate 56 * device speeds from tuple data. 57 * 58 * Define the device speed table. For a description of this table's contents, 59 * see PCMCIA Release 2.01 Card Metaformat pg. 5-14 table 5-12. 60 * 61 * All times in this table are in nS. 62 */ 63 uint32_t cistpl_devspeed_table[CISTPL_DEVSPEED_MAX_TBL] = { 64 0, /* 0x00 - DSPEED_NULL */ 65 250, /* 0x01 - DSPEED_250NS */ 66 200, /* 0x02 - DSPEED_200NS */ 67 150, /* 0x03 - DSPEED_150NS */ 68 100, /* 0x04 - DSPEED_100NS */ 69 0, /* 0x05 - reserved */ 70 0, /* 0x06 - reserved */ 71 0 /* 0x07 - use extended speed byte */ 72 }; 73 74 /* 75 * Define the power-of-10 table. 76 */ 77 uint32_t cistpl_exspeed_tenfac[] = { 78 1, /* 10^0 */ 79 10, /* 10^1 */ 80 100, /* 10^2 */ 81 1000, /* 10^3 */ 82 10000, /* 10^4 */ 83 100000, /* 10^5 */ 84 1000000, /* 10^6 */ 85 10000000 /* 10^7 */ 86 }; 87 88 /* 89 * The extended device speed code mantissa table. 90 * 91 * This table is described in PCMCIA Release 2.01 Card Metaformat 92 * pg. 5-15 table 5-13. 93 * 94 * The description of this table uses non-integer values. We multiply 95 * everything by 10 before it goes into the table, and the code 96 * will divide by 10 after it calculates the device speed. 97 */ 98 uint32_t cistpl_devspeed_man[CISTPL_DEVSPEED_MAX_MAN] = { 99 0, /* no units */ 100 10, /* no units */ 101 12, /* no units */ 102 13, /* no units */ 103 15, /* no units */ 104 20, /* no units */ 105 25, /* no units */ 106 30, /* no units */ 107 35, /* no units */ 108 40, /* no units */ 109 45, /* no units */ 110 50, /* no units */ 111 55, /* no units */ 112 60, /* no units */ 113 70, /* no units */ 114 80, /* no units */ 115 }; 116 117 /* 118 * The extended device speed code exponent table. 119 * 120 * This table is described in PCMCIA Release 2.01 Card Metaformat 121 * pg. 5-15 table 5-13. 122 * 123 * The description of this table uses various timing units. This 124 * table contains all times in nS. 125 */ 126 uint32_t cistpl_devspeed_exp[CISTPL_DEVSPEED_MAX_EXP] = { 127 1, /* 1 nS */ 128 10, /* 10 nS */ 129 100, /* 100 nS */ 130 1000, /* 1000 nS */ 131 10000, /* 10000 nS */ 132 100000, /* 100000 nS */ 133 1000000, /* 1000000 nS */ 134 10000000 /* 10000000 nS */ 135 }; 136 137 /* 138 * The power description mantissa table. 139 * 140 * This table is described in PCMCIA Release 2.01 Card Metaformat 141 * pg. 5-28 table 5-32. 142 * 143 * The description of this table uses non-integer values. We multiply 144 * everything by 10 before it goes into the table, and the code 145 * will divide by 10 after it calculates the device power. 146 */ 147 uint32_t cistpl_pd_man[] = { 148 10, /* no units */ 149 12, /* no units */ 150 13, /* no units */ 151 15, /* no units */ 152 20, /* no units */ 153 25, /* no units */ 154 30, /* no units */ 155 35, /* no units */ 156 40, /* no units */ 157 45, /* no units */ 158 50, /* no units */ 159 55, /* no units */ 160 60, /* no units */ 161 70, /* no units */ 162 80, /* no units */ 163 90, /* no units */ 164 }; 165 166 /* 167 * The power description exponent table. 168 * 169 * This table is described in PCMCIA Release 2.01 Card Metaformat 170 * pg. 5-28 table 5-32. 171 * 172 * The description of this table uses various voltage and current units. 173 * This table contains all currents in nanoAMPS and all voltages 174 * in microVOLTS. 175 * 176 * Note if you're doing a current table lookup, you need to multiply 177 * the lookup value by ten. 178 */ 179 uint32_t cistpl_pd_exp[] = { 180 10, /* 10 microVOLTS, 100 nanoAMPS */ 181 100, /* 100 microVOLTS, 1000 nanoAMPS */ 182 1000, /* 1000 microVOLTS, 10000 nanoAMPS */ 183 10000, /* 10000 microVOLTS, 100000 nanoAMPS */ 184 100000, /* 100000 microVOLTS, 1000000 nanoAMPS */ 185 1000000, /* 1000000 microVOLTS, 10000000 nanoAMPS */ 186 10000000, /* 10000000 microVOLTS, 100000000 nanoAMPS */ 187 100000000 /* 100000000 microVOLTS, 1000000000 nanoAMPS */ 188 }; 189 190 /* 191 * Fill out the structure pointers. 192 */ 193 cistpl_devspeed_struct_t cistpl_devspeed_struct = { 194 cistpl_devspeed_table, 195 cistpl_exspeed_tenfac, 196 cistpl_devspeed_man, 197 cistpl_devspeed_exp, 198 }; 199 200 cistpl_pd_struct_t cistpl_pd_struct = { 201 cistpl_pd_man, 202 cistpl_pd_exp, 203 }; 204 205 /* 206 * Some handy lookup tables that should probably eventually be 207 * done away with. 208 * 209 * These are used mostly by the CISTPL_CFTABLE_ENTRY tuple handler. 210 */ 211 uint32_t cistpl_cftable_io_size_table[] = { 212 0, 213 1, 214 2, 215 4, 216 }; 217 218 uint32_t cistpl_cftable_shift_table[] = { 219 0, 220 8, 221 16, 222 24, 223 }; 224 225 /* 226 * List of tuples in the global CIS to ignore if they show 227 * up in both the global and function-specific CIS lists. 228 * This list MUST end with CISTPL_NULL. 229 */ 230 cistpl_ignore_list_t cistpl_ignore_list[] = { 231 CISTPL_FUNCID, 232 CISTPL_FUNCE, 233 CISTPL_CONFIG, 234 CISTPL_CFTABLE_ENTRY, 235 CISTPL_NULL /* list must end with CISTPL_NULL */ 236 };