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 */