Module Name:    src
Committed By:   macallan
Date:           Thu Feb 24 03:37:02 UTC 2011

Modified Files:
        src/sys/dev/pci: pci.c

Log Message:
add a hack to allow mapping the video memory portions of a mach64's aperture
with BUS_SPACE_MAP_PREFETCHABLE
This probably needs to go in its own function to avoid more clutter when adding
more hacks.
tested on macppc


To generate a diff of this commit:
cvs rdiff -u -r1.132 -r1.133 src/sys/dev/pci/pci.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/pci.c
diff -u src/sys/dev/pci/pci.c:1.132 src/sys/dev/pci/pci.c:1.133
--- src/sys/dev/pci/pci.c:1.132	Thu Feb 10 12:37:58 2011
+++ src/sys/dev/pci/pci.c	Thu Feb 24 03:37:02 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: pci.c,v 1.132 2011/02/10 12:37:58 jmcneill Exp $	*/
+/*	$NetBSD: pci.c,v 1.133 2011/02/24 03:37:02 macallan Exp $	*/
 
 /*
  * Copyright (c) 1995, 1996, 1997, 1998
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pci.c,v 1.132 2011/02/10 12:37:58 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pci.c,v 1.133 2011/02/24 03:37:02 macallan Exp $");
 
 #include "opt_pci.h"
 
@@ -315,6 +315,26 @@
 			if (pci_mapreg_info(pc, tag, bar, type,
 			    &r->r_offset, &r->r_size, &r->r_flags) != 0)
 				break;
+			if ((PCI_VENDOR(id) == PCI_VENDOR_ATI) && (bar == 0x10)
+			    && (r->r_size = 0x1000000)) {
+				struct pci_range *nr;
+				/*
+				 * this has to be a mach64
+				 * split things up so each half-aperture can
+				 * be mapped PREFETCHABLE except the last page
+				 * which may contain registers
+				 */
+				r->r_size = 0x7ff000;
+				r->r_flags = BUS_SPACE_MAP_LINEAR |
+					     BUS_SPACE_MAP_PREFETCHABLE;
+				nr = &sc->PCI_SC_DEVICESC(device,
+				    function).c_range[i++];
+				nr->r_offset = r->r_offset + 0x800000;
+				nr->r_size = 0x7ff000;
+				nr->r_flags = BUS_SPACE_MAP_LINEAR |
+					      BUS_SPACE_MAP_PREFETCHABLE;
+			}
+			
 		}
 	}
 

Reply via email to