Subject: generic virtual consoles
To: None <tech-kern@netbsd.org>
From: Michael Lorenz <macallan@netbsd.org>
List: tech-kern
Date: 12/20/2005 08:02:24
--Signature_Tue__20_Dec_2005_08_02_24_-0500_m_8nejbOI8KBteLd
Content-Type: multipart/mixed;
 boundary=Multipart_Tue__20_Dec_2005_08_02_24_-0500_K6GXMN5KIwllPhdq

--Multipart_Tue__20_Dec_2005_08_02_24_-0500_K6GXMN5KIwllPhdq
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hello,

since the code to support virtual consoles in several drivers ( namely
pnozz, cgsix, machfb and ffb ) is virtually identical I came up with the
attached abstraction. It will work with any wsdisplay driver, code
changes are necessary but usually trivial.

So far it does:
- virtual consoles, provides a function to redraw screen content when
  necessary ( like, when X exits or an fb device closes )
- character read and write ioctl()s when options WSDISPLAY_CHARFUNCS is
  given ( for wsmoused )
It doesn't support scrollback yet, but that should be easy to add.

The patch contains the virtual console implementation ( vcons.c and
wsdisplay_vcons.h, put them into dev/wscons/ ) and it adapts the cgsix,
pnozz and macppc's ofb drivers to use it. Changes in kernel config files
aren't necessary unless you want to run wsmoused.

The code has been tested on sparc ( with pnozz ), sparc64 ( with cgsix
and ffb but my ffb is way out of sync so I didn't include it here ) and
macppc ( with ofb, due to some peculiarities it needed a bigger
overhaul. I'll probably hack it a bit more to add colour support as well
)

It could easily work with vga as well but I'm not sure a merge is
desireable here - if I remember correctly vga keeps scrollback buffers
and such in display memory which this implementation doesn't support -
it always keeps character and attribute buffers in main memory.

So, any comments before I clean it up?

have fun
Michael

--Multipart_Tue__20_Dec_2005_08_02_24_-0500_K6GXMN5KIwllPhdq
Content-Type: application/octet-stream; name=vcons.tar.bz2
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=vcons.tar.bz2

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

--Multipart_Tue__20_Dec_2005_08_02_24_-0500_K6GXMN5KIwllPhdq--

--Signature_Tue__20_Dec_2005_08_02_24_-0500_m_8nejbOI8KBteLd
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (NetBSD)

iQEVAwUBQ6gA5cpnzkX8Yg2nAQIlPQf+OOI1qdyfljNuQB01Auv7CNPM/ETPxiKT
mm5eJLeSbDkgpklWFf1f9mr2VgORpfNfpq05xmn7+cN4z/qFKqsUpryeeRVDupAc
8EjXo6tPmj5egKSqp/8ltku0gze411j0PoboZ4Fiw+exsUElf9lhNy2GcEUC54WF
X9VTVapoCEJlurPPiDzZa09sEitXT6h1399FmAD1R193jG9a2NFryYQiOECwkBVk
UAcUhO7LB/ITWweQ2z/83TkAI7ZFUy0rQ2+K2pQ+jeQcXyTsxfFiCUCAqLmFsUJH
MaPXEm/1kq5sRz5bSTd2DptZO1g7dHhjjJ6VYB4Pw6uqTt4VzcoyMg==
=Mj/v
-----END PGP SIGNATURE-----

--Signature_Tue__20_Dec_2005_08_02_24_-0500_m_8nejbOI8KBteLd--