diff --git a/kern/arch/x86/pci.c b/kern/arch/x86/pci.c
index 0871507..32e7e8e 100644
--- a/kern/arch/x86/pci.c
+++ b/kern/arch/x86/pci.c
@@ -492,6 +492,30 @@
 	return NULL;
 }
 
+// The plan 9 semantics we use here are actually very handy for iterators on
+// pci devices.
+struct pci_device *pci_match_vd(struct pci_device *start, int ven_id, int dev_id)
+{
+	struct pci_device *search;
+	struct pcidev_stailq *first = &pci_devices;
+	int bus, dev, func;
+	
+	// TODO: teach ron about these macros.
+	if (start) {
+		first = (struct pcidev_stailq *)(&start->all_dev);
+	}
+
+	STAILQ_FOREACH(search, first, all_dev) {
+		if (ven_id == 0 && dev_id == 0)
+			return search;
+
+		if ((search->ven_id == ven_id) &&
+		    (search->dev_id == dev_id))
+			return search;
+	}
+	return NULL;
+}
+
 /* Helper to get the membar value for BAR index bir */
 uintptr_t pci_get_membar(struct pci_device *pcidev, int bir)
 {
diff --git a/kern/arch/x86/pci.h b/kern/arch/x86/pci.h
index 6d18084..28bca17 100644
--- a/kern/arch/x86/pci.h
+++ b/kern/arch/x86/pci.h
@@ -253,6 +253,7 @@
 void pci_set_bus_master(struct pci_device *pcidev);
 void pci_clr_bus_master(struct pci_device *pcidev);
 struct pci_device *pci_match_tbdf(int tbdf);
+struct pci_device *pci_match_vd(struct pci_device *start, int ven_id, int dev_id);
 uintptr_t pci_get_membar(struct pci_device *pcidev, int bir);
 uintptr_t pci_get_iobar(struct pci_device *pcidev, int bir);
 uint32_t pci_get_membar_sz(struct pci_device *pcidev, int bir);
@@ -282,6 +283,14 @@
 #define explode_tbdf(tbdf) {pcidev.bus = tbdf >> 16;\
 		pcidev.dev = (tbdf>>11)&0x1f;\
 		pcidev.func = (tbdf>>8)&3;}
+/* Other plan 9 functions to compose and decompose */
+#define MKBUS(t,b,d,f)	(((t)<<24)|(((b)&0xFF)<<16)|(((d)&0x1F)<<11)|(((f)&0x07)<<8))
+#define BUSFNO(tbdf)	(((tbdf)>>8)&0x07)
+#define BUSDNO(tbdf)	(((tbdf)>>11)&0x1F)
+#define BUSBNO(tbdf)	(((tbdf)>>16)&0xFF)
+#define BUSTYPE(tbdf)	((tbdf)>>24)
+#define BUSBDF(tbdf)	((tbdf)&0x00FFFF00)
+
 
 static inline void pci_set_drvdata(struct pci_device *pcidev, void *data)
 {
diff --git a/kern/drivers/dev/Kbuild b/kern/drivers/dev/Kbuild
index 0b9dd7a..057adf4 100644
--- a/kern/drivers/dev/Kbuild
+++ b/kern/drivers/dev/Kbuild
@@ -5,7 +5,7 @@
 obj-y						+= ether.o
 obj-y						+= kprof.o
 obj-y						+= mnt.o
-#obj-y						+= pci.o
+obj-y						+= pci.o
 obj-y						+= pipe.o
 obj-y						+= proc.o
 obj-$(CONFIG_REGRESS)				+= regress.o
diff --git a/kern/drivers/dev/pci.c b/kern/drivers/dev/pci.c
index 74c635a..6f41af5 100644
--- a/kern/drivers/dev/pci.c
+++ b/kern/drivers/dev/pci.c
@@ -62,11 +62,11 @@
 }
 
 static int
-pcigen(struct chan *c, char *, struct dirtab *, int unused_int, int s,
+pcigen(struct chan *c, char *unused, struct dirtab *unuseddirtab, int unused_int, int s,
 	   struct dir *dp)
 {
 	int tbdf;
-	Pcidev *p;
+	struct pci_device *p = NULL;
 	struct qid q;
 
 	switch (TYPE(c->qid)) {
@@ -87,18 +87,18 @@
 				devdir(c, q, get_cur_genbuf(), 0, eve, 0555, dp);
 				return 1;
 			}
-			p = pcimatch(NULL, 0, 0);
+			p = pci_match_vd(NULL, 0, 0);
 			while (s >= 2 && p != NULL) {
-				p = pcimatch(p, 0, 0);
+				p = pci_match_vd(p, 0, 0);
 				s -= 2;
 			}
 			if (p == NULL)
 				return -1;
-			return pcidirgen(c, s + Qpcictl, p->tbdf, dp);
+			return pcidirgen(c, s + Qpcictl, MKBUS(0,p->bus,p->dev,p->func), dp);
 		case Qpcictl:
 		case Qpciraw:
 			tbdf = MKBUS(BusPCI, 0, 0, 0) | BUSBDF((uint32_t) c->qid.path);
-			p = pcimatchtbdf(tbdf);
+			p = pci_match_tbdf(tbdf);
 			if (p == NULL)
 				return -1;
 			return pcidirgen(c, TYPE(c->qid), tbdf, dp);
@@ -118,7 +118,7 @@
 	return devwalk(c, nc, name, nname, (struct dirtab *)0, 0, pcigen);
 }
 
-static long pcistat(struct chan *c, uint8_t * dp, long n)
+static int pcistat(struct chan *c, uint8_t * dp, int n)
 {
 	return devstat(c, dp, n, (struct dirtab *)0, 0L, pcigen);
 }
@@ -133,7 +133,7 @@
 	return c;
 }
 
