]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: pull in the SMM IPL and SMM core
authorLaszlo Ersek <lersek@redhat.com>
Mon, 30 Nov 2015 18:41:52 +0000 (18:41 +0000)
committerlersek <lersek@Edk2>
Mon, 30 Nov 2015 18:41:52 +0000 (18:41 +0000)
"MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf" (a DXE_RUNTIME_DRIVER)
implements the SMM Initial Program Loader. It produces
EFI_SMM_BASE2_PROTOCOL and EFI_SMM_COMMUNICATION_PROTOCOL, relying on:
- EFI_SMM_ACCESS2_PROTOCOL
  (provided by OvmfPkg/SmmAccess/SmmAccess2Dxe.inf),
- EFI_SMM_CONTROL2_PROTOCOL
  (provided by OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf).

(The SMM IPL also depends on EFI_SMM_CONFIGURATION_PROTOCOL_GUID, but this
dependency is not enforced in the entry point. A protocol notify callback
is registered instead, hence we can delay providing that protocol via the
PiSmmCpuDxeSmm driver that is (to be) imported from UefiCpuPkg/.)

The SMM IPL loads the SMM core into SMRAM and executes it from there.
Therefore we add the SMM core to the build as well.

For the SMM core, a number of library classes need to be resolved.
Furthermore, each FDF file must provide the GenFds.py BaseTools utility
with a build rule for SMM_CORE; we copy the DXE_CORE's rule.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19043 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/OvmfPkgIa32.dsc
OvmfPkg/OvmfPkgIa32.fdf
OvmfPkg/OvmfPkgIa32X64.dsc
OvmfPkg/OvmfPkgIa32X64.fdf
OvmfPkg/OvmfPkgX64.dsc
OvmfPkg/OvmfPkgX64.fdf

index a95df685f08bcb43723d7fd6867ca4b3b2e0539b..af0f36129a23ad1104602c8e8805659b2f33e683 100644 (file)
 [LibraryClasses.common.SMM_CORE]\r
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r
   TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf\r
 [LibraryClasses.common.SMM_CORE]\r
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r
   TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf\r
+  SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf\r
+  MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf\r
+  ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf\r
+  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf\r
+  SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf\r
+  SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf\r
+!ifdef $(DEBUG_ON_SERIAL_PORT)\r
+  DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf\r
+!else\r
+  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf\r
+!endif\r
 \r
 ################################################################################\r
 #\r
 \r
 ################################################################################\r
 #\r
 !if $(SMM_REQUIRE) == TRUE\r
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
   OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
 !if $(SMM_REQUIRE) == TRUE\r
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
   OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
+\r
+  #\r
+  # SMM Initial Program Load (a DXE_RUNTIME_DRIVER)\r
+  #\r
+  MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf\r
+\r
+  #\r
+  # SMM_CORE\r
+  #\r
+  MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf\r
 !endif\r
 !endif\r
index 9fabcf729be442c8e562140b35067f4423a5fff0..986c206e93cd43f162ef56775386c9d50e5d40ec 100644 (file)
@@ -358,6 +358,8 @@ INF  OvmfPkg/PlatformDxe/Platform.inf
 !if $(SMM_REQUIRE) == TRUE\r
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
 INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
 !if $(SMM_REQUIRE) == TRUE\r
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
 INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
+INF  MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf\r
+INF  MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf\r
 !endif\r
 \r
 ################################################################################\r
 !endif\r
 \r
 ################################################################################\r
@@ -486,3 +488,10 @@ FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
   FILE RAW = $(NAMED_GUID) {\r
     RAW BIN   Align = 16   |.bin\r
   }\r
   FILE RAW = $(NAMED_GUID) {\r
     RAW BIN   Align = 16   |.bin\r
   }\r
+\r
+[Rule.Common.SMM_CORE]\r
+  FILE SMM_CORE = $(NAMED_GUID) {\r
+    PE32     PE32           $(INF_OUTPUT)/$(MODULE_NAME).efi\r
+    UI       STRING="$(MODULE_NAME)" Optional\r
+    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)\r
+  }\r
index 9b071cb03a19d69185beea857752b23f74a8b867..5fccd9d42709f64bebb57b1b4b52462b638f5c3e 100644 (file)
 [LibraryClasses.common.SMM_CORE]\r
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r
   TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf\r
 [LibraryClasses.common.SMM_CORE]\r
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r
   TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf\r
