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