diff --git a/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNC/QNCSmmPeriodicTimer.c b/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNC/QNCSmmPeriodicTimer.c index 1d1030c0ae..670ca91c5c 100644 --- a/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNC/QNCSmmPeriodicTimer.c +++ b/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNC/QNCSmmPeriodicTimer.c @@ -1,7 +1,7 @@ /** @file File to contain all the hardware specific stuff for the Periodical Timer dispatch protocol. -Copyright (c) 2013-2015 Intel Corporation. +Copyright (c) 2013-2016 Intel Corporation. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -177,7 +177,7 @@ PeriodicTimerGetContext ( // Update the elapsed time w/ the data from our tables // Record->CommBuffer.PeriodicTimer.ElapsedTime += TimerInterval->Interval; - *HwContext = Record->ChildContext; + CopyMem (HwContext, &Record->ChildContext, sizeof (QNC_SMM_CONTEXT)); } } diff --git a/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmm.h b/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmm.h index 892294fa71..797be16f79 100644 --- a/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmm.h +++ b/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmm.h @@ -1,7 +1,7 @@ /** @file Prototypes and defines for the QNC SMM Dispatcher. -Copyright (c) 2013-2015 Intel Corporation. +Copyright (c) 2013-2016 Intel Corporation. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -396,8 +396,9 @@ struct _DATABASE_RECORD { // Callback function // EFI_SMM_HANDLER_ENTRY_POINT2 Callback; - QNC_SMM_CONTEXT ChildContext; - QNC_SMM_BUFFER CommBuffer; + QNC_SMM_CONTEXT ChildContext; + VOID *CallbackContext; + QNC_SMM_BUFFER CommBuffer; UINTN BufferSize; // diff --git a/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmmCore.c b/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmmCore.c index ba8c721773..47834064ff 100644 --- a/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmmCore.c +++ b/QuarkSocPkg/QuarkNorthCluster/Smm/DxeSmm/QncSmmDispatcher/QNCSmmCore.c @@ -2,7 +2,7 @@ This driver is responsible for the registration of child drivers and the abstraction of the QNC SMI sources. -Copyright (c) 2013-2015 Intel Corporation. +Copyright (c) 2013-2016 Intel Corporation. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License @@ -351,7 +351,8 @@ Returns: // Gather information about the registration request // Record->Callback = DispatchFunction; - Record->ChildContext = *RegisterContext; + Record->CallbackContext = RegisterContext; + CopyMem (&Record->ChildContext, RegisterContext, sizeof (QNC_SMM_CONTEXT)); Qualified = QUALIFIED_PROTOCOL_FROM_GENERIC (This); @@ -407,7 +408,7 @@ Returns: // // Update ChildContext again as SwSmiInputValue has been changed // - Record->ChildContext = *RegisterContext; + CopyMem (&Record->ChildContext, RegisterContext, sizeof (QNC_SMM_CONTEXT)); } // @@ -688,7 +689,6 @@ QNCSmmCoreDispatcher ( // it supplied in registration. Simply pass back what it gave us. // ASSERT (RecordToExhaust->Callback != NULL); - Context = RecordToExhaust->ChildContext; ContextsMatch = TRUE; } @@ -710,7 +710,7 @@ QNCSmmCoreDispatcher ( RecordToExhaust->Callback ( (EFI_HANDLE) & RecordToExhaust->Link, - &Context, + RecordToExhaust->CallbackContext, CommunicationBuffer, &BufferSize );