-static void pciclose(struct chan *)
+static void pciclose(struct chan *unused)
 {
 }
 
@@ -142,7 +142,7 @@
 	char buf[256], *ebuf, *w, *a;
 	int i, tbdf, r;
 	uint32_t x;
-	Pcidev *p;
+	struct pci_device *p;
 
 	a = va;
 	switch (TYPE(c->qid)) {
@@ -151,24 +151,22 @@
 			return devdirread(c, a, n, (struct dirtab *)0, 0L, pcigen);
 		case Qpcictl:
 			tbdf = MKBUS(BusPCI, 0, 0, 0) | BUSBDF((uint32_t) c->qid.path);
-			p = pcimatchtbdf(tbdf);
+			p = pci_match_tbdf(tbdf);
 			if (p == NULL)
 				error(Egreg);
 			ebuf = buf + sizeof buf - 1;	/* -1 for newline */
 			w = seprintf(buf, ebuf, "%.2x.%.2x.%.2x %.4x/%.4x %3d",
-						 p->ccrb, p->ccru, p->ccrp, p->vid, p->did, p->intl);
-			for (i = 0; i < ARRAY_SIZE(p->mem); i++) {
-				if (p->mem[i].size == 0)
-					continue;
-				w = seprintf(w, ebuf, " %d:%.8lux %d", i, p->mem[i].bar,
-							 p->mem[i].size);
+						 p->class, p->subclass, p->progif, p->ven_id, p->dev_id, p->irqline);
+			for (i = 0; i < p->nr_bars; i++) {
+				w = seprintf(w, ebuf, " %d:%.8lux %d", i, p->bar[i].raw_bar,
+					     p->bar[i].mmio_sz);
 			}
 			*w++ = '\n';
 			*w = '\0';
 			return readstr(offset, a, n, buf);
 		case Qpciraw:
 			tbdf = MKBUS(BusPCI, 0, 0, 0) | BUSBDF((uint32_t) c->qid.path);
-			p = pcimatchtbdf(tbdf);
+			p = pci_match_tbdf(tbdf);
 			if (p == NULL)
 				error(Egreg);
 			if (n + offset > 256)
@@ -177,17 +175,17 @@
 				return 0;
 			r = offset;
 			if (!(r & 3) && n == 4) {
-				x = pcicfgr32(p, r);
+				x = pcidev_read32(p, r);
 				PBIT32(a, x);
 				return 4;
 			}
 			if (!(r & 1) && n == 2) {
-				x = pcicfgr16(p, r);
+				x = pcidev_read16(p, r);
 				PBIT16(a, x);
 				return 2;
 			}
 			for (i = 0; i < n; i++) {
-				x = pcicfgr8(p, r);
+				x = pcidev_read8(p, r);
 				PBIT8(a, x);
 				a++;
 				r++;
@@ -205,18 +203,18 @@
 	uint8_t *a;
 	int i, r, tbdf;
 	uint32_t x;
-	Pcidev *p;
+	struct pci_device *p;
 
 	if (n >= sizeof(buf))
 		n = sizeof(buf) - 1;
 	a = va;
-	strncpy(buf, (char *unused_char_p_t)a, n);
+	strncpy(buf, (char *)a, n);
 	buf[n] = 0;
 
 	switch (TYPE(c->qid)) {
 		case Qpciraw:
 			tbdf = MKBUS(BusPCI, 0, 0, 0) | BUSBDF((uint32_t) c->qid.path);
-			p = pcimatchtbdf(tbdf);
+			p = pci_match_tbdf(tbdf);
 			if (p == NULL)
 				error(Egreg);
 			if (offset > 256)
@@ -226,17 +224,17 @@
 			r = offset;
 			if (!(r & 3) && n == 4) {
 				x = GBIT32(a);
-				pcicfgw32(p, r, x);
+				pcidev_write32(p, r, x);
 				return 4;
 			}
 			if (!(r & 1) && n == 2) {
 				x = GBIT16(a);
-				pcicfgw16(p, r, x);
+				pcidev_write16(p, r, x);
 				return 2;
 			}
 			for (i = 0; i < n; i++) {
 				x = GBIT8(a);
-				pcicfgw8(p, r, x);
+				pcidev_write8(p, r, x);
 				a++;
 				r++;
 			}
@@ -247,7 +245,7 @@
 	return n;
 }
 
-struct dev pcidevtab = {
+struct dev pcidevtab __devtab = {
 	'$',
 	"pci",
 
