summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/alpha/pci/pci_machdep.h3
-rw-r--r--sys/arch/amd64/include/pci_machdep.h3
-rw-r--r--sys/arch/arm/include/pci_machdep.h3
-rw-r--r--sys/arch/hppa/include/pci_machdep.h3
-rw-r--r--sys/arch/hppa64/include/pci_machdep.h3
-rw-r--r--sys/arch/i386/pci/pci_machdep.h3
-rw-r--r--sys/arch/landisk/include/pci_machdep.h3
-rw-r--r--sys/arch/loongson/include/pci_machdep.h3
-rw-r--r--sys/arch/octeon/include/pci_machdep.h3
-rw-r--r--sys/arch/powerpc/pci/pci_machdep.h3
-rw-r--r--sys/arch/sgi/pci/macepcibridge.c10
-rw-r--r--sys/arch/sgi/pci/pci_machdep.h25
-rw-r--r--sys/arch/sgi/xbow/xbridge.c14
-rw-r--r--sys/arch/sparc64/include/pci_machdep.h4
-rw-r--r--sys/dev/pci/pci.c9
15 files changed, 71 insertions, 21 deletions
diff --git a/sys/arch/alpha/pci/pci_machdep.h b/sys/arch/alpha/pci/pci_machdep.h
index 9cc5cba318a..97e29450d16 100644
--- a/sys/arch/alpha/pci/pci_machdep.h
+++ b/sys/arch/alpha/pci/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.25 2011/05/21 21:36:39 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.26 2011/10/10 19:42:34 miod Exp $ */
/* $NetBSD: pci_machdep.h,v 1.6 1996/11/19 04:49:21 cgd Exp $ */
/*
@@ -114,6 +114,7 @@ int alpha_sysctl_chipset(int *, u_int, char *, size_t *);
(*(c)->pc_intr_establish)((c)->pc_intr_v, (ih), (l), (h), (a), (nm))
#define pci_intr_disestablish(c, iv) \
(*(c)->pc_intr_disestablish)((c)->pc_intr_v, (iv))
+#define pci_probe_device_hook(c, a) (0)
/*
* alpha-specific PCI functions.
diff --git a/sys/arch/amd64/include/pci_machdep.h b/sys/arch/amd64/include/pci_machdep.h
index 75922d1e57c..939398f7002 100644
--- a/sys/arch/amd64/include/pci_machdep.h
+++ b/sys/arch/amd64/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.18 2011/05/21 15:58:27 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.19 2011/10/10 19:42:36 miod Exp $ */
/* $NetBSD: pci_machdep.h,v 1.1 2003/02/26 21:26:11 fvdl Exp $ */
/*
@@ -89,6 +89,7 @@ void *pci_intr_establish(pci_chipset_tag_t, pci_intr_handle_t,
void pci_intr_disestablish(pci_chipset_tag_t, void *);
void pci_decompose_tag(pci_chipset_tag_t, pcitag_t,
int *, int *, int *);
+#define pci_probe_device_hook(c, a) (0)
void pci_dev_postattach(struct device *, struct pci_attach_args *);
diff --git a/sys/arch/arm/include/pci_machdep.h b/sys/arch/arm/include/pci_machdep.h
index 79b7d57e814..3be97188dca 100644
--- a/sys/arch/arm/include/pci_machdep.h
+++ b/sys/arch/arm/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.10 2011/05/21 21:36:39 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.11 2011/10/10 19:42:36 miod Exp $ */
/* $NetBSD: pci_machdep.h,v 1.2 2002/05/15 19:23:52 thorpej Exp $ */
/*
@@ -99,5 +99,6 @@ struct arm32_pci_chipset {
(*(c)->pc_intr_establish)((c)->pc_intr_v, (ih), (l), (h), (a), (n))
#define pci_intr_disestablish(c, iv) \
(*(c)->pc_intr_disestablish)((c)->pc_intr_v, (iv))
+#define pci_probe_device_hook(c, a) (0)
#define pci_dev_postattach(a, b)
diff --git a/sys/arch/hppa/include/pci_machdep.h b/sys/arch/hppa/include/pci_machdep.h
index 3f3c60fdfc1..0678674fe78 100644
--- a/sys/arch/hppa/include/pci_machdep.h
+++ b/sys/arch/hppa/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.8 2011/05/21 21:36:17 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.9 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 2003 Michael Shalayeff
@@ -88,6 +88,7 @@ struct hppa_pci_chipset_tag {
(*(c)->pc_intr_establish)((c)->_cookie, (ih), (l), (h), (a), (nm))
#define pci_intr_disestablish(c, iv) \
(*(c)->pc_intr_disestablish)((c)->_cookie, (iv))
+#define pci_probe_device_hook(c, a) (0)
#define pciide_machdep_compat_intr_establish(a, b, c, d, e) (NULL)
#define pciide_machdep_compat_intr_disestablish(a, b) ((void)(a), (void)(b))
diff --git a/sys/arch/hppa64/include/pci_machdep.h b/sys/arch/hppa64/include/pci_machdep.h
index fb2db437faa..122e508add2 100644
--- a/sys/arch/hppa64/include/pci_machdep.h
+++ b/sys/arch/hppa64/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.8 2011/05/21 21:04:29 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.9 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 2005 Michael Shalayeff
@@ -79,6 +79,7 @@ struct hppa64_pci_chipset_tag {
(*(c)->pc_intr_establish)((c)->_cookie, (ih), (l), (h), (a), (nm))
#define pci_intr_disestablish(c, iv) \
(*(c)->pc_intr_disestablish)((c)->_cookie, (iv))
+#define pci_probe_device_hook(c, a) (0)
#define pciide_machdep_compat_intr_establish(a, b, c, d, e) (NULL)
#define pciide_machdep_compat_intr_disestablish(a, b) ((void)(a), (void)(b))
diff --git a/sys/arch/i386/pci/pci_machdep.h b/sys/arch/i386/pci/pci_machdep.h
index 13c5f711095..a358597e65e 100644
--- a/sys/arch/i386/pci/pci_machdep.h
+++ b/sys/arch/i386/pci/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.22 2011/05/21 15:14:57 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.23 2011/10/10 19:42:36 miod Exp $ */
/* $NetBSD: pci_machdep.h,v 1.7 1997/06/06 23:29:18 thorpej Exp $ */
/*
@@ -105,6 +105,7 @@ void *pci_intr_establish(pci_chipset_tag_t, pci_intr_handle_t,
void pci_intr_disestablish(pci_chipset_tag_t, void *);
void pci_decompose_tag(pci_chipset_tag_t, pcitag_t,
int *, int *, int *);
+#define pci_probe_device_hook(c, a) (0)
void pci_dev_postattach(struct device *, struct pci_attach_args *);
diff --git a/sys/arch/landisk/include/pci_machdep.h b/sys/arch/landisk/include/pci_machdep.h
index 74847e3ab52..10da37b602b 100644
--- a/sys/arch/landisk/include/pci_machdep.h
+++ b/sys/arch/landisk/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.6 2011/05/21 21:36:39 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.7 2011/10/10 19:42:36 miod Exp $ */
/* $NetBSD: pci_machdep.h,v 1.1 2006/09/01 21:26:18 uwe Exp $ */
/*
@@ -82,5 +82,6 @@ void landisk_pci_conf_interrupt(void *v, int bus, int dev, int pin,
landisk_pci_intr_establish(v, ih, level, ih_fun, ih_arg, ih_name)
#define pci_intr_disestablish(v, cookie) \
landisk_pci_intr_disestablish(v, cookie)
+#define pci_probe_device_hook(c, a) (0)
#define pci_dev_postattach(a, b)
diff --git a/sys/arch/loongson/include/pci_machdep.h b/sys/arch/loongson/include/pci_machdep.h
index bf793286a94..7ee2396b940 100644
--- a/sys/arch/loongson/include/pci_machdep.h
+++ b/sys/arch/loongson/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.5 2011/05/21 21:36:39 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.6 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 2003-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -82,6 +82,7 @@ struct mips_pci_chipset {
(*(c)->pc_intr_establish)((c)->pc_intr_v, (ih), (l), (h), (a), (nm))
#define pci_intr_disestablish(c, iv) \
(*(c)->pc_intr_disestablish)((c)->pc_intr_v, (iv))
+#define pci_probe_device_hook(c, a) (0)
/* PCI view of CPU memory */
extern paddr_t loongson_dma_base;
diff --git a/sys/arch/octeon/include/pci_machdep.h b/sys/arch/octeon/include/pci_machdep.h
index 07d6bc5c881..806164aae28 100644
--- a/sys/arch/octeon/include/pci_machdep.h
+++ b/sys/arch/octeon/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.3 2011/05/21 21:36:40 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.4 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 2003-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -110,6 +110,7 @@ static inline void pci_conf_write_db(void * c, pcitag_t t, int r, pcireg_t v,
(*(c)->pc_intr_establish)((c)->pc_intr_v, (ih), (l), (h), (a), (nm))
#define pci_intr_disestablish(c, iv) \
(*(c)->pc_intr_disestablish)((c)->pc_intr_v, (iv))
+#define pci_probe_device_hook(c, a) (0)
/* PCI view of CPU memory */
extern paddr_t loongson_dma_base;
diff --git a/sys/arch/powerpc/pci/pci_machdep.h b/sys/arch/powerpc/pci/pci_machdep.h
index a2cd61a8661..d277464e09d 100644
--- a/sys/arch/powerpc/pci/pci_machdep.h
+++ b/sys/arch/powerpc/pci/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.21 2011/05/21 20:47:39 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.22 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 1996 Carnegie-Mellon University.
@@ -96,5 +96,6 @@ struct ppc_pci_chipset {
(*(c)->pc_intr_disestablish)((c)->pc_intr_v, (iv))
#define pci_ether_hw_addr(c, s) \
(*(c)->pc_ether_hw_addr)((c), (s))
+#define pci_probe_device_hook(c, a) (0)
#define pci_dev_postattach(a, b)
diff --git a/sys/arch/sgi/pci/macepcibridge.c b/sys/arch/sgi/pci/macepcibridge.c
index 0dde121fd35..99ac177f89c 100644
--- a/sys/arch/sgi/pci/macepcibridge.c
+++ b/sys/arch/sgi/pci/macepcibridge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: macepcibridge.c,v 1.41 2010/12/04 17:06:31 miod Exp $ */
+/* $OpenBSD: macepcibridge.c,v 1.42 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 2009 Miodrag Vallat.
@@ -85,6 +85,7 @@ void mace_pcibr_decompose_tag(void *, pcitag_t, int *, int *, int *);
int mace_pcibr_conf_size(void *, pcitag_t);
pcireg_t mace_pcibr_conf_read(void *, pcitag_t, int);
void mace_pcibr_conf_write(void *, pcitag_t, int, pcireg_t);
+int mace_pcibr_probe_device_hook(void *, struct pci_attach_args *);
int mace_pcibr_get_widget(void *);
int mace_pcibr_get_dl(void *, pcitag_t, struct sgi_device_location *);
int mace_pcibr_intr_map(struct pci_attach_args *, pci_intr_handle_t *);
@@ -244,6 +245,7 @@ mace_pcibrattach(struct device *parent, struct device *self, void *aux)
sc->sc_pc.pc_conf_read = mace_pcibr_conf_read;
sc->sc_pc.pc_conf_write = mace_pcibr_conf_write;
sc->sc_pc.pc_get_widget = mace_pcibr_get_widget;
+ sc->sc_pc.pc_probe_device_hook = mace_pcibr_probe_device_hook;
sc->sc_pc.pc_get_dl = mace_pcibr_get_dl;
sc->sc_pc.pc_intr_v = NULL;
sc->sc_pc.pc_intr_map = mace_pcibr_intr_map;
@@ -429,6 +431,12 @@ mace_pcibr_conf_write(void *cpv, pcitag_t tag, int offset, pcireg_t data)
}
int
+mace_pcibr_probe_device_hook(void *unused, struct pci_attach_args *notused)
+{
+ return 0;
+}
+
+int
mace_pcibr_get_widget(void *unused)
{
return 0;
diff --git a/sys/arch/sgi/pci/pci_machdep.h b/sys/arch/sgi/pci/pci_machdep.h
index 58f2ae3d747..9bd17e04569 100644
--- a/sys/arch/sgi/pci/pci_machdep.h
+++ b/sys/arch/sgi/pci/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.13 2011/05/21 21:36:40 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.14 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 2003-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -47,6 +47,8 @@ struct mips_pci_chipset {
int (*pc_conf_size)(void *, pcitag_t);
pcireg_t (*pc_conf_read)(void *, pcitag_t, int);
void (*pc_conf_write)(void *, pcitag_t, int, pcireg_t);
+ int (*pc_probe_device_hook)(void *, struct pci_attach_args *);
+
int (*pc_get_widget)(void *);
int (*pc_get_dl)(void *, pcitag_t, struct sgi_device_location *);
@@ -82,10 +84,6 @@ struct mips_pci_chipset {
(*(c)->pc_conf_read)((c)->pc_conf_v, (t), (r))
#define pci_conf_write(c, t, r, v) \
(*(c)->pc_conf_write)((c)->pc_conf_v, (t), (r), (v))
-#define pci_get_widget(c) \
- (*(c)->pc_get_widget)((c)->pc_conf_v)
-#define pci_get_device_location(c,t,l) \
- (*(c)->pc_get_dl)((c)->pc_conf_v, (t), (l))
#define pci_intr_map(c, ihp) \
(*(c)->pa_pc->pc_intr_map)((c), (ihp))
#define pci_intr_map_msi(c, ihp) (-1)
@@ -97,6 +95,21 @@ struct mips_pci_chipset {
(*(c)->pc_intr_disestablish)((c)->pc_intr_v, (iv))
#define pci_intr_line(c, ih) \
(*(c)->pc_intr_line)((c)->pc_intr_v, (ih))
+#define pci_probe_device_hook(c, a) \
+ (*(c)->pc_probe_device_hook)((c)->pc_conf_v, (a))
+#define pci_dev_postattach(a, b) do { } while (0)
+
+/*
+ * Functions provided to machine-dependent PCI code.
+ */
+#define pci_get_widget(c) \
+ (*(c)->pc_get_widget)((c)->pc_conf_v)
+#define pci_get_device_location(c,t,l) \
+ (*(c)->pc_get_dl)((c)->pc_conf_v, (t), (l))
+
+/*
+ * Functions provided to machine-independent rbus code.
+ */
#define rbus_pccbb_parent_io(dev, pa) \
(rbus_tag_t)((*(pa)->pa_pc->pc_rbus_parent_io)(pa))
#define rbus_pccbb_parent_mem(dev, pa) \
@@ -104,5 +117,3 @@ struct mips_pci_chipset {
void pccbb_initialize(pci_chipset_tag_t, pcitag_t, uint, uint, uint);
void ppb_initialize(pci_chipset_tag_t, pcitag_t, uint, uint, uint);
-
-#define pci_dev_postattach(a, b)
diff --git a/sys/arch/sgi/xbow/xbridge.c b/sys/arch/sgi/xbow/xbridge.c
index c7192ef6df6..e072c40e29e 100644
--- a/sys/arch/sgi/xbow/xbridge.c
+++ b/sys/arch/sgi/xbow/xbridge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xbridge.c,v 1.82 2011/04/17 17:44:24 miod Exp $ */
+/* $OpenBSD: xbridge.c,v 1.83 2011/10/10 19:42:36 miod Exp $ */
/*
* Copyright (c) 2008, 2009, 2011 Miodrag Vallat.
@@ -205,6 +205,7 @@ void xbridge_intr_disestablish(void *, void *);
int xbridge_intr_line(void *, pci_intr_handle_t);
int xbridge_ppb_setup(void *, pcitag_t, bus_addr_t *, bus_addr_t *,
bus_addr_t *, bus_addr_t *);
+int xbridge_probe_device_hook(void *, struct pci_attach_args *);
void *xbridge_rbus_parent_io(struct pci_attach_args *);
void *xbridge_rbus_parent_mem(struct pci_attach_args *);
int xbridge_get_widget(void *);
@@ -569,6 +570,7 @@ xbpci_attach(struct device *parent, struct device *self, void *aux)
xb->xb_pc.pc_conf_size = xbridge_conf_size;
xb->xb_pc.pc_conf_read = xbridge_conf_read;
xb->xb_pc.pc_conf_write = xbridge_conf_write;
+ xb->xb_pc.pc_probe_device_hook = xbridge_probe_device_hook;
xb->xb_pc.pc_get_widget = xbridge_get_widget;
xb->xb_pc.pc_get_dl = xbridge_get_dl;
xb->xb_pc.pc_intr_v = xb;
@@ -868,6 +870,16 @@ xbridge_conf_write(void *cookie, pcitag_t tag, int offset, pcireg_t data)
}
int
+xbridge_probe_device_hook(void *cookie, struct pci_attach_args *pa)
+{
+#if 0
+ struct xbpci_softc *xb = cookie;
+#endif
+
+ return 0;
+}
+
+int
xbridge_get_widget(void *cookie)
{
struct xbpci_softc *xb = cookie;
diff --git a/sys/arch/sparc64/include/pci_machdep.h b/sys/arch/sparc64/include/pci_machdep.h
index 20deee3a3b8..3240314871b 100644
--- a/sys/arch/sparc64/include/pci_machdep.h
+++ b/sys/arch/sparc64/include/pci_machdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci_machdep.h,v 1.29 2011/07/06 05:08:50 kettenis Exp $ */
+/* $OpenBSD: pci_machdep.h,v 1.30 2011/10/10 19:42:36 miod Exp $ */
/* $NetBSD: pci_machdep.h,v 1.7 2001/07/20 00:07:14 eeh Exp $ */
/*
@@ -102,6 +102,8 @@ int sparc64_pci_enumerate_bus(struct pci_softc *,
#define PCI_MACHDEP_ENUMERATE_BUS sparc64_pci_enumerate_bus
+#define pci_probe_device_hook(c, a) (0)
+
#define pciide_machdep_compat_intr_establish(a, b, c, d, e) (NULL)
#define pciide_machdep_compat_intr_disestablish(a, b) do { } while (0)
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 0ecb5daeb04..e265743dd17 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci.c,v 1.93 2011/06/12 11:13:28 kettenis Exp $ */
+/* $OpenBSD: pci.c,v 1.94 2011/10/10 19:42:37 miod Exp $ */
/* $NetBSD: pci.c,v 1.31 1997/06/06 23:48:04 thorpej Exp $ */
/*
@@ -462,6 +462,13 @@ pci_probe_device(struct pci_softc *sc, pcitag_t tag,
}
}
+ /*
+ * Give the MD code a chance to alter pci_attach_args and/or
+ * skip devices.
+ */
+ if (pci_probe_device_hook(pc, &pa) != 0)
+ return (0);
+
if (match != NULL) {
ret = (*match)(&pa);
if (ret != 0 && pap != NULL)