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