Module Name:    src
Committed By:   rkujawa
Date:           Tue Jan 24 00:20:45 UTC 2012

Modified Files:
        src/sys/arch/amiga/amiga: autoconf.c
        src/sys/arch/amiga/pci: p5pb.c

Log Message:
Add voodoofb support. Allows using 3Dfx Voodoo 3 in G-REX as a console.


To generate a diff of this commit:
cvs rdiff -u -r1.108 -r1.109 src/sys/arch/amiga/amiga/autoconf.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/amiga/pci/p5pb.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/arch/amiga/amiga/autoconf.c
diff -u src/sys/arch/amiga/amiga/autoconf.c:1.108 src/sys/arch/amiga/amiga/autoconf.c:1.109
--- src/sys/arch/amiga/amiga/autoconf.c:1.108	Thu Aug  4 17:48:50 2011
+++ src/sys/arch/amiga/amiga/autoconf.c	Tue Jan 24 00:20:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.108 2011/08/04 17:48:50 rkujawa Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.109 2012/01/24 00:20:45 rkujawa Exp $	*/
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.108 2011/08/04 17:48:50 rkujawa Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.109 2012/01/24 00:20:45 rkujawa Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -590,16 +590,22 @@ device_register(device_t dev, void *aux)
 	prop_dictionary_t dict, parent_dict;
 	struct pci_attach_args *pa = aux;
 
