diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2011-10-10 19:42:38 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2011-10-10 19:42:38 +0000 |
commit | 3cc4d3c11a835610eaf5ce6c13389352149848c1 (patch) | |
tree | b6ff787b8bae84fe3b0c21b7f0378c2d7459fad8 /sys/arch/sgi/pci/macepcibridge.c | |
parent | f01ca6aed7de84c5098370e7359ed9043e29b16c (diff) |
Introduce pci_probe_device_hook(pci_chipset_tag_t, struct pci_attach_args *).
This mandatory function will get invoked in pci_probe_device(), and allows
a pci host driver to alter the pci_attach_args passed to a device when
attaching.
This function will also, if returning non-zero, cause the device to be
skipped completely during all the phases of the PCI device discovery
(i.e. ressource enumeration, ressource assignment, and actual attachment).
This particular feature is experimental and might be reverted in the future
(or the scope narrowed to device attachment only).
A dummy #define pci_probe_device_hook() 0 is added to all platforms except
sgi, where real functions (currently only returning 0) are added; real meat
will be added shortly.
Discussed at s2k11, no objection from the usual suspects.
Diffstat (limited to 'sys/arch/sgi/pci/macepcibridge.c')
-rw-r--r-- | sys/arch/sgi/pci/macepcibridge.c | 10 |
1 files changed, 9 insertions, 1 deletions
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; |