I was doing more research about UGA cards and EFI last night, and I believe there may be a way to use off-the-shelf WinTel GFX cards with EFI.
First, a compatible EFI graphics card must exist. For this example, we will used an ATI X1900XT Pro. The firmware would need to be downloaded from the card's flash memory. This firmware may contain both a UGA and a BIOS implementation. The UGA driver would need to be extracted from the firmware.
The UGA driver should be compatible with existing WinTel cards, since the chipset probably uses the same register and memory mappings between BIOS and UGA implementations.
Once the UGA driver is extracted from the firmware, an EFI driver would be created which would wrap and load the UGA driver from local storage instead of from ROM.
The Apple drivers would still need to be changed to recognize the PCI/VENDOR strings of the WinTel cards, but that normally means just changing a text config file. If the UGA driver exists and is running, the card should be recognized by the OS driver.
Of course, this is a simplified description of the solution. It would require much more research:
* How to extract the UGA driver from the downloaded firmware.
* How to create an EFI driver.
* How to get the EFI driver to load the UGA driver, and then run it.
* How to not brick the entire system while developing the driver.
This solution is based on information from the following web page:
Specifically the following section on UGA:
First, a compatible EFI graphics card must exist. For this example, we will used an ATI X1900XT Pro. The firmware would need to be downloaded from the card's flash memory. This firmware may contain both a UGA and a BIOS implementation. The UGA driver would need to be extracted from the firmware.
The UGA driver should be compatible with existing WinTel cards, since the chipset probably uses the same register and memory mappings between BIOS and UGA implementations.
Once the UGA driver is extracted from the firmware, an EFI driver would be created which would wrap and load the UGA driver from local storage instead of from ROM.
The Apple drivers would still need to be changed to recognize the PCI/VENDOR strings of the WinTel cards, but that normally means just changing a text config file. If the UGA driver exists and is running, the card should be recognized by the OS driver.
Of course, this is a simplified description of the solution. It would require much more research:
* How to extract the UGA driver from the downloaded firmware.
* How to create an EFI driver.
* How to get the EFI driver to load the UGA driver, and then run it.
* How to not brick the entire system while developing the driver.
This solution is based on information from the following web page:
Specifically the following section on UGA:
Universal Graphics Adapter (UGA)
As mentioned earlier, legacy BIOS depends on VGA, a legacy standard. Thus, given the growing needs of pre-boot applications, graphics support in a firmware environment is both very limited and hard to program with (consider factors like 640x480 maximum resolution, small framebuffer, use of palette modes, and so on). EFI defines the UGA specification as a replacement for VGA and VESA. Microsoft is behind UGA, with support from major graphics device manufacturers like ATI.
Any graphics device with UGA firmware can be considered a UGA device. It may also contain VGA firmware for compatibility. The firmware execution environment interprets UGA firmware, which again is implemented in a high level language. Similarly, programming a UGA device does not require you to deal with hardware registers, etc.
The UGA model would work as follows: the UGA firmware may reside on the graphics device, may be a part of the system firmware in case of an onboard graphics device, or may even come from a regular storage device. The firmware contains an EFI driver, which is still a "lowest common denominator" driver, and is not meant to replace a "high-performance" device specific driver that would normally be part of the operating system. That said, the UGA driver may be used in the post-boot environment in various scenarios:
* As a fallback when the regular driver is corrupt or missing from the operating system.
* As the primary driver in machines where graphics performance is irrelevant, such as a server.
* In certain operating system modes such as "safe" and "panic".
* For displaying graphical elements when the primary driver may not be available temporarily, such as during operating system installation, early startup, hibernation, etc.
Unlike VGA, the UGA firmware does not access the graphics hardware directly. It operates within an EFI virtual machine. Microsoft provides a generic Virtual Machine Library (VML) that a UGA firmware is linked with. This virtual machine -- a thin logical layer above EFI -- wraps (encapsulates) a specific UGA firmware implementation.
As mentioned earlier, legacy BIOS depends on VGA, a legacy standard. Thus, given the growing needs of pre-boot applications, graphics support in a firmware environment is both very limited and hard to program with (consider factors like 640x480 maximum resolution, small framebuffer, use of palette modes, and so on). EFI defines the UGA specification as a replacement for VGA and VESA. Microsoft is behind UGA, with support from major graphics device manufacturers like ATI.
Any graphics device with UGA firmware can be considered a UGA device. It may also contain VGA firmware for compatibility. The firmware execution environment interprets UGA firmware, which again is implemented in a high level language. Similarly, programming a UGA device does not require you to deal with hardware registers, etc.
The UGA model would work as follows: the UGA firmware may reside on the graphics device, may be a part of the system firmware in case of an onboard graphics device, or may even come from a regular storage device. The firmware contains an EFI driver, which is still a "lowest common denominator" driver, and is not meant to replace a "high-performance" device specific driver that would normally be part of the operating system. That said, the UGA driver may be used in the post-boot environment in various scenarios:
* As a fallback when the regular driver is corrupt or missing from the operating system.
* As the primary driver in machines where graphics performance is irrelevant, such as a server.
* In certain operating system modes such as "safe" and "panic".
* For displaying graphical elements when the primary driver may not be available temporarily, such as during operating system installation, early startup, hibernation, etc.
Unlike VGA, the UGA firmware does not access the graphics hardware directly. It operates within an EFI virtual machine. Microsoft provides a generic Virtual Machine Library (VML) that a UGA firmware is linked with. This virtual machine -- a thin logical layer above EFI -- wraps (encapsulates) a specific UGA firmware implementation.