+  SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf\r
+  MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf\r
+  ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf\r
+  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf\r
+  SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf\r
+  SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf\r
+!ifdef $(DEBUG_ON_SERIAL_PORT)\r
+  DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf\r
+!else\r
+  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf\r
+!endif\r
 \r
 ################################################################################\r
 #\r
 \r
 ################################################################################\r
 #\r
 !if $(SMM_REQUIRE) == TRUE\r
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
   OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
 !if $(SMM_REQUIRE) == TRUE\r
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
   OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
+\r
+  #\r
+  # SMM Initial Program Load (a DXE_RUNTIME_DRIVER)\r
+  #\r
+  MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf\r
+\r
+  #\r
+  # SMM_CORE\r
+  #\r
+  MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf\r
 !endif\r
 !endif\r
index c818d3586307ccc9539396a4aa348cf4fb255d80..13fdbcacb4aaf693a5b4c7003a1b25ccd326e739 100644 (file)
@@ -358,6 +358,8 @@ INF  OvmfPkg/PlatformDxe/Platform.inf
 !if $(SMM_REQUIRE) == TRUE\r
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
 INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
 !if $(SMM_REQUIRE) == TRUE\r
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
 INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
+INF  MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf\r
+INF  MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf\r
 !endif\r
 \r
 ################################################################################\r
 !endif\r
 \r
 ################################################################################\r
@@ -486,3 +488,10 @@ FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
   FILE RAW = $(NAMED_GUID) {\r
     RAW BIN   Align = 16   |.bin\r
   }\r
   FILE RAW = $(NAMED_GUID) {\r
     RAW BIN   Align = 16   |.bin\r
   }\r
+\r
+[Rule.Common.SMM_CORE]\r
+  FILE SMM_CORE = $(NAMED_GUID) {\r
+    PE32     PE32           $(INF_OUTPUT)/$(MODULE_NAME).efi\r
+    UI       STRING="$(MODULE_NAME)" Optional\r
+    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)\r
+  }\r
index 3f03ca2f1e928e082ca61b0115087c1891b7f236..56592e4252f034e1bf69c4030b8472411491ddf2 100644 (file)
 [LibraryClasses.common.SMM_CORE]\r
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r
   TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf\r
 [LibraryClasses.common.SMM_CORE]\r
   PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf\r
   TimerLib|OvmfPkg/Library/AcpiTimerLib/DxeAcpiTimerLib.inf\r
+  SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf\r
+  MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf\r
+  ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf\r
+  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf\r
+  SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf\r
+  SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf\r
+!ifdef $(DEBUG_ON_SERIAL_PORT)\r
+  DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf\r
+!else\r
+  DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.inf\r
+!endif\r
 \r
 ################################################################################\r
 #\r
 \r
 ################################################################################\r
 #\r
 !if $(SMM_REQUIRE) == TRUE\r
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
   OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
 !if $(SMM_REQUIRE) == TRUE\r
   OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
   OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
+\r
+  #\r
+  # SMM Initial Program Load (a DXE_RUNTIME_DRIVER)\r
+  #\r
+  MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf\r
+\r
+  #\r
+  # SMM_CORE\r
+  #\r
+  MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf\r
 !endif\r
 !endif\r
index 3b1742d14822f8d159d49e7c0ddce5954faa2fed..5257de9de77a038cf9a9da2e79fe1fa526d657f8 100644 (file)
@@ -358,6 +358,8 @@ INF  OvmfPkg/PlatformDxe/Platform.inf
 !if $(SMM_REQUIRE) == TRUE\r
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
 INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
 !if $(SMM_REQUIRE) == TRUE\r
 INF  OvmfPkg/SmmAccess/SmmAccess2Dxe.inf\r
 INF  OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf\r
+INF  MdeModulePkg/Core/PiSmmCore/PiSmmIpl.inf\r
+INF  MdeModulePkg/Core/PiSmmCore/PiSmmCore.inf\r
 !endif\r
 \r
 ################################################################################\r
 !endif\r
 \r
 ################################################################################\r
@@ -486,3 +488,10 @@ FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
   FILE RAW = $(NAMED_GUID) {\r
     RAW BIN   Align = 16   |.bin\r
   }\r
   FILE RAW = $(NAMED_GUID) {\r
     RAW BIN   Align = 16   |.bin\r
   }\r
+\r
+[Rule.Common.SMM_CORE]\r
+  FILE SMM_CORE = $(NAMED_GUID) {\r
+    PE32     PE32           $(INF_OUTPUT)/$(MODULE_NAME).efi\r
+    UI       STRING="$(MODULE_NAME)" Optional\r
+    VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)\r
+  }\r