Module Name:    src
Committed By:   riz
Date:           Sun Nov 21 21:27:37 UTC 2010

Modified Files:
        src/sys/arch/vax/vsa [netbsd-5]: dz_vsbus.c spx.c
        src/sys/dev/dec [netbsd-5]: dz.c

Log Message:
Pull up following revision(s) (requested by hans in ticket #1459):
        sys/arch/vax/vsa/dz_vsbus.c: revision 1.41
        sys/dev/dec/dz.c: revision 1.39
        sys/arch/vax/vsa/spx.c: revision 1.3
Make SPX work as console device on VAXstation 4000/9x.
Make console keyboard work on VAXstation 4000/9x. Seems not to break
anything on other VAXstations (tested on 4000 VLC).
The interrupt handler uses the softc, so it's probably a good idea to
initialize it before causing interrupts. Prevents a panic on VAXstation
4000/9x with SPX console.


To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.40.14.1 src/sys/arch/vax/vsa/dz_vsbus.c
cvs rdiff -u -r1.1 -r1.1.10.1 src/sys/arch/vax/vsa/spx.c
cvs rdiff -u -r1.38 -r1.38.4.1 src/sys/dev/dec/dz.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/vax/vsa/dz_vsbus.c
diff -u src/sys/arch/vax/vsa/dz_vsbus.c:1.40 src/sys/arch/vax/vsa/dz_vsbus.c:1.40.14.1
--- src/sys/arch/vax/vsa/dz_vsbus.c:1.40	Sat Mar 15 00:57:15 2008
+++ src/sys/arch/vax/vsa/dz_vsbus.c	Sun Nov 21 21:27:37 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: dz_vsbus.c,v 1.40 2008/03/15 00:57:15 matt Exp $ */
+/*	$NetBSD: dz_vsbus.c,v 1.40.14.1 2010/11/21 21:27:37 riz Exp $ */
 /*
  * Copyright (c) 1998 Ludd, University of Lule}, Sweden.
  * All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dz_vsbus.c,v 1.40 2008/03/15 00:57:15 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dz_vsbus.c,v 1.40.14.1 2010/11/21 21:27:37 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -162,7 +162,7 @@
 	 * due to the nature of how bus_space_* works on VAX, this will
 	 * be perfectly good until everything is converted.
 	 */
-	if (dz_regs == 0) /* This isn't console */ {
+	if (cn_tab->cn_dev != makedev(cdevsw_lookup_major(&dz_cdevsw), 0)) {
 		dz_regs = vax_map_physmem(va->va_paddr, 1);
 		consline = -1;
 	} else
@@ -286,6 +286,9 @@
 	dz_regs = iospace;
 	dz = (void *)dz_regs;
 	ioaccess(iospace, ioaddr, 1);
+	dz->csr = 0;    /* Disable scanning until initting is done */
+	dz->tcr = (1 << minor(cndev->cn_dev));    /* Turn on xmitter */
+	dz->csr = 0x20; /* Turn scanning back on */
 }
 
 void

Index: src/sys/arch/vax/vsa/spx.c
diff -u src/sys/arch/vax/vsa/spx.c:1.1 src/sys/arch/vax/vsa/spx.c:1.1.10.1
--- src/sys/arch/vax/vsa/spx.c:1.1	Tue Aug 12 17:54:47 2008
+++ src/sys/arch/vax/vsa/spx.c	Sun Nov 21 21:27:37 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: spx.c,v 1.1 2008/08/12 17:54:47 hans Exp $ */
+/*	$NetBSD: spx.c,v 1.1.10.1 2010/11/21 21:27:37 riz Exp $ */
 /*
  * SPX/LCSPX/SPXg/SPXgt accelerated framebuffer driver for NetBSD/VAX
  * Copyright (c) 2005 Blaz Antonic
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: spx.c,v 1.1 2008/08/12 17:54:47 hans Exp $");
+__KERNEL_RCSID(0, "$NetBSD: spx.c,v 1.1.10.1 2010/11/21 21:27:37 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -86,7 +86,7 @@
 
 /*
  * off-screen font storage space 
- * 32x16 glyphs, 256 regular and underliend chars
+ * 32x16 glyphs, 256 regular and underlined chars
  */
 #define FONT_STORAGE_START	(spx_xsize * spx_ysize)
 #define FONT_STORAGE_SIZE	(32 * 16 * 256 * 2)
@@ -204,7 +204,7 @@
 static void	spx_cursor(void *, int, int, int);
 static int	spx_mapchar(void *, int, unsigned int *);
 static void	spx_putchar(void *, int, int, u_int, long);
-static void	spx_copycols(void *, int, int, int,int);
+static void	spx_copycols(void *, int, int, int, int);
 static void	spx_erasecols(void *, int, int, int, long);
 static void	spx_copyrows(void *, int, int, int);
 static void	spx_eraserows(void *, int, int, long);
@@ -595,7 +595,8 @@
 		counter--;
 }
 
-int spx_match(device_t parent, cfdata_t match, void *aux)
+int
+spx_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct vsbus_softc *sc = device_private(parent);
 #if 0
