mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: StatusCodeHandler: StatusCodeHandler driver in StandaloneMm
This change added support of StandaloneMm for StatusCodeHandler. It adds a new instance of StatusCodeHandler of MM_STANDALONE type, and abstracts the driver entrypoint into separate files, replaced gSmst with gMmst, and switched to MM version of RscHandlerProtocol. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Dandan Bi <dandan.bi@intel.com> Cc: Liming Gao <gaoliming@byosoft.com.cn> Cc: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Kun Qin <kun.q@outlook.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
This commit is contained in:
parent
5625c1fdf7
commit
8a09cdd7be
|
@ -476,6 +476,7 @@
|
|||
MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf
|
||||
MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf
|
||||
MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf
|
||||
MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerStandaloneMm.inf
|
||||
MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf
|
||||
MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf
|
||||
MdeModulePkg/Library/SmmMemoryAllocationProfileLib/SmmMemoryAllocationProfileLib.inf
|
||||
|
|
|
@ -7,15 +7,15 @@
|
|||
|
||||
**/
|
||||
|
||||
#include "StatusCodeHandlerSmm.h"
|
||||
#include "StatusCodeHandlerMm.h"
|
||||
|
||||
RUNTIME_MEMORY_STATUSCODE_HEADER *mSmmMemoryStatusCodeTable;
|
||||
RUNTIME_MEMORY_STATUSCODE_HEADER *mMmMemoryStatusCodeTable;
|
||||
|
||||
/**
|
||||
Initialize SMM memory status code table as initialization for memory status code worker
|
||||
Initialize MM memory status code table as initialization for memory status code worker
|
||||
|
||||
@retval EFI_SUCCESS SMM memory status code table successfully initialized.
|
||||
@retval others Errors from gSmst->SmmInstallConfigurationTable().
|
||||
@retval EFI_SUCCESS MM memory status code table successfully initialized.
|
||||
@retval others Errors from gMmst->MmInstallConfigurationTable().
|
||||
**/
|
||||
EFI_STATUS
|
||||
MemoryStatusCodeInitializeWorker (
|
||||
|
@ -25,17 +25,17 @@ MemoryStatusCodeInitializeWorker (
|
|||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Allocate SMM memory status code pool.
|
||||
// Allocate MM memory status code pool.
|
||||
//
|
||||
mSmmMemoryStatusCodeTable = (RUNTIME_MEMORY_STATUSCODE_HEADER *)AllocateZeroPool (sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + PcdGet16 (PcdStatusCodeMemorySize) * 1024);
|
||||
ASSERT (mSmmMemoryStatusCodeTable != NULL);
|
||||
mMmMemoryStatusCodeTable = (RUNTIME_MEMORY_STATUSCODE_HEADER *)AllocateZeroPool (sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + PcdGet16 (PcdStatusCodeMemorySize) * 1024);
|
||||
ASSERT (mMmMemoryStatusCodeTable != NULL);
|
||||
|
||||
mSmmMemoryStatusCodeTable->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD);
|
||||
Status = gSmst->SmmInstallConfigurationTable (
|
||||
gSmst,
|
||||
mMmMemoryStatusCodeTable->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD);
|
||||
Status = gMmst->MmInstallConfigurationTable (
|
||||
gMmst,
|
||||
&gMemoryStatusCodeRecordGuid,
|
||||
&mSmmMemoryStatusCodeTable,
|
||||
sizeof (mSmmMemoryStatusCodeTable)
|
||||
&mMmMemoryStatusCodeTable,
|
||||
sizeof (mMmMemoryStatusCodeTable)
|
||||
);
|
||||
return Status;
|
||||
}
|
||||
|
@ -74,8 +74,8 @@ MemoryStatusCodeReportWorker (
|
|||
//
|
||||
// Locate current record buffer.
|
||||
//
|
||||
Record = (MEMORY_STATUSCODE_RECORD *) (mSmmMemoryStatusCodeTable + 1);
|
||||
Record = &Record[mSmmMemoryStatusCodeTable->RecordIndex++];
|
||||
Record = (MEMORY_STATUSCODE_RECORD *) (mMmMemoryStatusCodeTable + 1);
|
||||
Record = &Record[mMmMemoryStatusCodeTable->RecordIndex++];
|
||||
|
||||
//
|
||||
// Save status code.
|
||||
|
@ -92,12 +92,12 @@ MemoryStatusCodeReportWorker (
|
|||
// so the first record is pointed by record index.
|
||||
// If it is less then max number, index of the first record is zero.
|
||||
//
|
||||
mSmmMemoryStatusCodeTable->NumberOfRecords++;
|
||||
if (mSmmMemoryStatusCodeTable->RecordIndex == mSmmMemoryStatusCodeTable->MaxRecordsNumber) {
|
||||
mMmMemoryStatusCodeTable->NumberOfRecords++;
|
||||
if (mMmMemoryStatusCodeTable->RecordIndex == mMmMemoryStatusCodeTable->MaxRecordsNumber) {
|
||||
//
|
||||
// Wrap around record index.
|
||||
//
|
||||
mSmmMemoryStatusCodeTable->RecordIndex = 0;
|
||||
mMmMemoryStatusCodeTable->RecordIndex = 0;
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
**/
|
||||
|
||||
#include "StatusCodeHandlerSmm.h"
|
||||
#include "StatusCodeHandlerMm.h"
|
||||
|
||||
/**
|
||||
Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
/** @file
|
||||
Status Code Handler Driver which produces general handlers and hook them
|
||||
onto the SMM status code router.
|
||||
onto the MM status code router.
|
||||
|
||||
Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "StatusCodeHandlerSmm.h"
|
||||
#include "StatusCodeHandlerMm.h"
|
||||
|
||||
EFI_SMM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL;
|
||||
EFI_MM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -42,27 +42,22 @@ InitializationDispatcherWorker (
|
|||
}
|
||||
|
||||
/**
|
||||
Entry point of SMM Status Code Driver.
|
||||
Entry point of Common MM Status Code Driver.
|
||||
|
||||
This function is the entry point of SMM Status Code Driver.
|
||||
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
@param SystemTable A pointer to the EFI System Table.
|
||||
This function is the entry point of MM Status Code Driver.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
StatusCodeHandlerSmmEntry (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
StatusCodeHandlerCommonEntry (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = gSmst->SmmLocateProtocol (
|
||||
&gEfiSmmRscHandlerProtocolGuid,
|
||||
Status = gMmst->MmLocateProtocol (
|
||||
&gEfiMmRscHandlerProtocolGuid,
|
||||
NULL,
|
||||
(VOID **) &mRscHandlerProtocol
|
||||
);
|
|
@ -7,10 +7,10 @@
|
|||
|
||||
**/
|
||||
|
||||
#ifndef __STATUS_CODE_HANDLER_SMM_H__
|
||||
#define __STATUS_CODE_HANDLER_SMM_H__
|
||||
#ifndef __STATUS_CODE_HANDLER_MM_H__
|
||||
#define __STATUS_CODE_HANDLER_MM_H__
|
||||
|
||||
#include <Protocol/SmmReportStatusCodeHandler.h>
|
||||
#include <Protocol/MmReportStatusCodeHandler.h>
|
||||
|
||||
#include <Guid/MemoryStatusCodeRecord.h>
|
||||
#include <Guid/StatusCodeDataTypeId.h>
|
||||
|
@ -22,7 +22,7 @@
|
|||
#include <Library/PrintLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <Library/UefiDriverEntryPoint.h>
|
||||
#include <Library/SmmServicesTableLib.h>
|
||||
#include <Library/MmServicesTableLib.h>
|
||||
#include <Library/SerialPortLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
|
@ -32,7 +32,7 @@
|
|||
//
|
||||
#define MAX_DEBUG_MESSAGE_LENGTH 0x100
|
||||
|
||||
extern RUNTIME_MEMORY_STATUSCODE_HEADER *mSmmMemoryStatusCodeTable;
|
||||
extern RUNTIME_MEMORY_STATUSCODE_HEADER *mMmMemoryStatusCodeTable;
|
||||
|
||||
/**
|
||||
Locates Serial I/O Protocol as initialization for serial status code worker.
|
||||
|
@ -114,4 +114,17 @@ MemoryStatusCodeReportWorker (
|
|||
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Entry point of Common MM Status Code Driver.
|
||||
|
||||
This function is the entry point of MM Status Code Driver.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
StatusCodeHandlerCommonEntry (
|
||||
VOID
|
||||
);
|
||||
|
||||
#endif
|
|
@ -1,5 +1,5 @@
|
|||
## @file
|
||||
# Status Code Handler Driver which produces general handlers and hook them onto the SMM status code router.
|
||||
# Status Code Handler Driver which produces general handlers and hook them onto the MM status code router.
|
||||
#
|
||||
# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||
|
@ -17,7 +17,7 @@
|
|||
MODULE_TYPE = DXE_SMM_DRIVER
|
||||
PI_SPECIFICATION_VERSION = 0x0001000A
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = StatusCodeHandlerSmmEntry
|
||||
ENTRY_POINT = StatusCodeHandlerTraditionalMmEntry
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
|
@ -26,8 +26,9 @@
|
|||
#
|
||||
|
||||
[Sources]
|
||||
StatusCodeHandlerSmm.c
|
||||
StatusCodeHandlerSmm.h
|
||||
StatusCodeHandlerMm.c
|
||||
StatusCodeHandlerMm.h
|
||||
StatusCodeHandlerTraditional.c
|
||||
SerialStatusCodeWorker.c
|
||||
MemoryStatusCodeWorker.c
|
||||
|
||||
|
@ -37,7 +38,7 @@
|
|||
|
||||
[LibraryClasses]
|
||||
SerialPortLib
|
||||
SmmServicesTableLib
|
||||
MmServicesTableLib
|
||||
UefiDriverEntryPoint
|
||||
PcdLib
|
||||
PrintLib
|
||||
|
@ -51,7 +52,7 @@
|
|||
gMemoryStatusCodeRecordGuid ## SOMETIMES_PRODUCES ## UNDEFINED # SmmSystemTable
|
||||
|
||||
[Protocols]
|
||||
gEfiSmmRscHandlerProtocolGuid ## CONSUMES
|
||||
gEfiMmRscHandlerProtocolGuid ## CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial ## CONSUMES
|
||||
|
@ -59,7 +60,7 @@
|
|||
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize |128| gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory ## SOMETIMES_CONSUMES
|
||||
|
||||
[Depex]
|
||||
gEfiSmmRscHandlerProtocolGuid
|
||||
gEfiMmRscHandlerProtocolGuid
|
||||
|
||||
[UserExtensions.TianoCore."ExtraFiles"]
|
||||
StatusCodeHandlerSmmExtra.uni
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/** @file
|
||||
Abstraction layer that contains Standalone MM specific implementation for
|
||||
Status Code Handler Driver.
|
||||
|
||||
Copyright (c) Microsoft Corporation.
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "StatusCodeHandlerMm.h"
|
||||
|
||||
/**
|
||||
Entry point of Standalone MM Status Code Driver.
|
||||
|
||||
This function is the entry point of Standalone MM Status Code Driver.
|
||||
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
@param SystemTable A pointer to the EFI MM System Table.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
StatusCodeHandlerStandaloneMmEntry (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_MM_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
return StatusCodeHandlerCommonEntry ();
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
## @file
|
||||
# Status Code Handler Driver which produces general handlers and hook them onto the MM status code router.
|
||||
#
|
||||
# Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
|
||||
# Copyright (c) Microsoft Corporation.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = StatusCodeHandlerStandaloneMm
|
||||
FILE_GUID = EBE7802F-5E11-4D4E-B463-22D2425D156B
|
||||
MODULE_TYPE = MM_STANDALONE
|
||||
PI_SPECIFICATION_VERSION = 0x00010032
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = StatusCodeHandlerStandaloneMmEntry
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64
|
||||
#
|
||||
|
||||
[Sources]
|
||||
StatusCodeHandlerMm.c
|
||||
StatusCodeHandlerMm.h
|
||||
StatusCodeHandlerStandalone.c
|
||||
SerialStatusCodeWorker.c
|
||||
MemoryStatusCodeWorker.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
SerialPortLib
|
||||
MmServicesTableLib
|
||||
StandaloneMmDriverEntryPoint
|
||||
PcdLib
|
||||
PrintLib
|
||||
ReportStatusCodeLib
|
||||
DebugLib
|
||||
MemoryAllocationLib
|
||||
BaseMemoryLib
|
||||
|
||||
[Guids]
|
||||
gEfiStatusCodeDataTypeStringGuid ## SOMETIMES_CONSUMES ## UNDEFINED
|
||||
gMemoryStatusCodeRecordGuid ## SOMETIMES_PRODUCES ## UNDEFINED # MmSystemTable
|
||||
|
||||
[Protocols]
|
||||
gEfiMmRscHandlerProtocolGuid ## CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseSerial ## CONSUMES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory ## CONSUMES
|
||||
gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeMemorySize |128| gEfiMdeModulePkgTokenSpaceGuid.PcdStatusCodeUseMemory ## SOMETIMES_CONSUMES
|
||||
|
||||
[Depex]
|
||||
gEfiMmRscHandlerProtocolGuid
|
|
@ -0,0 +1,31 @@
|
|||
/** @file
|
||||
Abstraction layer that contains Standalone MM specific implementation for
|
||||
Status Code Handler Driver.
|
||||
|
||||
Copyright (c) Microsoft Corporation.
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
|
||||
#include "StatusCodeHandlerMm.h"
|
||||
|
||||
/**
|
||||
Entry point of Traditional MM Status Code Driver.
|
||||
|
||||
This function is the entry point of Traditional MM Status Code Driver.
|
||||
|
||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||
@param SystemTable A pointer to the EFI System Table.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
StatusCodeHandlerTraditionalMmEntry (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
return StatusCodeHandlerCommonEntry ();
|
||||
}
|
Loading…
Reference in New Issue