Laszlo,

The section [UserExtensions.TianoCore."ExtraFiles"] can be used to list files 
not required to build and support incremental builds, but need to be included 
in a UDP package.

Mike

> -----Original Message-----
> From: Laszlo Ersek [mailto:ler...@redhat.com]
> Sent: Monday, November 23, 2015 12:43 PM
> To: Kinney, Michael D <michael.d.kin...@intel.com>; edk2-de...@ml01.01.org
> Subject: Re: [edk2] [PATCH v4 08/41] OvmfPkg: add DXE_DRIVER for providing 
> TSEG-as-SMRAM during boot-time DXE
> 
> On 11/23/15 21:28, Kinney, Michael D wrote:
> > Laszlo,
> >
> > There are 2 reasons to list all source files used in a module build in the 
> > [Sources] section.
> >
> > 1) Support incremental builds.  If a change to the .h file is made,
> > then the module may  not be rebuilt if the .h file is not listed in
> > [Sources]
> 
> Ah! I didn't know that. I though that such dependencies would be deduced 
> automatically, recursively.
> 
> Thank you for the info. In the future I'll list header files too.
> 
> > 2) Support of UEFI Distribution Package distribution format.  The UPT
> > tools that creates UDP packages uses the [Sources] section for the
> > inventory of files.  If a file is missing, then it will not be
> > included in the UDP file.
> 
> Hm. OvmfPkg is not part of UDK, so it probably should not be a subject to UPT 
> rules.
> 
> But, that's the less relevant remark here. The more relevant would be:
> we occasionally have files in a module subdirectory that are not processable 
> with the build tools, yet if the module was distributed (in
> any format), those files should be included. For example, a helper shell 
> script that is not necessary for every build, but useful for
> preparing changes.
> 
> Not adding it to [Sources] would break packaging (any kind of packaging), 
> whereas adding it to [Sources] would cause the build to fail.
> 
> I think for now we should certainly include the .h files, and keep the 
> existing practice for non-source files.
> 
> > Use of STATIC in OvmfPkg is ok.  I only mentioned it to be consistent with 
> > other packages.
> 
> Thank you -- that's good to be reminded of; occasionally I might write code 
> for AppPkg or Mde[Module]Pkg.
> 
> >
> > I mention global variable location to be consistent with other
> > packages.  The preference is to put all globals before function
> > implementations within a C file, so they are not mixed between
> > functions and are harder to find.  The ctags issue is interesting.  I
> > wonder if anyone else has found a way around that issue.
> 
> I'd certainly like to find a compromise that sticks with the style of the 
> other packages, while allowing me to use ctags without much
> inconvenience. :)
> 
> Thanks
> Laszlo
> 
> >
> > Mike
> >
> >> -----Original Message-----
> >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf
> >> Of Laszlo Ersek
> >> Sent: Monday, November 23, 2015 4:14 AM
> >> To: Kinney, Michael D <michael.d.kin...@intel.com>;
> >> edk2-de...@ml01.01.org
> >> Subject: Re: [edk2] [PATCH v4 08/41] OvmfPkg: add DXE_DRIVER for
> >> providing TSEG-as-SMRAM during boot-time DXE
> >>
> >> On 11/21/15 07:03, Kinney, Michael D wrote:
> >>> Laszlo,
> >>>
> >>> Minor comments included below.
> >>>
> >>> Reviewed-by: Michael Kinney <michael.d.kin...@intel.com>
> >>
> >> Thank you. I'll pick up your R-b, but I'll also respond to your
> >> comments
> >> below:
> >>
> >>>> -----Original Message-----
> >>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf
> >>>> Of Laszlo Ersek
> >>>> Sent: Tuesday, November 3, 2015 1:01 PM
> >>>> To: edk2-de...@ml01.01.org
> >>>> Subject: [edk2] [PATCH v4 08/41] OvmfPkg: add DXE_DRIVER for
> >>>> providing TSEG-as-SMRAM during boot-time DXE
> >>>>
> >>>> The SMM core depends on EFI_SMM_ACCESS2_PROTOCOL. This small driver
> >>>> (which is a thin wrapper around "OvmfPkg/SmmAccess/SmramInternal.c"
> >>>> that was added in the previous patch) provides that
> >> protocol.
> >>>>
> >>>> Notably, EFI_SMM_ACCESS2_PROTOCOL is for boot time only, therefore our 
> >>>> MODULE_TYPE is not DXE_RUNTIME_DRIVER.
> >>>>
> >>>> Contributed-under: TianoCore Contribution Agreement 1.0
> >>>> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
> >>>> ---
> >>>>  OvmfPkg/OvmfPkgIa32.dsc             |   4 +
> >>>>  OvmfPkg/OvmfPkgIa32X64.dsc          |   4 +
> >>>>  OvmfPkg/OvmfPkgX64.dsc              |   4 +
> >>>>  OvmfPkg/OvmfPkgIa32.fdf             |   4 +
> >>>>  OvmfPkg/OvmfPkgIa32X64.fdf          |   4 +
> >>>>  OvmfPkg/OvmfPkgX64.fdf              |   4 +
> >>>>  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf |  57 +++++++
> >>>>  OvmfPkg/SmmAccess/SmmAccess2Dxe.c   | 156 ++++++++++++++++++++
> >>>>  8 files changed, 237 insertions(+)
> >>>>
> >>>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc
> >>>> index 0b729ca..d7bc38d 100644
> >>>> --- a/OvmfPkg/OvmfPkgIa32.dsc
> >>>> +++ b/OvmfPkg/OvmfPkgIa32.dsc
> >>>> @@ -672,3 +672,7 @@ [Components]
> >>>>  !endif
> >>>>
> >>>>    OvmfPkg/PlatformDxe/Platform.inf
> >>>> +
> >>>> +!if $(SMM_REQUIRE) == TRUE
> >>>> +  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> +!endif
> >>>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc
> >>>> b/OvmfPkg/OvmfPkgIa32X64.dsc index 7f672d9..e17cbe5 100644
> >>>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
> >>>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
> >>>> @@ -679,3 +679,7 @@ [Components.X64]  !endif
> >>>>
> >>>>    OvmfPkg/PlatformDxe/Platform.inf
> >>>> +
> >>>> +!if $(SMM_REQUIRE) == TRUE
> >>>> +  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> +!endif
> >>>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index
> >>>> 986c019..a748fb3 100644
> >>>> --- a/OvmfPkg/OvmfPkgX64.dsc
> >>>> +++ b/OvmfPkg/OvmfPkgX64.dsc
> >>>> @@ -677,3 +677,7 @@ [Components]
> >>>>  !endif
> >>>>
> >>>>    OvmfPkg/PlatformDxe/Platform.inf
> >>>> +
> >>>> +!if $(SMM_REQUIRE) == TRUE
> >>>> +  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> +!endif
> >>>> diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf
> >>>> index 650dab1..285720f 100644
> >>>> --- a/OvmfPkg/OvmfPkgIa32.fdf
> >>>> +++ b/OvmfPkg/OvmfPkgIa32.fdf
> >>>> @@ -355,6 +355,10 @@ [FV.DXEFV]
> >>>>  INF  OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> >>>>  INF  OvmfPkg/PlatformDxe/Platform.inf
> >>>>
> >>>> +!if $(SMM_REQUIRE) == TRUE
> >>>> +INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> +!endif
> >>>> +
> >>>>
> >>>> ###################################################################
> >>>> ##
> >>>> ###########
> >>>>
> >>>>  [FV.FVMAIN_COMPACT]
> >>>> diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf
> >>>> b/OvmfPkg/OvmfPkgIa32X64.fdf index 5830401..02e8752 100644
> >>>> --- a/OvmfPkg/OvmfPkgIa32X64.fdf
> >>>> +++ b/OvmfPkg/OvmfPkgIa32X64.fdf
> >>>> @@ -355,6 +355,10 @@ [FV.DXEFV]
> >>>>  INF  OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> >>>>  INF  OvmfPkg/PlatformDxe/Platform.inf
> >>>>
> >>>> +!if $(SMM_REQUIRE) == TRUE
> >>>> +INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> +!endif
> >>>> +
> >>>>
> >>>> ###################################################################
> >>>> ##
> >>>> ###########
> >>>>
> >>>>  [FV.FVMAIN_COMPACT]
> >>>> diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index
> >>>> 9dd6171..f04c36b 100644
> >>>> --- a/OvmfPkg/OvmfPkgX64.fdf
> >>>> +++ b/OvmfPkg/OvmfPkgX64.fdf
> >>>> @@ -355,6 +355,10 @@ [FV.DXEFV]
> >>>>  INF  OvmfPkg/QemuVideoDxe/QemuVideoDxe.inf
> >>>>  INF  OvmfPkg/PlatformDxe/Platform.inf
> >>>>
> >>>> +!if $(SMM_REQUIRE) == TRUE
> >>>> +INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> +!endif
> >>>> +
> >>>>
> >>>> ###################################################################
> >>>> ##
> >>>> ###########
> >>>>
> >>>>  [FV.FVMAIN_COMPACT]
> >>>> diff --git a/OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> b/OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> new file mode 100644
> >>>> index 0000000..3ce48ae
> >>>> --- /dev/null
> >>>> +++ b/OvmfPkg/SmmAccess/SmmAccess2Dxe.inf
> >>>> @@ -0,0 +1,57 @@
> >>>> +## @file
> >>>> +# A DXE_DRIVER providing SMRAM access by producing 
> >>>> EFI_SMM_ACCESS2_PROTOCOL.
> >>>> +#
> >>>> +# Q35 TSEG is expected to have been verified and set up by the
> >>>> +SmmAccessPei # driver.
> >>>> +#
> >>>> +# Copyright (C) 2013, 2015, Red Hat, Inc.
> >>>> +#
> >>>> +# This program and the accompanying materials are licensed and
> >>>> +made available # under the terms and conditions of the BSD License
> >>>> +which accompanies this # distribution. The full text of the
> >>>> +license may be found at #
> >>>> +http://opensource.org/licenses/bsd-license.php
> >>>> +#
> >>>> +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> >>>> +BASIS, WITHOUT # WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
> >>>> EXPRESS OR IMPLIED.
> >>>> +#
> >>>> +##
> >>>> +
> >>>> +[Defines]
> >>>> +  INF_VERSION                    = 0x00010005
> >>>> +  BASE_NAME                      = SmmAccess2Dxe
> >>>> +  FILE_GUID                      = AC95AD3D-4366-44BF-9A62-E4B29D7A2206
> >>>> +  MODULE_TYPE                    = DXE_DRIVER
> >>>> +  VERSION_STRING                 = 1.0
> >>>> +  PI_SPECIFICATION_VERSION       = 0x00010400
> >>>> +  ENTRY_POINT                    = SmmAccess2DxeEntryPoint
> >>>> +
> >>>> +#
> >>>> +# The following information is for reference only and not required by 
> >>>> the build tools.
> >>>> +#
> >>>> +#  VALID_ARCHITECTURES           = IA32 X64
> >>>> +#
> >>>> +
> >>>> +[Sources]
> >>>> +  SmmAccess2Dxe.c
> >>>> +  SmramInternal.c
> >>>
> >>> SmramInternal.h is missing from [Sources] section.
> >>
> >> It is not clear to me if there is a general requirement to list *.h
> >> files in the [Sources] sections of INF files. I think we usually only list 
> >> the C files in OvmfPkg.
> >>
> >> $ git grep -l '\.h' -- 'OvmfPkg/*.inf'
> >>
> >> OvmfPkg/AcpiTables/AcpiTables.inf
> >> OvmfPkg/Library/PlatformBdsLib/PlatformBdsLib.inf
> >> OvmfPkg/PciHostBridgeDxe/PciHostBridgeDxe.inf
> >> OvmfPkg/SataControllerDxe/SataControllerDxe.inf
> >> OvmfPkg/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
> >> OvmfPkg/XenBusDxe/XenBusDxe.inf
> >> OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
> >>
> >> I vaguely remember that the last two were created with the UEFI
> >> driver wizard. The others were all created by cloning and customizing
> >> other
> >> edk2 modules. So it seems to be confirmed that whenever we wrote a
> >> module from scratch under OvmfPkg, we wouldn't list the header files in 
> >> [Sources], only the C, assembly and ASL files.
> >>
> >> I always thought the build utilities would automatically deduce the header 
> >> dependencies (recursively).
> >>
> >> Does this practice conflict with the edk2 specs?
> >>
> >> Anyway, I can fix this up.
> >>
> >>>
> >>>> +
> >>>> +[Packages]
> >>>> +  MdeModulePkg/MdeModulePkg.dec
> >>>> +  MdePkg/MdePkg.dec
> >>>> +  OvmfPkg/OvmfPkg.dec
> >>>> +
> >>>> +[LibraryClasses]
> >>>> +  DebugLib
> >>>> +  PcdLib
> >>>> +  PciLib
> >>>> +  UefiBootServicesTableLib
> >>>> +  UefiDriverEntryPoint
> >>>> +
> >>>> +[Protocols]
> >>>> +  gEfiSmmAccess2ProtocolGuid   # PROTOCOL ALWAYS_PRODUCED
> >>>
> >>> Comment should be:         ## PRODUCES
> >>
> >> I'll fix it up, but it's also unclear to me when ALWAYS_PRODUCED has 
> >> become deprecated.
> >>
> >>>
> >>>> +
> >>>> +[FeaturePcd]
> >>>> +  gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire
> >>>> +
> >>>> +[Depex]
> >>>> +  TRUE
> >>>> diff --git a/OvmfPkg/SmmAccess/SmmAccess2Dxe.c
> >>>> b/OvmfPkg/SmmAccess/SmmAccess2Dxe.c
> >>>> new file mode 100644
> >>>> index 0000000..d513039
> >>>> --- /dev/null
> >>>> +++ b/OvmfPkg/SmmAccess/SmmAccess2Dxe.c
> >>>> @@ -0,0 +1,156 @@
> >>>> +/** @file
> >>>> +
> >>>> +  A DXE_DRIVER providing SMRAM access by producing 
> >>>> EFI_SMM_ACCESS2_PROTOCOL.
> >>>> +
> >>>> +  Q35 TSEG is expected to have been verified and set up by the
> >>>> + SmmAccessPei  driver.
> >>>> +
> >>>> +  Copyright (C) 2013, 2015, Red Hat, Inc.<BR>  Copyright (c) 2009
> >>>> + - 2010, Intel Corporation. All rights reserved.<BR>
> >>>> +
> >>>> +  This program and the accompanying materials are licensed and
> >>>> + made available  under the terms and conditions of the BSD License
> >>>> + which accompanies this  distribution. The full text of the
> >>>> + license may be found at
> >>>> + http://opensource.org/licenses/bsd-license.php
> >>>> +
> >>>> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
> >>>> + BASIS, WITHOUT  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
> >>>> EXPRESS OR IMPLIED.
> >>>> +
> >>>> +**/
> >>>> +
> >>>> +#include <Library/DebugLib.h>
> >>>> +#include <Library/PcdLib.h>
> >>>> +#include <Library/UefiBootServicesTableLib.h>
> >>>> +#include <Protocol/SmmAccess2.h>
> >>>> +
> >>>> +#include "SmramInternal.h"
> >>>> +
> >>>> +/**
> >>>> +  Opens the SMRAM area to be accessible by a boot-service driver.
> >>>> +
> >>>> +  This function "opens" SMRAM so that it is visible while not inside of 
> >>>> SMM.
> >>>> +  The function should return EFI_UNSUPPORTED if the hardware does
> >>>> + not support  hiding of SMRAM. The function should return
> >>>> + EFI_DEVICE_ERROR if the SMRAM  configuration is locked.
> >>>> +
> >>>> +  @param[in] This           The EFI_SMM_ACCESS2_PROTOCOL instance.
> >>>> +
> >>>> +  @retval EFI_SUCCESS       The operation was successful.
> >>>> +  @retval EFI_UNSUPPORTED   The system does not support opening and 
> >>>> closing of
> >>>> +                            SMRAM.
> >>>> +  @retval EFI_DEVICE_ERROR  SMRAM cannot be opened, perhaps because it 
> >>>> is
> >>>> +                            locked.
> >>>> +**/
> >>>> +STATIC
> >>>
> >>> Recommend removing STATIC from public functions.
> >>
> >> I understand that there are debuggability problems with some
> >> toolchains if functions are declared static, but for OVMF we mostly
> >> use manual instrumentation. (Or else, when people take the time to
> >> set up gdb <https://edk2.bluestop.org/w/tianocore/debugging-
> >> with-gdb/>, then gdb doesn't have issues with STATIC.)
> >>
> >> It is common C practice (and more closely, OvmfPkg practice) to keep
> >> protocol member functions with internal ("static") linkage on the
> >> language level, and expose them only via function pointers. I'd like to 
> >> stick with STATIC in OvmfPkg; we've never had problem
> reports in this are.
> >>
> >>>
> >>>> +EFI_STATUS
> >>>> +EFIAPI
> >>>> +SmmAccess2DxeOpen (
> >>>> +  IN EFI_SMM_ACCESS2_PROTOCOL  *This
> >>>> +  )
> >>>> +{
> >>>> +  return SmramAccessOpen (&This->LockState, &This->OpenState); }
> >>>> +
> >>>> +/**
> >>>> +  Inhibits access to the SMRAM.
> >>>> +
> >>>> +  This function "closes" SMRAM so that it is not visible while outside 
> >>>> of SMM.
> >>>> +  The function should return EFI_UNSUPPORTED if the hardware does
> >>>> + not support  hiding of SMRAM.
> >>>> +
> >>>> +  @param[in] This           The EFI_SMM_ACCESS2_PROTOCOL instance.
> >>>> +
> >>>> +  @retval EFI_SUCCESS       The operation was successful.
> >>>> +  @retval EFI_UNSUPPORTED   The system does not support opening and 
> >>>> closing of
> >>>> +                            SMRAM.
> >>>> +  @retval EFI_DEVICE_ERROR  SMRAM cannot be closed.
> >>>> +**/
> >>>> +STATIC
> >>>
> >>> Recommend removing STATIC from public functions.
> >>>
> >>>> +EFI_STATUS
> >>>> +EFIAPI
> >>>> +SmmAccess2DxeClose (
> >>>> +  IN EFI_SMM_ACCESS2_PROTOCOL  *This
> >>>> +  )
> >>>> +{
> >>>> +  return SmramAccessClose (&This->LockState, &This->OpenState); }
> >>>> +
> >>>> +/**
> >>>> +  Inhibits access to the SMRAM.
> >>>> +
> >>>> +  This function prohibits access to the SMRAM region.  This
> >>>> + function is usually  implemented such that it is a write-once 
> >>>> operation.
> >>>> +
> >>>> +  @param[in] This          The EFI_SMM_ACCESS2_PROTOCOL instance.
> >>>> +
> >>>> +  @retval EFI_SUCCESS      The device was successfully locked.
> >>>> +  @retval EFI_UNSUPPORTED  The system does not support locking of SMRAM.
> >>>> +**/
> >>>> +STATIC
> >>>
> >>> Recommend removing STATIC from public functions.
> >>>
> >>>> +EFI_STATUS
> >>>> +EFIAPI
> >>>> +SmmAccess2DxeLock (
> >>>> +  IN EFI_SMM_ACCESS2_PROTOCOL  *This
> >>>> +  )
> >>>> +{
> >>>> +  return SmramAccessLock (&This->LockState, &This->OpenState); }
> >>>> +
> >>>> +/**
> >>>> +  Queries the memory controller for the possible regions that will
> >>>> +support
> >>>> +  SMRAM.
> >>>> +
> >>>> +  @param[in]     This           The EFI_SMM_ACCESS2_PROTOCOL instance.
> >>>> +  @param[in,out] SmramMapSize   A pointer to the size, in bytes, of the
> >>>> +                                SmramMemoryMap buffer.
> >>>> +  @param[in,out] SmramMap       A pointer to the buffer in which 
> >>>> firmware
> >>>> +                                places the current memory map.
> >>>> +
> >>>> +  @retval EFI_SUCCESS           The chipset supported the given 
> >>>> resource.
> >>>> +  @retval EFI_BUFFER_TOO_SMALL  The SmramMap parameter was too small.  
> >>>> The
> >>>> +                                current buffer size needed to hold the 
> >>>> memory
> >>>> +                                map is returned in SmramMapSize.
> >>>> +**/
> >>>> +STATIC
> >>>
> >>> Recommend removing STATIC from public functions.
> >>>
> >>>> +EFI_STATUS
> >>>> +EFIAPI
> >>>> +SmmAccess2DxeGetCapabilities (
> >>>> +  IN CONST EFI_SMM_ACCESS2_PROTOCOL  *This,
> >>>> +  IN OUT UINTN                       *SmramMapSize,
> >>>> +  IN OUT EFI_SMRAM_DESCRIPTOR        *SmramMap
> >>>> +  )
> >>>> +{
> >>>> +  return SmramAccessGetCapabilities (This->LockState, This->OpenState,
> >>>> +           SmramMapSize, SmramMap); }
> >>>> +
> >>>> +//
> >>>> +// LockState and OpenState will be filled in by the entry point.
> >>>> +//
> >>>> +STATIC EFI_SMM_ACCESS2_PROTOCOL mAccess2 = {
> >>>> +  &SmmAccess2DxeOpen,
> >>>> +  &SmmAccess2DxeClose,
> >>>> +  &SmmAccess2DxeLock,
> >>>> +  &SmmAccess2DxeGetCapabilities
> >>>> +};
> >>>
> >>> Recommend removing STATIC from produced protocol structure.
> >>> Global variable are typically placed before function implementation in a 
> >>> file.
> >>
> >> I placed the initialization of mAccess2 here because I wanted to
> >> avoid the (quite verbose) forward declarations of the member functions.
> >>
> >> Also, forward declarations make the "Jump To Tag" functionality of
> >> ctags-compatible text editors quite inconvenient: the forward declaration 
> >> of the function gets highlighted instead of the function
> definition.
> >>
> >> One way to avoid the forward declarations of the functions and to
> >> keep the (initializer-less) definition of mAccess2 at the top would
> >> be to explicitly assign the mAccess2.* fields in SmmAccess2DxeEntryPoint() 
> >> below. If you strongly dislike the code as-is, I can
> implement this option.
> >>
> >> Thanks!
> >> Laszlo
> >>
> >>>
> >>>> +
> >>>> +//
> >>>> +// Entry point of this driver.
> >>>> +//
> >>>> +EFI_STATUS
> >>>> +EFIAPI
> >>>> +SmmAccess2DxeEntryPoint (
> >>>> +  IN EFI_HANDLE       ImageHandle,
> >>>> +  IN EFI_SYSTEM_TABLE *SystemTable
> >>>> +  )
> >>>> +{
> >>>> +  //
> >>>> +  // This module should only be included if SMRAM support is required.
> >>>> +  //
> >>>> +  ASSERT (FeaturePcdGet (PcdSmmSmramRequire));
> >>>> +
> >>>> +  GetStates (&mAccess2.LockState, &mAccess2.OpenState);
> >>>> +  return gBS->InstallMultipleProtocolInterfaces (&ImageHandle,
> >>>> +                &gEfiSmmAccess2ProtocolGuid, &mAccess2,
> >>>> +                NULL);
> >>>> +}
> >>>> --
> >>>> 1.8.3.1
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> edk2-devel mailing list
> >>>> edk2-devel@lists.01.org
> >>>> https://lists.01.org/mailman/listinfo/edk2-devel
> >>
> >> _______________________________________________
> >> edk2-devel mailing list
> >> edk2-devel@lists.01.org
> >> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to