@@ -608,31 +609,10 @@
  * add KA46 when/if ever somebody reports SPXg vax_confdata ID on VS 4000/60
  * Ditto for SPX ID on KA42 & KA43
  */
-	if (vax_boardtype != VAX_BTYP_49)
+	if ((vax_boardtype != VAX_BTYP_49) ||
+	    ((vax_confdata & (CONF_LCSPX | CONF_SPXg)) == 0))
 		return 0;
 
-	/* KA49: Identify framebuffer type */
-	switch (vax_confdata & (CONF_LCSPX | CONF_SPXg)) {
-		case CONF_LCSPX:
-			fb_type = FB_IS_SPX;
-			spx_blkcpy_func = SPX_blkcpy;
-			spx_blkset_func = SPX_blkset;
-			spx_putchar_func = SPX_putchar;
-			break;
-		case CONF_SPXg:
-			fb_type = FB_IS_SPXg;
-			spx_blkcpy_func = SPXg_blkcpy;
-			spx_blkset_func = SPXg_blkset;
-			spx_putchar_func = SPXg_putchar;
-			break;
-		case 0: 
-			aprint_error("spx_match: no framebuffer found\n");
-			break;
-		case CONF_LCSPX | CONF_SPXg:
-			panic("spx_match: incorrect FB configuration\n");
-			break;
-	}
-
 /* FIXME add RAMDAC ID code ??? */
 #if 0
 	/* 
@@ -664,6 +644,24 @@
 
 	spx_init_common(self, va);
 
+	/* display FB type based on RAMDAC ID */
+	switch (get_btreg(SPXDAC_REG_ID) & 0xff) {
+	case 0x4a:
+		aprint_normal_dev(self,
+			"RAMDAC ID: 0x%x, Bt459 (SPX/LCSPX) RAMDAC type\n",
+			get_btreg(SPXDAC_REG_ID) & 0xff);
+		break;
+			
+	case 0x4b:
+		aprint_normal_dev(self,
+			"RAMDAC ID: 0x%x, Bt460 (SPXg) RAMDAC type\n", 
+			get_btreg(SPXDAC_REG_ID) & 0xff);
+		break;
+	default:
+		aprint_error_dev(self, "unknown RAMDAC type 0x%x\n",
+			get_btreg(SPXDAC_REG_ID) & 0xff);
+	}
+
 	curscr = &spx_conscreen;
 	prevscr = curscr;
 
@@ -1071,7 +1069,7 @@
 static void
 spx_free_screen(void *v, void *cookie)
 {
-/* FIXME add something to actually free malloc()ed screen ? */
+/* FIXME add something to actually free malloc()ed screen? */
 }
 
 static int
@@ -1178,7 +1176,7 @@
 	spx_blkset(0, 0, spx_xsize, spx_ysize, SPX_BG_COLOR);
 
 	curscr = &spx_conscreen;
-	
+
 	for (i = 0; i < spx_cols * spx_rows; i++)
 		spx_conscreen.ss_image[i].attr =
 			(SPX_BG_COLOR << 4) | SPX_FG_COLOR;
@@ -1203,7 +1201,7 @@
 
 	/* Only for VS 4000/90, 90A and 96 with LCSPX or SPXg/gt*/
 	if ((vax_boardtype != VAX_BTYP_49) ||
-	    ((vax_confdata & (CONF_LCSPX | CONF_SPXg)) != 0))
+	    ((vax_confdata & (CONF_LCSPX | CONF_SPXg)) == 0))
 		return;
 
 	if (((vax_confdata & 8) && (vax_boardtype == VAX_BTYP_49)) ||
@@ -1215,25 +1213,6 @@
 		return; /* Diagnostic console */
 	}
 
-	/* KA49: Identify framebuffer type */
-	switch (vax_confdata & (CONF_LCSPX | CONF_SPXg)) {
-	case CONF_LCSPX:
-		fb_type = FB_IS_SPX;
-		spx_blkcpy_func = SPX_blkcpy;
-		spx_blkset_func = SPX_blkset;
-		break;
-	case CONF_SPXg:
-		fb_type = FB_IS_SPXg;
-		spx_blkcpy_func = SPXg_blkcpy;
-		spx_blkset_func = SPXg_blkset;
-		break;
-	case 0:
-		aprint_error("spxcnprobe: no framebuffer found\n");
-		break;
-	case CONF_LCSPX | CONF_SPXg:
-		panic("spxcnprobe: incorrect FB configuration\n"); break;
-	}
-
 	spx_init_common(NULL, NULL);
 
 	cndev->cn_pri = CN_INTERNAL;
@@ -1459,6 +1438,29 @@
 	u_int i, j, k;
 	int cookie;
 	struct wsdisplay_font *wf;
