audk/MdeModulePkg/Core/PiSmmCore
Star Zeng c03beb762a MdeModulePkg PiSmmCore: Remove a hidden assumption of SMRAM reservation
that assumes the SMRAM reserved range is only at the end of the SMRAM descriptor.

          //
          // This range has reserved area, calculate the left free size
          //
          gSmmCorePrivate->SmramRanges[Index].PhysicalSize = SmramResRegion->SmramReservedStart - gSmmCorePrivate->SmramRanges[Index].CpuStart;

Imagine the following scenario where we just reserve the first page of the SMRAM range:

SMRAM Descriptor:
  Start: 0x80000000
  Size: 0x02000000

Reserved Range:
  Start: 0x80000000
  Size: 0x00001000

In this case the adjustment to the SMRAM range size yields zero: ReservedStart - SMRAM Start is 0x80000000 - 0x80000000 = 0.
So even though most of the range is still free the IPL code decides its unusable.

The problem comes from the email thread: [edk2] PiSmmIpl SMRAM Reservation Logic.
http://thread.gmane.org/gmane.comp.bios.tianocore.devel/15268

Also to follow the idea in the email thread, the patch is to
1. Keep only one copy of full SMRAM ranges in gSmmCorePrivate->SmramRanges,
split record for SmmConfiguration->SmramReservedRegions and SMM Core that
will be marked to be EFI_ALLOCATED in gSmmCorePrivate->SmramRanges.
2. Handle SmmConfiguration->SmramReservedRegions at beginning of, at end of,
in the middle of, or cross multiple SmramRanges.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18031 6f19259b-4bc3-4df7-8a09-765794883524
2015-07-26 07:38:12 +00:00
..
Dependency.c 1) Change location of DEBUG() macro that prints the name of the FFS file being evaluated by the DXE Dispatcher to eliminate a duplicate print. 2010-12-06 21:55:14 +00:00
Dispatcher.c PiSmmCore dispatcher should not use one Index for three loops. 2015-06-06 23:49:39 +00:00
Handle.c Update the copyright notice format 2010-04-24 09:49:11 +00:00
InstallConfigurationTable.c Update the copyright notice format 2010-04-24 09:49:11 +00:00
Locate.c Update the copyright notice format 2010-04-24 09:49:11 +00:00
Notify.c MdeModulePkg/SmmCore: SMM register protocol notify function clarify 2015-05-07 02:29:52 +00:00
Page.c MdeModulePkg DxeCore/PiSmmCore: Add UEFI memory and SMRAM profile support. 2014-11-12 03:27:48 +00:00
PiSmmCore.c MdeModulePkg PiSmmCore: Remove a hidden assumption of SMRAM reservation 2015-07-26 07:38:12 +00:00
PiSmmCore.h MdeModulePkg PiSmmCore: Introduce SMM Exit Boot Services and Legacy Boot. 2015-06-18 09:26:41 +00:00
PiSmmCore.inf MdeModulePkg PiSmmCore: Introduce SMM Exit Boot Services and Legacy Boot. 2015-06-18 09:26:41 +00:00
PiSmmCore.uni MdeModulePkg: Convert non DOS format files to DOS format and remove unused module UNI files. 2014-09-03 08:39:12 +00:00
PiSmmCoreExtra.uni MdeModulePkg: INF/DEC file updates to EDK II packages 2014-08-28 06:53:43 +00:00
PiSmmCorePrivateData.h MdeModulePkg PiSmmCore: Remove a hidden assumption of SMRAM reservation 2015-07-26 07:38:12 +00:00
PiSmmIpl.c MdeModulePkg PiSmmCore: Remove a hidden assumption of SMRAM reservation 2015-07-26 07:38:12 +00:00
PiSmmIpl.inf MdeModulePkg PiSmmCore: Introduce SMM Exit Boot Services and Legacy Boot. 2015-06-18 09:26:41 +00:00
PiSmmIpl.uni MdeModulePkg: Convert non DOS format files to DOS format and remove unused module UNI files. 2014-09-03 08:39:12 +00:00
PiSmmIplExtra.uni MdeModulePkg: INF/DEC file updates to EDK II packages 2014-08-28 06:53:43 +00:00
Pool.c MdeModulePkg DxeCore/PiSmmCore: Add UEFI memory and SMRAM profile support. 2014-11-12 03:27:48 +00:00
Smi.c Update SmiManager() comments and implementation to follow the new rule clarified by PI 1.2.1 errata A. 2013-02-20 03:38:10 +00:00
SmramProfileRecord.c MdeModulePkg PiSmmCore: Free FullSmramRanges at error condition. 2015-06-09 09:41:50 +00:00