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