+	static int init_done;
+
+	if (init_done)
+		return;
+
+	/* KA49: Identify framebuffer type */
+	switch (vax_confdata & (CONF_LCSPX | CONF_SPXg)) {
+	case CONF_LCSPX:
+		fb_type = FB_IS_SPX;
+		spx_blkcpy_func = SPX_blkcpy;
+		spx_blkset_func = SPX_blkset;
+		spx_putchar_func = SPX_putchar;
+		break;
+	case CONF_SPXg:
+		fb_type = FB_IS_SPXg;
+		spx_blkcpy_func = SPXg_blkcpy;
+		spx_blkset_func = SPXg_blkset;
+		spx_putchar_func = SPXg_putchar;
+		break;
+	case CONF_LCSPX | CONF_SPXg:
+		panic("spxcnprobe: incorrect FB configuration\n");
+		break;
+	}
 
 	/* map SPX registers first */
 	if (fb_type == FB_IS_SPX) {
@@ -1489,9 +1491,6 @@
 		cookie = wsfont_find(NULL, 0, 0, 0, WSDISPLAY_FONTORDER_R2L,
 				     WSDISPLAY_FONTORDER_L2R);
 
-	if (cookie == -1)
-		aprint_error_dev(self, "spx_common_init: cookie = -1\n");
-
 	if (cookie == -1 || wsfont_lock(cookie, &wf))
 		panic("spx_common_init: unable to load console font");
 
@@ -1524,24 +1523,6 @@
 		SPX_MAP_FB(self, va, SPXg);
 	}
 
-	/* display FB type based on RAMDAC ID */
-	switch (get_btreg(SPXDAC_REG_ID) & 0xff) {
-	case 0x4a:
-		aprint_normal_dev(
-			self, "RAMDAC ID: 0x%x, Bt459 (SPX/LCSPX) RAMDAC type\n",
-			get_btreg(SPXDAC_REG_ID) & 0xff);
-		break;
-			
-	case 0x4b:
-		aprint_normal_dev(
-			self, "RAMDAC ID: 0x%x, Bt460 (SPXg) RAMDAC type\n", 
-			get_btreg(SPXDAC_REG_ID) & 0xff);
-		break;
-	default:
-		aprint_error_dev(self, "unknown RAMDAC type 0x%x\n",
-				 get_btreg(SPXDAC_REG_ID) & 0xff);
-	}
-
 	/* render font glyphs to off-screen memory */
 	if (fb_type == FB_IS_SPX)
 		SPX_render_font();
@@ -1608,4 +1589,6 @@
 	set_btreg(SPXDAC_REG_WWHI, 0);
 	set_btreg(SPXDAC_REG_WHLO, 0);
 	set_btreg(SPXDAC_REG_WHHI, 0);
+
+	init_done = 1;
 }

Index: src/sys/dev/dec/dz.c
diff -u src/sys/dev/dec/dz.c:1.38 src/sys/dev/dec/dz.c:1.38.4.1
--- src/sys/dev/dec/dz.c:1.38	Mon Sep  8 23:36:54 2008
+++ src/sys/dev/dec/dz.c	Sun Nov 21 21:27:37 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: dz.c,v 1.38 2008/09/08 23:36:54 gmcgarry Exp $	*/
+/*	$NetBSD: dz.c,v 1.38.4.1 2010/11/21 21:27:37 riz Exp $	*/
 /*
  * Copyright (c) 1992, 1993
  *	The Regents of the University of California.  All rights reserved.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dz.c,v 1.38 2008/09/08 23:36:54 gmcgarry Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dz.c,v 1.38.4.1 2010/11/21 21:27:37 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -204,16 +204,7 @@
 {
 	int n;
 
-	sc->sc_rxint = sc->sc_brk = 0;
-	sc->sc_consline = consline;
-
-	sc->sc_dr.dr_tcrw = sc->sc_dr.dr_tcr;
-	dz_write2(sc, sc->sc_dr.dr_csr, DZ_CSR_MSE | DZ_CSR_RXIE | DZ_CSR_TXIE);
-	dz_write1(sc, sc->sc_dr.dr_dtr, 0);
-	dz_write1(sc, sc->sc_dr.dr_break, 0);
-	DELAY(10000);
-
-	/* Initialize our softc structure. Should be done in open? */
+	/* Initialize our softc structure. */
 
 	for (n = 0; n < sc->sc_type; n++) {
 		sc->sc_dz[n].dz_sc = sc;
@@ -231,6 +222,15 @@
 	cn_set_magic("\047\001"); /* default magic is BREAK */
 				  /* VAX will change it in MD code */
 
+	sc->sc_rxint = sc->sc_brk = 0;
+	sc->sc_consline = consline;
+
+	sc->sc_dr.dr_tcrw = sc->sc_dr.dr_tcr;
+	dz_write2(sc, sc->sc_dr.dr_csr, DZ_CSR_MSE | DZ_CSR_RXIE | DZ_CSR_TXIE);
+	dz_write1(sc, sc->sc_dr.dr_dtr, 0);
+	dz_write1(sc, sc->sc_dr.dr_break, 0);
+	DELAY(10000);
+
 	/* Alas no interrupt on modem bit changes, so we manually scan */
 	if (dz_timer == 0) {
 		dz_timer = 1;

Reply via email to