Module Name:    src
Committed By:   tsutsui
Date:           Sat Feb 12 05:08:41 UTC 2011

Modified Files:
        src/sys/arch/hp300/conf: GENERIC INSTALL files.hp300
        src/sys/arch/hp300/dev: diofbreg.h diofbvar.h
        src/sys/arch/hp300/hp300: autoconf.c
        src/sys/arch/hp300/stand: Makefile.buildboot
        src/sys/arch/hp300/stand/common: grfreg.h ite.c ite_subr.c itevar.h
Added Files:
        src/sys/arch/hp300/dev: gendiofb.c
        src/sys/arch/hp300/stand/common: ite_dumb.c

Log Message:
Add dumb framebuffer (no acceleration, no colormap) support
for HP362 and HP382.

Tested on A1473-69510 (HP362 VGA-res) and A1474-69511 (HP382 mid-res).


To generate a diff of this commit:
cvs rdiff -u -r1.161 -r1.162 src/sys/arch/hp300/conf/GENERIC
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/hp300/conf/INSTALL
cvs rdiff -u -r1.79 -r1.80 src/sys/arch/hp300/conf/files.hp300
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/hp300/dev/diofbreg.h \
    src/sys/arch/hp300/dev/diofbvar.h
cvs rdiff -u -r0 -r1.1 src/sys/arch/hp300/dev/gendiofb.c
cvs rdiff -u -r1.96 -r1.97 src/sys/arch/hp300/hp300/autoconf.c
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/hp300/stand/Makefile.buildboot
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/hp300/stand/common/grfreg.h
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/hp300/stand/common/ite.c
cvs rdiff -u -r0 -r1.1 src/sys/arch/hp300/stand/common/ite_dumb.c
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/hp300/stand/common/ite_subr.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/hp300/stand/common/itevar.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/arch/hp300/conf/GENERIC
diff -u src/sys/arch/hp300/conf/GENERIC:1.161 src/sys/arch/hp300/conf/GENERIC:1.162
--- src/sys/arch/hp300/conf/GENERIC:1.161	Sun Feb  6 18:40:55 2011
+++ src/sys/arch/hp300/conf/GENERIC	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.161 2011/02/06 18:40:55 tsutsui Exp $
+# $NetBSD: GENERIC,v 1.162 2011/02/12 05:08:40 tsutsui Exp $
 #
 # GENERIC machine description file
 #
@@ -22,7 +22,7 @@
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"GENERIC-$Revision: 1.161 $"
+#ident 		"GENERIC-$Revision: 1.162 $"
 
 maxusers	32		# estimated number of users
 
@@ -236,6 +236,9 @@
 tvrx*		at dio? scode ?		# TurboVRX framebuffer
 wsdisplay*	at tvrx?
 
+gendiofb*	at dio? scode ?		# dumb framebuffer support for 362/382
+wsdisplay*	at gendiofb?
+
 com0		at dio0 scode 9		# DCA serial interfaces
 com*		at dio? scode ?
 

Index: src/sys/arch/hp300/conf/INSTALL
diff -u src/sys/arch/hp300/conf/INSTALL:1.42 src/sys/arch/hp300/conf/INSTALL:1.43
--- src/sys/arch/hp300/conf/INSTALL:1.42	Sun Feb  6 18:26:53 2011
+++ src/sys/arch/hp300/conf/INSTALL	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-# $NetBSD: INSTALL,v 1.42 2011/02/06 18:26:53 tsutsui Exp $
+# $NetBSD: INSTALL,v 1.43 2011/02/12 05:08:40 tsutsui Exp $
 #
 # INSTALL machine description file
 #
@@ -183,6 +183,9 @@
 tvrx*		at dio? scode ?
 wsdisplay*	at tvrx?
 
+gendiofb*	at dio? scode ?
+wsdisplay*	at gendiofb?
+
 com*		at dio0 scode 9		# DCA serial interfaces
 com*		at dio? scode ?
 

