xref: /illumos-gate/usr/src/uts/common/sys/pcic_var.h (revision bb25c06c)
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 (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * PCIC driver specific data structures
29  */
30 
31 #ifndef _PCIC_VAR_H
32 #define	_PCIC_VAR_H
33 
34 #pragma ident	"%Z%%M%	%I%	%E% SMI"
35 
36 #ifdef	__cplusplus
37 extern "C" {
38 #endif
39 
40 /*
41  * defines and default values for power management simulation
42  */
43 #define	PCIC_PM_TIME		3	/* PM timer timeout time in secs */
44 #define	PCIC_PM_DETWIN		6	/* detection window in secs */
45 #define	PCIC_PM_METHOD_TIME	0x0001	/* use time check */
46 #define	PCIC_PM_METHOD_REG	0x0002	/* use reg check */
47 #define	PCIC_PM_DEF_METHOD	0	/* use no methods as default */
48 
49 #define	PCIC_PM_INIT	0x0001	/* init PM handler */
50 #define	PCIC_PM_RUN	0x0002	/* normal PM handler operation */
51 
52 typedef struct pcic_pm_t {
53 	int		state;	/* state */
54 	uint32_t	ptime;	/* previous time check */
55 	dev_info_t	*dip;	/* dip to pass */
56 } pcic_pm_t;
57 
58 /*
59  * Card insertion/removal processing debounce parameters
60  */
61 #define	PCIC_REM_DEBOUNCE_CNT	40
62 #define	PCIC_REM_DEBOUNCE_TIME	0x1000	/* in uS */
63 #define	PCIC_DEBOUNCE_OK_CNT    10
64 
65 /*
66  * Loop control in pcic_ready_wait
67  *
68  * Multiplying PCIC_READY_WAIT_LOOPS * PCIC_READY_WAIT_TIME gives
69  *	total loop time in mS
70  */
71 #define	PCIC_READY_WAIT_LOOPS	205	/* count */
72 #define	PCIC_READY_WAIT_TIME	20	/* mS */
73 
74 typedef struct pcs_memwin {
75 	int			pcw_status;
76 	uint32_t		pcw_base;
77 	int			pcw_len;
78 	uint32_t		pcw_speed;
79 	volatile caddr_t	pcw_hostmem;
80 	off_t			pcw_offset;
81 	ddi_acc_handle_t	pcw_handle;
82 } pcs_memwin_t;
83 
84 typedef struct pci_iowin {
85 	int 			pcw_status;
86 	uint32_t		pcw_base;
87 	int			pcw_len;
88 	uint32_t		pcw_speed;
89 	volatile caddr_t	pcw_hostmem;
90 				/* Cirrus Logic specific offset info */
91 	int			pcw_offset;
92 	ddi_acc_handle_t	pcw_handle;
93 } pcs_iowin_t;
94 
95 #define	PCW_MAPPED	0x0001	/* window is mapped */
96 #define	PCW_ENABLED	0x0002	/* window is enabled */
97 #define	PCW_ATTRIBUTE	0x0004	/* window is in attribute memory */
98 #define	PCW_WP		0x0008	/* window is write protected */
99 #define	PCW_OFFSET	0x0010	/* window uses CL style offset */
100 
101 typedef
102 struct pcic_socket {
103 	int	pcs_flags;
104 	uchar_t	*pcs_io;	/* I/O address of PCIC controller */
105 	int	pcs_socket;	/* socket to determine register set */
106 	char    pcs_cd_softint_flg;
107 	timeout_id_t pcs_debounce_id;	/* timeout for CD debounce */
108 	ddi_softint_handle_t pcs_cd_softint_hdl; /* Debounce softint id */
109 	struct pcicdev_t *pcs_pcic;
110 	uint32_t pcs_syshwsig;
111 	caddr_t pcs_phys;
112 	int	pcs_iobase;
113 	int	pcs_iolen;
114 	caddr_t pcs_confbase;
115 	int	pcs_conflen;
116 	int	pcs_conf_index;	/* used to select which cftable entry to use */
117 	int 	pcs_irq;
118 	int	pcs_smi;
119 	int	pcs_state;
120 	int	pcs_status;
121 	int	pcs_intmask;
122 	uint32_t pcs_vcc;
123 	uint32_t pcs_vpp1;
124 	uint32_t pcs_vpp2;
125 	union pcic_window {
126 		pcs_memwin_t mem;
127 		pcs_iowin_t  io;
128 	}	pcs_windows[PCIC_IOWINDOWS + PCIC_MEMWINDOWS];
129 } pcic_socket_t;
130 
131 #define	PCS_CARD_PRESENT	0x0001	/* card inserted in socket */
132 #define	PCS_CARD_IDENTIFIED	0x0002	/* card has been identified */
133 #define	PCS_CARD_ENABLED	0x0004	/* card and socket enabled */
134 #define	PCS_CARD_WPS		0x0008	/* write protect ignored */
135 #define	PCS_IRQ_ENABLED		0x0010	/* irq is a mask of values */
136 #define	PCS_CARD_RAM		0x0020	/* ram needs to be mapped */
137 #define	PCS_CARD_IO		0x0040	/* card is I/O type */
138 #define	PCS_CARD_16BIT		0x0080	/* set in 16-bit mode */
139 #define	PCS_SOCKET_IO		0x0100	/* socket is I/O type */
140 #define	PCS_READY		0x0200	/* socket just came ready */
141 #define	PCS_WAITING		0x0400	/* Doing a wait on this socket */
142 #define	PCS_STARTING		0x0800	/* Starting up flag */
143 #define	PCS_CARD_ISCARDBUS	0x1000	/* NJH - 32 bit (CARDBUS) card */
144 #define	PCS_CARD_IS16BIT	0x2000	/* So we can tell if it's OK */
145 #define	PCS_CARD_REMOVED	0x4000	/* Removed but still work to do */
146 #define	PCS_CARD_CBREM		0x8000	/* Cardbus specific work to do */
147 #define	PCS_DEBOUNCING		0x10000  /* Socket in debouncing state */
148 
149 #define	PCIC_MAX_SOCKETS 4	/* 2 per chip up to 2 chips per IO addr */
150 
151 typedef struct pcic_debounce_state {
152 	int insert_cnt;
153 	int remove_cnt;
154 	int uncertain_cnt;
155 	int prev_status;
156 	int debounce_cnt;
157 	timeout_id_t timeout_id;
158 } pcic_debounce_state_t;
159 
160 typedef struct pcicdev_t {
161 	uint32_t		pc_flags;
162 	uint32_t		pc_type;
163 	char			*pc_chipname;
164 	uint32_t		pc_irqs;	/* the possible IRQ levels */
165 	uint32_t		pc_smi;		/* SMI IRQ */
166 	uint32_t		pc_irq;		/* IO IRQ */
167 	int			pc_io_type;
168 	int			pc_intr_mode;	/* which interrupt method */
169 	dev_info_t		*dip;
170 	ddi_idevice_cookie_t	pc_dcookie;	/* Stay compatible w/ PCMCIA */
171 	inthandler_t		*sirq[14];	/* List for each level */
172 	uint16_t		si_actflg;	/* Bit for each active level */
173 	inthandler_t		*irq_top;
174 	inthandler_t		*irq_current;
175 	ddi_intr_handle_t	*pc_pci_intr_hdlp; /* For PCI based adapters */
176 	ddi_iblock_cookie_t	pc_pri;		/* Priority saved for mutexes */
177 	ddi_intr_handle_t	*pc_intr_htblp;	/* ISA: interrupt handles */
178 	ddi_softint_handle_t	pc_softint_hdl;	/* Softinterrupt handle */
179 	kmutex_t		pc_lock;	/* general register lock */
180 	kmutex_t		intr_lock;	/* protects fields modified */
181 						/* in pcic_intr() */
182 	int			pc_numsockets;
183 				/* used to inform nexus of events */
184 	int			(*pc_callback)();
185 	int			pc_cb_arg;
186 	int			(*pc_ss_bios)();
187 	struct pcic_socket	pc_sockets[PCIC_MAX_SOCKETS];
188 	int			pc_numpower;
189 	struct power_entry	*pc_power;
190 	timeout_id_t		pc_pmtimer;	/* timeout for simulating PM */
191 	pcic_pm_t		pmt;		/* PM handler structure */
192 	kcondvar_t		pm_cv;		/* CV for suspend/resume sync */
193 	ddi_acc_handle_t	handle;		/* PCIC register handle */
194 	ddi_acc_handle_t	cfg_handle;	/* PCIC config space handle */
195 	uchar_t			*cfgaddr;	/* config address */
196 	uchar_t			*ioaddr;	/* PCIC register IO base */
197 	int			mem_reg_num;	/* memory space reg number */
198 	offset_t		mem_reg_offset;
199 	int			io_reg_num;	/* IO space reg number */
200 	offset_t		io_reg_offset;
201 	int			bus_speed;	/* parent bus speed */
202 	uint32_t		pc_timestamp;   /* last time touched */
203 	inthandler_t		*pc_handlers;
204 	int			pc_lastreg;
205 	uint32_t		pc_base;	/* first possible mem-addr */
206 	uint32_t		pc_bound;	/* bound length */
207 	uint32_t		pc_iobase;	/* first io addr */
208 	uint32_t		pc_iobound;
209 	pcic_debounce_state_t   deb_state[PCIC_MAX_SOCKETS];
210 	int			pc_softintr_req[PCIC_MAX_SOCKETS];
211 	struct pcic_cd_change_param {
212 		struct pcicdev_t	*pcic;
213 		pcic_socket_t		*sockp;
214 		int			sn;
215 	}  pcic_cd_change_param[PCIC_MAX_SOCKETS];
216 } pcicdev_t;
217 
218 
219 
220 #define	PCF_ATTACHED	0x00000001
221 #define	PCF_CALLBACK	0x00000002	/* callback handler registered */
222 #define	PCF_GPI_EJECT	0x00000004	/* GPI signal is eject/insert */
223 #define	PCF_INTRENAB	0x00000008
224 #define	PCF_USE_SMI	0x00000010	/* use the SMI enable */
225 #define	PCF_AUDIO	0x00000020	/* use audio if available */
226 #define	PCF_SUSPENDED	0x00000040	/* driver attached but suspended */
227 #define	PCF_EXTEND_INTR	0x00000080	/* Use Vadem interrupt sharing */
228 #define	PCF_1SOCKET	0x00000100	/* Chip only has one socket  */
229 #define	PCF_33VCAP	0x00000200	/* 3.3 Volt capable and coded */
230 #define	PCF_CBPWRCTL	0x00000400	/* Use cardbus regs for power ctl */
231 #define	PCF_DEBOUNCE	0x00002000	/* Chip has hardware debounce enabled */
232 #define	PCF_VPPX	0x00004000	/* Vpp1 and Vpp2 tied together */
233 #define	PCF_EXTBUFF	0x00008000	/* Chip strapped for external buffers */
234 #define	PCF_PCIBUS	0x00010000	/* this instance on a PCI bus */
235 #define	PCF_NOIO_OFF	0x00020000	/* 0 offset for IO mapping */
236 #define	PCF_MULT_IRQ	0x00040000
237 #define	PCF_IO_REMAP	0x00080000	/* adapter can remap I/O */
238 #define	PCF_CARDBUS	0x00100000	/* Yenta CardBus */
239 #define	PCF_MEM_PAGE	0x00200000	/* all windows same 16M page */
240 
241 /* newer features */
242 #define	PCF_DMA		0x00400000	/* supports DMA */
243 #define	PCF_ZV		0x00800000	/* supports Zoom Video */
244 
245 #define	PCF_ISA6729	0x01000000	/* 6729 */
246 
247 /*
248  * misc flags
249  */
250 #define	PCIC_FOUND_ADAPTER	0x00000001
251 #define	PCIC_ENABLE_IO		0x00000002
252 #define	PCIC_ENABLE_MEM		0x00000004
253 
254 #define	PCIC_SOFTINT_PRI_VAL	0x04	/* value used while adding softint */
255 
256 /*
257  * interrupt modes
258  * the pcic variants provide a number of interrupt modes.
259  * e.g. on PCI, we can either use PCI interrupts or ISA interrupts
260  * but the SPARC version must use PCI interrupts and x86 "depends"
261  */
262 
263 #define	PCIC_INTR_MODE_ISA	00 /* default- use ISA mode */
264 #define	PCIC_INTR_MODE_PCI	01 /* use pure PCI */
265 #define	PCIC_INTR_MODE_PCI_1	02 /* use pure PCI but share */
266 #define	PCIC_INTR_MODE_PCI_S	03 /* serial PCI interrupts */
267 
268 #define	PCIC_INTR_DEF_PRI	11 /* default IPL level */
269 
270 /*
271  * I/O access types
272  */
273 #define	PCIC_IO_TYPE_82365SL	0 /* uses index/data reg model */
274 #define	PCIC_IO_TYPE_YENTA	1 /* uses the Yenta spec memory model */
275 
276 /*
277  * On some PCI busses, the IO and memory resources available to us are
278  *	available via the last two tuples in the reg property. The
279  *	following defines are the reg numbers from the end of the reg
280  *	property, and NOT the reg number itself.
281  */
282 #define	PCIC_PCI_MEM_REG_OFFSET	2
283 #define	PCIC_PCI_IO_REG_OFFSET	3
284 
285 /* I/O type 82365SL is default, Yenta is alternative */
286 #define	PCIC_IOTYPE_82365SL	0
287 #define	PCIC_IOTYPE_YENTA	1 /* CardBus memory mode */
288 
289 /*
290  * On Yenta cards, the PCI configuration space bridge control register
291  * must match the interrupt * type we have selected.
292  */
293 
294 #define	PCIC_CB_BRIDGE_CTL	0x3E
295 #define	PCIC_BCTL_IREQ_ISA	0x80
296 
297 /*
298  * On all PCI busses, we get at least two tuples in the reg property. One
299  *	of the tuples is the config space tuple and the other is the PCIC
300  *	IO control register space tuple.
301  */
302 
303 #define	PCIC_PCI_CONFIG_REG_NUM	0
304 #define	PCIC_PCI_CONFIG_REG_OFFSET	0
305 #define	PCIC_PCI_CONFIG_REG_LENGTH	0x100
306 
307 #define	PCIC_PCI_CONTROL_REG_NUM	1
308 #define	PCIC_PCI_CONTROL_REG_OFFSET	0
309 #define	PCIC_PCI_CONTROL_REG_LENGTH	4
310 #define	PCIC_CB_CONTROL_REG_LENGTH	4096 /* CardBus is 4K mem page */
311 
312 /*
313  * On ISA/EISA/MCA our reg property must look like this:
314  *
315  *	IOreg,0x0,0x8, 0x0,0x0,0x100000, 0x1,0x0,0x1000
316  *	^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
317  *	adapter regs    general memory	   general IO
318  *
319  * where IOreg specifies the adapter's control registers in
320  *	IO space.
321  * The value of PCIC_ISA_IO_REG_OFFSET must be the first
322  *	component of the third (general IO) register spec.
323  */
324 #define	PCIC_ISA_IO_REG_OFFSET		1
325 #define	PCIC_ISA_CONTROL_REG_NUM	0
326 #define	PCIC_ISA_CONTROL_REG_OFFSET	0	/* XXX MUST be 0! */
327 #define	PCIC_ISA_CONTROL_REG_LENGTH	2
328 
329 #define	PCIC_ISA_MEM_REG_NUM		1
330 #define	PCIC_ISA_IO_REG_NUM		2
331 
332 /*
333  * there are several variants of the 82365 chip from different "clone"
334  * vendors.  Each has a few differences which may or may not have to be
335  * handled.  The following defines are used to identify the chip being
336  * used.  If it can't be determined, then 82365SL is assumed.
337  *
338  * The following are ISA/EISA/MCA-R2 adapters
339  */
340 #define	PCIC_I82365SL		0x00 /* Intel 82365SL */
341 #define	PCIC_TYPE_I82365SL	"i82365SL"
342 #define	PCIC_CL_PD6710		0x01 /* Cirrus Logic CL-PD6710/6720 */
343 #define	PCIC_CL_PD6722		0x05 /* Cirrus Logic CL-PD6722 */
344 #define	PCIC_TYPE_PD6710	"PD6710"
345 #define	PCIC_TYPE_PD6720	"PD6720"
346 #define	PCIC_TYPE_PD6722	"PD6722"
347 #define	PCIC_VADEM		0x02 /* Vadem VG465/365 */
348 #define	PCIC_VADEM_VG469	0x03 /* Vadem VG469 - P&P, etc. */
349 #define	PCIC_VG_465		"VG465"
350 #define	PCIC_VG_365		"VG365"
351 #define	PCIC_VG_468		"VG468"
352 #define	PCIC_VG_469		"VG469"
353 #define	PCIC_RICOH		0x04
354 #define	PCIC_TYPE_RF5C296	"RF5C296"
355 #define	PCIC_TYPE_RF5C396	"RF5C396"
356 
357 /* PCI adapters are known by 32-bit value of vendor+device id */
358 #define	PCI_ID(vend, dev)	((uint32_t)(((uint32_t)(vend) << 16) | (dev)))
359 
360 /*
361  * The following are PCI-R2 adapters
362  * The Cirrus Logic PCI adapters typically have their IRQ3 line
363  *	routed to the PCI INT A# line.
364  */
365 #define	PCIC_CL_VENDORID	0x1013
366 #define	PCIC_PD6729_DEVID	0x1100
367 #define	PCIC_TYPE_PD6729	"PD6729"
368 #define	PCIC_CL_PD6729		PCI_ID(PCIC_CL_VENDORID, PCIC_PD6729_DEVID)
369 #define	PCIC_PD6729_INTA_ROUTE	0x03
370 
371 #define	PCIC_TYPE_PD6730	"PD6730"
372 #define	PCIC_PD6730_DEVID	0x1101
373 #define	PCIC_CL_PD6730		PCI_ID(PCIC_CL_VENDORID, PCIC_PD6730_DEVID)
374 #define	PCIC_PD6730_INTA_ROUTE	0x09
375 
376 #define	PCIC_TYPE_PD6832	"PD6832"
377 #define	PCIC_PD6832_DEVID	0x1110
378 #define	PCIC_CL_PD6832		PCI_ID(PCIC_CL_VENDORID, PCIC_PD6832_DEVID)
379 
380 /* Intel i82092AA controller */
381 
382 #define	PCIC_INTEL_VENDORID	0x8086
383 #define	PCIC_TYPE_i82092	"i82092"
384 #define	PCIC_i82092_DEVID	0x1221
385 #define	PCIC_INTEL_i82092	PCI_ID(PCIC_INTEL_VENDORID, \
386 					PCIC_i82092_DEVID)
387 #define	PCIC_i82092_INTA_ROUTE	0x0	/* XXX ? what is it really ? XXX */
388 
389 /* Texas Instruments */
390 
391 #define	PCIC_TI_VENDORID	0x104C
392 #define	PCIC_PCI1050_DEVID	0xAC10
393 #define	PCIC_PCI1130_DEVID	0xAC12
394 #define	PCIC_PCI1031_DEVID	0xAC13 /* R2 only with Yenta IF */
395 #define	PCIC_PCI1131_DEVID	0xAC15
396 #define	PCIC_PCI1250_DEVID	0xAC16
397 #define	PCIC_PCI1221_DEVID	0xAC19
398 #define	PCIC_PCI1225_DEVID	0xAC1C
399 #define	PCIC_PCI1220_DEVID	0xAC17
400 #define	PCIC_PCI1260_DEVID	0xAC18
401 #define	PCIC_PCI1210_DEVID	0xAC1A
402 #define	PCIC_PCI1450_DEVID	0xAC1B
403 #define	PCIC_PCI1251_DEVID	0xAC1D
404 #define	PCIC_PCI1211_DEVID	0xAC1E
405 #define	PCIC_PCI1251B_DEVID	0xAC1F
406 #define	PCIC_PCI1260B_DEVID	0xAC30
407 #define	PCIC_PCI4450_DEVID	0xAC40
408 #define	PCIC_PCI4410_DEVID	0xAC41
409 #define	PCIC_PCI4451_DEVID	0xAC42
410 #define	PCIC_PCI4510_DEVID	0xAC44
411 #define	PCIC_PCI1410_DEVID	0xAC50
412 #define	PCIC_PCI1420_DEVID	0xAC51
413 #define	PCIC_PCI1451_DEVID	0xAC52
414 #define	PCIC_PCI1421_DEVID	0xAC53
415 #define	PCIC_PCI1520_DEVID	0xAC55
416 #define	PCIC_PCI1510_DEVID	0xAC56
417 
418 #define	PCIC_TI_PCI1130		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1130_DEVID)
419 #define	PCIC_TYPE_PCI1130	"PCI1130"
420 #define	PCIC_TI_PCI1031		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1031_DEVID)
421 #define	PCIC_TYPE_PCI1031	"PCI1031"
422 #define	PCIC_TI_PCI1131		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1131_DEVID)
423 #define	PCIC_TYPE_PCI1131	"PCI1131"
424 #define	PCIC_TI_PCI1250		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1250_DEVID)
425 #define	PCIC_TYPE_PCI1250	"PCI1250"
426 #define	PCIC_TI_PCI1050		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1050_DEVID)
427 #define	PCIC_TYPE_PCI1050	"PCI1050"
428 #define	PCIC_TI_PCI1221		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1221_DEVID)
429 #define	PCIC_TYPE_PCI1221	"PCI1221"
430 #define	PCIC_TI_PCI1225		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1225_DEVID)
431 #define	PCIC_TYPE_PCI1225	"PCI1225"
432 #define	PCIC_TI_PCI1220		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1220_DEVID)
433 #define	PCIC_TYPE_PCI1220	"PCI1220"
434 #define	PCIC_TI_PCI1260		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1260_DEVID)
435 #define	PCIC_TYPE_PCI1260	"PCI1260"
436 #define	PCIC_TI_PCI1210		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1210_DEVID)
437 #define	PCIC_TYPE_PCI1210	"PCI1210"
438 #define	PCIC_TI_PCI1450		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1450_DEVID)
439 #define	PCIC_TYPE_PCI1450	"PCI1450"
440 #define	PCIC_TI_PCI1251		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1251_DEVID)
441 #define	PCIC_TYPE_PCI1251	"PCI1251"
442 #define	PCIC_TI_PCI1211		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1211_DEVID)
443 #define	PCIC_TYPE_PCI1211	"PCI1211"
444 #define	PCIC_TI_PCI1251B	PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1251B_DEVID)
445 #define	PCIC_TYPE_PCI1251B	"PCI1251B"
446 #define	PCIC_TI_PCI1260B	PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1260B_DEVID)
447 #define	PCIC_TYPE_PCI1260B	"PCI1260B"
448 #define	PCIC_TI_PCI4450		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI4450_DEVID)
449 #define	PCIC_TYPE_PCI4450	"PCI4450"
450 #define	PCIC_TI_PCI4410		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI4410_DEVID)
451 #define	PCIC_TYPE_PCI4410	"PCI4410"
452 #define	PCIC_TI_PCI4451		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI4451_DEVID)
453 #define	PCIC_TYPE_PCI4451	"PCI4451"
454 #define	PCIC_TI_PCI4510		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI4510_DEVID)
455 #define	PCIC_TYPE_PCI4510	"PCI4510"
456 #define	PCIC_TI_PCI1410		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1410_DEVID)
457 #define	PCIC_TYPE_PCI1410	"PCI1410"
458 #define	PCIC_TI_PCI1420		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1420_DEVID)
459 #define	PCIC_TYPE_PCI1420	"PCI1420"
460 #define	PCIC_TI_PCI1451		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1451_DEVID)
461 #define	PCIC_TYPE_PCI1451	"PCI1451"
462 #define	PCIC_TI_PCI1421		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1421_DEVID)
463 #define	PCIC_TYPE_PCI1421	"PCI1421"
464 #define	PCIC_TI_PCI1510		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1510_DEVID)
465 #define	PCIC_TYPE_PCI1510	"PCI1510"
466 #define	PCIC_TI_PCI1520		PCI_ID(PCIC_TI_VENDORID, PCIC_PCI1520_DEVID)
467 #define	PCIC_TYPE_PCI1520	"PCI1520"
468 #define	PCIC_TI_VENDOR		PCI_ID(PCIC_TI_VENDORID, 0x0000)
469 #define	PCIC_TYPE_TI		"PCIC_TI"
470 
471 /* O2 Micro */
472 #define	PCIC_O2_VENDORID	0x1217
473 #define	PCIC_OZ6912_DEVID	0x6972
474 #define	PCIC_O2_OZ6912		PCI_ID(PCIC_O2_VENDORID, PCIC_OZ6912_DEVID)
475 #define	PCIC_TYPE_OZ6912	"OZ6912"
476 #define	PCIC_O2MICRO_VENDOR	PCI_ID(PCIC_O2_VENDORID, 0x0000)
477 #define	PCIC_TYPE_O2MICRO	"O2Micro"
478 
479 /* ENE */
480 #define	PCIC_ENE_VENDORID	0x1524
481 #define	PCIC_ENE1410_DEVID	0x1410
482 #define	PCIC_ENE_1410		PCI_ID(PCIC_ENE_VENDORID, PCIC_ENE1410_DEVID)
483 #define	PCIC_TYPE_1410		"ENE1410"
484 #define	PCIC_ENE1420_DEVID	0x1420
485 #define	PCIC_ENE_1420		PCI_ID(PCIC_ENE_VENDORID, PCIC_ENE1420_DEVID)
486 #define	PCIC_TYPE_1420		"ENE1420"
487 
488 /* SMC 34C90 */
489 #define	PCIC_SMC_VENDORID	0x10B3
490 #define	PCIC_SMC34C90_DEVID	0xB106
491 #define	PCIC_SMC_34C90		PCI_ID(PCIC_SMC_VENDORID, PCIC_SMC34C90_DEVID)
492 #define	PCIC_TYPE_34C90		"SMC34c90"
493 
494 /* Ricoh RL5CXXX */
495 #define	PCIC_RICOH_VENDORID	0x1180
496 #define	PCIC_RL5C466_DEVID	0x0466
497 #define	PCIC_RL5C475_DEVID	0x0475
498 #define	PCIC_RL5C476_DEVID	0x0476
499 #define	PCIC_RL5C477_DEVID	0x0477
500 #define	PCIC_RL5C478_DEVID	0x0478
501 #define	PCIC_RICOH_RL5C466	PCI_ID(PCIC_RICOH_VENDORID, PCIC_RL5C466_DEVID)
502 #define	PCIC_RICOH_RL5C475	PCI_ID(PCIC_RICOH_VENDORID, PCIC_RL5C475_DEVID)
503 #define	PCIC_RICOH_RL5C476	PCI_ID(PCIC_RICOH_VENDORID, PCIC_RL5C476_DEVID)
504 #define	PCIC_RICOH_RL5C477	PCI_ID(PCIC_RICOH_VENDORID, PCIC_RL5C477_DEVID)
505 #define	PCIC_RICOH_RL5C478	PCI_ID(PCIC_RICOH_VENDORID, PCIC_RL5C478_DEVID)
506 #define	PCIC_TYPE_RL5C466		"RL5C466"
507 #define	PCIC_TYPE_RL5C475		"RL5C475"
508 #define	PCIC_TYPE_RL5C476		"RL5C476"
509 #define	PCIC_TYPE_RL5C477		"RL5C477"
510 #define	PCIC_TYPE_RL5C478		"RL5C478"
511 #define	PCIC_RICOH_VENDOR	PCI_ID(PCIC_RICOH_VENDORID, 0x0000)
512 #define	PCIC_TYPE_RICOH		"Ricoh"
513 
514 /* Toshiba */
515 #define	PCIC_TOSHIBA_VENDORID	0x1179
516 #define	PCIC_TOPIC95_DEVID	0x0603
517 #define	PCIC_TOSHIBA_TOPIC95	PCI_ID(PCIC_TOSHIBA_VENDORID, \
518 					PCIC_TOPIC95_DEVID)
519 #define	PCIC_TYPE_TOPIC95	"ToPIC95"
520 #define	PCIC_TOPIC100_DEVID	0x0617
521 #define	PCIC_TOSHIBA_TOPIC100	PCI_ID(PCIC_TOSHIBA_VENDORID, \
522 					PCIC_TOPIC100_DEVID)
523 #define	PCIC_TYPE_TOPIC100	"ToPIC100"
524 #define	PCIC_TOSHIBA_VENDOR	PCI_ID(PCIC_TOSHIBA_VENDORID, 0x0000)
525 #define	PCIC_TYPE_TOSHIBA	"Toshiba"
526 
527 /* Generic Yenta compliant chip */
528 #define	PCIC_TYPE_YENTA		"Yenta"
529 
530 /* Yenta-compliant vcc register, bits */
531 #define	PCIC_PRESENT_STATE_REG	0x8
532 #define	PCIC_VCC_MASK		0xc00
533 #define	PCIC_VCC_3VCARD		0x800
534 #define	PCIC_VCC_5VCARD		0x400
535 
536 #define	PCIC_16BIT_CARD		0x010		/* 16 bit card */
537 #define	PCIC_CB_CARD		0x020		/* cardbus card */
538 #define	PCIC_CINT_IREQ		0x040		/* Interrupt present */
539 #define	PCIC_NOT_A_CARD		0x080		/* Not a card */
540 #define	PCIC_DATA_LOST		0x100		/* Data lost */
541 #define	PCIC_BAD_VCC_REQ	0x200		/* Bad Vcc request */
542 
543 #define	PCICPROP_CTL		"controller"
544 
545 #define	PCIC_REV_LEVEL_LOW	0x02
546 #define	PCIC_REV_LEVEL_HI 	0x04
547 #define	PCIC_REV_C		0x04
548 #define	PCIC_REV_MASK		0x0f
549 
550 #define	PCIC_ID_NAME		"pcic"
551 #define	PCIC_DEV_NAME		"pcic"
552 
553 #ifndef	DEVI_PCI_NEXNAME
554 #define	DEVI_PCI_NEXNAME	"pci"
555 #endif
556 
557 /* PCI Class Code stuff */
558 #define	PCIC_PCI_CLASS(cls, subclass)	(((cls) << 16) | ((subclass) << 8))
559 #define	PCIC_PCI_PCMCIA	PCIC_PCI_CLASS(PCI_CLASS_BRIDGE, PCI_BRIDGE_PCMCIA)
560 #define	PCIC_PCI_CARDBUS PCIC_PCI_CLASS(PCI_CLASS_BRIDGE, PCI_BRIDGE_CARDBUS)
561 
562 #define	PCIC_MEM_AM	0	/* Attribute Memory */
563 #define	PCIC_MEM_CM	1	/* Common Memory */
564 
565 #define	PCS_SUBTYPE_UNKNOWN	0x00 /* haven't processed this yet */
566 #define	PCS_SUBTYPE_MEMORY	0x01 /* normal memory access */
567 #define	PCS_SUBTYPE_FAT		0x02 /* DOS floppy (FAT) file system */
568 
569 /*
570  * For speed calculation, assume a SYSCLK rate of 8.33MHz
571  *	unless our parent tells us otherwise. 8.33MHz is a
572  *	reasonable default for an ISA bus.
573  */
574 #define	PCIC_ISA_DEF_SYSCLK	8	/* MHZ */
575 #define	PCIC_PCI_DEF_SYSCLK	33	/* MHZ */
576 #define	PCIC_PCI_25MHZ		25
577 #define	mhztons(c)		(1000000 / (uint32_t)((c) * 1000))
578 #define	PCIC_SYSCLK_25MHZ	25 * 1000 * 1000
579 #define	PCIC_SYSCLK_33MHZ	33 * 1000 * 1000
580 
581 /* simplify the callback so it looks like straight function call */
582 #define	PC_CALLBACK	(*pcic->pc_callback)
583 
584 /* hardware event capabilities -- needs sservice.h */
585 #define	PCIC_DEFAULT_INT_CAPS	(SBM_BVD1|SBM_BVD2|SBM_RDYBSY|SBM_CD)
586 #define	PCIC_DEFAULT_RPT_CAPS	(PCIC_DEFAULT_INT_CAPS|SBM_WP)
587 /* note that we don't support indicators via the PCIC */
588 #define	PCIC_DEFAULT_CTL_CAPS	(0)
589 
590 /* format of pcic "ranges" property */
591 typedef struct pcic_ranges {
592 	uint32_t pcic_range_caddrhi;
593 	uint32_t pcic_range_caddrlo;
594 	uint32_t pcic_range_paddrhi;
595 	uint32_t pcic_range_paddrmid;
596 	uint32_t pcic_range_paddrlo;
597 	uint32_t pcic_range_size;
598 } pcic_ranges_t;
599 
600 /* debug stuff */
601 #if defined(DEBUG)
602 #define	PCIC_DEBUG
603 #endif
604 
605 #ifdef	__cplusplus
606 }
607 #endif
608 
609 #endif	/* _PCIC_VAR_H */
610