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
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel