On 09/30/2014 04:36 AM, Laszlo Ersek wrote: > ... > - The OvmfPlatformsLib class would have the following *three* instances: > > (a) for SEC and PEI_CORE: interrogate the registers all the time. > > (b) for PEIM, DXE_CORE, DXE_RUNTIME_DRIVER, DXE_DRIVER: call > GetFirstGuidHob(). If it succeeds, return data from the structure > found, if it fails, interrogate the registers. > > This library will show the following behavior: > > - in PEIM code running before PlatformPei: query registers > > - in PEIM code running after PlatformPei: use HOB > > - in DXE_CORE: use HOB (yes, available) > > - in DXE_RUNTIME_DRIVER, DXE_DRIVER: use HOB
I don't believe the HOB list is available at runtime, after ExitBootServices, is it? On many physical platforms it's not; I haven't checked OVMF specifically. The DXE_RUNTIME_DRIVER version would need to look up the values at boot time in its constructor and cache them in globals, or fall back to reading the registers at runtime. (My soapbox speech for the day: In general, I'd recommend caching the values in a constructor whenever possible, instead of traversing the HOB list. On some platforms the HOB list may be short, but on other, real-world systems, it can be huge. Linear searches are surprisingly expensive, especially if they get done frequently.... For OVMF it may not be an issue, and optimizing before measuring is always risky. But as someone who works on large systems for a living, I encourage scalability in public sample code. Thanks.) > > (c2) A (much faster) alternative for UEFI_DRIVER, UEFI_APPLICATION: > the HOB-based library instance (b) would work just as well for > UEFI_DRIVER and UEFI_APPLICATION, at the price of some > theoretical portability. (Note that it's still better / less > intrusive than using PCDs.) > > - GetFirstGuidHob() has a valid implementation for these module > types (see "MdePkg/Library/DxeHobLib/DxeHobLib.inf"). > > - That implementation is based on the UEFI System Config Table. > > - Although the GUID used in HobLibConstructor() to locate the > HOB list in the UEFI System Config Table -- ie. > gEfiHobListGuid -- is only part of the PI spec, and not the > UEFI spec, we already depend on it heavily, because: > > - HobLibConstructor() asserts that the HOB list be found, > > - and we *already* resolve the HobLib library class to > DxeHobLib for UEFI_DRIVER. > > - This dependency has a graceful, explicit failure mode, in > relation to portability: ASSERT() if HOB List is not found -- > which will never happen on PI-compliant platforms -- and > query registers if HOB List is found but our specific HOB is > not found. Would anyone take a driver or app built from the OVMF tree and use it on another, non-PI system? I suppose OVMF is a handy development and testing tool... But if a developer is building for portability, they need to be careful about their library instances in any case. Your proposal sounds OK to me (although I'm not one whose opinion matters here, since I'm not involved with OVMF development. I'm just commenting, since I was already responding to this thread.) -- Brian Johnson -------------------------------------------------------------------- "You have greater impact on others by the way you listen than by the way you talk." -- Unknown ------------------------------------------------------------------------------ Meet PCI DSS 3.0 Compliance Requirements with EventLog Analyzer Achieve PCI DSS 3.0 Compliant Status with Out-of-the-box PCI DSS Reports Are you Audit-Ready for PCI DSS 3.0 Compliance? Download White paper Comply to PCI DSS 3.0 Requirement 10 and 11.5 with EventLog Analyzer http://pubads.g.doubleclick.net/gampad/clk?id=154622311&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel