Port-news68k archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

news68k PROM function based framebuffer console support

Dear news68k users,

As seen in source-changes@, I've committed preliminary PROM internal
function based framebuffer console output support:

Module Name:    src
Committed By:   tsutsui
Date:           Sun Nov 20 15:38:00 UTC 2011

Modified Files:
        src/sys/arch/news68k/conf: GENERIC INSTALL files.news68k majors.news68k
        src/sys/arch/news68k/dev: if_le.c kb_hb.c si.c zs.c
        src/sys/arch/news68k/include: cpu.h vmparam.h
        src/sys/arch/news68k/news68k: locore.s machdep.c pmap_bootstrap.c
Added Files:
        src/sys/arch/news68k/news68k: romcalls.S romcons.c

Log Message:
Add preliminary PROM internal function based framebuffer console support,
which was demonstrated at Open Source Conference 2011 Kansai @ Kyoto
back in July:

- map 0xc0000000-0xffffffff PA region (which is mirror of PA 0x0-0x3fffffff)
  to the same VA via %tt0 and %tt1 registers and move KVA space accordingly
  (like luna68k does for its devices)
- save trap #0 vector for PROM function calls in early bootstrap
  and register it to trap #14 to call it from kernel for console output
- add dumb romcall based tty attachment taken from src/sys/dev/ofw/ofcons.c
- add rom function call stubs from news68k/stand/common/romcalls.S
- remove IIOV() macro for device registers where now mapped PA==VA via %tt1

XXX: romcons is not enabled yet because there is no generic interface
XXX: to attach wskbd(4) to non wsdisplay(4) devices like this romcons.

It's still disabled by default, but it can be used with the attached
ugly patch for MI wskbd.c to attach MI wskbd to MD romcons:

Index: sys/dev/wscons/wskbd.c
RCS file: /cvsroot/src/sys/dev/wscons/wskbd.c,v
retrieving revision 1.130
diff -u -p -r1.130 wskbd.c
--- sys/dev/wscons/wskbd.c      26 Oct 2010 05:12:34 -0000      1.130
+++ sys/dev/wscons/wskbd.c      20 Nov 2011 15:59:17 -0000
@@ -703,6 +703,27 @@ wskbd_input(device_t dev, u_int type, in
+#ifdef news68k
+#include "romcons.h"
+#if NROMCONS > 0
+       if (sc->sc_translating) {
+               int num, i;
+               keysym_t ks;
+               extern bool romcons_is_console;
+               extern void romcons_kbdinput(int);
+               if (romcons_is_console) {
+                       num = wskbd_translate(sc->id, type, value);
+                       for (i = 0; i < num; i++) {
+                               ks = sc->id->t_symbols[i];
+                               if (KS_GROUP(ks) == KS_GROUP_Plain &&
+                                   KS_VALUE(ks) <= 0x7f);
+                                       romcons_kbdinput(KS_VALUE(ks));
+                       }
+               }
+       }
        wskbd_deliver_event(sc, type, value);


Have fun,

Izumi Tsutsui

Home | Main Index | Thread Index | Old Index