> On Oct 23, 2014, at 10:31 AM, Laszlo Ersek <ler...@redhat.com> wrote: > > On 10/23/14 19:02, Gabriel Somlo wrote: >> Jordan, Laszlo: >> >> On Mon, Oct 06, 2014 at 11:42:53AM -0400, Gabriel L. Somlo wrote: >>> So, to decide how I feel about further splitting out DxeAcpiTimerLib >>> into a version which does use PCDs and another version which does not, >>> I added some DEBUG statements to track every time the host bridge >>> gets queried right now, and here's what I got: >>> >>> >>> PlatformPei:MiscInitialization() >>> Base:AcpiTimerLibConstructor() (PEIM) >>> Dxe:AcpiTimerLibConstructor() (DXE_CORE) >>> Dxe:AcpiTimerLibConstructor() (DXE_RUNTIME_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_RUNTIME_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_RUNTIME_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_RUNTIME_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (UEFI_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (UEFI_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (UEFI_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (UEFI_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (DXE_DRIVER) >>> Dxe:AcpiTimerLibConstructor() (UEFI_DRIVER) >>> BdsPlatform:PciInitialization() >>> BdsPlatform:AcpiInitialization() >>> Dxe:AcpiTimerLibConstructor() (DXE_DRIVER) >> >> I think I have the mechanics of PCDs figured out. >> >> Between the two of you, you've suggested I use the DxeAcpiTimerLib >> instance from DXE_DRIVER, DXE_RUNTIME_DRIVER, UEFI_DRIVER, and >> UEFI_APPLICATION. >> >> After some testing, it appears DXE_DRIVER and DXE_RUNTIME_DRIVER do >> indeed see the dynamic PCD I set from PEI. >> >> UEFI_DRIVER *clearly* does not; it gets linked against >> MdePkg/Library/BasePcdLibNull/PcdLib.c, which implements >> LibPcdGet* with ASSERT(FALSE). > > Yes, because by default we resolve the PcdLib class to the Null instance > (in the DSC files) for UEFI_DRIVER. The background is that UEFI drivers > are meant to be "portable" across UEFI implementations, and the PCD > protocol is not a standard protocol -- it's an "edk2-only" feature. > > But, referring to > > http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10156/focus=10197 > <http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10156/focus=10197> > > On 09/30/14 00:17, Jordan Justen wrote: >> In OvmfPkg*.dsc: >> * [...] >> * Replace BasePcdLibNull.inf with DxePcdLib.inf as needed in DXE/UEFI >> LibraryClasses. >> >> (This paragraph is a bit tangential. Feel free to ignore it. :) I >> think this is not quite valid for pure UEFI drivers, since they should >> not rely on the PCD protocol. But, I think that OVMF as a platform can >> bend this rule. [...] > > So, we might want to decide that going forward we will indeed bend this > rule, and *explicitly* declare all UEFI_DRIVERs under OvmfPkg/ > non-portable outside of edk2. > > In which case you'd simply change the default PcdLib resolution for > UEFI_DRIVER and UEFI_APPLICATION modules in the DSC files, as Jordan > describes in the quote. >
In general it is a bad idea for a UEFI Driver/Application to depend on a platform specific lib. A UEF Driver/Application should be using gBS->Stall() for a portable delay. Historically I think the TimerLib was used for for performance profiling too. But the MdeModulePkg can produce the gPerformanceExProtocolGuid, and has a PerformanceLib that depends on the protocol. So why don’t we just drop support for UEFI_DRIVER and UEFI_APPLICATION, and fix the consumers. Thanks, Andrew Fish > Thanks > Laszlo > >> >> I have no idea about UEFI_APPLICATION, since it never showed up in my >> tests. >> >> Is there an easy way to find out whether it'll work or ASSERT(FALSE) >> instead ? >> >> If not, I'm planning on using PCDs just from DXE_[RUNTIME_]DRIVER, and >> we can always switch more stages over to DxeAcpiTimerLib from Base >> later, if that turns out to be possible. >> >> >> Thanks, >> --Gabriel >> > > > ------------------------------------------------------------------------------ > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
_______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel