On 05/12/14 18:03, Jordan Justen wrote:
> On Mon, May 12, 2014 at 6:18 AM, Laszlo Ersek <ler...@redhat.com>
> wrote:
>> Additionally, there's another (similarly downstream only) patch
>>
>>   OvmfPkg: Don't build in QemuVideoDxe when we have CSM
>>
>> Did you include the presence of this patch in your question?
>
> No. I want to remove this patch from being needed, and also rely upon
> your shim patch (for this OS) when CSM is enabled.

(The question was "If CSM is enabled, we will fail to allocate, right?")

OK, so we have:

* "LegacyBios: Add UmbStart,UmbEnd fields to EFI_COMPATIBILITY16_TABLE"
  (I tried to replace it with David's new patch that he just posted
  <http://thread.gmane.org/gmane.comp.bios.tianocore.devel/7065>,
  but it doesn't apply for me.)
* OvmfPkg/Csm/Csm16/Csm16.bin (the SeaBIOS binary)
* -D CSM_ENABLE, resulting in
  - OvmfPkg/Csm/CsmSupportLib/CsmSupportLib.inf
    (built into IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf)
  - IntelFrameworkModulePkg/Csm/BiosThunk/VideoDxe/VideoDxe.inf
  - IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBiosDxe.inf
* this patch

I'm seeing the following:

(1) LegacyBiosDxe is loaded first. LegacyBiosInstall() -->
    AllocateLegacyMemory() succeeds and takes the page at zero.
    [IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBios.c]

(2) QemuVideoDxe binds the card before VideoDxe gets there (this used to
be the reason for excluding QemuVideoDxe from the CSM build). It can't
allocate the page at zero:

  QemuVideoControllerDriverStart() [OvmfPkg/QemuVideoDxe/Driver.c]
    InstallVbeShim() [OvmfPkg/QemuVideoDxe/VbeShim.c]
      gBS->AllocatePages()

Therefore the binding fails. (Answering your question with "yes".)

(3) VideoDxe binds the card and POSTs it:

  BiosVideoDriverBindingStart() 
[IntelFrameworkModulePkg/Csm/BiosThunk/VideoDxe/BiosVideo.c]
    LegacyBiosInstallPciRom() 
[IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyPci.c]
      LegacyBiosInstallRom()
        handle_csm_0005() [SeaBIOS, src/fw/csm.c]
          callrom()
            vga_post() [vgasrc/vgainit.c]

and then Windows uses (emulates) SeaVGABIOS code for mode switching.

Laszlo

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to