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;