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