Index: src/sys/arch/hp300/conf/files.hp300
diff -u src/sys/arch/hp300/conf/files.hp300:1.79 src/sys/arch/hp300/conf/files.hp300:1.80
--- src/sys/arch/hp300/conf/files.hp300:1.79	Sun Feb  6 18:26:53 2011
+++ src/sys/arch/hp300/conf/files.hp300	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: files.hp300,v 1.79 2011/02/06 18:26:53 tsutsui Exp $
+#	$NetBSD: files.hp300,v 1.80 2011/02/12 05:08:40 tsutsui Exp $
 #
 # hp300-specific configuration info
 
@@ -113,6 +113,10 @@
 attach	tvrx at dio
 file	arch/hp300/dev/tvrx.c			tvrx	needs-flag
 
+device	gendiofb: wsemuldisplaydev, diofb, rasops8
+attach	gendiofb at dio
+file	arch/hp300/dev/gendiofb.c		gendiofb	needs-flag
+
 #
 # Devices on the DIO bus
 #

Index: src/sys/arch/hp300/dev/diofbreg.h
diff -u src/sys/arch/hp300/dev/diofbreg.h:1.1 src/sys/arch/hp300/dev/diofbreg.h:1.2
--- src/sys/arch/hp300/dev/diofbreg.h:1.1	Sun Feb  6 18:26:51 2011
+++ src/sys/arch/hp300/dev/diofbreg.h	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: diofbreg.h,v 1.1 2011/02/06 18:26:51 tsutsui Exp $	*/
+/*	$NetBSD: diofbreg.h,v 1.2 2011/02/12 05:08:40 tsutsui Exp $	*/
 /*	$OpenBSD: diofbreg.h,v 1.3 2007/01/07 15:13:52 miod Exp $	*/
 
 /*
@@ -58,6 +58,8 @@
 #define GID_TIGER      12
 #define GID_YGENESIS   13
 #define GID_HYPERION   14
+#define GID_A1474MID   16
+#define GID_A147xVGA   17
 
 #ifndef	_LOCORE
 struct	diofbreg {
Index: src/sys/arch/hp300/dev/diofbvar.h
diff -u src/sys/arch/hp300/dev/diofbvar.h:1.1 src/sys/arch/hp300/dev/diofbvar.h:1.2
--- src/sys/arch/hp300/dev/diofbvar.h:1.1	Sun Feb  6 18:26:51 2011
+++ src/sys/arch/hp300/dev/diofbvar.h	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: diofbvar.h,v 1.1 2011/02/06 18:26:51 tsutsui Exp $	*/
+/*	$NetBSD: diofbvar.h,v 1.2 2011/02/12 05:08:40 tsutsui Exp $	*/
 /*	$OpenBSD: diofbvar.h,v 1.10 2006/08/11 18:33:13 miod Exp $	*/
 
 /*
@@ -140,6 +140,7 @@
 int	rboxcnattach(bus_space_tag_t, bus_addr_t, int);
 int	topcatcnattach(bus_space_tag_t, bus_addr_t, int);
 int	tvrxcnattach(bus_space_tag_t, bus_addr_t, int);
+int	gendiofbcnattach(bus_space_tag_t, bus_addr_t, int);
 extern	struct diofb diofb_cn;		/* struct diofb for console device */
 
 #endif

