Date: Sat, 21 Sep 1996 17:31:35 +1000 (EST) From: Julian Assange <proff@suburbia.net> To: hackers@freebsd.org Subject: SVGATextMode under FBSD Message-ID: <199609210731.RAA15662@suburbia.net>
next in thread | raw e-mail | index | archive | help
I have a fetish for large text screens (the one I'm writing this email on
is 180x60 (8x16 font) 10800 chars on screen at once, that's 5 x as much
information before my brain). FreeBSD's inability to do this is the
biggest problem I have with it, so I've started porting linux's SVGATextMode
package.
I'm managed to get vgaset running so far (lets you play with s/vga registers
interactively and produces XF86 mode lines from your fiddling), however
there are a few kernel issues I'd like advice on, before I start creating
my own standards.
FreeBSD, SVR4 and linux have:
ioctl (open("/dev/console"), KDENABIO|KDDISABIO, 0)
which gives access to all ioports.
However SVR4 and linux also have:
ioctl (open("/dev/console"), KDADDIO|KDDELIO, port)
which gives/removes access to ioports in granular manner.
Linux also has:
int ioperm(unsigned long from, unsigned long num, int turn_on);
DESCRIPTION
Ioperm sets the port access permission bits for the
process for num bytes starting from port address from to
the value turn_on. The use of ioperm require root
privileges.
Only the first 0x3ff I/O ports can be specified in this
manner. For more ports, the iopl function must be used.
and:
int iopl(int level);
DESCRIPTION
iopl changes the I/O privilege level of the current
process, as specified in level.
This call is necessary to allow 8514-compatible X
servers to run under Linux. Since these X servers
require access to all 65536 I/O ports, the ioperm call is
not sufficient.
Which are really just backends to KDADDIO|KDDISABIO and KDENABIO|KDDELIO
respectively.
Linux impliments KDADDIO/ioperm as a 128 byte bitmap for each process.
This is the way I'd like to see it in FreeBSD, but I do not understand
the how inb/outb interacts with the mm system well enough to do this
confidently (comments on this?). As a crude hack, I intend to wrap
KDADDIO|ioperm in linux_compat to KDENABIO. iopl wraps cleanly. This
should be enough to run svgalib programs, which is a big win, IMEO.
Linux also has:
$ fgrep define /usr/include/linux/vt.h
#define _LINUX_VT_H
#define VT_OPENQRY 0x5600 /* find available vt */
#define VT_GETMODE 0x5601 /* get mode of active vt */
#define VT_SETMODE 0x5602 /* set mode of active vt */
#define VT_AUTO 0x00 /* auto vt switching */
#define VT_PROCESS 0x01 /* process controls switching */
#define VT_ACKACQ 0x02 /* acknowledge switch */
#define VT_GETSTATE 0x5603 /* get global vt state info */
#define VT_SENDSIG 0x5604 /* signal to send to bitmask of vts */
#define VT_RELDISP 0x5605 /* release display */
#define VT_ACTIVATE 0x5606 /* make vt active */
#define VT_WAITACTIVE 0x5607 /* wait for vt active */
#define VT_DISALLOCATE 0x5608 /* free memory associated to vt */
#define VT_RESIZE 0x5609 /* set kernel's idea of screensize */
#define VT_RESIZEX 0x560A /* set kernel's idea of screensize + more */
#define VT_LOCKSWITCH 0x560B /* disallow vt switching */
#define VT_UNLOCKSWITCH 0x560C /* allow vt switching */
ioctl's used for VT resizing etc, most of which do not have syscon/pcvt
counterparts, but all of which should be relatively easy to impliment.
In terms of the linux emmulation code, should these be implimented in
syscons() using the linux defines/values, or as KD* extensions, with
FreeBSD values, and a linux_compat ioctl() wrapper? I'm in favour of
VT_* in order to avoid polluting the USL name space.
--
"Of all tyrannies a tyranny sincerely exercised for the good of its victims
may be the most oppressive. It may be better to live under robber barons
than under omnipotent moral busybodies, The robber baron's cruelty may
sometimes sleep, his cupidity may at some point be satiated; but those who
torment us for own good will torment us without end, for they do so with
the approval of their own conscience." - C.S. Lewis, _God in the Dock_
+---------------------+--------------------+----------------------------------+
|Julian Assange RSO | PO Box 2031 BARKER | Secret Analytic Guy Union |
|proff@suburbia.net | VIC 3122 AUSTRALIA | finger for PGP key hash ID = |
|proff@gnu.ai.mit.edu | FAX +61-3-98199066 | 0619737CCC143F6DEA73E27378933690 |
+---------------------+--------------------+----------------------------------+
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199609210731.RAA15662>