+	/* TODO: move this stuff into p5pb driver and call only if present. */
 	if (device_parent(dev) && device_is_a(device_parent(dev), "pci")) {
 
 		dict = device_properties(dev);
 
 		if (PCI_CLASS(pa->pa_class) == PCI_CLASS_DISPLAY) {
 
-			/* Handle CVPPC/BVPPC card. */
-			if ((PCI_VENDOR(pa->pa_id) == PCI_VENDOR_TI)
+			/* Handle the CVPPC/BVPPC card... */
+			if ( ((PCI_VENDOR(pa->pa_id) == PCI_VENDOR_TI)
 			    && (PCI_PRODUCT(pa->pa_id) == 
-			    PCI_PRODUCT_TI_TVP4020) ) {
+			    PCI_PRODUCT_TI_TVP4020) ) || 
+			    /* ...and 3Dfx Voodoo 3 in G-REX. */ 
+			    ((PCI_VENDOR(pa->pa_id) == PCI_VENDOR_3DFX)
+			    && (PCI_PRODUCT(pa->pa_id) == 
+			    PCI_PRODUCT_3DFX_VOODOO3) )
+			   ) {
 		
 				/*
 				 * PCI bridge knows the properties, 
@@ -618,18 +624,20 @@ device_register(device_t dev, void *aux)
 				prop_dictionary_set(dict, "depth",
 				    prop_dictionary_get(parent_dict, "depth"));
 
+#if (NGENFB > 0)
 				prop_dictionary_set(dict, "linebytes",
 				    prop_dictionary_get(parent_dict, 
 				    "linebytes"));
-
 				prop_dictionary_set(dict, "address",
 				    prop_dictionary_get(parent_dict, 
 				    "address"));
-#if (NGENFB > 0)
 				prop_dictionary_set(dict, "virtual_address",
 				    prop_dictionary_get(parent_dict, 
 				    "virtual_address"));
 #endif
+				prop_dictionary_set(dict, "is_console",
+				    prop_dictionary_get(parent_dict, 
+				    "is_console"));
 			}
 		}
 	}

Index: src/sys/arch/amiga/pci/p5pb.c
diff -u src/sys/arch/amiga/pci/p5pb.c:1.6 src/sys/arch/amiga/pci/p5pb.c:1.7
--- src/sys/arch/amiga/pci/p5pb.c:1.6	Thu Jan 19 00:14:08 2012
+++ src/sys/arch/amiga/pci/p5pb.c	Tue Jan 24 00:20:45 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: p5pb.c,v 1.6 2012/01/19 00:14:08 rkujawa Exp $ */
+/*	$NetBSD: p5pb.c,v 1.7 2012/01/24 00:20:45 rkujawa Exp $ */
 
 /*-
  * Copyright (c) 2011, 2012 The NetBSD Foundation, Inc.
@@ -117,7 +117,6 @@ p5pb_match(device_t parent, cfdata_t cf,
 	return 0;
 }
 
-
 static void
 p5pb_attach(device_t parent, device_t self, void *aux)
 {
@@ -184,7 +183,10 @@ p5pb_attach(device_t parent, device_t se
 	sc->apc.pc_intr_disestablish = amiga_pci_intr_disestablish;
 
 #ifdef PCI_NETBSD_CONFIGURE
-	p5pb_bus_reconfigure(sc);
+	/* Never reconfigure the bus on CVPPC/BVPPC, avoid the fb breakage. */
+	if (sc->bridge_type != P5PB_BRIDGE_CVPPC) {
+		p5pb_bus_reconfigure(sc);
+	}
 #endif /* PCI_NETBSD_CONFIGURE */
 
 	/* Initialize the bus attachment structure. */
@@ -198,10 +200,7 @@ p5pb_attach(device_t parent, device_t se
 	pba.pba_bus = 0;
 	pba.pba_bridgetag = NULL;
 
-	/* If we are a CVPPC/BVPPC, set the properties needed for genfb. */
-	if (sc->bridge_type == P5PB_BRIDGE_CVPPC) {
-		p5pb_set_props(sc);
-	}
+	p5pb_set_props(sc);
 
 	config_found_ia(self, "pcibus", &pba, pcibusprint);
 }
@@ -300,7 +299,7 @@ p5pb_find_resources(struct p5pb_softc *s
 
 /*
  * Set properties needed to support fb driver. These are read later during
- * autoconfg in device_register(). Needed for CVPPC/BVPPC.
+ * autoconfg in device_register(). Needed for CVPPC/BVPPC and Voodoo in G-REX.
  */
 void
 p5pb_set_props(struct p5pb_softc *sc) 
@@ -310,18 +309,27 @@ p5pb_set_props(struct p5pb_softc *sc) 
 	
 	dev = sc->sc_dev;
 	dict = device_properties(dev);
-	
+
 	prop_dictionary_set_uint32(dict, "width", P5GFX_WIDTH);
 	prop_dictionary_set_uint32(dict, "height", P5GFX_HEIGHT);
 	prop_dictionary_set_uint8(dict, "depth", P5GFX_DEPTH);
-	prop_dictionary_set_uint16(dict, "linebytes", P5GFX_LINEBYTES);
-	prop_dictionary_set_uint64(dict, "address", 
-	    kvtop((void*) sc->pci_mem_area.base)); 
+
+	/* genfb needs additional properties, like virtual, physical address */
 #if (NGENFB > 0)
-	/* genfb needs virtual address too */
+	/* XXX: currently genfb is supported only on CVPPC/BVPPC */
+	prop_dictionary_set_uint16(dict, "linebytes", P5GFX_LINEBYTES);
 	prop_dictionary_set_uint64(dict, "virtual_address",
 	    sc->pci_mem_area.base);
+	prop_dictionary_set_uint64(dict, "address", 
+	    kvtop((void*) sc->pci_mem_area.base)); 
+#endif
+
+#ifdef P5PB_CONSOLE
+	prop_dictionary_set_bool(dict, "is_console", true);
+#else
+	prop_dictionary_set_bool(dict, "is_console", false);
 #endif
+
 }
 
 pcireg_t
@@ -369,7 +377,7 @@ p5pb_pci_bus_maxdevs_cvppc(pci_chipset_t
 int
 p5pb_pci_bus_maxdevs_grex4000(pci_chipset_tag_t pc, int busno) 
 {
-	/* G-REX 4000 has 4 slots. */
+	/* G-REX 4000 has 4, G-REX 4000T has 3 slots? */
 	return 1; /* XXX: 4 not yet! */
 }
 

Reply via email to