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;