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 */
63uint32_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 */
77uint32_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 */
98uint32_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 */
126uint32_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 */
147uint32_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 */
179uint32_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 */
193cistpl_devspeed_struct_t cistpl_devspeed_struct = {
194	cistpl_devspeed_table,
195	cistpl_exspeed_tenfac,
196	cistpl_devspeed_man,
197	cistpl_devspeed_exp,
198};
199
200cistpl_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 */
211uint32_t cistpl_cftable_io_size_table[] = {
212	0,
213	1,
214	2,
215	4,
216};
217
218uint32_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 */
230cistpl_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};
237