Module Name:    src
Committed By:   matt
Date:           Fri Jan  7 02:25:52 UTC 2011

Modified Files:
        src/sys/dev/pci [matt-nb5-pq3]: pciconf.c

Log Message:
Use kmem.  Fix prefetchable setting.


To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.30.56.1 src/sys/dev/pci/pciconf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/pciconf.c
diff -u src/sys/dev/pci/pciconf.c:1.30 src/sys/dev/pci/pciconf.c:1.30.56.1
--- src/sys/dev/pci/pciconf.c:1.30	Thu May 24 15:57:58 2007
+++ src/sys/dev/pci/pciconf.c	Fri Jan  7 02:25:52 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pciconf.c,v 1.30 2007/05/24 15:57:58 briggs Exp $	*/
+/*	$NetBSD: pciconf.c,v 1.30.56.1 2011/01/07 02:25:52 matt Exp $	*/
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pciconf.c,v 1.30 2007/05/24 15:57:58 briggs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pciconf.c,v 1.30.56.1 2011/01/07 02:25:52 matt Exp $");
 
 #include "opt_pci.h"
 
@@ -74,6 +74,7 @@
 #include <sys/queue.h>
 #include <sys/systm.h>
 #include <sys/malloc.h>
+#include <sys/kmem.h>
 
 #include <dev/pci/pcivar.h>
 #include <dev/pci/pciconf.h>
@@ -320,7 +321,7 @@
 	pcireg_t	io, pmem;
 	pciconf_win_t	*pi, *pm;
 
-	pb = malloc (sizeof (pciconf_bus_t), M_DEVBUF, M_NOWAIT);
+	pb = kmem_zalloc(sizeof (pciconf_bus_t), KM_NOSLEEP);
 	if (!pb)
 		panic("Unable to allocate memory for PCI configuration.");
 
@@ -419,7 +420,7 @@
 
 	return pb;
 err:
-	free(pb, M_DEVBUF);
+	kmem_free(pb, sizeof(*pb));
 	return NULL;
 }
 
@@ -441,8 +442,10 @@
 	class = pci_conf_read(pb->pc, tag, PCI_CLASS_REG);
 
 	cmd = pci_conf_read(pb->pc, tag, PCI_COMMAND_STATUS_REG);
+	bhlc = pci_conf_read(pb->pc, tag, PCI_BHLC_REG);
 
-	if (PCI_CLASS(class) != PCI_CLASS_BRIDGE) {
+	if (PCI_CLASS(class) != PCI_CLASS_BRIDGE
+	    && PCI_HDRTYPE_TYPE(bhlc) != PCI_HDRTYPE_PPB) {
 		cmd &= ~(PCI_COMMAND_MASTER_ENABLE |
 		    PCI_COMMAND_IO_ENABLE | PCI_COMMAND_MEM_ENABLE);
 		pci_conf_write(pb->pc, tag, PCI_COMMAND_STATUS_REG, cmd);
@@ -457,7 +460,6 @@
 	if ((cmd & PCI_STATUS_66MHZ_SUPPORT) == 0)
 		pb->freq_66 = 0;
 
-	bhlc = pci_conf_read(pb->pc, tag, PCI_BHLC_REG);
 	switch (PCI_HDRTYPE_TYPE(bhlc)) {
 	case PCI_HDRTYPE_DEVICE:
 		reg_start = PCI_MAPREG_START;
@@ -919,14 +921,14 @@
 	/*
 	 * XXX -- 64-bit systems need a lot more than just this...
 	 */
-	if (sizeof(u_long) > 4) {
-		mem_base  = (int64_t) mem_base  >> 32;
-		mem_limit = (int64_t) mem_limit >> 32;
-	}
-	pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHBASE32_REG,
-	    mem_base & 0xffffffff);
-	pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHLIMIT32_REG,
-	    mem_limit & 0xffffffff);
+	if (PCI_BRIDGE_PREFETCHMEM_64BITS(mem)) {
+		mem_base  = (uint64_t) mem_base  >> 32;
+		mem_limit = (uint64_t) mem_limit >> 32;
+		pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHBASE32_REG,
+		    mem_base & 0xffffffff);
+		pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHLIMIT32_REG,
+		    mem_limit & 0xffffffff);
+	}
 
 	rv = configure_bus(pb);
 
@@ -1100,7 +1102,7 @@
 	pciconf_bus_t	*pb;
 	int		rv;
 
-	pb = malloc (sizeof (pciconf_bus_t), M_DEVBUF, M_NOWAIT);
+	pb = kmem_zalloc(sizeof (pciconf_bus_t), KM_NOSLEEP);
 	pb->busno = firstbus;
 	pb->next_busno = pb->busno + 1;
 	pb->last_busno = 255;
@@ -1128,6 +1130,6 @@
 	/*
 	 * All done!
 	 */
-	free(pb, M_DEVBUF);
+	kmem_free(pb, sizeof(*pb));
 	return rv;
 }

Reply via email to