Index: src/sys/arch/hp300/hp300/autoconf.c
diff -u src/sys/arch/hp300/hp300/autoconf.c:1.96 src/sys/arch/hp300/hp300/autoconf.c:1.97
--- src/sys/arch/hp300/hp300/autoconf.c:1.96	Wed Feb  9 09:32:49 2011
+++ src/sys/arch/hp300/hp300/autoconf.c	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.96 2011/02/09 09:32:49 tsutsui Exp $	*/
+/*	$NetBSD: autoconf.c,v 1.97 2011/02/12 05:08:40 tsutsui Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 2002 The NetBSD Foundation, Inc.
@@ -88,7 +88,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.96 2011/02/09 09:32:49 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.97 2011/02/12 05:08:40 tsutsui Exp $");
 
 #include "dvbox.h"
 #include "gbox.h"
@@ -96,6 +96,7 @@
 #include "rbox.h"
 #include "topcat.h"
 #include "tvrx.h"
+#include "gendiofb.h"
 #include "com_dio.h"
 #include "com_frodo.h"
 #include "dcm.h"
@@ -820,6 +821,10 @@
 	if (!dio_scan(tvrxcnattach))
 		goto find_kbd;
 #endif
+#if NGENDIOFB > 0
+	if (!dio_scan(gendiofbcnattach))
+		goto find_kbd;
+#endif
 
 find_kbd:
 

Index: src/sys/arch/hp300/stand/Makefile.buildboot
diff -u src/sys/arch/hp300/stand/Makefile.buildboot:1.31 src/sys/arch/hp300/stand/Makefile.buildboot:1.32
--- src/sys/arch/hp300/stand/Makefile.buildboot:1.31	Thu Feb 10 13:04:31 2011
+++ src/sys/arch/hp300/stand/Makefile.buildboot	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.buildboot,v 1.31 2011/02/10 13:04:31 tsutsui Exp $
+#	$NetBSD: Makefile.buildboot,v 1.32 2011/02/12 05:08:40 tsutsui Exp $
 
 # RELOC=FFF00000 allows for boot prog up to FF000 (1044480) bytes long
 RELOC=	FFF00000
@@ -56,8 +56,8 @@
 COMMONSOURCE=		srt0.S autoconf.c clock.c conf.c cons.c devopen.c \
 			exec.c machdep.c prf.c rawfs.c netio.c
 DRIVERSOURCE=		apci.c ct.c dca.c dcm.c dnkbd.c fhpib.c hil.c \
-			hpib.c if_le.c ite.c ite_dv.c ite_gb.c ite_hy.c \
-			ite_rb.c ite_subr.c ite_tc.c ite_tvrx.c \
+			hpib.c if_le.c ite.c ite_dumb.c ite_dv.c ite_gb.c \
+			ite_hy.c ite_rb.c ite_subr.c ite_tc.c ite_tvrx.c \
 			kbd.c kbdconf.c nhpib.c rd.c scsi.c sd.c
 
 .include <bsd.own.mk>

Index: src/sys/arch/hp300/stand/common/grfreg.h
diff -u src/sys/arch/hp300/stand/common/grfreg.h:1.2 src/sys/arch/hp300/stand/common/grfreg.h:1.3
--- src/sys/arch/hp300/stand/common/grfreg.h:1.2	Tue Feb  8 20:20:14 2011
+++ src/sys/arch/hp300/stand/common/grfreg.h	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: grfreg.h,v 1.2 2011/02/08 20:20:14 rmind Exp $	*/
+/*	$NetBSD: grfreg.h,v 1.3 2011/02/12 05:08:40 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1991 University of Utah.
@@ -54,6 +54,8 @@
 #define GID_TIGER      12
 #define GID_YGENESIS   13
 #define GID_HYPERION   14
+#define GID_A1474MID   16
+#define GID_A147xVGA   17
 
 typedef unsigned char	grftype;
 

Index: src/sys/arch/hp300/stand/common/ite.c
diff -u src/sys/arch/hp300/stand/common/ite.c:1.15 src/sys/arch/hp300/stand/common/ite.c:1.16
--- src/sys/arch/hp300/stand/common/ite.c:1.15	Thu Feb 10 13:04:32 2011
+++ src/sys/arch/hp300/stand/common/ite.c	Sat Feb 12 05:08:40 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ite.c,v 1.15 2011/02/10 13:04:32 tsutsui Exp $	*/
+/*	$NetBSD: ite.c,v 1.16 2011/02/12 05:08:40 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -96,6 +96,14 @@
 	{ GID_TIGER,
 	tvrx_init,	ite_dio_clear,	ite_dio_putc1bpp,
 	ite_dio_cursor,	ite_dio_scroll },
+
+	{ GID_A1474MID,
+	dumb_init,	dumb_clear,	dumb_putc,
+	dumb_cursor,	dumb_scroll },
+
+	{ GID_A147xVGA,
+	dumb_init,	dumb_clear,	dumb_putc,
+	dumb_cursor,	dumb_scroll },
 };
 int	nitesw = sizeof(itesw) / sizeof(itesw[0]);
 

Index: src/sys/arch/hp300/stand/common/ite_subr.c
diff -u src/sys/arch/hp300/stand/common/ite_subr.c:1.10 src/sys/arch/hp300/stand/common/ite_subr.c:1.11
--- src/sys/arch/hp300/stand/common/ite_subr.c:1.10	Thu Feb 10 12:46:22 2011
+++ src/sys/arch/hp300/stand/common/ite_subr.c	Sat Feb 12 05:08:41 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ite_subr.c,v 1.10 2011/02/10 12:46:22 tsutsui Exp $	*/
+/*	$NetBSD: ite_subr.c,v 1.11 2011/02/12 05:08:41 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -47,12 +47,6 @@
 #include <hp300/stand/common/samachdep.h>
 #include <hp300/stand/common/itevar.h>
 
-#define getbyte(ip, offset) \
-	*(((u_char *)(ip)->regbase) + (offset))
-
-#define getword(ip, offset) \
-	((getbyte(ip, offset) << 8) | getbyte(ip, (offset) + 2))
-
 static void ite_writeglyph(struct ite_data *, u_char *, u_char *);
 
 void

Index: src/sys/arch/hp300/stand/common/itevar.h
diff -u src/sys/arch/hp300/stand/common/itevar.h:1.14 src/sys/arch/hp300/stand/common/itevar.h:1.15
--- src/sys/arch/hp300/stand/common/itevar.h:1.14	Thu Feb 10 13:04:32 2011
+++ src/sys/arch/hp300/stand/common/itevar.h	Sat Feb 12 05:08:41 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: itevar.h,v 1.14 2011/02/10 13:04:32 tsutsui Exp $	*/
+/*	$NetBSD: itevar.h,v 1.15 2011/02/12 05:08:41 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -42,6 +42,12 @@
  * Standalone version of hp300 ITE.
  */
 
