Re: [edk2] [PATCH v2 09/17] MdePkg: introduce standalone MM entry point library class

2019-01-16 Thread Ard Biesheuvel
On Wed, 16 Jan 2019 at 15:56, Gao, Liming  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 ; edk2-devel@lists.01.org
> > Cc: Wu, Hao A ; Gao, Liming ; 
> > Kinney, Michael D ; Laszlo
> > Ersek ; Zeng, Star 
> > 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 
> > > ---
> > >   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 ..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.
> > > +Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
> > > +Copyright (c) 2018, Linaro, Limited. All rights reserved.
> > > +
> > > +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.
> &

Re: [edk2] [PATCH v2 09/17] MdePkg: introduce standalone MM entry point library class

2019-01-16 Thread Gao, Liming
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 ; edk2-devel@lists.01.org
> Cc: Wu, Hao A ; Gao, Liming ; 
> Kinney, Michael D ; Laszlo
> Ersek ; Zeng, Star 
> 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 
> > ---
> >   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 ..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.
> > +Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
> > +Copyright (c) 2018, Linaro, Limited. All rights reserved.
> > +
> > +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 pa

Re: [edk2] [PATCH v2 09/17] MdePkg: introduce standalone MM entry point library class

2019-01-15 Thread Zeng, Star

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 
---
  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 ..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.
+Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
+Copyright (c) 2018, Linaro, Limited. All rights reserved.
+
+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  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 

[edk2] [PATCH v2 09/17] MdePkg: introduce standalone MM entry point library class

2019-01-14 Thread Ard Biesheuvel
Add the library interface for the standalone MM driver entry point.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel 
---
 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 ..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.
+Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
+Copyright (c) 2018, Linaro, Limited. All rights reserved.
+
+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