mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 15:44:04 +02:00
SecurityPkg-Opal(1): Use fixed SMM communication buffer in OPAL password lib.
This patch enhance OPAL password lib SMM communication by using fixed SMM communication buffer. Update OPAL password lib to consume EDKII_PI_SMM_COMMUNICATION_REGION_TABLE as fixed communication buffer for SMM communication. This is designed to meet Microsoft WSMT table definition on FIXED_COMM_BUFFERS requirement. Cc: Eric Dong <eric.dong@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com>
This commit is contained in:
parent
de2459d66d
commit
83681c74f0
@ -401,8 +401,36 @@ OpalInitCommunicateBuffer (
|
|||||||
EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader;
|
EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader;
|
||||||
OPAL_SMM_COMMUNICATE_HEADER *SmmFunctionHeader;
|
OPAL_SMM_COMMUNICATE_HEADER *SmmFunctionHeader;
|
||||||
VOID *Buffer;
|
VOID *Buffer;
|
||||||
|
EDKII_PI_SMM_COMMUNICATION_REGION_TABLE *SmmCommRegionTable;
|
||||||
|
EFI_MEMORY_DESCRIPTOR *SmmCommMemRegion;
|
||||||
|
UINTN Index;
|
||||||
|
UINTN Size;
|
||||||
|
EFI_STATUS Status;
|
||||||
|
|
||||||
Buffer = AllocateZeroPool (DataSize + OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + OFFSET_OF (OPAL_SMM_COMMUNICATE_HEADER, Data));
|
Buffer = NULL;
|
||||||
|
Status = EfiGetSystemConfigurationTable (
|
||||||
|
&gEdkiiPiSmmCommunicationRegionTableGuid,
|
||||||
|
(VOID **) &SmmCommRegionTable
|
||||||
|
);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT (SmmCommRegionTable != NULL);
|
||||||
|
SmmCommMemRegion = (EFI_MEMORY_DESCRIPTOR *) (SmmCommRegionTable + 1);
|
||||||
|
Size = 0;
|
||||||
|
for (Index = 0; Index < SmmCommRegionTable->NumberOfEntries; Index++) {
|
||||||
|
if (SmmCommMemRegion->Type == EfiConventionalMemory) {
|
||||||
|
Size = EFI_PAGES_TO_SIZE ((UINTN) SmmCommMemRegion->NumberOfPages);
|
||||||
|
if (Size >= (DataSize + OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data) + OFFSET_OF (OPAL_SMM_COMMUNICATE_HEADER, Data))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SmmCommMemRegion = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) SmmCommMemRegion + SmmCommRegionTable->DescriptorSize);
|
||||||
|
}
|
||||||
|
ASSERT (Index < SmmCommRegionTable->NumberOfEntries);
|
||||||
|
|
||||||
|
Buffer = (VOID*)(UINTN)SmmCommMemRegion->PhysicalStart;
|
||||||
ASSERT (Buffer != NULL);
|
ASSERT (Buffer != NULL);
|
||||||
|
|
||||||
SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) Buffer;
|
SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) Buffer;
|
||||||
@ -513,8 +541,6 @@ OpalSupportSendPasword(
|
|||||||
|
|
||||||
EXIT:
|
EXIT:
|
||||||
ZeroMem(Parameter, Length);
|
ZeroMem(Parameter, Length);
|
||||||
FreePool(Buffer);
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,9 +43,13 @@
|
|||||||
|
|
||||||
[Packages]
|
[Packages]
|
||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
SecurityPkg/SecurityPkg.dec
|
SecurityPkg/SecurityPkg.dec
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiStorageSecurityCommandProtocolGuid ## CONSUMES
|
gEfiStorageSecurityCommandProtocolGuid ## CONSUMES
|
||||||
gEfiSmmCommunicationProtocolGuid ## CONSUMES
|
gEfiSmmCommunicationProtocolGuid ## CONSUMES
|
||||||
gEfiSmmBase2ProtocolGuid ## CONSUMES # only for SMM version
|
gEfiSmmBase2ProtocolGuid ## CONSUMES # only for SMM version
|
||||||
|
|
||||||
|
[Guids]
|
||||||
|
gEdkiiPiSmmCommunicationRegionTableGuid ## CONSUMES ## SystemTable
|
||||||
|
@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <PiSmm.h>
|
#include <PiSmm.h>
|
||||||
|
|
||||||
#include <Uefi/UefiAcpiDataTable.h>
|
#include <Uefi/UefiAcpiDataTable.h>
|
||||||
|
#include <Guid/PiSmmCommunicationRegionTable.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user