+#define getbyte(ip, offset) \
+	*(((u_char *)(ip)->regbase) + (offset))
+
+#define getword(ip, offset) \
+	((getbyte(ip, offset) << 8) | getbyte(ip, (offset) + 2))
+
 struct ite_data;
 
 typedef	void (*ite_windowmover)(struct ite_data *, int, int, int, int, int,
@@ -133,3 +139,8 @@
 void dvbox_init(struct ite_data *);
 void hyper_init(struct ite_data *);
 void tvrx_init(struct ite_data *);
+void dumb_init(struct ite_data *);
+void dumb_cursor(struct ite_data *, int);
+void dumb_putc(struct ite_data *, int, int, int);
+void dumb_clear(struct ite_data *, int, int, int, int);
+void dumb_scroll(struct ite_data *);

Added files:

Index: src/sys/arch/hp300/dev/gendiofb.c
diff -u /dev/null src/sys/arch/hp300/dev/gendiofb.c:1.1
--- /dev/null	Sat Feb 12 05:08:41 2011
+++ src/sys/arch/hp300/dev/gendiofb.c	Sat Feb 12 05:08:40 2011
@@ -0,0 +1,277 @@
+/*	$NetBSD: gendiofb.c,v 1.1 2011/02/12 05:08:40 tsutsui Exp $	*/
+/*	$OpenBSD: tvrx.c,v 1.1 2006/04/14 21:05:43 miod Exp $	*/
+
+/*
+ * Copyright (c) 2006, 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.
+ *
+ */
+
+/*
+ * dumb graphics routines for frame buffer on HP362 and HP382 based on tvrx.c
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/conf.h>
+#include <sys/device.h>
+#include <sys/proc.h>
+#include <sys/ioctl.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+
+#include <machine/autoconf.h>
+
+#include <hp300/dev/dioreg.h>
+#include <hp300/dev/diovar.h>
+#include <hp300/dev/diodevs.h>
+
+#include <dev/cons.h>
+
+#include <dev/wscons/wsconsio.h>
+#include <dev/wscons/wsdisplayvar.h>
+#include <dev/rasops/rasops.h>
+
+#include <hp300/dev/diofbreg.h>
+#include <hp300/dev/diofbvar.h>
+
+struct	gendiofb_softc {
+	device_t	sc_dev;
+	struct diofb	*sc_fb;
+	struct diofb	sc_fb_store;
+	int		sc_scode;
+};
+
+static int gendiofb_match(device_t, cfdata_t, void *);
+static void gendiofb_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(gendiofb, sizeof(struct gendiofb_softc),
+    gendiofb_match, gendiofb_attach, NULL, NULL);
+
+static int gendiofb_reset(struct diofb *, int, struct diofbreg *);
+
+static int gendiofb_ioctl(void *, void *, u_long, void *, int, struct lwp *);
+
+static struct wsdisplay_accessops gendiofb_accessops = {
+	gendiofb_ioctl,
+	diofb_mmap,
+	diofb_alloc_screen,
+	diofb_free_screen,
+	diofb_show_screen,
+	NULL,	/* load_font */
+};
+
+/*
+ * Attachment glue
+ */
+
+static int
+gendiofb_match(device_t parent, cfdata_t cf, void *aux)
+{
+	struct dio_attach_args *da = aux;
+
+	if (da->da_id == DIO_DEVICE_ID_FRAMEBUFFER) {
+		switch (da->da_secid) {
+		case DIO_DEVICE_SECID_A147xVGA:
+		case DIO_DEVICE_SECID_A1474MID:
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
+static void
+gendiofb_attach(device_t parent, device_t self, void *aux)
+{
+	struct gendiofb_softc *sc = device_private(self);
+	struct dio_attach_args *da = aux;
+	bus_space_handle_t bsh;
+	struct diofbreg *fbr;
+	bus_size_t size;
+
+	sc->sc_dev = self;
+	sc->sc_scode = da->da_scode;
+	if (sc->sc_scode == conscode) {
+		fbr = (struct diofbreg *)conaddr;	/* already mapped */
+		sc->sc_fb = &diofb_cn;
+	} else {
+		sc->sc_fb = &sc->sc_fb_store;
+		size = da->da_size;
+		if (size > DIOII_DEVSIZE)	/* XXX */
+			size = DIOII_DEVSIZE;
+		if (bus_space_map(da->da_bst, da->da_addr, size, 0,
+		    &bsh)) {
+			aprint_error(": can't map framebuffer\n");
+			return;
+		}
+		fbr = bus_space_vaddr(da->da_bst, bsh);
+		if (gendiofb_reset(sc->sc_fb, sc->sc_scode, fbr) != 0) {
+			aprint_error(": failed to reset\n");
+			return;
+		}
+	}
+
+	diofb_end_attach(self, &gendiofb_accessops, sc->sc_fb,
+	    sc->sc_scode == conscode, NULL);
+}
+
+/*
+ * Initialize hardware and display routines.
+ */
+static int
+gendiofb_reset(struct diofb *fb, int scode, struct diofbreg *fbr)
+{
+	int rc;
+	struct rasops_info *ri = &fb->ri;
+
+	if ((rc = diofb_fbinquire(fb, scode, fbr)) != 0)
+		return (rc);
+
+	/*
+	 * We rely on the PROM to initialize the frame buffer in the mode
+	 * we expect it: cleared, overlay plane enabled and accessible
+	 * at the beginning of the video memory.
+	 *
+	 * This is NOT the mode we would end up by simply resetting the
+	 * board.
+	 */
+
+	ri->ri_depth = 8;
+	ri->ri_stride = (fb->fbwidth * ri->ri_depth) / 8;
+
+	ri->ri_flg = RI_CENTER | RI_FULLCLEAR;
+	if (fb == &diofb_cn)
+		ri->ri_flg |= RI_NO_AUTO;	/* XXX */
+	ri->ri_bits = fb->fbkva;
+	ri->ri_width = fb->dwidth;
+	ri->ri_height = fb->dheight;
+	ri->ri_hw = fb;
+
+	/*
+	 * Ask for an unholy big display, rasops will trim this to more
+	 * reasonable values.
+	 */
+	rasops_init(ri, 160, 160);
+	ri->ri_flg |= RI_FORCEMONO;	/* no colormap */
+
+	diofb_resetcmap(fb);
+
+	fb->wsd.name = fb->wsdname;
+	fb->wsd.ncols = ri->ri_cols;
+	fb->wsd.nrows = ri->ri_rows;
+	fb->wsd.textops = &ri->ri_ops;
+	fb->wsd.fontwidth = ri->ri_font->fontwidth;
+	fb->wsd.fontheight = ri->ri_font->fontheight;
+	fb->wsd.capabilities = ri->ri_caps;
+	strlcpy(fb->wsdname, "std", sizeof(fb->wsdname));
+
+	return 0;
+}
+
+static int
+gendiofb_ioctl(void *v, void *vs, u_long cmd, void *data, int flags,
+    struct lwp *l)
+{
+	struct diofb *fb = v;
+	struct wsdisplay_fbinfo *wdf;
+
+	switch (cmd) {
+	case WSDISPLAYIO_GTYPE:
+		*(u_int *)data = WSDISPLAY_TYPE_UNKNOWN;
+		return 0;
+	case WSDISPLAYIO_SMODE:
+		fb->mapmode = *(u_int *)data;
+		return 0;
+	case WSDISPLAYIO_GINFO:
+		wdf = (void *)data;
+		wdf->width = fb->ri.ri_width;
+		wdf->height = fb->ri.ri_height;
+		wdf->depth = fb->ri.ri_depth;
+		wdf->cmsize = 0;
+		return 0;
+	case WSDISPLAYIO_LINEBYTES:
+		*(u_int *)data = fb->ri.ri_stride;
+		return 0;
+	case WSDISPLAYIO_GETCMAP:
+	case WSDISPLAYIO_PUTCMAP:
+		/* until color support is implemented */
+		return EPASSTHROUGH;
+	case WSDISPLAYIO_GVIDEO:
+	case WSDISPLAYIO_SVIDEO:
+		/* unsupported */
+		return EPASSTHROUGH;
+	}
+
+	return EPASSTHROUGH;
+}
+
+
+/*
+ *  Console attachment
+ */
+
+int
+gendiofbcnattach(bus_space_tag_t bst, bus_addr_t addr, int scode)
+{
+	bus_space_handle_t bsh;
+	void *va;
+	struct diofbreg *fbr;
+	struct diofb *fb = &diofb_cn;
+	bus_size_t size;
+
+	if (bus_space_map(bst, addr, PAGE_SIZE, 0, &bsh))
+		return 1;
+	va = bus_space_vaddr(bst, bsh);
+	fbr = va;
+	if (badaddr(va) ||
+	    fbr->id != GRFHWID ||
+	    (fbr->fbid != DIO_DEVICE_SECID_A1474MID &&
+	     fbr->fbid != DIO_DEVICE_SECID_A147xVGA)) {
+		bus_space_unmap(bst, bsh, PAGE_SIZE);
+		return 1;
+	}
+
+	size = DIO_SIZE(scode, va);
+	if (size > DIOII_DEVSIZE)	/* XXX */
+		size = DIOII_DEVSIZE;
+
+	bus_space_unmap(bst, bsh, PAGE_SIZE);
+	if (bus_space_map(bst, addr, size, 0, &bsh))
+		return 1;
+	va = bus_space_vaddr(bst, bsh);
+
+	/*
+	 * Initialize the framebuffer hardware.
+	 */
+	conscode = scode;
+	conaddr = va;
+	gendiofb_reset(fb, conscode, (struct diofbreg *)conaddr);
+
+	/*
+	 * Initialize the terminal emulator.
+	 */
+	diofb_cnattach(fb);
+	return 0;
+}

Index: src/sys/arch/hp300/stand/common/ite_dumb.c
diff -u /dev/null src/sys/arch/hp300/stand/common/ite_dumb.c:1.1
--- /dev/null	Sat Feb 12 05:08:41 2011
+++ src/sys/arch/hp300/stand/common/ite_dumb.c	Sat Feb 12 05:08:41 2011
@@ -0,0 +1,251 @@
+/*	$NetBSD: ite_dumb.c,v 1.1 2011/02/12 05:08:41 tsutsui Exp $	*/
+
+/*-
+ * Copyright (c) 2011 Izumi Tsutsui.  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) 1988 University of Utah.
+ * Copyright (c) 1990, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * the Systems Programming Group of the University of Utah Computer
+ * Science Department and Mark Davies of the Department of Computer
+ * Science, Victoria University of Wellington, New Zealand.
+ *
+ * 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.
+ *
+ * from: Utah $Hdr: ite_subr.c 1.2 92/01/20$
+ *
+ *	@(#)ite_subr.c  8.1 (Berkeley) 6/10/93
+ */
+
+#ifdef ITECONSOLE
+
+#include <sys/param.h>
+
+#include <hp300/stand/common/samachdep.h>
+#include <hp300/stand/common/itereg.h>
+#include <hp300/stand/common/itevar.h>
+
+static void dumb_fontinit(struct ite_data *ip);
+static void dumb_writeglyph(struct ite_data *, uint8_t *fbmem, uint8_t *);
+static void dumb_flip_cursor(struct ite_data *ip);
+static void dumb_windowmove(struct ite_data *, int, int, int, int, int, int,
+    int);
+
+static uint8_t *font;
+
+void
+dumb_init(struct ite_data *ip)
+{
+
+	ip->bmv = dumb_windowmove;	/* unused */
+	ite_fontinfo(ip);
+	dumb_clear(ip, 0, 0, ip->rows, ip->cols);
+	dumb_fontinit(ip);
+}
+
+static void
+dumb_fontinit(struct ite_data *ip)
+{
+	int bytewidth = (((ip->ftwidth - 1) / 8) + 1);
+	int glyphsize = bytewidth * ip->ftheight;
+	uint8_t fontbuf[500];
+	uint8_t *dp, *fontp;
+	int c, i, romp;
+
+	/*
+	 * We don't bother to copy font glyph into fbmem
+	 * since there is no hardware windowmove ops.
+	 * Prepare font data into contiguous memory instead.
+	 */
+	font = alloc((ip->ftwidth * ip->ftheight) * 128);
+	romp = getword(ip, getword(ip, FONTROM) + FONTADDR) + FONTDATA;
+
+	for (c = 0; c < 128; c++) {
+		/* get font glyph from FONTROM */
+		dp = fontbuf;
+		for (i = 0; i < glyphsize; i++) {
+			*dp++ = getbyte(ip, romp);
+			romp += 2;
+		}
+
+		/* setup font data for 8bpp fbmem */
+		fontp = &font[(ip->ftwidth * ip->ftheight) * c];
+		dumb_writeglyph(ip, fontp, fontbuf);
+	}
+}
+
+static void
+dumb_writeglyph(struct ite_data *ip, uint8_t *fontmem, uint8_t *glyphp)
+{
+	int bn;
+	int b, l;
+
+	for (l = 0; l < ip->ftheight; l++) {
+		bn = 7;
+		for (b = 0; b < ip->ftwidth; b++) {
+			if ((1 << bn) & *glyphp)
+				*fontmem++ = 0x01;
+			else
+				*fontmem++ = 0x00;
+			if (--bn < 0) {
+				bn = 7;
+				glyphp++;
+			}
+		}
+		if (bn < 7)
+			glyphp++;
+	}
+}
+
+static void
+dumb_flip_cursor(struct ite_data *ip)
+{
+	int l, w;
+	uint8_t *pc;
+	uint32_t *pc32;
+
+	pc = (uint8_t *)ip->fbbase +
+	    ((ip->ftheight * ip->cursory) * ip->fbwidth) +
+	    ip->ftwidth * ip->cursorx;
+
+	for (l = 0; l < ip->ftheight; l++) {
+		/* assume (ip->ftwidth % sizeof(uint32_t) == 0) */
+		pc32 = (uint32_t *)pc;
+		for (w = 0; w < ip->ftwidth / sizeof(uint32_t); w++)
+			pc32[w] ^= 0x01010101;
+		pc += ip->fbwidth;
+	}
+}
+
+void
+dumb_cursor(struct ite_data *ip, int flag)
+{
+
+	switch (flag) {
+	case MOVE_CURSOR:
+		dumb_flip_cursor(ip);
+		/* FALLTHROUGH */
+	case DRAW_CURSOR:
+		ip->cursorx = ip->curx;
+		ip->cursory = ip->cury;
+		/* FALLTHROUGH */
+	default:
+		dumb_flip_cursor(ip);
+		break;
+	}
+}
+
+void
+dumb_putc(struct ite_data *ip, int c, int dy, int dx)
+{
+	int l, w;
+	uint8_t *pc;
+	uint32_t *pc32;
+	uint32_t *fontp;
+	
+	pc = (uint8_t *)ip->fbbase +
+	    ((ip->ftheight * ip->cursory) * ip->fbwidth) +
+	    ip->ftwidth * ip->cursorx;
+	fontp = (uint32_t *)&font[(ip->ftwidth * ip->ftheight) * c];
+
+	for (l = 0; l < ip->ftheight; l++) {
+		/* assume (ip->ftwidth % sizeof(uint32_t) == 0) */
+		pc32 = (uint32_t *)pc;
+		for (w = 0; w < ip->ftwidth / sizeof(uint32_t); w++)
+			pc32[w] = *fontp++;
+		pc += ip->fbwidth;
+	}
+}
+
+void
+dumb_clear(struct ite_data *ip, int sy, int sx, int h, int w)
+{
+	int l;
+	uint8_t *pdst;
+
+	pdst = (uint8_t *)ip->fbbase +
+	    ((ip->ftheight * sy) * ip->fbwidth) + ip->ftwidth * sx;
+
+	for (l = 0; l < ip->ftheight * h; l++) {
+		/* slow, but just works */
+		memset(pdst, 0, ip->ftwidth * w);
+		pdst += ip->fbwidth;
+	}
+}
+
+void
+dumb_scroll(struct ite_data *ip)
+{
+	int l, h, w;
+	uint8_t *psrc, *pdst;
+
+	dumb_flip_cursor(ip);
+
+	psrc = (uint8_t *)ip->fbbase + (ip->ftheight * ip->fbwidth);
+	pdst = (uint8_t *)ip->fbbase;
+
+	h = (ip->rows - 1) * ip->ftheight;
+	w = ip->cols * ip->ftwidth;
+
+	for (l = 0; l < h; l++) {
+		/* slow, but just works and no scroll if no retry */
+		memmove(pdst, psrc, w);
+		psrc += ip->fbwidth;
+		pdst += ip->fbwidth;
+	}
+}
+
+static void
+dumb_windowmove(struct ite_data *ip, int sy, int sx, int dy, int dx,
+    int w, int h, int func)
+{
+
+	/* for sanity check */
+	printf("%s: called\n", __func__);
+}
+#endif

Reply via email to