summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/sparc64/conf/files.sparc646
-rw-r--r--sys/arch/sparc64/dev/consinit.c4
-rw-r--r--sys/arch/sparc64/dev/fb.c240
-rw-r--r--sys/arch/sparc64/include/fbvar.h71
-rw-r--r--sys/arch/sparc64/sparc64/db_interface.c6
-rw-r--r--sys/arch/sparc64/sparc64/machdep.c4
6 files changed, 321 insertions, 10 deletions
diff --git a/sys/arch/sparc64/conf/files.sparc64 b/sys/arch/sparc64/conf/files.sparc64
index ffcb0e2a05d..1ceb1ce8e94 100644
--- a/sys/arch/sparc64/conf/files.sparc64
+++ b/sys/arch/sparc64/conf/files.sparc64
@@ -1,4 +1,4 @@
-# $OpenBSD: files.sparc64,v 1.44 2003/05/06 09:14:39 miod Exp $
+# $OpenBSD: files.sparc64,v 1.45 2003/06/16 20:46:13 miod Exp $
# $NetBSD: files.sparc64,v 1.50 2001/08/10 20:53:50 eeh Exp $
# maxpartitions must be first item in files.${ARCH}
@@ -26,9 +26,13 @@ file dev/ic/hme.c hme
device uperf
file arch/sparc64/dev/uperf.c uperf needs-flag
+# Framebuffer support
+
+file arch/sparc64/dev/fb.c
include "dev/wscons/files.wscons"
include "dev/rasops/files.rasops"
include "dev/wsfont/files.wsfont"
+
include "dev/sbus/files.sbus"
include "dev/i2o/files.i2o"
include "dev/mii/files.mii"
diff --git a/sys/arch/sparc64/dev/consinit.c b/sys/arch/sparc64/dev/consinit.c
index df1dbac2f52..f088b6321eb 100644
--- a/sys/arch/sparc64/dev/consinit.c
+++ b/sys/arch/sparc64/dev/consinit.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: consinit.c,v 1.7 2002/03/14 01:26:44 millert Exp $ */
+/* $OpenBSD: consinit.c,v 1.8 2003/06/16 20:46:10 miod Exp $ */
/* $NetBSD: consinit.c,v 1.9 2000/10/20 05:32:35 mrg Exp $ */
/*-
@@ -161,9 +161,7 @@ prom_cnpollc(dev, on)
{
if (on) {
/* Entering debugger. */
-#if NFB > 0
fb_unblank();
-#endif
} else {
/* Resuming kernel. */
}
diff --git a/sys/arch/sparc64/dev/fb.c b/sys/arch/sparc64/dev/fb.c
new file mode 100644
index 00000000000..ff4962027fa
--- /dev/null
+++ b/sys/arch/sparc64/dev/fb.c
@@ -0,0 +1,240 @@
+/* $OpenBSD: fb.c,v 1.1 2003/06/16 20:46:10 miod Exp $ */
+/* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */
+
+/*
+ * Copyright (c) 2002 Miodrag Vallat
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ * Copyright (c) 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Lawrence Berkeley Laboratory.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)fb.c 8.1 (Berkeley) 6/11/93
+ */
+
+/*
+ * Common wsdisplay framebuffer drivers helpers.
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/device.h>
+#include <sys/proc.h>
+#include <sys/conf.h>
+
+#include <machine/autoconf.h>
+#include <machine/conf.h>
+
+#include <dev/wscons/wsdisplayvar.h>
+#include <dev/wscons/wscons_raster.h>
+#include <dev/rasops/rasops.h>
+#include <machine/fbvar.h>
+
+#include "wsdisplay.h"
+
+/*
+ * emergency unblank code
+ * XXX should be somewhat moved to wscons MI code
+ */
+
+void (*fb_burner)(void *, u_int, u_int);
+void *fb_cookie;
+
+void
+fb_unblank()
+{
+ if (fb_burner != NULL)
+ (*fb_burner)(fb_cookie, 1, 0);
+}
+
+#if NWSDISPLAY > 0
+
+void
+fb_setsize(struct sunfb *sf, int def_depth, int def_width, int def_height,
+ int node, int unused)
+{
+ int def_linebytes;
+
+ sf->sf_depth = getpropint(node, "depth", def_depth);
+ sf->sf_width = getpropint(node, "width", def_width);
+ sf->sf_height = getpropint(node, "height", def_height);
+
+ def_linebytes =
+ roundup(sf->sf_width, sf->sf_depth) * sf->sf_depth / 8;
+ sf->sf_linebytes = getpropint(node, "linebytes", def_linebytes);
+ /*
+ * XXX If we are configuring a board in a wider depth level
+ * than the mode it is currently operating in, the PROM will
+ * return a linebytes property tied to the current depth value,
+ * which is NOT what we are relying upon!
+ */
+ if (sf->sf_linebytes < (sf->sf_width * sf->sf_depth) / 8) {
+ sf->sf_linebytes = def_linebytes;
+ }
+
+ sf->sf_fbsize = sf->sf_height * sf->sf_linebytes;
+}
+
+int a2int(char *, int);
+
+int
+a2int(char *cp, int deflt)
+{
+ int i = 0;
+
+ if (*cp == '\0')
+ return (deflt);
+ while (*cp != '\0')
+ i = i * 10 + *cp++ - '0';
+ return (i);
+}
+
+void
+fbwscons_init(struct sunfb *sf, int flags)
+{
+ int cols, rows;
+
+ /* ri_hw and ri_bits must have already been setup by caller */
+ sf->sf_ro.ri_flg = RI_CENTER | flags;
+ sf->sf_ro.ri_depth = sf->sf_depth;
+ sf->sf_ro.ri_stride = sf->sf_linebytes;
+ sf->sf_ro.ri_width = sf->sf_width;
+ sf->sf_ro.ri_height = sf->sf_height;
+
+ rows = a2int(getpropstring(optionsnode, "screen-#rows"), 34);
+ cols = a2int(getpropstring(optionsnode, "screen-#columns"), 80);
+
+ rasops_init(&sf->sf_ro, rows, cols);
+}
+
+void
+fbwscons_console_init(struct sunfb *sf, struct wsscreen_descr *wsc, int row,
+ void (*burner)(void *, u_int, u_int))
+{
+ long defattr;
+ int *ccolp, *crowp;
+
+ if (romgetcursoraddr(&crowp, &ccolp))
+ ccolp = crowp = NULL;
+ if (ccolp != NULL)
+ sf->sf_ro.ri_ccol = *ccolp;
+
+ if (row < 0) {
+ if (crowp != NULL)
+ sf->sf_ro.ri_crow = *crowp;
+ else
+ /* assume last row */
+ sf->sf_ro.ri_crow = sf->sf_ro.ri_rows - 1;
+ } else
+ sf->sf_ro.ri_crow = row;
+
+ /*
+ * Scale back rows and columns if the font would not otherwise
+ * fit on this display. Without this we would panic later.
+ */
+ if (sf->sf_ro.ri_crow >= wsc->nrows)
+ sf->sf_ro.ri_crow = wsc->nrows - 1;
+ if (sf->sf_ro.ri_ccol >= wsc->ncols)
+ sf->sf_ro.ri_ccol = wsc->ncols - 1;
+
+ /*
+ * Select appropriate color settings to mimic a
+ * black on white Sun console.
+ */
+ if (sf->sf_depth > 8) {
+ wscol_white = 0;
+ wscol_black = 255;
+ wskernel_bg = 0;
+ wskernel_fg = 255;
+ }
+
+ if (ISSET(wsc->capabilities, WSSCREEN_WSCOLORS) &&
+ sf->sf_depth == 8) {
+ sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro,
+ WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, &defattr);
+ } else {
+ sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro, 0, 0, 0, &defattr);
+ }
+
+ wsdisplay_cnattach(wsc, &sf->sf_ro,
+ sf->sf_ro.ri_ccol, sf->sf_ro.ri_crow, defattr);
+
+ /* remember screen burner routine */
+ fb_burner = burner;
+ fb_cookie = sf;
+}
+
+void
+fbwscons_setcolormap(struct sunfb *sf,
+ void (*setcolor)(void *, u_int, u_int8_t, u_int8_t, u_int8_t))
+{
+ int i;
+ u_char *color;
+
+ if (sf->sf_depth <= 8 && setcolor != NULL) {
+ for (i = 0; i < 16; i++) {
+ color = (u_char *)&rasops_cmap[i * 3];
+ setcolor(sf, i, color[0], color[1], color[2]);
+ }
+ /* compensate for BoW palette */
+ setcolor(sf, WSCOL_BLACK, 0, 0, 0);
+ setcolor(sf, 255, 0, 0, 0); /* cursor */
+ setcolor(sf, WSCOL_WHITE, 255, 255, 255);
+ }
+}
+
+#endif /* NWSDISPLAY */
diff --git a/sys/arch/sparc64/include/fbvar.h b/sys/arch/sparc64/include/fbvar.h
new file mode 100644
index 00000000000..2431726858c
--- /dev/null
+++ b/sys/arch/sparc64/include/fbvar.h
@@ -0,0 +1,71 @@
+/* $OpenBSD: fbvar.h,v 1.1 2003/06/16 20:46:13 miod Exp $ */
+/* $NetBSD: fbvar.h,v 1.9 1997/07/07 23:31:30 pk Exp $ */
+
+/*
+ * Copyright (c) 1992, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This software was developed by the Computer Systems Engineering group
+ * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
+ * contributed to Berkeley.
+ *
+ * All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Lawrence Berkeley Laboratory.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)fbvar.h 8.1 (Berkeley) 6/11/93
+ */
+
+/*
+ * Common frame buffer variables.
+ * All framebuffer softc structures must start with such a structure.
+ */
+struct sunfb {
+ struct device sf_dev; /* base device */
+
+ int sf_width;
+ int sf_height;
+ int sf_depth;
+ int sf_linebytes;
+
+ int sf_fbsize; /* sf_height * sf_linebytes */
+
+ struct rasops_info sf_ro;
+};
+
+/*
+ * Selected framebuffer node on OBP systems if k/d console.
+ */
+extern int fbnode;
+
+void fb_setsize(struct sunfb*, int, int, int, int, int);
+void fbwscons_init(struct sunfb *, int);
+void fbwscons_console_init(struct sunfb *, struct wsscreen_descr *, int,
+ void (*)(void *, u_int, u_int));
+void fbwscons_setcolormap(struct sunfb *,
+ void (*)(void *, u_int, u_int8_t, u_int8_t, u_int8_t));
diff --git a/sys/arch/sparc64/sparc64/db_interface.c b/sys/arch/sparc64/sparc64/db_interface.c
index f0510e09de8..86dd3126929 100644
--- a/sys/arch/sparc64/sparc64/db_interface.c
+++ b/sys/arch/sparc64/sparc64/db_interface.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: db_interface.c,v 1.14 2003/02/12 06:33:00 jason Exp $ */
+/* $OpenBSD: db_interface.c,v 1.15 2003/06/16 20:46:14 miod Exp $ */
/* $NetBSD: db_interface.c,v 1.61 2001/07/31 06:55:47 eeh Exp $ */
/*
@@ -279,9 +279,9 @@ kdb_trap(type, tf)
extern int trap_trace_dis;
trap_trace_dis++;
-#if NFB > 0
+
fb_unblank();
-#endif
+
switch (type) {
case T_BREAKPOINT: /* breakpoint */
printf("kdb breakpoint at %llx\n",
diff --git a/sys/arch/sparc64/sparc64/machdep.c b/sys/arch/sparc64/sparc64/machdep.c
index a7b15a97d16..6ca80ad2130 100644
--- a/sys/arch/sparc64/sparc64/machdep.c
+++ b/sys/arch/sparc64/sparc64/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.63 2003/06/06 11:17:48 henric Exp $ */
+/* $OpenBSD: machdep.c,v 1.64 2003/06/16 20:46:14 miod Exp $ */
/* $NetBSD: machdep.c,v 1.108 2001/07/24 19:30:14 eeh Exp $ */
/*-
@@ -788,9 +788,7 @@ boot(howto)
goto haltsys;
}
-#if NFB > 0
fb_unblank();
-#endif
boothowto = howto;
if ((howto & RB_NOSYNC) == 0 && waittime < 0) {
extern struct proc proc0;