xserver on OpenGL

Kendall Bennett KendallB@scitechsoft.com
Fri, 05 Dec 2003 18:51:39 -0800


Jon Smirl <jonsmirl@yahoo.com> wrote:

> Rage128 is set as my primary adapter to the BIOS. This means my Radeon
> 9000 does not get initialized when my PC boots. Xfree knows how to
> initialize it as a secondary adapter, how does XFree do this?
> 
> I can do it manually with a small program from Scitech that copies the
> VBIOS into RAM and uses  VM86 to call C000:0003. C000:0003 is the boot
> time initialization vector. Xfree seems to be initializing the card
> through some other mechanism, maybe an Int10 call.

XFree86 uses the same x86emu emulator library that we use in SNAP (I did 
most of the work to make this functional, and Egbert has been keeping our 
tree and the X trees in sync). Using the emulator library you can bring 
up a secondary controller in a similar manner to what you mention above. 
The code to do all that is in our GPL depot, and you can build up a stand 
alone program called 'warmboot' that can do this using the emulator. Of 
course the catch is that on the secondary controller you need to use the 
emulator to handle the BIOS calls.

I am pretty sure XFree86 uses the emulator for the second head, although 
on Linux that is not entirely necessary. You can use the copy-on-write 
features of the kernel to copy the BIOS image from the PCI ROM to 0xC0000 
and then execute the BIOS post code, which will bring up the card and 
allow you to use real v86 mode. We generally don't do that as the 
emulator is more cross platform (plus we finally nailed some nasty bugs 
in the emulator a few weeks back and now I can't find a single card that 
doesn't work with it ;-).

> I also disable VT support in my target environment. I have two
> keyboards/mice. I set the target to use the secondary
> keyboard/mice. Now I can run a debugger in X on my Rage128 while I
> have a fully capable target system. Is there a better scheme for
> doing this? 

We generally do all debugging on a separate machine and use TCP/IP or 
parallel port for the connection. For drivers we develop from Windows 
2000/XP and run the debug code under 32-bit DOS or OS/2 console mode 
using Open Watcom (and with Open Watcom 1.2 we can debug our driver 
modules with full source code debugging ;-). For XFree86 debugging I ssh 
into a Red Hat 7.3 box to build and debug the modules (my main box is Red 
Hat 8.0). Unfortunately the hacked up GDB does not work very well with 
anything by XFree86 7.3, so if we debug on 8.0 we cannot debug the 
XFree86 driver modules with source code.

Also the Linux port of Open Watcom is coming along nicely, and I am 
hoping eventually I can ditch Windows XP and instead build on Linux. I 
doubt I will debug on Linux except for Linux specific stuff though, as we 
have a pretty solid DOS or OS/2 console boot that can both handle hard 
crashes and re-boot quickly in case of failure. When Open Watcom is done 
for Linux, I can build on Linux and remote debug via TCP/IP or parallel 
port to OS/2 or DOS (actually you can do that today if you build from the 
latest source code). Even with ext-3 I have had hard crashes during 
debugging that have taken out my entire Linux distro requiring me to 
restore it from a Drive Image image.

Regards,

---
Kendall Bennett
Chief Executive Officer
SciTech Software, Inc.
Phone: (530) 894 8400
http://www.scitechsoft.com

~ SciTech SNAP - The future of device driver technology! ~