summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/alpha/pci/apecs.c3
-rw-r--r--sys/arch/alpha/pci/cia.c3
-rw-r--r--sys/arch/alpha/pci/irongate.c3
-rw-r--r--sys/arch/alpha/pci/lca.c3
-rw-r--r--sys/arch/alpha/pci/tsc.c3
-rw-r--r--sys/arch/amd64/amd64/mainbus.c3
-rw-r--r--sys/arch/arm/footbridge/footbridge.c3
-rw-r--r--sys/arch/arm/xscale/i80321.c3
-rw-r--r--sys/arch/hppa/dev/dino.c3
-rw-r--r--sys/arch/hppa64/dev/elroy.c3
-rw-r--r--sys/arch/i386/i386/mainbus.c3
-rw-r--r--sys/arch/i386/pci/pchb.c6
-rw-r--r--sys/arch/macppc/pci/ht.c3
-rw-r--r--sys/arch/macppc/pci/mpcpcibus.c3
-rw-r--r--sys/arch/mvmeppc/pci/mpcpcibr.c3
-rw-r--r--sys/arch/sgi/pci/macepcibridge.c3
-rw-r--r--sys/arch/sh/dev/shpcic.c3
-rw-r--r--sys/arch/sparc64/dev/psycho.c3
-rw-r--r--sys/arch/sparc64/dev/schizo.c3
-rw-r--r--sys/dev/pci/pci.c13
-rw-r--r--sys/dev/pci/pcivar.h10
-rw-r--r--sys/dev/pci/ppb.c3
22 files changed, 61 insertions, 25 deletions
diff --git a/sys/arch/alpha/pci/apecs.c b/sys/arch/alpha/pci/apecs.c
index 5f117a980a0..89c311cb9e6 100644
--- a/sys/arch/alpha/pci/apecs.c
+++ b/sys/arch/alpha/pci/apecs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: apecs.c,v 1.19 2006/03/16 22:32:44 miod Exp $ */
+/* $OpenBSD: apecs.c,v 1.20 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: apecs.c,v 1.16 1996/12/05 01:39:34 cgd Exp $ */
/*-
@@ -243,6 +243,7 @@ apecsattach(parent, self, aux)
pba.pba_dmat =
alphabus_dma_get_tag(&acp->ac_dmat_direct, ALPHA_BUS_PCI);
pba.pba_pc = &acp->ac_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
#ifdef notyet
diff --git a/sys/arch/alpha/pci/cia.c b/sys/arch/alpha/pci/cia.c
index 8ebaddc86ae..b0812211881 100644
--- a/sys/arch/alpha/pci/cia.c
+++ b/sys/arch/alpha/pci/cia.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cia.c,v 1.22 2006/03/16 22:32:44 miod Exp $ */
+/* $OpenBSD: cia.c,v 1.23 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: cia.c,v 1.56 2000/06/29 08:58:45 mrg Exp $ */
/*-
@@ -400,6 +400,7 @@ ciaattach(parent, self, aux)
pba.pba_dmat =
alphabus_dma_get_tag(&ccp->cc_dmat_direct, ALPHA_BUS_PCI);
pba.pba_pc = &ccp->cc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
diff --git a/sys/arch/alpha/pci/irongate.c b/sys/arch/alpha/pci/irongate.c
index 233dcb3b374..16edd337408 100644
--- a/sys/arch/alpha/pci/irongate.c
+++ b/sys/arch/alpha/pci/irongate.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: irongate.c,v 1.8 2006/03/16 22:32:44 miod Exp $ */
+/* $OpenBSD: irongate.c,v 1.9 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: irongate.c,v 1.3 2000/11/29 06:29:10 thorpej Exp $ */
/*-
@@ -183,6 +183,7 @@ irongate_attach(struct device *parent, struct device *self, void *aux)
pba.pba_dmat =
alphabus_dma_get_tag(&icp->ic_dmat_pci, ALPHA_BUS_PCI);
pba.pba_pc = &icp->ic_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
#ifdef notyet
diff --git a/sys/arch/alpha/pci/lca.c b/sys/arch/alpha/pci/lca.c
index 3ec9a253179..5fc19ab9c7d 100644
--- a/sys/arch/alpha/pci/lca.c
+++ b/sys/arch/alpha/pci/lca.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lca.c,v 1.18 2006/03/16 22:32:44 miod Exp $ */
+/* $OpenBSD: lca.c,v 1.19 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: lca.c,v 1.14 1996/12/05 01:39:35 cgd Exp $ */
/*-
@@ -254,6 +254,7 @@ lcaattach(parent, self, aux)
pba.pba_dmat =
alphabus_dma_get_tag(&lcp->lc_dmat_direct, ALPHA_BUS_PCI);
pba.pba_pc = &lcp->lc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
#ifdef notyet
diff --git a/sys/arch/alpha/pci/tsc.c b/sys/arch/alpha/pci/tsc.c
index 2acb1c49210..2ba899960d0 100644
--- a/sys/arch/alpha/pci/tsc.c
+++ b/sys/arch/alpha/pci/tsc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tsc.c,v 1.12 2006/03/16 22:32:44 miod Exp $ */
+/* $OpenBSD: tsc.c,v 1.13 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: tsc.c,v 1.3 2000/06/25 19:17:40 thorpej Exp $ */
/*-
@@ -199,6 +199,7 @@ tspattach(parent, self, aux)
pba.pba_dmat =
alphabus_dma_get_tag(&pcp->pc_dmat_direct, ALPHA_BUS_PCI);
pba.pba_pc = &pcp->pc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
#ifdef notyet
diff --git a/sys/arch/amd64/amd64/mainbus.c b/sys/arch/amd64/amd64/mainbus.c
index 2f661daa01b..d665280cd60 100644
--- a/sys/arch/amd64/amd64/mainbus.c
+++ b/sys/arch/amd64/amd64/mainbus.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mainbus.c,v 1.10 2006/11/25 16:59:31 niklas Exp $ */
+/* $OpenBSD: mainbus.c,v 1.11 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: mainbus.c,v 1.1 2003/04/26 18:39:29 fvdl Exp $ */
/*
@@ -219,6 +219,7 @@ mainbus_attach(struct device *parent, struct device *self, void *aux)
mba.mba_pba.pba_iot = X86_BUS_SPACE_IO;
mba.mba_pba.pba_memt = X86_BUS_SPACE_MEM;
mba.mba_pba.pba_dmat = &pci_bus_dma_tag;
+ mba.mba_pba.pba_domain = pci_ndomains++;
mba.mba_pba.pba_bus = 0;
mba.mba_pba.pba_bridgetag = NULL;
mba.mba_pba.pba_pc = NULL;
diff --git a/sys/arch/arm/footbridge/footbridge.c b/sys/arch/arm/footbridge/footbridge.c
index cba0426c0c7..0bf0fd385fa 100644
--- a/sys/arch/arm/footbridge/footbridge.c
+++ b/sys/arch/arm/footbridge/footbridge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: footbridge.c,v 1.5 2006/03/13 20:10:49 brad Exp $ */
+/* $OpenBSD: footbridge.c,v 1.6 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: footbridge.c,v 1.7 2002/05/16 01:01:33 thorpej Exp $ */
/*
@@ -221,6 +221,7 @@ footbridge_attach(parent, self, aux)
/*
fba.fba_pba.pba_flags = PCI_FLAGS_IO_ENABLED | PCI_FLAGS_MEM_ENABLED;
*/
+ fba.fba_pba.pba_domain = pci_ndomains++;
fba.fba_pba.pba_bus = 0;
fba.fba_pba.pba_bridgetag = NULL;
config_found(self, &fba.fba_pba, footbridge_print);
diff --git a/sys/arch/arm/xscale/i80321.c b/sys/arch/arm/xscale/i80321.c
index de4ff5a34e3..da242d45af2 100644
--- a/sys/arch/arm/xscale/i80321.c
+++ b/sys/arch/arm/xscale/i80321.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: i80321.c,v 1.4 2006/06/02 01:33:55 drahn Exp $ */
+/* $OpenBSD: i80321.c,v 1.5 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: i80321.c,v 1.18 2006/02/25 02:28:56 wiz Exp $ */
/*
@@ -221,6 +221,7 @@ i80321_attach(struct i80321_softc *sc)
pba.pba_memt = &sc->sc_pci_memt;
pba.pba_dmat = &sc->sc_pci_dmat;
pba.pba_pc = &sc->sc_pci_chipset;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = preg;
pba.pba_bridgetag = NULL;
pba.pba_intrswiz = 0; /* XXX what if busno != 0? */
diff --git a/sys/arch/hppa/dev/dino.c b/sys/arch/hppa/dev/dino.c
index f25598e11fe..75c64ae6598 100644
--- a/sys/arch/hppa/dev/dino.c
+++ b/sys/arch/hppa/dev/dino.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dino.c,v 1.17 2006/03/13 20:10:49 brad Exp $ */
+/* $OpenBSD: dino.c,v 1.18 2006/12/14 17:36:12 kettenis Exp $ */
/*
* Copyright (c) 2003-2005 Michael Shalayeff
@@ -1622,6 +1622,7 @@ dinoattach(parent, self, aux)
pba.pba_memt = &sc->sc_memt;
pba.pba_dmat = &sc->sc_dmatag;
pba.pba_pc = &sc->sc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
config_found(self, &pba, dinoprint);
diff --git a/sys/arch/hppa64/dev/elroy.c b/sys/arch/hppa64/dev/elroy.c
index e271b97fbcc..04c7f10b4e5 100644
--- a/sys/arch/hppa64/dev/elroy.c
+++ b/sys/arch/hppa64/dev/elroy.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: elroy.c,v 1.3 2006/03/13 20:10:49 brad Exp $ */
+/* $OpenBSD: elroy.c,v 1.4 2006/12/14 17:36:12 kettenis Exp $ */
/*
* Copyright (c) 2005 Michael Shalayeff
@@ -1180,6 +1180,7 @@ letoh64(r->eio_base), letoh64(r->eio_mask));
pba.pba_dmat = &sc->sc_dmatag;
pba.pba_pc = &sc->sc_pc;
pba.pba_bridgetag = NULL;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0; /* (letoh32(elroy_read32(&r->busnum)) & 0xff) >> 4; */
config_found(self, &pba, elroyprint);
diff --git a/sys/arch/i386/i386/mainbus.c b/sys/arch/i386/i386/mainbus.c
index f9bda59957d..b476f7e2c1b 100644
--- a/sys/arch/i386/i386/mainbus.c
+++ b/sys/arch/i386/i386/mainbus.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mainbus.c,v 1.30 2006/11/29 20:03:19 dim Exp $ */
+/* $OpenBSD: mainbus.c,v 1.31 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: mainbus.c,v 1.21 1997/06/06 23:14:20 thorpej Exp $ */
/*
@@ -256,6 +256,7 @@ mainbus_attach(struct device *parent, struct device *self, void *aux)
mba.mba_pba.pba_iot = I386_BUS_SPACE_IO;
mba.mba_pba.pba_memt = I386_BUS_SPACE_MEM;
mba.mba_pba.pba_dmat = &pci_bus_dma_tag;
+ mba.mba_pba.pba_domain = pci_ndomains++;
mba.mba_pba.pba_bus = 0;
mba.mba_pba.pba_bridgetag = NULL;
config_found(self, &mba.mba_pba, mainbus_print);
diff --git a/sys/arch/i386/pci/pchb.c b/sys/arch/i386/pci/pchb.c
index 466d9cf0a78..76593587238 100644
--- a/sys/arch/i386/pci/pchb.c
+++ b/sys/arch/i386/pci/pchb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pchb.c,v 1.53 2006/09/19 11:06:34 jsg Exp $ */
+/* $OpenBSD: pchb.c,v 1.54 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: pchb.c,v 1.6 1997/06/06 23:29:16 thorpej Exp $ */
/*
@@ -233,6 +233,7 @@ pchbattach(struct device *parent, struct device *self, void *aux)
pba.pba_iot = pa->pa_iot;
pba.pba_memt = pa->pa_memt;
pba.pba_dmat = pa->pa_dmat;
+ pba.pba_domain = pa->pa_domain;
pba.pba_bus = bdnum;
pba.pba_bridgetag = NULL;
pba.pba_pc = pa->pa_pc;
@@ -284,6 +285,7 @@ pchbattach(struct device *parent, struct device *self, void *aux)
pba.pba_iot = pa->pa_iot;
pba.pba_memt = pa->pa_memt;
pba.pba_dmat = pa->pa_dmat;
+ pba.pba_domain = pa->pa_domain;
pba.pba_bus = pbnum;
pba.pba_pc = pa->pa_pc;
printf("\n");
@@ -320,6 +322,7 @@ pchbattach(struct device *parent, struct device *self, void *aux)
pba.pba_iot = pa->pa_iot;
pba.pba_memt = pa->pa_memt;
pba.pba_dmat = pa->pa_dmat;
+ pba.pba_domain = pa->pa_domain;
pba.pba_bus = pbnum;
pba.pba_pc = pa->pa_pc;
printf("\n");
@@ -464,6 +467,7 @@ pchb_amd64ht_attach (struct device *self, struct pci_attach_args *pa, int i)
pba.pba_iot = pa->pa_iot;
pba.pba_memt = pa->pa_memt;
pba.pba_dmat = pa->pa_dmat;
+ pba.pba_domain = pa->pa_domain;
pba.pba_bus = AMD64HT_LDT_SEC_BUS_NUM(bus);
pba.pba_pc = pa->pa_pc;
config_found(self, &pba, pchb_print);
diff --git a/sys/arch/macppc/pci/ht.c b/sys/arch/macppc/pci/ht.c
index ba439b2056e..05d49099568 100644
--- a/sys/arch/macppc/pci/ht.c
+++ b/sys/arch/macppc/pci/ht.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ht.c,v 1.9 2006/03/13 20:10:49 brad Exp $ */
+/* $OpenBSD: ht.c,v 1.10 2006/12/14 17:36:12 kettenis Exp $ */
/*
* Copyright (c) 2005 Mark Kettenis
@@ -189,6 +189,7 @@ ht_attach(struct device *parent, struct device *self, void *aux)
pba.pba_memt = sc->sc_memt;
pba.pba_dmat = &pci_bus_dma_tag;
pba.pba_pc = &sc->sc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
diff --git a/sys/arch/macppc/pci/mpcpcibus.c b/sys/arch/macppc/pci/mpcpcibus.c
index 5408692ecb4..1bdf2215474 100644
--- a/sys/arch/macppc/pci/mpcpcibus.c
+++ b/sys/arch/macppc/pci/mpcpcibus.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpcpcibus.c,v 1.35 2006/12/05 20:48:23 gwk Exp $ */
+/* $OpenBSD: mpcpcibus.c,v 1.36 2006/12/14 17:36:12 kettenis Exp $ */
/*
* Copyright (c) 1997 Per Fogelstrom
@@ -444,6 +444,7 @@ mpcpcibrattach(struct device *parent, struct device *self, void *aux)
pba.pba_iot = &sc->sc_iobus_space;
pba.pba_memt = &sc->sc_membus_space;
pba.pba_pc = &lcp->lc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
diff --git a/sys/arch/mvmeppc/pci/mpcpcibr.c b/sys/arch/mvmeppc/pci/mpcpcibr.c
index d52e042816c..4ab76a14489 100644
--- a/sys/arch/mvmeppc/pci/mpcpcibr.c
+++ b/sys/arch/mvmeppc/pci/mpcpcibr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpcpcibr.c,v 1.17 2005/11/07 02:19:46 brad Exp $ */
+/* $OpenBSD: mpcpcibr.c,v 1.18 2006/12/14 17:36:12 kettenis Exp $ */
/*
* Copyright (c) 2001 Steve Murphree, Jr.
@@ -238,6 +238,7 @@ mpcpcibrattach(parent, self, aux)
pba.pba_iot = &sc->sc_iobus_space;
pba.pba_memt = &sc->sc_membus_space;
pba.pba_pc = &lcp->lc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
/*
diff --git a/sys/arch/sgi/pci/macepcibridge.c b/sys/arch/sgi/pci/macepcibridge.c
index fb6efacb836..ae9801c6e40 100644
--- a/sys/arch/sgi/pci/macepcibridge.c
+++ b/sys/arch/sgi/pci/macepcibridge.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: macepcibridge.c,v 1.10 2006/03/13 20:10:49 brad Exp $ */
+/* $OpenBSD: macepcibridge.c,v 1.11 2006/12/14 17:36:12 kettenis Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se)
@@ -242,6 +242,7 @@ mace_pcibrattach(struct device *parent, struct device *self, void *aux)
pci_bus_dma_tag.dma_offs = 0x00000000;
*pba.pba_dmat = pci_bus_dma_tag;
pba.pba_pc = &sc->sc_pc;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = sc->sc_dev.dv_unit;
pba.pba_bridgetag = NULL;
config_found(self, &pba, mace_pcibrprint);
diff --git a/sys/arch/sh/dev/shpcic.c b/sys/arch/sh/dev/shpcic.c
index 8085d85ea4d..13883468e97 100644
--- a/sys/arch/sh/dev/shpcic.c
+++ b/sys/arch/sh/dev/shpcic.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: shpcic.c,v 1.5 2006/10/23 20:15:50 miod Exp $ */
+/* $OpenBSD: shpcic.c,v 1.6 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: shpcic.c,v 1.10 2005/12/24 20:07:32 perry Exp $ */
/*
@@ -261,6 +261,7 @@ shpcic_attach(struct device *parent, struct device *self, void *aux)
pba.pba_memt = shpcic_get_bus_mem_tag();
pba.pba_dmat = shpcic_get_bus_dma_tag();
pba.pba_pc = NULL;
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = 0;
pba.pba_bridgetag = NULL;
config_found(self, &pba, NULL);
diff --git a/sys/arch/sparc64/dev/psycho.c b/sys/arch/sparc64/dev/psycho.c
index f1a03025b8c..7ef0c4dd07f 100644
--- a/sys/arch/sparc64/dev/psycho.c
+++ b/sys/arch/sparc64/dev/psycho.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: psycho.c,v 1.47 2006/07/01 16:41:26 deraadt Exp $ */
+/* $OpenBSD: psycho.c,v 1.48 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: psycho.c,v 1.39 2001/10/07 20:30:41 eeh Exp $ */
/*
@@ -355,6 +355,7 @@ psycho_attach(struct device *parent, struct device *self, void *aux)
/* get the bus-range for the psycho */
psycho_get_bus_range(sc->sc_node, psycho_br);
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = psycho_br[0];
pba.pba_bridgetag = NULL;
diff --git a/sys/arch/sparc64/dev/schizo.c b/sys/arch/sparc64/dev/schizo.c
index 3f38552102f..c5947838872 100644
--- a/sys/arch/sparc64/dev/schizo.c
+++ b/sys/arch/sparc64/dev/schizo.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: schizo.c,v 1.36 2006/12/12 19:18:52 kettenis Exp $ */
+/* $OpenBSD: schizo.c,v 1.37 2006/12/14 17:36:12 kettenis Exp $ */
/*
* Copyright (c) 2002 Jason L. Wright (jason@thought.net)
@@ -213,6 +213,7 @@ schizo_init(struct schizo_softc *sc, int busa)
pbm->sp_pc->bushandle = pbm->sp_cfgh;
pba.pba_busname = "pci";
+ pba.pba_domain = pci_ndomains++;
pba.pba_bus = busranges[0];
pba.pba_bridgetag = NULL;
pba.pba_pc = pbm->sp_pc;
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 143952ea170..f9f62a68882 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pci.c,v 1.48 2006/12/11 19:47:37 kettenis Exp $ */
+/* $OpenBSD: pci.c,v 1.49 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: pci.c,v 1.31 1997/06/06 23:48:04 thorpej Exp $ */
/*
@@ -72,6 +72,8 @@ struct cfdriver pci_cd = {
NULL, "pci", DV_DULL
};
+int pci_ndomains;
+
int pciprint(void *, const char *);
int pcisubmatch(struct device *, void *, void *);
@@ -150,6 +152,7 @@ pciattach(struct device *parent, struct device *self, void *aux)
sc->sc_memt = pba->pba_memt;
sc->sc_dmat = pba->pba_dmat;
sc->sc_pc = pba->pba_pc;
+ sc->sc_domain = pba->pba_domain;
sc->sc_bus = pba->pba_bus;
sc->sc_bridgetag = pba->pba_bridgetag;
sc->sc_maxndevs = pci_bus_maxdevs(pba->pba_pc, pba->pba_bus);
@@ -265,6 +268,7 @@ pci_probe_device(struct pci_softc *sc, pcitag_t tag,
pa.pa_memt = sc->sc_memt;
pa.pa_dmat = sc->sc_dmat;
pa.pa_pc = pc;
+ pa.pa_domain = sc->sc_domain;
pa.pa_bus = bus;
pa.pa_device = device;
pa.pa_function = function;
@@ -496,6 +500,10 @@ pciopen(dev_t dev, int oflags, int devtype, struct proc *p)
{
PCIDEBUG(("pciopen ndevs: %d\n" , pci_cd.cd_ndevs));
+ if (minor(dev) >= pci_ndomains) {
+ return ENXIO;
+ }
+
#ifndef APERTURE
if ((oflags & FWRITE) && securelevel > 0) {
return EPERM;
@@ -533,7 +541,8 @@ pciioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
for (i = 0; i < pci_cd.cd_ndevs; i++) {
pci = pci_cd.cd_devs[i];
- if (pci != NULL && pci->sc_bus == io->pi_sel.pc_bus)
+ if (pci != NULL && pci->sc_domain == minor(dev) &&
+ pci->sc_bus == io->pi_sel.pc_bus)
break;
}
if (pci != NULL && pci->sc_bus == io->pi_sel.pc_bus) {
diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h
index 27396b2c348..99cafa18b2d 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pcivar.h,v 1.49 2006/12/11 19:47:37 kettenis Exp $ */
+/* $OpenBSD: pcivar.h,v 1.50 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: pcivar.h,v 1.23 1997/06/06 23:48:05 thorpej Exp $ */
/*
@@ -80,6 +80,7 @@ struct pcibus_attach_args {
bus_dma_tag_t pba_dmat; /* DMA tag */
pci_chipset_tag_t pba_pc;
+ int pba_domain; /* PCI domain */
int pba_bus; /* PCI bus number */
/*
@@ -106,8 +107,9 @@ struct pci_attach_args {
pci_chipset_tag_t pa_pc;
int pa_flags; /* flags; see below */
- u_int pa_device;
+ u_int pa_domain;
u_int pa_bus;
+ u_int pa_device;
u_int pa_function;
pcitag_t pa_tag;
pcireg_t pa_id, pa_class;
@@ -159,12 +161,14 @@ struct pci_softc {
pci_chipset_tag_t sc_pc;
void *sc_powerhook;
LIST_HEAD(, pci_dev) sc_devs;
- int sc_bus, sc_maxndevs;
+ int sc_domain, sc_bus, sc_maxndevs;
pcitag_t *sc_bridgetag;
u_int sc_intrswiz;
pcitag_t sc_intrtag;
};
+extern int pci_ndomains;
+
/*
* Locators devices that attach to 'pcibus', as specified to config.
*/
diff --git a/sys/dev/pci/ppb.c b/sys/dev/pci/ppb.c
index bd21727ff23..84470f0fab6 100644
--- a/sys/dev/pci/ppb.c
+++ b/sys/dev/pci/ppb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ppb.c,v 1.16 2006/07/04 18:26:30 kettenis Exp $ */
+/* $OpenBSD: ppb.c,v 1.17 2006/12/14 17:36:12 kettenis Exp $ */
/* $NetBSD: ppb.c,v 1.16 1997/06/06 23:48:05 thorpej Exp $ */
/*
@@ -131,6 +131,7 @@ ppbattach(struct device *parent, struct device *self, void *aux)
#if 0
pba.pba_flags = pa->pa_flags & ~PCI_FLAGS_MRM_OKAY;
#endif
+ pba.pba_domain = pa->pa_domain;
pba.pba_bus = PPB_BUSINFO_SECONDARY(busdata);
pba.pba_bridgetag = &sc->sc_tag;
pba.pba_intrswiz = pa->pa_intrswiz;