[Intel-gfx] Basic Intel Grapics Hardware-Level Programming

Eduardo Rodriguez Gutiez ergutiez_4 at hotmail.com
Wed Jun 30 12:21:16 CEST 2010







Hi Everyone.

 

I'm trying to develop a small graphics driver for the intel chipsets, but I can't find the necessary information to do that.

 

Several months ago, I finished a small code that was able to paint pixels onto the upper part of the screen by setting the screen resolution using VESA VBE in real mode, switching to protected mode (direct BIOS calls are disabled now), and writing pixels int the real memory at 0xA0000-0xAFFFF. The problem was that this zone of the memory is only 64KB in length and some 1024*XXX modes use at least 2MB of memory, so it could only use the upper screen rows. 

 

This can solved by: a) Getting the VBE protected mode interface (this is not as easy as it might sound since a change in a kernel entry point could not be a good idea), b) Creating a Virtual 8086 Monitor and a  process in V8086 mode by changing its copy of EFLAGS bit 17 to 1 at the PCB. c) Returning to real mode and changing bank from here, then setting the processor in Protected mode. d) Using framebuffers instead of memory banks, and setting its size and start point in real mode and e) Writing a device-specific graphic driver and assembling the code for protected mode. The e) option is the best, because it's very versatile and you can use it in a OS with an unknown structure without destroying it (it's independent from the OS).

 

Since then, I've tried hardly to find the ports that the intel graphics driver is using. I found info about VirtualBox grapic card (it's open source too) and made my own driver for it using some basic functions well documented in its code. For example, http://www.virtualbox.org/browser/trunk/src/VBox/Devices/Graphics/BIOS/vbe.h has several defines with the ports used for VESA VBE tasks, the basic command codes and resolution codes, and a pointer to the framebuffer, and http://www.virtualbox.org/browser/trunk/src/VBox/Devices/Graphics/BIOS/vbe.c has the code for setting current video bank, x resolution and y resolution. With that information, it's easy to write a small driver that simply puts pixels, but using all the screen (not only the 64 KB frame at 0xA000), and that is able to change screen resolution. The problem is that this information is only valid for Bochs/Plex86 virtualized cards (at least, that is what says in vgabios.c : "This VGA Bios is specific to the plex86/bochs Emulated VGA card. You can't drive any physical vga card with it."), but it is an important step.

 

I would like to do the same but for a real graphics controller. ¿Where can I find the information I need for intel's ones?

I've been looking for it on the xf86-video-intel driver, but over 99% its used with X Window System or handles 3D or similar, but no info about ports, the framebuffer (according to intel doc 29065602.pdf, The framebuffer is composed of Front Buffer or display buffer and Back Buffer or rendering buffer)
 		 	   		  
_________________________________________________________________
¿Un navegador seguro buscando estás? ¡Protegete ya en www.ayudartepodria.com!
www.ayudartepodria.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20100630/6f989795/attachment.html>


More information about the Intel-gfx mailing list