mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 08:34:07 +02:00
Update SmmBase Communicate Thunk behaivor to be compatible with Framework implemenation.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10271 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
1d5cbb48c3
commit
18e7892763
@ -42,6 +42,8 @@ typedef struct {
|
|||||||
EFI_HANDLE DispatchHandle;
|
EFI_HANDLE DispatchHandle;
|
||||||
EFI_HANDLE SmmImageHandle;
|
EFI_HANDLE SmmImageHandle;
|
||||||
EFI_SMM_CALLBACK_ENTRY_POINT CallbackAddress;
|
EFI_SMM_CALLBACK_ENTRY_POINT CallbackAddress;
|
||||||
|
VOID *CommunicationBuffer;
|
||||||
|
UINTN *SourceSize;
|
||||||
} CALLBACK_INFO;
|
} CALLBACK_INFO;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -410,8 +412,8 @@ CallbackThunk (
|
|||||||
///
|
///
|
||||||
Status = (CallbackInfo->CallbackAddress) (
|
Status = (CallbackInfo->CallbackAddress) (
|
||||||
CallbackInfo->SmmImageHandle,
|
CallbackInfo->SmmImageHandle,
|
||||||
CommBuffer,
|
CallbackInfo->CommunicationBuffer,
|
||||||
CommBufferSize
|
CallbackInfo->SourceSize
|
||||||
);
|
);
|
||||||
///
|
///
|
||||||
/// Save CPU Save States in case any of them was modified
|
/// Save CPU Save States in case any of them was modified
|
||||||
@ -466,7 +468,7 @@ RegisterCallback (
|
|||||||
///
|
///
|
||||||
/// Allocate buffer for callback thunk information
|
/// Allocate buffer for callback thunk information
|
||||||
///
|
///
|
||||||
Buffer = (CALLBACK_INFO *)AllocatePool (sizeof (CALLBACK_INFO));
|
Buffer = (CALLBACK_INFO *)AllocateZeroPool (sizeof (CALLBACK_INFO));
|
||||||
if (Buffer == NULL) {
|
if (Buffer == NULL) {
|
||||||
FunctionData->Status = EFI_OUT_OF_RESOURCES;
|
FunctionData->Status = EFI_OUT_OF_RESOURCES;
|
||||||
return;
|
return;
|
||||||
@ -552,14 +554,9 @@ HelperCommunicate (
|
|||||||
CallbackInfo = (CALLBACK_INFO *)Node;
|
CallbackInfo = (CALLBACK_INFO *)Node;
|
||||||
|
|
||||||
if (FunctionData->Args.Communicate.ImageHandle == CallbackInfo->SmmImageHandle) {
|
if (FunctionData->Args.Communicate.ImageHandle == CallbackInfo->SmmImageHandle) {
|
||||||
///
|
CallbackInfo->CommunicationBuffer = FunctionData->Args.Communicate.CommunicationBuffer;
|
||||||
/// Thunk into original Framwork SMI handler
|
CallbackInfo->SourceSize = FunctionData->Args.Communicate.SourceSize;
|
||||||
///
|
|
||||||
(CallbackInfo->CallbackAddress) (
|
|
||||||
CallbackInfo->SmmImageHandle,
|
|
||||||
FunctionData->Args.Communicate.CommunicationBuffer,
|
|
||||||
FunctionData->Args.Communicate.SourceSize
|
|
||||||
);
|
|
||||||
///
|
///
|
||||||
/// The message was successfully posted.
|
/// The message was successfully posted.
|
||||||
///
|
///
|
||||||
|
Loading…
x
Reference in New Issue
Block a user