Possible solution for booting WinTel GFX cards under EFI?

Discussion in 'Mac Pro' started by sirnh, Aug 23, 2006.

  1. sirnh macrumors regular

    Aug 16, 2006
    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:

    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.​
  2. 7on macrumors 601


    Nov 9, 2003
    Dress Rosa
    Though the debate is about whether or not the EFI Mac BTO cards have a larger firmware chip or not.
  3. sirnh thread starter macrumors regular

    Aug 16, 2006
    The point is to not need a firmware flash rom. You are actually loading the firmware from disk not from the card.
  4. Krevnik macrumors 68030


    Sep 8, 2003
    Good luck with that... let me know in a couple years how that turns out. ;)

    The problem with loading firmware from disk is that you need to tell EFI to look there... which means you are overriding Apple's EFI implementation. You would likely need to hack something like rEFIt to do the job, which isn't exactly a very clean solution. An easier solution would be to simply reflash the card under Boot Camp once we know how difficult it would be to reflash.
  5. sirnh thread starter macrumors regular

    Aug 16, 2006
    Actually, EFI is extensible... Apple's EFI sdk includes an example for loading a removable storage driver. You should be able to make other extensions to do things like initializing a video card.
  6. Krevnik macrumors 68030


    Sep 8, 2003
    It is extensible to a point. What you are talking about is trying to fetch something from disk, when it is normally loaded before the disk drivers are... The execution sequence is all wrong.
  7. timb macrumors regular

    Jun 6, 2003
    Just throwing my two cents in here...

    With the help from Thomas over at Strangedogs, we managed to get a dump of the 7300 GT ROM. It clocks in at 128K in size. Out of curiosity we extracted just the EFI portion of the ROM (which is actually about 41K in size) and I reflashed the 7300 with it. So now I had a 7300 GT with just EFI on it. It boots into Mac OS X fine, but not Windows.

    In theory, when the Mac 1900's are released, you should be able to get a ROM dump and extract *just* the EFI portion and then flash that to an off the shelf 1900, save some money. You won't however be able to boot into Windows with it.

  8. sirnh thread starter macrumors regular

    Aug 16, 2006

    I would be curious to get one of those dumps, to know how you extract the EFI/UGA portion... then see if there is a way I can just get it to load from disk instead of ROM.
  9. Krevnik macrumors 68030


    Sep 8, 2003
    Well, to be honest, the whole firmware is UGA... after you have just the EFI portion... it ceases to be UGA. /nitpick ;)
  10. jdwl macrumors newbie

    Aug 10, 2006
    Was the 7300 you flashed with efi rom an apple card? do you think that would work to make a PC card mac friendly?
  11. timb macrumors regular

    Jun 6, 2003
    It was an Apple card, and yes I think a PC one will work.

    Send me a PM if anyone wants a copy of the ROM.


Share This Page