1*6e723e3aSkettenis /* $OpenBSD: pccbbvar.h,v 1.16 2010/09/06 18:34:34 kettenis Exp $ */ 2c70c1766Saaron /* $NetBSD: pccbbvar.h,v 1.13 2000/06/08 10:28:29 haya Exp $ */ 3e77beeccSaaron /* 4e77beeccSaaron * Copyright (c) 1999 HAYAKAWA Koichi. All rights reserved. 5e77beeccSaaron * 6e77beeccSaaron * Redistribution and use in source and binary forms, with or without 7e77beeccSaaron * modification, are permitted provided that the following conditions 8e77beeccSaaron * are met: 9e77beeccSaaron * 1. Redistributions of source code must retain the above copyright 10e77beeccSaaron * notice, this list of conditions and the following disclaimer. 11e77beeccSaaron * 2. Redistributions in binary form must reproduce the above copyright 12e77beeccSaaron * notice, this list of conditions and the following disclaimer in the 13e77beeccSaaron * documentation and/or other materials provided with the distribution. 14e77beeccSaaron * 15e77beeccSaaron * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16e77beeccSaaron * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17e77beeccSaaron * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18e77beeccSaaron * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19e77beeccSaaron * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20e77beeccSaaron * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21e77beeccSaaron * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22e77beeccSaaron * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23e77beeccSaaron * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24e77beeccSaaron * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25e77beeccSaaron */ 26e77beeccSaaron 27e77beeccSaaron /* require sys/device.h */ 28e77beeccSaaron /* require sys/queue.h */ 29e77beeccSaaron /* require sys/callout.h */ 30e77beeccSaaron /* require dev/ic/i82365reg.h */ 31e77beeccSaaron /* require dev/ic/i82365var.h */ 32e77beeccSaaron 33e77beeccSaaron #ifndef _DEV_PCI_PCCBBVAR_H_ 34e77beeccSaaron #define _DEV_PCI_PCCBBVAR_H_ 35e77beeccSaaron 36e1ec36b9Smickey #include <sys/timeout.h> 37e1ec36b9Smickey 38e77beeccSaaron #define PCIC_FLAG_SOCKETP 0x0001 39e77beeccSaaron #define PCIC_FLAG_CARDP 0x0002 40e77beeccSaaron 41e77beeccSaaron /* Chipset ID */ 42e77beeccSaaron #define CB_UNKNOWN 0 /* NOT Cardbus-PCI bridge */ 43e77beeccSaaron #define CB_TI113X 1 /* TI PCI1130/1131 */ 44e77beeccSaaron #define CB_TI12XX 2 /* TI PCI1250/1220 */ 45e77beeccSaaron #define CB_RX5C47X 3 /* RICOH RX5C475/476/477 */ 46e77beeccSaaron #define CB_RX5C46X 4 /* RICOH RX5C465/466/467 */ 47e77beeccSaaron #define CB_TOPIC95 5 /* Toshiba ToPIC95 */ 48e77beeccSaaron #define CB_TOPIC95B 6 /* Toshiba ToPIC95B */ 49e77beeccSaaron #define CB_TOPIC97 7 /* Toshiba ToPIC97 */ 50e77beeccSaaron #define CB_CIRRUS 8 /* Cirrus Logic CL-PD683X */ 51b66b5efeSmickey #define CB_TI125X 9 /* TI PCI1250/1251(B)/1450 */ 52b6ade3e5Sfgsch #define CB_OLDO2MICRO 10 /* O2Micro */ 53b6ade3e5Sfgsch #define CB_CHIPS_LAST 11 /* Sentinel */ 54e77beeccSaaron 55943b1d4aSfgsch #define PCCARD_VCC_UKN 0x00 /* Unknown */ 56943b1d4aSfgsch #define PCCARD_VCC_5V 0x01 57943b1d4aSfgsch #define PCCARD_VCC_3V 0x02 58943b1d4aSfgsch #define PCCARD_VCC_XV 0x04 59943b1d4aSfgsch #define PCCARD_VCC_YV 0x08 60943b1d4aSfgsch 61e77beeccSaaron #if 0 62e77beeccSaaron static char *cb_chipset_name[CB_CHIPS_LAST] = { 63e77beeccSaaron "unknown", "TI 113X", "TI 12XX", "RF5C47X", "RF5C46X", "ToPIC95", 64b66b5efeSmickey "ToPIC95B", "ToPIC97", "CL-PD 683X", "TI 125X", 65e77beeccSaaron }; 66e77beeccSaaron #endif 67e77beeccSaaron 68e77beeccSaaron struct pccbb_softc; 69e77beeccSaaron struct pccbb_intrhand_list; 70e77beeccSaaron 71e77beeccSaaron 72e77beeccSaaron struct cbb_pcic_handle { 73e77beeccSaaron struct device *ph_parent; 74e77beeccSaaron bus_space_tag_t ph_base_t; 75e77beeccSaaron bus_space_handle_t ph_base_h; 76c4071fd1Smillert u_int8_t (*ph_read)(struct cbb_pcic_handle *, int); 77c4071fd1Smillert void (*ph_write)(struct cbb_pcic_handle *, int, u_int8_t); 78e77beeccSaaron int sock; 79e77beeccSaaron 80e77beeccSaaron int vendor; 81e77beeccSaaron int flags; 82e77beeccSaaron int memalloc; 83e77beeccSaaron struct { 84e77beeccSaaron bus_addr_t addr; 85e77beeccSaaron bus_size_t size; 86e77beeccSaaron long offset; 87e77beeccSaaron int kind; 88e77beeccSaaron } mem[PCIC_MEM_WINS]; 89e77beeccSaaron int ioalloc; 90e77beeccSaaron struct { 91e77beeccSaaron bus_addr_t addr; 92e77beeccSaaron bus_size_t size; 93e77beeccSaaron int width; 94e77beeccSaaron } io[PCIC_IO_WINS]; 95e77beeccSaaron int ih_irq; 96e77beeccSaaron struct device *pcmcia; 97e77beeccSaaron 98e77beeccSaaron int shutdown; 99e77beeccSaaron }; 100e77beeccSaaron 101e77beeccSaaron struct pccbb_win_chain { 102e77beeccSaaron bus_addr_t wc_start; /* Caution: region [start, end], */ 103e77beeccSaaron bus_addr_t wc_end; /* instead of [start, end). */ 104e77beeccSaaron int wc_flags; 105e77beeccSaaron bus_space_handle_t wc_handle; 106e77beeccSaaron TAILQ_ENTRY(pccbb_win_chain) wc_list; 107e77beeccSaaron }; 108e77beeccSaaron #define PCCBB_MEM_CACHABLE 1 109e77beeccSaaron 110e77beeccSaaron TAILQ_HEAD(pccbb_win_chain_head, pccbb_win_chain); 111e77beeccSaaron 112e77beeccSaaron struct pccbb_softc { 113e77beeccSaaron struct device sc_dev; 114e77beeccSaaron bus_space_tag_t sc_iot; 115e77beeccSaaron bus_space_tag_t sc_memt; 116e77beeccSaaron bus_dma_tag_t sc_dmat; 117e77beeccSaaron 118e77beeccSaaron rbus_tag_t sc_rbus_iot; /* rbus for i/o donated from parent */ 119e77beeccSaaron rbus_tag_t sc_rbus_memt; /* rbus for mem donated from parent */ 120e77beeccSaaron 121e77beeccSaaron bus_space_tag_t sc_base_memt; 122e77beeccSaaron bus_space_handle_t sc_base_memh; 123e77beeccSaaron 124e1ec36b9Smickey struct timeout sc_ins_tmo; 125e77beeccSaaron void *sc_ih; /* interrupt handler */ 126e77beeccSaaron int sc_intrline; /* interrupt line */ 127e77beeccSaaron pcitag_t sc_intrtag; /* copy of pa->pa_intrtag */ 128e77beeccSaaron pci_intr_pin_t sc_intrpin; /* copy of pa->pa_intrpin */ 129e77beeccSaaron int sc_function; 130e77beeccSaaron u_int32_t sc_flags; 131e77beeccSaaron #define CBB_CARDEXIST 0x01 132e77beeccSaaron #define CBB_INSERTING 0x01000000 133e77beeccSaaron #define CBB_16BITCARD 0x04 134e77beeccSaaron #define CBB_32BITCARD 0x08 135e77beeccSaaron 136e77beeccSaaron pci_chipset_tag_t sc_pc; 137e77beeccSaaron pcitag_t sc_tag; 138fe78520cSmiod pcireg_t sc_id; 139e77beeccSaaron int sc_chipset; /* chipset id */ 140be4f59f6Smickey int sc_ints_on; 141e77beeccSaaron 142*6e723e3aSkettenis pcireg_t sc_csr; 143*6e723e3aSkettenis pcireg_t sc_bhlcr; 144*6e723e3aSkettenis pcireg_t sc_int; 145*6e723e3aSkettenis 146ce4094cfSmickey pcireg_t sc_sockbase; /* Socket base register */ 147ce4094cfSmickey pcireg_t sc_busnum; /* bus number */ 148ce4094cfSmickey 149*6e723e3aSkettenis pcireg_t sc_sysctrl; 150*6e723e3aSkettenis pcireg_t sc_cbctrl; 151*6e723e3aSkettenis pcireg_t sc_mfunc; 152*6e723e3aSkettenis 153e77beeccSaaron /* CardBus stuff */ 154e77beeccSaaron struct cardslot_softc *sc_csc; 155e77beeccSaaron 156e77beeccSaaron struct pccbb_win_chain_head sc_memwindow; 157e77beeccSaaron struct pccbb_win_chain_head sc_iowindow; 158e77beeccSaaron 159*6e723e3aSkettenis pcireg_t sc_membase[2]; 160*6e723e3aSkettenis pcireg_t sc_memlimit[2]; 161*6e723e3aSkettenis pcireg_t sc_iobase[2]; 162*6e723e3aSkettenis pcireg_t sc_iolimit[2]; 163*6e723e3aSkettenis 164e77beeccSaaron /* pcmcia stuff */ 165e77beeccSaaron struct pcic_handle sc_pcmcia_h; 166e77beeccSaaron pcmcia_chipset_tag_t sc_pct; 167e77beeccSaaron int sc_pcmcia_flags; 168e77beeccSaaron #define PCCBB_PCMCIA_IO_RELOC 0x01 /* IO addr relocatable stuff exists */ 169e77beeccSaaron #define PCCBB_PCMCIA_MEM_32 0x02 /* 32-bit memory address ready */ 170e77beeccSaaron #define PCCBB_PCMCIA_16BITONLY 0x04 /* 32-bit mode disable */ 171e77beeccSaaron 172e77beeccSaaron struct proc *sc_event_thread; 173e77beeccSaaron SIMPLEQ_HEAD(, pcic_event) sc_events; 174e77beeccSaaron 175e77beeccSaaron /* interrupt handler list on the bridge */ 176e77beeccSaaron struct pccbb_intrhand_list *sc_pil; 177e77beeccSaaron int sc_pil_intr_enable; /* can i call intr handler for child device? */ 178e77beeccSaaron }; 179e77beeccSaaron 180e77beeccSaaron /* 181e77beeccSaaron * struct pccbb_intrhand_list holds interrupt handler and argument for 182e77beeccSaaron * child devices. 183e77beeccSaaron */ 184e77beeccSaaron 185e77beeccSaaron struct pccbb_intrhand_list { 186c4071fd1Smillert int (*pil_func)(void *); 187e77beeccSaaron void *pil_arg; 188c70c1766Saaron int pil_level; 18972cea28dSgrange struct evcount pil_count; 190e77beeccSaaron struct pccbb_intrhand_list *pil_next; 191e77beeccSaaron }; 192e77beeccSaaron 193e77beeccSaaron #endif /* _DEV_PCI_PCCBBREG_H_ */ 194