diff options
author | Ruiyu Ni <ruiyu.ni@intel.com> | 2018-04-25 15:05:54 +0800 |
---|---|---|
committer | Ruiyu Ni <ruiyu.ni@intel.com> | 2018-05-09 12:09:36 +0800 |
commit | b22a62be5cdc8fd19d87ec1ecfa5b28fb9be50ad (patch) | |
tree | 815c81beacc590fb146f8f5086460703a626c861 /IntelFrameworkModulePkg | |
parent | 7cd8a57599b519c4ead0c0eadbb52469eaf2dda5 (diff) | |
download | edk2-b22a62be5cdc8fd19d87ec1ecfa5b28fb9be50ad.tar.gz edk2-b22a62be5cdc8fd19d87ec1ecfa5b28fb9be50ad.tar.bz2 edk2-b22a62be5cdc8fd19d87ec1ecfa5b28fb9be50ad.zip |
IntelFrameworkModule/LegacyBios: Use reserved memory for legacy data
Certain Legacy USB implementation needs to access legacy data (BDA,
etc.) from SMM environment. While currently it's not allowed to
access BS memory from SMM after EndofDxe, change the legacy data
to use reserved memory type.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
Diffstat (limited to 'IntelFrameworkModulePkg')
-rw-r--r-- | IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBios.c | 18 | ||||
-rw-r--r-- | IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h | 9 |
2 files changed, 18 insertions, 9 deletions
diff --git a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBios.c b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBios.c index fca08a8fa2..9466e3e4dd 100644 --- a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBios.c +++ b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBios.c @@ -1,6 +1,6 @@ /** @file
-Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
@@ -43,10 +43,10 @@ UINTN mStructureTablePages = 0; BOOLEAN mEndOfDxe = FALSE;
/**
- Do an AllocatePages () of type AllocateMaxAddress for EfiBootServicesCode
- memory.
+ Allocate memory for legacy usage.
- @param AllocateType Allocated Legacy Memory Type
+ @param AllocateType The type of allocation to perform.
+ @param MemoryType The type of memory to allocate.
@param StartPageAddress Start address of range
@param Pages Number of pages to allocate
@param Result Result of allocation
@@ -58,6 +58,7 @@ BOOLEAN mEndOfDxe = FALSE; EFI_STATUS
AllocateLegacyMemory (
IN EFI_ALLOCATE_TYPE AllocateType,
+ IN EFI_MEMORY_TYPE MemoryType,
IN EFI_PHYSICAL_ADDRESS StartPageAddress,
IN UINTN Pages,
OUT EFI_PHYSICAL_ADDRESS *Result
@@ -72,7 +73,7 @@ AllocateLegacyMemory ( MemPage = (EFI_PHYSICAL_ADDRESS) (UINTN) StartPageAddress;
Status = gBS->AllocatePages (
AllocateType,
- EfiBootServicesCode,
+ MemoryType,
Pages,
&MemPage
);
@@ -974,6 +975,7 @@ LegacyBiosInstall ( //
AllocateLegacyMemory (
AllocateAddress,
+ EfiReservedMemoryType,
0,
1,
&MemoryAddress
@@ -999,6 +1001,7 @@ LegacyBiosInstall ( Status = AllocateLegacyMemory (
AllocateAddress,
+ EfiReservedMemoryType,
CONVENTIONAL_MEMORY_TOP - MemorySize,
EFI_SIZE_TO_PAGES (MemorySize),
&MemoryAddress
@@ -1027,6 +1030,7 @@ LegacyBiosInstall ( for (MemStart = MemoryAddress; MemStart < MemoryAddress + MemorySize; MemStart += 0x1000) {
Status = AllocateLegacyMemory (
AllocateAddress,
+ EfiBootServicesCode,
MemStart,
1,
&StartAddress
@@ -1046,6 +1050,7 @@ LegacyBiosInstall ( ASSERT ((MemorySize & 0xFFF) == 0);
Status = AllocateLegacyMemory (
AllocateMaxAddress,
+ EfiBootServicesCode,
CONVENTIONAL_MEMORY_TOP,
EFI_SIZE_TO_PAGES (MemorySize),
&MemoryAddressUnder1MB
@@ -1059,6 +1064,7 @@ LegacyBiosInstall ( //
Status = AllocateLegacyMemory (
AllocateMaxAddress,
+ EfiReservedMemoryType,
CONVENTIONAL_MEMORY_TOP,
(sizeof (LOW_MEMORY_THUNK) / EFI_PAGE_SIZE) + 2,
&MemoryAddress
@@ -1086,6 +1092,7 @@ LegacyBiosInstall ( //
Status = AllocateLegacyMemory (
AllocateMaxAddress,
+ EfiBootServicesCode,
0x1000000,
EFI_SIZE_TO_PAGES (MemorySize),
&MemoryAddress
@@ -1096,6 +1103,7 @@ LegacyBiosInstall ( //
Status = AllocateLegacyMemory (
AllocateMaxAddress,
+ EfiBootServicesCode,
0xFFFFFFFF,
EFI_SIZE_TO_PAGES (MemorySize),
&MemoryAddress
diff --git a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h index cc2fc9fc13..9f3a1a693c 100644 --- a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h +++ b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBiosInterface.h @@ -1,6 +1,6 @@ /** @file
-Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
@@ -1261,10 +1261,10 @@ GenerateSoftInit ( );
/**
- Do an AllocatePages () of type AllocateMaxAddress for EfiBootServicesCode
- memory.
+ Allocate memory for legacy usage.
- @param AllocateType Allocated Legacy Memory Type
+ @param AllocateType The type of allocation to perform.
+ @param MemoryType The type of memory to allocate.
@param StartPageAddress Start address of range
@param Pages Number of pages to allocate
@param Result Result of allocation
@@ -1276,6 +1276,7 @@ GenerateSoftInit ( EFI_STATUS
AllocateLegacyMemory (
IN EFI_ALLOCATE_TYPE AllocateType,
+ IN EFI_MEMORY_TYPE MemoryType,
IN EFI_PHYSICAL_ADDRESS StartPageAddress,
IN UINTN Pages,
OUT EFI_PHYSICAL_ADDRESS *Result
|