Message ID | 20190114132758.24054-10-ard.biesheuvel@linaro.org |
---|---|
State | New |
Headers | show |
Series | implement standalone MM versions of the variable runtime drivers | expand |
On 2019/1/14 21:27, Ard Biesheuvel wrote: > Add the library interface for the standalone MM driver entry point. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > --- > MdePkg/MdePkg.dec | 3 + > MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h | 134 ++++++++++++++++++++ > 2 files changed, 137 insertions(+) > > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec > index a7383b6daafb..a4854083105d 100644 > --- a/MdePkg/MdePkg.dec > +++ b/MdePkg/MdePkg.dec > @@ -247,6 +247,9 @@ [LibraryClasses] > # Only available to MM_STANDALONE, SMM/DXE Combined and SMM module types. > MmServicesTableLib|Include/Library/MmServicesTableLib.h > > + ## @libraryclass Module entry point library for standalone MM drivers. > + StandaloneMmDriverEntryPoint|Include/Library/StandaloneMmDriverEntryPoint.h > + > [LibraryClasses.IA32, LibraryClasses.X64] > ## @libraryclass Abstracts both S/W SMI generation and detection. > ## > diff --git a/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > new file mode 100644 > index 000000000000..d08a73303dbb > --- /dev/null > +++ b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > @@ -0,0 +1,134 @@ > +/** @file > + Module entry point library for Standalone MM Drivers. > + > +Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR> > +Copyright (c) 2018, Linaro, Limited. 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. > + > +**/ > + > +#ifndef __MODULE_ENTRY_POINT_H__ > +#define __MODULE_ENTRY_POINT_H__ > + > +/// > +/// Declare the PI Specification Revision that this driver requires to execute > +/// correctly. > +/// > +extern CONST UINT32 _gMmRevision; > + > +/** > + The entry point of PE/COFF Image for a Standalone MM Driver. > + > + This function is the entry point for a Standalone MM Driver. > + This function must call ProcessLibraryConstructorList() and > + ProcessModuleEntryPointList(). > + If the return status from ProcessModuleEntryPointList() > + is an error status, then ProcessLibraryDestructorList() must be called. > + The return value from ProcessModuleEntryPointList() is returned. noop > + If _gDriverUnloadImageCount is greater > + than zero, then an unload handler must be registered for this image and > + the unload handler must invoke ProcessModuleUnloadList(). This block could be removed. > + If _gMmRevision is not zero and SystemTable->Hdr.Revision is SystemTable should be MmSystemTable. > + less than _gUefiDriverRevison, then return EFI_INCOMPATIBLE_VERSION. _gUefiDriverRevison should be _gMmRevision. > + > + @param ImageHandle The image handle of the Standalone MM Driver. > + @param SystemTable A pointer to the EFI System Table. > + > + @retval EFI_SUCCESS The Standalone MM Driver exited normally. > + @retval EFI_INCOMPATIBLE_VERSION _gMmRevision is greater than > + SystemTable->Hdr.Revision. SystemTable should be MmSystemTable. These feedback may be also applied to the implementation in next patch. With them handled, Acked-by: Star Zeng <star.zeng@intel.com> to this and next patches. Thanks, Star > + @retval Other Return value from > + ProcessModuleEntryPointList(). > + > +**/ > +EFI_STATUS > +EFIAPI > +_ModuleEntryPoint ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > + ); > + > + > +/** > + Auto generated function that calls the library constructors for all of the > + module's dependent libraries. > + > + This function must be called by _ModuleEntryPoint(). > + This function calls the set of library constructors for the set of library > + instances that a module depends on. This includes library instances that a > + module depends on directly and library instances that a module depends on > + indirectly through other libraries. This function is auto generated by build > + tools and those build tools are responsible for collecting the set of library > + instances, determine which ones have constructors, and calling the library > + constructors in the proper order based upon each of the library instances own > + dependencies. > + > + @param ImageHandle The image handle of the Standalone MM Driver. > + @param SystemTable A pointer to the MM System Table. > + > +**/ > +VOID > +EFIAPI > +ProcessLibraryConstructorList ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > + ); > + > + > +/** > + Auto generated function that calls the library descructors for all of the > + module's dependent libraries. > + > + This function may be called by _ModuleEntryPoint(). > + This function calls the set of library destructors for the set of library > + instances that a module depends on. This includes library instances that a > + module depends on directly and library instances that a module depends on > + indirectly through other libraries. > + This function is auto generated by build tools and those build tools are > + responsible for collecting the set of library instances, determine which ones > + have destructors, and calling the library destructors in the proper order > + based upon each of the library instances own dependencies. > + > + @param ImageHandle The image handle of the Standalone MM Driver. > + @param SystemTable A pointer to the MM System Table. > + > +**/ > +VOID > +EFIAPI > +ProcessLibraryDestructorList ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > + ); > + > + > +/** > + Auto generated function that calls a set of module entry points. > + > + This function must be called by _ModuleEntryPoint(). > + This function calls the set of module entry points. > + This function is auto generated by build tools and those build tools are > + responsible for collecting the module entry points and calling them in a > + specified order. > + > + @param ImageHandle The image handle of the Standalone MM Driver. > + @param SystemTable A pointer to the EFI System Table. > + > + @retval EFI_SUCCESS The Standalone MM Driver executed normally. > + @retval !EFI_SUCCESS The Standalone MM Driver failed to execute normally. > +**/ > +EFI_STATUS > +EFIAPI > +ProcessModuleEntryPointList ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > + ); > + > +#endif > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Ard: I have no other comment for the changes in MdePkg. You can add my R-B for MdePkg. Besides, I have updated our internal platform too consume new MmServicesTableLib. Thanks Liming > -----Original Message----- > From: Zeng, Star > Sent: Wednesday, January 16, 2019 2:32 PM > To: Ard Biesheuvel <ard.biesheuvel@linaro.org>; edk2-devel@lists.01.org > Cc: Wu, Hao A <hao.a.wu@intel.com>; Gao, Liming <liming.gao@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Laszlo > Ersek <lersek@redhat.com>; Zeng, Star <star.zeng@intel.com> > Subject: Re: [edk2] [PATCH v2 09/17] MdePkg: introduce standalone MM entry point library class > > On 2019/1/14 21:27, Ard Biesheuvel wrote: > > Add the library interface for the standalone MM driver entry point. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > > --- > > MdePkg/MdePkg.dec | 3 + > > MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h | 134 ++++++++++++++++++++ > > 2 files changed, 137 insertions(+) > > > > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec > > index a7383b6daafb..a4854083105d 100644 > > --- a/MdePkg/MdePkg.dec > > +++ b/MdePkg/MdePkg.dec > > @@ -247,6 +247,9 @@ [LibraryClasses] > > # Only available to MM_STANDALONE, SMM/DXE Combined and SMM module types. > > MmServicesTableLib|Include/Library/MmServicesTableLib.h > > > > + ## @libraryclass Module entry point library for standalone MM drivers. > > + StandaloneMmDriverEntryPoint|Include/Library/StandaloneMmDriverEntryPoint.h > > + > > [LibraryClasses.IA32, LibraryClasses.X64] > > ## @libraryclass Abstracts both S/W SMI generation and detection. > > ## > > diff --git a/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > new file mode 100644 > > index 000000000000..d08a73303dbb > > --- /dev/null > > +++ b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > @@ -0,0 +1,134 @@ > > +/** @file > > + Module entry point library for Standalone MM Drivers. > > + > > +Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> > > +Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR> > > +Copyright (c) 2018, Linaro, Limited. 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. > > + > > +**/ > > + > > +#ifndef __MODULE_ENTRY_POINT_H__ > > +#define __MODULE_ENTRY_POINT_H__ > > + > > +/// > > +/// Declare the PI Specification Revision that this driver requires to execute > > +/// correctly. > > +/// > > +extern CONST UINT32 _gMmRevision; > > + > > +/** > > + The entry point of PE/COFF Image for a Standalone MM Driver. > > + > > + This function is the entry point for a Standalone MM Driver. > > + This function must call ProcessLibraryConstructorList() and > > + ProcessModuleEntryPointList(). > > + If the return status from ProcessModuleEntryPointList() > > + is an error status, then ProcessLibraryDestructorList() must be called. > > + The return value from ProcessModuleEntryPointList() is returned. > > noop > > > + If _gDriverUnloadImageCount is greater > > + than zero, then an unload handler must be registered for this image and > > + the unload handler must invoke ProcessModuleUnloadList(). > > This block could be removed. > > > + If _gMmRevision is not zero and SystemTable->Hdr.Revision is > > SystemTable should be MmSystemTable. > > > + less than _gUefiDriverRevison, then return EFI_INCOMPATIBLE_VERSION. > > _gUefiDriverRevison should be _gMmRevision. > > > + > > + @param ImageHandle The image handle of the Standalone MM Driver. > > + @param SystemTable A pointer to the EFI System Table. > > + > > + @retval EFI_SUCCESS The Standalone MM Driver exited normally. > > + @retval EFI_INCOMPATIBLE_VERSION _gMmRevision is greater than > > + SystemTable->Hdr.Revision. > > SystemTable should be MmSystemTable. > > These feedback may be also applied to the implementation in next patch. > > With them handled, Acked-by: Star Zeng <star.zeng@intel.com> to this and > next patches. > > Thanks, > Star > > > > + @retval Other Return value from > > + ProcessModuleEntryPointList(). > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +_ModuleEntryPoint ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > + ); > > + > > + > > +/** > > + Auto generated function that calls the library constructors for all of the > > + module's dependent libraries. > > + > > + This function must be called by _ModuleEntryPoint(). > > + This function calls the set of library constructors for the set of library > > + instances that a module depends on. This includes library instances that a > > + module depends on directly and library instances that a module depends on > > + indirectly through other libraries. This function is auto generated by build > > + tools and those build tools are responsible for collecting the set of library > > + instances, determine which ones have constructors, and calling the library > > + constructors in the proper order based upon each of the library instances own > > + dependencies. > > + > > + @param ImageHandle The image handle of the Standalone MM Driver. > > + @param SystemTable A pointer to the MM System Table. > > + > > +**/ > > +VOID > > +EFIAPI > > +ProcessLibraryConstructorList ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > + ); > > + > > + > > +/** > > + Auto generated function that calls the library descructors for all of the > > + module's dependent libraries. > > + > > + This function may be called by _ModuleEntryPoint(). > > + This function calls the set of library destructors for the set of library > > + instances that a module depends on. This includes library instances that a > > + module depends on directly and library instances that a module depends on > > + indirectly through other libraries. > > + This function is auto generated by build tools and those build tools are > > + responsible for collecting the set of library instances, determine which ones > > + have destructors, and calling the library destructors in the proper order > > + based upon each of the library instances own dependencies. > > + > > + @param ImageHandle The image handle of the Standalone MM Driver. > > + @param SystemTable A pointer to the MM System Table. > > + > > +**/ > > +VOID > > +EFIAPI > > +ProcessLibraryDestructorList ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > + ); > > + > > + > > +/** > > + Auto generated function that calls a set of module entry points. > > + > > + This function must be called by _ModuleEntryPoint(). > > + This function calls the set of module entry points. > > + This function is auto generated by build tools and those build tools are > > + responsible for collecting the module entry points and calling them in a > > + specified order. > > + > > + @param ImageHandle The image handle of the Standalone MM Driver. > > + @param SystemTable A pointer to the EFI System Table. > > + > > + @retval EFI_SUCCESS The Standalone MM Driver executed normally. > > + @retval !EFI_SUCCESS The Standalone MM Driver failed to execute normally. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +ProcessModuleEntryPointList ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > + ); > > + > > +#endif > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On Wed, 16 Jan 2019 at 15:56, Gao, Liming <liming.gao@intel.com> wrote: > > Ard: > I have no other comment for the changes in MdePkg. You can add my R-B for MdePkg. Besides, I have updated our internal platform too consume new MmServicesTableLib. > Thank you Liming. I will go through all Star's comments, and fix up the patches before pushing. What about the Quark and Vlv2 changes? (adding MmServicesTableLib) > > From: Zeng, Star > > Sent: Wednesday, January 16, 2019 2:32 PM > > To: Ard Biesheuvel <ard.biesheuvel@linaro.org>; edk2-devel@lists.01.org > > Cc: Wu, Hao A <hao.a.wu@intel.com>; Gao, Liming <liming.gao@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>; Laszlo > > Ersek <lersek@redhat.com>; Zeng, Star <star.zeng@intel.com> > > Subject: Re: [edk2] [PATCH v2 09/17] MdePkg: introduce standalone MM entry point library class > > > > On 2019/1/14 21:27, Ard Biesheuvel wrote: > > > Add the library interface for the standalone MM driver entry point. > > > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > > > --- > > > MdePkg/MdePkg.dec | 3 + > > > MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h | 134 ++++++++++++++++++++ > > > 2 files changed, 137 insertions(+) > > > > > > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec > > > index a7383b6daafb..a4854083105d 100644 > > > --- a/MdePkg/MdePkg.dec > > > +++ b/MdePkg/MdePkg.dec > > > @@ -247,6 +247,9 @@ [LibraryClasses] > > > # Only available to MM_STANDALONE, SMM/DXE Combined and SMM module types. > > > MmServicesTableLib|Include/Library/MmServicesTableLib.h > > > > > > + ## @libraryclass Module entry point library for standalone MM drivers. > > > + StandaloneMmDriverEntryPoint|Include/Library/StandaloneMmDriverEntryPoint.h > > > + > > > [LibraryClasses.IA32, LibraryClasses.X64] > > > ## @libraryclass Abstracts both S/W SMI generation and detection. > > > ## > > > diff --git a/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > > new file mode 100644 > > > index 000000000000..d08a73303dbb > > > --- /dev/null > > > +++ b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h > > > @@ -0,0 +1,134 @@ > > > +/** @file > > > + Module entry point library for Standalone MM Drivers. > > > + > > > +Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> > > > +Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR> > > > +Copyright (c) 2018, Linaro, Limited. 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. > > > + > > > +**/ > > > + > > > +#ifndef __MODULE_ENTRY_POINT_H__ > > > +#define __MODULE_ENTRY_POINT_H__ > > > + > > > +/// > > > +/// Declare the PI Specification Revision that this driver requires to execute > > > +/// correctly. > > > +/// > > > +extern CONST UINT32 _gMmRevision; > > > + > > > +/** > > > + The entry point of PE/COFF Image for a Standalone MM Driver. > > > + > > > + This function is the entry point for a Standalone MM Driver. > > > + This function must call ProcessLibraryConstructorList() and > > > + ProcessModuleEntryPointList(). > > > + If the return status from ProcessModuleEntryPointList() > > > + is an error status, then ProcessLibraryDestructorList() must be called. > > > + The return value from ProcessModuleEntryPointList() is returned. > > > > noop > > > > > + If _gDriverUnloadImageCount is greater > > > + than zero, then an unload handler must be registered for this image and > > > + the unload handler must invoke ProcessModuleUnloadList(). > > > > This block could be removed. > > > > > + If _gMmRevision is not zero and SystemTable->Hdr.Revision is > > > > SystemTable should be MmSystemTable. > > > > > + less than _gUefiDriverRevison, then return EFI_INCOMPATIBLE_VERSION. > > > > _gUefiDriverRevison should be _gMmRevision. > > > > > + > > > + @param ImageHandle The image handle of the Standalone MM Driver. > > > + @param SystemTable A pointer to the EFI System Table. > > > + > > > + @retval EFI_SUCCESS The Standalone MM Driver exited normally. > > > + @retval EFI_INCOMPATIBLE_VERSION _gMmRevision is greater than > > > + SystemTable->Hdr.Revision. > > > > SystemTable should be MmSystemTable. > > > > These feedback may be also applied to the implementation in next patch. > > > > With them handled, Acked-by: Star Zeng <star.zeng@intel.com> to this and > > next patches. > > > > Thanks, > > Star > > > > > > > + @retval Other Return value from > > > + ProcessModuleEntryPointList(). > > > + > > > +**/ > > > +EFI_STATUS > > > +EFIAPI > > > +_ModuleEntryPoint ( > > > + IN EFI_HANDLE ImageHandle, > > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > > + ); > > > + > > > + > > > +/** > > > + Auto generated function that calls the library constructors for all of the > > > + module's dependent libraries. > > > + > > > + This function must be called by _ModuleEntryPoint(). > > > + This function calls the set of library constructors for the set of library > > > + instances that a module depends on. This includes library instances that a > > > + module depends on directly and library instances that a module depends on > > > + indirectly through other libraries. This function is auto generated by build > > > + tools and those build tools are responsible for collecting the set of library > > > + instances, determine which ones have constructors, and calling the library > > > + constructors in the proper order based upon each of the library instances own > > > + dependencies. > > > + > > > + @param ImageHandle The image handle of the Standalone MM Driver. > > > + @param SystemTable A pointer to the MM System Table. > > > + > > > +**/ > > > +VOID > > > +EFIAPI > > > +ProcessLibraryConstructorList ( > > > + IN EFI_HANDLE ImageHandle, > > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > > + ); > > > + > > > + > > > +/** > > > + Auto generated function that calls the library descructors for all of the > > > + module's dependent libraries. > > > + > > > + This function may be called by _ModuleEntryPoint(). > > > + This function calls the set of library destructors for the set of library > > > + instances that a module depends on. This includes library instances that a > > > + module depends on directly and library instances that a module depends on > > > + indirectly through other libraries. > > > + This function is auto generated by build tools and those build tools are > > > + responsible for collecting the set of library instances, determine which ones > > > + have destructors, and calling the library destructors in the proper order > > > + based upon each of the library instances own dependencies. > > > + > > > + @param ImageHandle The image handle of the Standalone MM Driver. > > > + @param SystemTable A pointer to the MM System Table. > > > + > > > +**/ > > > +VOID > > > +EFIAPI > > > +ProcessLibraryDestructorList ( > > > + IN EFI_HANDLE ImageHandle, > > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > > + ); > > > + > > > + > > > +/** > > > + Auto generated function that calls a set of module entry points. > > > + > > > + This function must be called by _ModuleEntryPoint(). > > > + This function calls the set of module entry points. > > > + This function is auto generated by build tools and those build tools are > > > + responsible for collecting the module entry points and calling them in a > > > + specified order. > > > + > > > + @param ImageHandle The image handle of the Standalone MM Driver. > > > + @param SystemTable A pointer to the EFI System Table. > > > + > > > + @retval EFI_SUCCESS The Standalone MM Driver executed normally. > > > + @retval !EFI_SUCCESS The Standalone MM Driver failed to execute normally. > > > +**/ > > > +EFI_STATUS > > > +EFIAPI > > > +ProcessModuleEntryPointList ( > > > + IN EFI_HANDLE ImageHandle, > > > + IN EFI_MM_SYSTEM_TABLE *MmSystemTable > > > + ); > > > + > > > +#endif > > > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index a7383b6daafb..a4854083105d 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -247,6 +247,9 @@ [LibraryClasses] # Only available to MM_STANDALONE, SMM/DXE Combined and SMM module types. MmServicesTableLib|Include/Library/MmServicesTableLib.h + ## @libraryclass Module entry point library for standalone MM drivers. + StandaloneMmDriverEntryPoint|Include/Library/StandaloneMmDriverEntryPoint.h + [LibraryClasses.IA32, LibraryClasses.X64] ## @libraryclass Abstracts both S/W SMI generation and detection. ## diff --git a/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h new file mode 100644 index 000000000000..d08a73303dbb --- /dev/null +++ b/MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h @@ -0,0 +1,134 @@ +/** @file + Module entry point library for Standalone MM Drivers. + +Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> +Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR> +Copyright (c) 2018, Linaro, Limited. 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. + +**/ + +#ifndef __MODULE_ENTRY_POINT_H__ +#define __MODULE_ENTRY_POINT_H__ + +/// +/// Declare the PI Specification Revision that this driver requires to execute +/// correctly. +/// +extern CONST UINT32 _gMmRevision; + +/** + The entry point of PE/COFF Image for a Standalone MM Driver. + + This function is the entry point for a Standalone MM Driver. + This function must call ProcessLibraryConstructorList() and + ProcessModuleEntryPointList(). + If the return status from ProcessModuleEntryPointList() + is an error status, then ProcessLibraryDestructorList() must be called. + The return value from ProcessModuleEntryPointList() is returned. + If _gDriverUnloadImageCount is greater + than zero, then an unload handler must be registered for this image and + the unload handler must invoke ProcessModuleUnloadList(). + If _gMmRevision is not zero and SystemTable->Hdr.Revision is + less than _gUefiDriverRevison, then return EFI_INCOMPATIBLE_VERSION. + + @param ImageHandle The image handle of the Standalone MM Driver. + @param SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The Standalone MM Driver exited normally. + @retval EFI_INCOMPATIBLE_VERSION _gMmRevision is greater than + SystemTable->Hdr.Revision. + @retval Other Return value from + ProcessModuleEntryPointList(). + +**/ +EFI_STATUS +EFIAPI +_ModuleEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_MM_SYSTEM_TABLE *MmSystemTable + ); + + +/** + Auto generated function that calls the library constructors for all of the + module's dependent libraries. + + This function must be called by _ModuleEntryPoint(). + This function calls the set of library constructors for the set of library + instances that a module depends on. This includes library instances that a + module depends on directly and library instances that a module depends on + indirectly through other libraries. This function is auto generated by build + tools and those build tools are responsible for collecting the set of library + instances, determine which ones have constructors, and calling the library + constructors in the proper order based upon each of the library instances own + dependencies. + + @param ImageHandle The image handle of the Standalone MM Driver. + @param SystemTable A pointer to the MM System Table. + +**/ +VOID +EFIAPI +ProcessLibraryConstructorList ( + IN EFI_HANDLE ImageHandle, + IN EFI_MM_SYSTEM_TABLE *MmSystemTable + ); + + +/** + Auto generated function that calls the library descructors for all of the + module's dependent libraries. + + This function may be called by _ModuleEntryPoint(). + This function calls the set of library destructors for the set of library + instances that a module depends on. This includes library instances that a + module depends on directly and library instances that a module depends on + indirectly through other libraries. + This function is auto generated by build tools and those build tools are + responsible for collecting the set of library instances, determine which ones + have destructors, and calling the library destructors in the proper order + based upon each of the library instances own dependencies. + + @param ImageHandle The image handle of the Standalone MM Driver. + @param SystemTable A pointer to the MM System Table. + +**/ +VOID +EFIAPI +ProcessLibraryDestructorList ( + IN EFI_HANDLE ImageHandle, + IN EFI_MM_SYSTEM_TABLE *MmSystemTable + ); + + +/** + Auto generated function that calls a set of module entry points. + + This function must be called by _ModuleEntryPoint(). + This function calls the set of module entry points. + This function is auto generated by build tools and those build tools are + responsible for collecting the module entry points and calling them in a + specified order. + + @param ImageHandle The image handle of the Standalone MM Driver. + @param SystemTable A pointer to the EFI System Table. + + @retval EFI_SUCCESS The Standalone MM Driver executed normally. + @retval !EFI_SUCCESS The Standalone MM Driver failed to execute normally. +**/ +EFI_STATUS +EFIAPI +ProcessModuleEntryPointList ( + IN EFI_HANDLE ImageHandle, + IN EFI_MM_SYSTEM_TABLE *MmSystemTable + ); + +#endif
Add the library interface for the standalone MM driver entry point. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- MdePkg/MdePkg.dec | 3 + MdePkg/Include/Library/StandaloneMmDriverEntryPoint.h | 134 ++++++++++++++++++++ 2 files changed, 137 insertions(+) -- 2.20.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel