Module Name:    src
Committed By:   jmcneill
Date:           Mon Aug 24 11:03:44 UTC 2009

Modified Files:
        src/sys/dev/pci: genfb_pci.c
        src/sys/dev/wsfb: genfb.c genfbvar.h

Log Message:
Expose genfb_restore_palette and allow MD code to specify PMF callbacks.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/dev/pci/genfb_pci.c
cvs rdiff -u -r1.27 -r1.28 src/sys/dev/wsfb/genfb.c
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/wsfb/genfbvar.h

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/genfb_pci.c
diff -u src/sys/dev/pci/genfb_pci.c:1.21 src/sys/dev/pci/genfb_pci.c:1.22
--- src/sys/dev/pci/genfb_pci.c:1.21	Mon Aug 24 02:10:41 2009
+++ src/sys/dev/pci/genfb_pci.c	Mon Aug 24 11:03:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfb_pci.c,v 1.21 2009/08/24 02:10:41 jmcneill Exp $ */
+/*	$NetBSD: genfb_pci.c,v 1.22 2009/08/24 11:03:44 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfb_pci.c,v 1.21 2009/08/24 02:10:41 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfb_pci.c,v 1.22 2009/08/24 11:03:44 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -128,11 +128,16 @@
 	sc->sc_pcitag = pa->pa_tag;
 	sc->sc_want_wsfb = 0;
 
-	/* firmware / MD code responsible for restoring the display */
-	pmf_device_register(self, NULL, NULL);
-
 	genfb_init(&sc->sc_gen);
 
+	/* firmware / MD code responsible for restoring the display */
+	if (sc->sc_gen.sc_pmfcb == NULL)
+		pmf_device_register(self, NULL, NULL);
+	else
+		pmf_device_register(self,
+		    sc->sc_gen.sc_pmfcb->gpc_suspend,
+		    sc->sc_gen.sc_pmfcb->gpc_resume);
+
 	if ((sc->sc_gen.sc_width == 0) || (sc->sc_gen.sc_fbsize == 0)) {
 		aprint_debug_dev(self, "not configured by firmware\n");
 		return;

Index: src/sys/dev/wsfb/genfb.c
diff -u src/sys/dev/wsfb/genfb.c:1.27 src/sys/dev/wsfb/genfb.c:1.28
--- src/sys/dev/wsfb/genfb.c:1.27	Thu Aug 20 02:51:27 2009
+++ src/sys/dev/wsfb/genfb.c	Mon Aug 24 11:03:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfb.c,v 1.27 2009/08/20 02:51:27 macallan Exp $ */
+/*	$NetBSD: genfb.c,v 1.28 2009/08/24 11:03:44 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.27 2009/08/20 02:51:27 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.28 2009/08/24 11:03:44 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -64,7 +64,6 @@
 
 static int	genfb_putcmap(struct genfb_softc *, struct wsdisplay_cmap *);
 static int 	genfb_getcmap(struct genfb_softc *, struct wsdisplay_cmap *);
-static void	genfb_restore_palette(struct genfb_softc *);
 static int 	genfb_putpalreg(struct genfb_softc *, uint8_t, uint8_t,
 			    uint8_t, uint8_t);
 
@@ -90,7 +89,7 @@
 genfb_init(struct genfb_softc *sc)
 {
 	prop_dictionary_t dict;
-	uint64_t cmap_cb;
+	uint64_t cmap_cb, pmf_cb;
 	uint32_t fboffset;
 
 	dict = device_properties(&sc->sc_dev);
@@ -136,6 +135,12 @@
 		if (cmap_cb != 0)
 			sc->sc_cmcb = (void *)(vaddr_t)cmap_cb;
 	}
+	/* optional pmf callback */
+	sc->sc_pmfcb = NULL;
+	if (prop_dictionary_get_uint64(dict, "pmf_callback", &pmf_cb)) {
+		if (pmf_cb != 0)
+			sc->sc_pmfcb = (void *)(vaddr_t)pmf_cb;
+	}
 }
 
 int
@@ -408,7 +413,7 @@
 	return 0;
 }
 
-static void
+void
 genfb_restore_palette(struct genfb_softc *sc)
 {
 	int i;

Index: src/sys/dev/wsfb/genfbvar.h
diff -u src/sys/dev/wsfb/genfbvar.h:1.10 src/sys/dev/wsfb/genfbvar.h:1.11
--- src/sys/dev/wsfb/genfbvar.h:1.10	Tue Feb 17 02:19:33 2009
+++ src/sys/dev/wsfb/genfbvar.h	Mon Aug 24 11:03:44 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfbvar.h,v 1.10 2009/02/17 02:19:33 jmcneill Exp $ */
+/*	$NetBSD: genfbvar.h,v 1.11 2009/08/24 11:03:44 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2007 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfbvar.h,v 1.10 2009/02/17 02:19:33 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfbvar.h,v 1.11 2009/08/24 11:03:44 jmcneill Exp $");
 
 #ifndef GENFBVAR_H
 #define GENFBVAR_H
@@ -56,6 +56,11 @@
 	void (*gcc_set_mapreg)(void *, int, int, int, int);
 };
 
+struct genfb_pmf_callback {
+	bool (*gpc_suspend)(device_t PMF_FN_PROTO);
+	bool (*gpc_resume)(device_t PMF_FN_PROTO);
+};
+
 struct genfb_softc {
 	struct	device sc_dev;
 	struct vcons_data vd;
@@ -65,6 +70,7 @@
 	const struct wsscreen_descr *sc_screens[1];
 	struct wsscreen_list sc_screenlist;
 	struct genfb_colormap_callback *sc_cmcb;
+	struct genfb_pmf_callback *sc_pmfcb;
 	void *sc_fbaddr;	/* kva */
 	void *sc_shadowfb; 
 	bus_addr_t sc_fboffset;	/* bus address */
@@ -84,5 +90,7 @@
 void	genfb_init(struct genfb_softc *);
 int	genfb_attach(struct genfb_softc *, struct genfb_ops *);
 int	genfb_borrow(bus_addr_t, bus_space_handle_t *);
+void	genfb_restore_palette(struct genfb_softc *);
+
 
 #endif /* GENFBVAR_H */

Reply via email to