summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/pci/if_de.c35
-rw-r--r--sys/dev/pci/pci.c168
-rw-r--r--sys/dev/pci/pci_map.c274
-rw-r--r--sys/dev/pci/pcireg.h29
-rw-r--r--sys/dev/pci/pcivar.h25
5 files changed, 367 insertions, 164 deletions
diff --git a/sys/dev/pci/if_de.c b/sys/dev/pci/if_de.c
index 8bf38bb1df5..8b989fee6f4 100644
--- a/sys/dev/pci/if_de.c
+++ b/sys/dev/pci/if_de.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_de.c,v 1.40 1999/02/26 17:05:51 jason Exp $ */
+/* $OpenBSD: if_de.c,v 1.41 1999/07/18 03:20:18 csapuntz Exp $ */
/* $NetBSD: if_de.c,v 1.45 1997/06/09 00:34:18 thorpej Exp $ */
/*-
@@ -5237,11 +5237,6 @@ tulip_pci_attach(
} while (0)
#endif /* __NetBSD__ */
-#if defined(__OpenBSD__)
- pci_chipset_tag_t pc = pa->pa_pc;
- bus_addr_t tulipbase;
- bus_size_t tulipsize;
-#endif
int retval, idx;
u_int32_t revinfo, cfdainfo, id;
#if !defined(TULIP_IOMAPPED) && defined(__FreeBSD__)
@@ -5407,7 +5402,7 @@ tulip_pci_attach(
#endif
#endif /* __bsdi__ */
-#if defined(__NetBSD__)
+#if defined(__NetBSD__) || defined(__OpenBSD__)
csr_base = 0;
ioh_valid = (pci_mapreg_map(pa, PCI_CBIO, PCI_MAPREG_TYPE_IO, 0,
@@ -5417,32 +5412,6 @@ tulip_pci_attach(
&memt, &memh, NULL, NULL) == 0);
#endif
-#if defined(__OpenBSD__)
- ioh_valid = 0;
- memh_valid = 0;
- csr_base = 0;
-
-#if defined(TULIP_IO_MAPPED)
- iot = pa->pa_iot;
- retval = pci_io_find(pc, pa->pa_tag, PCI_CBIO, &tulipbase, &tulipsize);
- if (!retval)
- retval = bus_space_map(pa->pa_iot, tulipbase, tulipsize, 0,
- &ioh);
-
- ioh_valid = (retval == 0);
-#else
- memt = pa->pa_memt;
- retval = pci_mem_find(pc, pa->pa_tag, PCI_CBMA, &tulipbase, &tulipsize,
- NULL);
- if (!retval)
- retval = bus_space_map(pa->pa_memt, tulipbase, tulipsize, 0,
- &memh);
-
- memh_valid = (retval == 0);
-#endif
-
-#endif
-
#if defined(__OpenBSD__) || defined(__NetBSD__)
#if defined(TULIP_IOMAPPED)
if (ioh_valid) {
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index d19037527b7..15c45120d1a 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci.c,v 1.14 1998/10/29 18:11:53 csapuntz Exp $ */
+/* $OpenBSD: pci.c,v 1.15 1999/07/18 03:20:18 csapuntz Exp $ */
/* $NetBSD: pci.c,v 1.31 1997/06/06 23:48:04 thorpej Exp $ */
/*
@@ -173,6 +173,10 @@ pciattach(parent, self, aux)
pa.pa_id = id;
pa.pa_class = class;
+ /* This is a simplification of the NetBSD code.
+ We don't support turning off I/O or memory
+ on broken hardware. <csapuntz@stanford.edu> */
+ pa.pa_flags = PCI_FLAGS_IO_ENABLED | PCI_FLAGS_MEM_ENABLED;
if (bus == 0) {
pa.pa_intrswiz = 0;
pa.pa_intrtag = tag;
@@ -260,143 +264,49 @@ pcisubmatch(parent, match, aux)
return (success);
}
-int
-pci_io_find(pc, pcitag, reg, iobasep, iosizep)
- pci_chipset_tag_t pc;
- pcitag_t pcitag;
- int reg;
- bus_addr_t *iobasep;
- bus_size_t *iosizep;
+void
+set_pci_isa_bridge_callback(fn, arg)
+ void (*fn) __P((void *));
+ void *arg;
{
- pcireg_t addrdata, sizedata;
- int s;
-
- if (reg < PCI_MAPREG_START || reg >= PCI_MAPREG_END || (reg & 3))
- panic("pci_io_find: bad request");
-
- /* XXX?
- * Section 6.2.5.1, `Address Maps', tells us that:
- *
- * 1) The builtin software should have already mapped the device in a
- * reasonable way.
- *
- * 2) A device which wants 2^n bytes of memory will hardwire the bottom
- * n bits of the address to 0. As recommended, we write all 1s and see
- * what we get back.
- */
- addrdata = pci_conf_read(pc, pcitag, reg);
-
- s = splhigh();
- pci_conf_write(pc, pcitag, reg, 0xffffffff);
- sizedata = pci_conf_read(pc, pcitag, reg);
- pci_conf_write(pc, pcitag, reg, addrdata);
- splx(s);
-
- if (PCI_MAPREG_TYPE(addrdata) != PCI_MAPREG_TYPE_IO)
- panic("pci_io_find: not an I/O region");
-
- if (iobasep != NULL)
- *iobasep = PCI_MAPREG_IO_ADDR(addrdata);
- if (iosizep != NULL)
- *iosizep = PCI_MAPREG_IO_SIZE(sizedata);
-#ifdef powerpc
- /*
- * Open Firmware (yuck) shuts down devices before entering a
- * program so we need to bring them back 'online' to respond
- * to bus accesses... so far this is true on the power.4e.
- */
- s = splhigh();
- sizedata = pci_conf_read(pc, pcitag, PCI_COMMAND_STATUS_REG);
- sizedata |= (PCI_COMMAND_MASTER_ENABLE | PCI_COMMAND_IO_ENABLE |
- PCI_COMMAND_PARITY_ENABLE | PCI_COMMAND_SERR_ENABLE);
- pci_conf_write(pc, pcitag, PCI_COMMAND_STATUS_REG, sizedata);
- splx(s);
-#endif
-
- return (0);
+ if (pci_isa_bridge_callback != NULL)
+ panic("set_pci_isa_bridge_callback");
+ pci_isa_bridge_callback = fn;
+ pci_isa_bridge_callback_arg = arg;
}
int
-pci_mem_find(pc, pcitag, reg, membasep, memsizep, cacheablep)
+pci_get_capability(pc, tag, capid, offset, value)
pci_chipset_tag_t pc;
- pcitag_t pcitag;
- int reg;
- bus_addr_t *membasep;
- bus_size_t *memsizep;
- int *cacheablep;
+ pcitag_t tag;
+ int capid;
+ int *offset;
+ pcireg_t *value;
{
- pcireg_t addrdata, sizedata;
- int s;
-
- if (reg < PCI_MAPREG_START || reg >= PCI_MAPREG_END || (reg & 3))
- panic("pci_find_mem: bad request");
-
- /*
- * Section 6.2.5.1, `Address Maps', tells us that:
- *
- * 1) The builtin software should have already mapped the device in a
- * reasonable way.
- *
- * 2) A device which wants 2^n bytes of memory will hardwire the bottom
- * n bits of the address to 0. As recommended, we write all 1s and see
- * what we get back.
- */
- addrdata = pci_conf_read(pc, pcitag, reg);
-
- s = splhigh();
- pci_conf_write(pc, pcitag, reg, 0xffffffff);
- sizedata = pci_conf_read(pc, pcitag, reg);
- pci_conf_write(pc, pcitag, reg, addrdata);
- splx(s);
-
- if (PCI_MAPREG_TYPE(addrdata) == PCI_MAPREG_TYPE_IO)
- panic("pci_find_mem: I/O region");
-
- switch (PCI_MAPREG_MEM_TYPE(addrdata)) {
- case PCI_MAPREG_MEM_TYPE_32BIT:
- case PCI_MAPREG_MEM_TYPE_32BIT_1M:
- break;
- case PCI_MAPREG_MEM_TYPE_64BIT:
-/* XXX */ printf("pci_find_mem: 64-bit region\n");
-/* XXX */ return (1);
- default:
- printf("pci_find_mem: reserved region type\n");
- return (1);
- }
+ pcireg_t reg;
+ unsigned int ofs;
- if (membasep != NULL)
- *membasep = PCI_MAPREG_MEM_ADDR(addrdata); /* PCI addr */
- if (memsizep != NULL)
- *memsizep = PCI_MAPREG_MEM_SIZE(sizedata);
- if (cacheablep != NULL)
- *cacheablep = PCI_MAPREG_MEM_CACHEABLE(addrdata);
+ reg = pci_conf_read(pc, tag, PCI_COMMAND_STATUS_REG);
+ if (!(reg & PCI_STATUS_CAPLIST_SUPPORT))
+ return (0);
-#ifdef powerpc
- /*
- * Open Firmware (yuck) shuts down devices before entering a
- * program so we need to bring them back 'online' to respond
- * to bus accesses... so far this is true on the power.4e.
- */
- s = splhigh();
- sizedata = pci_conf_read(pc, pcitag, PCI_COMMAND_STATUS_REG);
- sizedata |= (PCI_COMMAND_MASTER_ENABLE | PCI_COMMAND_MEM_ENABLE |
- PCI_COMMAND_PARITY_ENABLE | PCI_COMMAND_SERR_ENABLE);
- pci_conf_write(pc, pcitag, PCI_COMMAND_STATUS_REG, sizedata);
- splx(s);
+ ofs = PCI_CAPLIST_PTR(pci_conf_read(pc, tag, PCI_CAPLISTPTR_REG));
+ while (ofs != 0) {
+#ifdef DIAGNOSTIC
+ if ((ofs & 3) || (ofs < 0x40))
+ panic("pci_get_capability");
#endif
+ reg = pci_conf_read(pc, tag, ofs);
+ if (PCI_CAPLIST_CAP(reg) == capid) {
+ if (offset)
+ *offset = ofs;
+ if (value)
+ *value = reg;
+ return (1);
+ }
+ ofs = PCI_CAPLIST_NEXT(reg);
+ }
- return 0;
-}
-
-void
-set_pci_isa_bridge_callback(fn, arg)
- void (*fn) __P((void *));
- void *arg;
-{
-
- if (pci_isa_bridge_callback != NULL)
- panic("set_pci_isa_bridge_callback");
- pci_isa_bridge_callback = fn;
- pci_isa_bridge_callback_arg = arg;
+ return (0);
}
diff --git a/sys/dev/pci/pci_map.c b/sys/dev/pci/pci_map.c
new file mode 100644
index 00000000000..a68ba971ada
--- /dev/null
+++ b/sys/dev/pci/pci_map.c
@@ -0,0 +1,274 @@
+/* $NetBSD: pci_map.c,v 1.5 1998/08/15 10:10:54 mycroft Exp $ */
+
+/*-
+ * Copyright (c) 1998 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Charles M. Hannum.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * PCI device mapping.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
+
+
+static int nbsd_pci_io_find __P((pci_chipset_tag_t, pcitag_t, int, pcireg_t,
+ bus_addr_t *, bus_size_t *, int *));
+static int nbsd_pci_mem_find __P((pci_chipset_tag_t, pcitag_t, int, pcireg_t,
+ bus_addr_t *, bus_size_t *, int *));
+
+static int
+nbsd_pci_io_find(pc, tag, reg, type, basep, sizep, flagsp)
+ pci_chipset_tag_t pc;
+ pcitag_t tag;
+ int reg;
+ pcireg_t type;
+ bus_addr_t *basep;
+ bus_size_t *sizep;
+ int *flagsp;
+{
+ pcireg_t address, mask;
+ int s;
+
+ if (reg < PCI_MAPREG_START || reg >= PCI_MAPREG_END || (reg & 3))
+ panic("pci_io_find: bad request");
+
+ /*
+ * Section 6.2.5.1, `Address Maps', tells us that:
+ *
+ * 1) The builtin software should have already mapped the device in a
+ * reasonable way.
+ *
+ * 2) A device which wants 2^n bytes of memory will hardwire the bottom
+ * n bits of the address to 0. As recommended, we write all 1s and see
+ * what we get back.
+ */
+ s = splhigh();
+ address = pci_conf_read(pc, tag, reg);
+ pci_conf_write(pc, tag, reg, 0xffffffff);
+ mask = pci_conf_read(pc, tag, reg);
+ pci_conf_write(pc, tag, reg, address);
+ splx(s);
+
+ if (PCI_MAPREG_TYPE(address) != PCI_MAPREG_TYPE_IO) {
+ printf("pci_io_find: expected type i/o, found mem\n");
+ return (1);
+ }
+
+ if (PCI_MAPREG_IO_SIZE(mask) == 0) {
+ printf("pci_io_find: void region\n");
+ return (1);
+ }
+
+ if (basep != 0)
+ *basep = PCI_MAPREG_IO_ADDR(address);
+ if (sizep != 0)
+ *sizep = PCI_MAPREG_IO_SIZE(mask);
+ if (flagsp != 0)
+ *flagsp = 0;
+
+ return (0);
+}
+
+static int
+nbsd_pci_mem_find(pc, tag, reg, type, basep, sizep, flagsp)
+ pci_chipset_tag_t pc;
+ pcitag_t tag;
+ int reg;
+ pcireg_t type;
+ bus_addr_t *basep;
+ bus_size_t *sizep;
+ int *flagsp;
+{
+ pcireg_t address, mask;
+ int s;
+
+ if (reg < PCI_MAPREG_START || reg >= PCI_MAPREG_END || (reg & 3))
+ panic("pci_find_mem: bad request");
+
+ /*
+ * Section 6.2.5.1, `Address Maps', tells us that:
+ *
+ * 1) The builtin software should have already mapped the device in a
+ * reasonable way.
+ *
+ * 2) A device which wants 2^n bytes of memory will hardwire the bottom
+ * n bits of the address to 0. As recommended, we write all 1s and see
+ * what we get back.
+ */
+ s = splhigh();
+ address = pci_conf_read(pc, tag, reg);
+ pci_conf_write(pc, tag, reg, 0xffffffff);
+ mask = pci_conf_read(pc, tag, reg);
+ pci_conf_write(pc, tag, reg, address);
+ splx(s);
+
+ if (PCI_MAPREG_TYPE(address) != PCI_MAPREG_TYPE_MEM) {
+ printf("pci_mem_find: expected type mem, found i/o\n");
+ return (1);
+ }
+ if (type != -1 &&
+ PCI_MAPREG_MEM_TYPE(address) != PCI_MAPREG_MEM_TYPE(type)) {
+ printf("pci_mem_find: expected mem type %08x, found %08x\n",
+ PCI_MAPREG_MEM_TYPE(type),
+ PCI_MAPREG_MEM_TYPE(address));
+ return (1);
+ }
+
+ if (PCI_MAPREG_MEM_SIZE(mask) == 0) {
+ printf("pci_mem_find: void region\n");
+ return (1);
+ }
+
+ switch (PCI_MAPREG_MEM_TYPE(address)) {
+ case PCI_MAPREG_MEM_TYPE_32BIT:
+ case PCI_MAPREG_MEM_TYPE_32BIT_1M:
+ break;
+ case PCI_MAPREG_MEM_TYPE_64BIT:
+ printf("pci_mem_find: 64-bit memory mapping register\n");
+ return (1);
+ default:
+ printf("pci_mem_find: reserved mapping register type\n");
+ return (1);
+ }
+
+ if (basep != 0)
+ *basep = PCI_MAPREG_MEM_ADDR(address);
+ if (sizep != 0)
+ *sizep = PCI_MAPREG_MEM_SIZE(mask);
+ if (flagsp != 0)
+ *flagsp = PCI_MAPREG_MEM_CACHEABLE(address)
+#ifndef __OpenBSD__
+ ? BUS_SPACE_MAP_CACHEABLE : 0
+#endif
+ ;
+
+ return (0);
+}
+
+int
+pci_io_find(pc, pcitag, reg, iobasep, iosizep)
+ pci_chipset_tag_t pc;
+ pcitag_t pcitag;
+ int reg;
+ bus_addr_t *iobasep;
+ bus_size_t *iosizep;
+{
+ return (nbsd_pci_io_find(pc, pcitag, reg, 0, iobasep, iosizep, 0));
+}
+
+int
+pci_mem_find(pc, pcitag, reg, membasep, memsizep, cacheablep)
+ pci_chipset_tag_t pc;
+ pcitag_t pcitag;
+ int reg;
+ bus_addr_t *membasep;
+ bus_size_t *memsizep;
+ int *cacheablep;
+{
+ return (nbsd_pci_mem_find(pc, pcitag, reg, -1, membasep, memsizep,
+ cacheablep));
+}
+
+
+int
+pci_mapreg_info(pc, tag, reg, type, basep, sizep, flagsp)
+ pci_chipset_tag_t pc;
+ pcitag_t tag;
+ int reg;
+ pcireg_t type;
+ bus_addr_t *basep;
+ bus_size_t *sizep;
+ int *flagsp;
+{
+
+ if (PCI_MAPREG_TYPE(type) == PCI_MAPREG_TYPE_IO)
+ return (nbsd_pci_io_find(pc, tag, reg, type, basep, sizep,
+ flagsp));
+ else
+ return (nbsd_pci_mem_find(pc, tag, reg, type, basep, sizep,
+ flagsp));
+}
+
+int
+pci_mapreg_map(pa, reg, type, busflags, tagp, handlep, basep, sizep)
+ struct pci_attach_args *pa;
+ int reg, busflags;
+ pcireg_t type;
+ bus_space_tag_t *tagp;
+ bus_space_handle_t *handlep;
+ bus_addr_t *basep;
+ bus_size_t *sizep;
+{
+ bus_space_tag_t tag;
+ bus_space_handle_t handle;
+ bus_addr_t base;
+ bus_size_t size;
+ int flags;
+
+ if (PCI_MAPREG_TYPE(type) == PCI_MAPREG_TYPE_IO) {
+ if ((pa->pa_flags & PCI_FLAGS_IO_ENABLED) == 0)
+ return (1);
+ if (nbsd_pci_io_find(pa->pa_pc, pa->pa_tag, reg, type, &base,
+ &size, &flags))
+ return (1);
+ tag = pa->pa_iot;
+ } else {
+ if ((pa->pa_flags & PCI_FLAGS_MEM_ENABLED) == 0)
+ return (1);
+ if (nbsd_pci_mem_find(pa->pa_pc, pa->pa_tag, reg, type, &base,
+ &size, &flags))
+ return (1);
+ tag = pa->pa_memt;
+ }
+
+ if (bus_space_map(tag, base, size, busflags | flags, &handle))
+ return (1);
+
+ if (tagp != 0)
+ *tagp = tag;
+ if (handlep != 0)
+ *handlep = handle;
+ if (basep != 0)
+ *basep = base;
+ if (sizep != 0)
+ *sizep = size;
+
+ return (0);
+}
diff --git a/sys/dev/pci/pcireg.h b/sys/dev/pci/pcireg.h
index 7463c8a72a1..a22fa6dc8fa 100644
--- a/sys/dev/pci/pcireg.h
+++ b/sys/dev/pci/pcireg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pcireg.h,v 1.10 1999/01/30 23:24:22 niklas Exp $ */
+/* $OpenBSD: pcireg.h,v 1.11 1999/07/18 03:20:18 csapuntz Exp $ */
/* $NetBSD: pcireg.h,v 1.11 1996/08/10 15:42:33 mycroft Exp $ */
/*
@@ -74,6 +74,7 @@ typedef u_int16_t pci_product_id_t;
#define PCI_COMMAND_SERR_ENABLE 0x00000100
#define PCI_COMMAND_BACKTOBACK_ENABLE 0x00000200
+#define PCI_STATUS_CAPLIST_SUPPORT 0x00100000
#define PCI_STATUS_66MHZ_SUPPORT 0x00200000
#define PCI_STATUS_UDF_SUPPORT 0x00400000
#define PCI_STATUS_BACKTOBACK_SUPPORT 0x00800000
@@ -345,6 +346,32 @@ typedef u_int8_t pci_revision_t;
#define PCI_MAPREG_IO_ADDR_MASK 0xfffffffe
/*
+ * Cardbus CIS pointer (PCI rev. 2.1)
+ */
+#define PCI_CARDBUS_CIS_REG 0x28
+
+/*
+ * Subsystem identification register; contains a vendor ID and a device ID.
+ * Types/macros for PCI_ID_REG apply.
+ * (PCI rev. 2.1)
+ */
+#define PCI_SUBSYS_ID_REG 0x2c
+
+/*
+ * capabilities link list (PCI rev. 2.2)
+ */
+#define PCI_CAPLISTPTR_REG 0x34
+#define PCI_CAPLIST_PTR(cpr) ((cpr) & 0xff)
+#define PCI_CAPLIST_NEXT(cr) (((cr) >> 8) & 0xff)
+#define PCI_CAPLIST_CAP(cr) ((cr) & 0xff)
+#define PCI_CAP_PWRMGMT 1
+#define PCI_CAP_AGP 2
+#define PCI_CAP_VPD 3
+#define PCI_CAP_SLOTID 4
+#define PCI_CAP_MBI 5
+#define PCI_CAP_HOTSWAP 6
+
+/*
* Interrupt Configuration Register; contains interrupt pin and line.
*/
#define PCI_INTERRUPT_REG 0x3c
diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h
index e54214335bb..deef4a9da7c 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pcivar.h,v 1.15 1999/06/16 14:38:36 espie Exp $ */
+/* $OpenBSD: pcivar.h,v 1.16 1999/07/18 03:20:18 csapuntz Exp $ */
/* $NetBSD: pcivar.h,v 1.23 1997/06/06 23:48:05 thorpej Exp $ */
/*
@@ -104,6 +104,7 @@ struct pci_attach_args {
bus_space_tag_t pa_memt; /* pci mem space tag */
bus_dma_tag_t pa_dmat; /* DMA tag */
pci_chipset_tag_t pa_pc;
+ int pa_flags; /* flags; see below */
u_int pa_device;
u_int pa_function;
@@ -125,6 +126,14 @@ struct pci_attach_args {
};
/*
+ * Flags given in the bus and device attachment args.
+ *
+ * OpenBSD doesn't actually use them yet -- csapuntz@cvs.openbsd.org
+ */
+#define PCI_FLAGS_IO_ENABLED 0x01 /* I/O space is enabled */
+#define PCI_FLAGS_MEM_ENABLED 0x02 /* memory space is enabled */
+
+/*
* Locators devices that attach to 'pcibus', as specified to config.
*/
#define pcibuscf_bus cf_loc[0]
@@ -143,11 +152,25 @@ struct pci_attach_args {
* Configuration space access and utility functions. (Note that most,
* e.g. make_tag, conf_read, conf_write are declared by pci_machdep.h.)
*/
+/*
+ * Configuration space access and utility functions. (Note that most,
+ * e.g. make_tag, conf_read, conf_write are declared by pci_machdep.h.)
+ */
+int pci_mapreg_info __P((pci_chipset_tag_t, pcitag_t, int, pcireg_t,
+ bus_addr_t *, bus_size_t *, int *));
+int pci_mapreg_map __P((struct pci_attach_args *, int, pcireg_t, int,
+ bus_space_tag_t *, bus_space_handle_t *, bus_addr_t *,
+ bus_size_t *));
+
+
int pci_io_find __P((pci_chipset_tag_t, pcitag_t, int, bus_addr_t *,
bus_size_t *));
int pci_mem_find __P((pci_chipset_tag_t, pcitag_t, int, bus_addr_t *,
bus_size_t *, int *));
+int pci_get_capability __P((pci_chipset_tag_t, pcitag_t, int,
+ int *, pcireg_t *));
+
/*
* Helper functions for autoconfiguration.
*/