Date: Mon, 15 Sep 2008 14:24:10 -0300 From: "Carlos A. M. dos Santos" <unixmania@gmail.com> To: "Jung-uk Kim" <jkim@freebsd.org> Cc: Xin LI <delphij@delphij.net>, freebsd-current@freebsd.org, Oliver Fromme <olli@fromme.com> Subject: Re: Why VESA and DPMS are available only for i386? Message-ID: <e71790db0809151024r2d423958k92cd10a52fc88630@mail.gmail.com> In-Reply-To: <200809151232.36756.jkim@FreeBSD.org> References: <200809150922.m8F9MaHg090579@haluter.fromme.com> <200809151232.36756.jkim@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Sep 15, 2008 at 1:32 PM, Jung-uk Kim <jkim@freebsd.org> wrote: > On Monday 15 September 2008 05:22 am, Oliver Fromme wrote: >> Carlos A. M. dos Santos wrote: >> > Xin LI wrote: >> > > Carlos A. M. dos Santos wrote: >> > > > Several PRs were closed based on the argument that >> > > > FreeBSD/amd64 cannot call to the VESA BIOS. XFree86 solved >> > > > this problem by means of the INT10 module. I believe that it >> > > > would be possible to do the same on the FreeBSD kernel. >> > > > >> > > > Is there any ongoing effort to enable the VESA kernel moule >> > > > on non-i386 platform? Is there any particular difficulty for >> > > > doing this, besides depending on VM86? >> > > >> > > According to VESA's VBE 3.0 standard, there is a "Protected >> > > Mode Entry Point" [optionally] provided by BIOS, which OS or >> > > application is supposed to copy to a place where it is >> > > writable. The code there would be written in 16-bit protected >> > > mode. Therefore I think it's do-able... >> > > >> > > http://www.vesa.org/public/VBE/vbe3.pdf >> > >> > I'm reading the specification and digging at the code of the X >> > server and the X VESA driver. Look promising. >> >> Don't hold your breath. Peter explained that this is more >> involved than it seems at first glance: >> >> http://lists.freebsd.org/pipermail/freebsd-amd64/2005-October/00637 >>6.html >> >> Here's a quote: >> | [FreeBSD's VESA code] is trying to use bios calls to change >> | the modes. This is something a 64 bit kernel cannot do. To >> | make this work, one would have to trampoline out of 64 bit mode >> | and into 32 bit mode, then do the vm86 or bios32() calls. This >> | is more work than it might appear at first because you have to >> | deal with interrupts. One would have to write a 32 bit >> | mini-kernel that can accept interrupts and traps, trampoline to >> | 64 bit mode, handle them, then return, switching back to 32 bit >> | mode. All with page tables etc. And of course you have to do >> | extra data copying and have a way to describe it to the API. >> >> By the way, It doesn't matter whether you use the VESA >> BIOS' real-mode functions or the protected-mode functions >> (which exist since VBE 2.0, not only 3.0). From the view >> of an amd64 kernel it doesn't make a difference. >> >> Another way would be to write a 32bit x86 instruction >> emulator (similar to what programs like qemu or bochs do), >> so you can execute the VESA functions within an emulated >> virtual machine that programs the VGA hardware registers. >> This isn't exactly trivial either. Note that there are >> already such emulators, but I'm not aware of a BSD-licensed >> one that could be included in the FreeBSD kernel without >> problems. > > doscmd(1) had a rudimentary 16-bit CPU emulation: > > http://www.freebsd.org/cgi/cvsweb.cgi/projects/doscmd/ > http://www.freebsd.org/cgi/cvsweb.cgi/projects/doscmd/cpu.c No change in the last 4 years. Is there anybody responsible for it these days? -- cd /usr/ports/sysutils/life make clean
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?e71790db0809151024r2d423958k92cd10a52fc88630>