///\r
/// Signature value that must be set to PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_SIGNATURE\r
///\r
- UINT32 Signature;\r
+ UINT32 Signature;\r
///\r
/// The link entry to be inserted to the list of periodic SMI handlers.\r
///\r
- LIST_ENTRY Link;\r
+ LIST_ENTRY Link;\r
///\r
/// The dispatch function to called to invoke an enabled periodic SMI handler.\r
///\r
- PERIODIC_SMI_LIBRARY_HANDLER DispatchFunction;\r
+ PERIODIC_SMI_LIBRARY_HANDLER DispatchFunction;\r
///\r
/// The context to pass into DispatchFunction\r
///\r
- VOID *Context;\r
+ VOID *Context;\r
///\r
/// The tick period in 100 ns units that DispatchFunction should be called.\r
///\r
- UINT64 TickPeriod;\r
+ UINT64 TickPeriod;\r
///\r
/// The Cpu number that is required to execute DispatchFunction. If Cpu is\r
/// set to PERIODIC_SMI_LIBRARY_ANY_CPU, then DispatchFunction may be executed\r
/// on any CPU.\r
///\r
- UINTN Cpu;\r
+ UINTN Cpu;\r
///\r
/// The size, in bytes, of the stack allocated for a periodic SMI handler.\r
/// This value must be a multiple of EFI_PAGE_SIZE.\r
///\r
- UINTN StackSize;\r
+ UINTN StackSize;\r
///\r
/// A pointer to the stack allocated using AllocatePages(). This field will\r
/// be NULL if StackSize is 0.\r
///\r
- VOID *Stack;\r
+ VOID *Stack;\r
///\r
/// Spin lock used to wait for an AP to complete the execution of a periodic SMI handler\r
///\r
- SPIN_LOCK DispatchLock;\r
+ SPIN_LOCK DispatchLock;\r
///\r
/// The rate in Hz of the performance counter that is used to measure the\r
/// amount of time that a periodic SMI handler executes.\r
///\r
- UINT64 PerfomanceCounterRate;\r
+ UINT64 PerfomanceCounterRate;\r
///\r
/// The start count value of the performance counter that is used to measure\r
/// the amount of time that a periodic SMI handler executes.\r
///\r
- UINT64 PerfomanceCounterStartValue;\r
+ UINT64 PerfomanceCounterStartValue;\r
///\r
/// The end count value of the performance counter that is used to measure\r
/// the amount of time that a periodic SMI handler executes.\r
///\r
- UINT64 PerfomanceCounterEndValue;\r
+ UINT64 PerfomanceCounterEndValue;\r
///\r
/// The context record passed into the Register() function of the SMM Periodic\r
/// Timer Dispatch Protocol when a periodic SMI handler is enabled.\r
///\r
- EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT RegisterContext;\r
+ EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT RegisterContext;\r
///\r
/// The handle returned from the Register() function of the SMM Periodic\r
/// Timer Dispatch Protocol when a periodic SMI handler is enabled.\r
///\r
- EFI_HANDLE DispatchHandle;\r
+ EFI_HANDLE DispatchHandle;\r
///\r
/// The total number of performance counter ticks that the periodic SMI handler\r
/// has been executing in its current invocation.\r
///\r
- UINT64 DispatchTotalTime;\r
+ UINT64 DispatchTotalTime;\r
///\r
/// The performance counter value that was captured the last time that the\r
/// periodic SMI handler called PeriodicSmiExecutionTime(). This allows the\r
/// time value returned by PeriodicSmiExecutionTime() to be accurate even when\r
/// the performance counter rolls over.\r
///\r
- UINT64 DispatchCheckPointTime;\r
+ UINT64 DispatchCheckPointTime;\r
///\r
/// Buffer used to save the context when control is transfer from this library\r
/// to an enabled periodic SMI handler. This saved context is used when the\r
/// periodic SMI handler exits or yields.\r
///\r
- BASE_LIBRARY_JUMP_BUFFER DispatchJumpBuffer;\r
+ BASE_LIBRARY_JUMP_BUFFER DispatchJumpBuffer;\r
///\r
/// Flag that is set to TRUE when a periodic SMI handler requests to yield\r
/// using PeriodicSmiYield(). When this flag IS TRUE, YieldJumpBuffer is\r
/// valid. When this flag is FALSE, YieldJumpBuffer is not valid.\r
///\r
- BOOLEAN YieldFlag;\r
+ BOOLEAN YieldFlag;\r
///\r
/// Buffer used to save the context when a periodic SMI handler requests to\r
/// yield using PeriodicSmiYield(). This context is used to resume the\r
/// execution of a periodic SMI handler the next time control is transferred\r
/// to the periodic SMI handler that yielded.\r
///\r
- BASE_LIBRARY_JUMP_BUFFER YieldJumpBuffer;\r
+ BASE_LIBRARY_JUMP_BUFFER YieldJumpBuffer;\r
///\r
/// The amount of time, in 100 ns units, that have elapsed since the last\r
/// time the periodic SMI handler was invoked.\r
///\r
- UINT64 ElapsedTime;\r
+ UINT64 ElapsedTime;\r
} PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT;\r
\r
/**\r
///\r
/// Pointer to the SMM Periodic Timer Dispatch Protocol that was located in the constructor.\r
///\r
-EFI_SMM_PERIODIC_TIMER_DISPATCH2_PROTOCOL *gSmmPeriodicTimerDispatch2 = NULL;\r
+EFI_SMM_PERIODIC_TIMER_DISPATCH2_PROTOCOL *gSmmPeriodicTimerDispatch2 = NULL;\r
\r
///\r
/// Pointer to a table of supported periodic SMI tick periods in 100 ns units\r
/// in based on the values returned from the SMM Periodic Timer Dispatch 2 Protocol\r
/// function GetNextShorterInterval().\r
///\r
-UINT64 *gSmiTickPeriodTable = NULL;\r
+UINT64 *gSmiTickPeriodTable = NULL;\r
\r
///\r
/// Linked list of free periodic SMI handlers that this library can use.\r
///\r
-LIST_ENTRY gFreePeriodicSmiLibraryHandlers =\r
- INITIALIZE_LIST_HEAD_VARIABLE (gFreePeriodicSmiLibraryHandlers);\r
+LIST_ENTRY gFreePeriodicSmiLibraryHandlers =\r
+ INITIALIZE_LIST_HEAD_VARIABLE (gFreePeriodicSmiLibraryHandlers);\r
\r
///\r
/// Linked list of periodic SMI handlers that this library is currently managing.\r
///\r
-LIST_ENTRY gPeriodicSmiLibraryHandlers =\r
- INITIALIZE_LIST_HEAD_VARIABLE (gPeriodicSmiLibraryHandlers);\r
+LIST_ENTRY gPeriodicSmiLibraryHandlers =\r
+ INITIALIZE_LIST_HEAD_VARIABLE (gPeriodicSmiLibraryHandlers);\r
\r
///\r
/// Pointer to the periodic SMI handler that is currently being executed.\r
/// Is set to NULL if no periodic SMI handler is currently being executed.\r
///\r
-PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *gActivePeriodicSmiLibraryHandler = NULL;\r
+PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *gActivePeriodicSmiLibraryHandler = NULL;\r
\r
/**\r
Internal worker function that returns a pointer to the\r
**/\r
PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *\r
LookupPeriodicSmiLibraryHandler (\r
- IN EFI_HANDLE DispatchHandle OPTIONAL\r
+ IN EFI_HANDLE DispatchHandle OPTIONAL\r
)\r
{\r
LIST_ENTRY *Link;\r
// Search the periodic SMI handler entries for a a matching DispatchHandle\r
//\r
for ( Link = GetFirstNode (&gPeriodicSmiLibraryHandlers)\r
- ; !IsNull (&gPeriodicSmiLibraryHandlers, Link)\r
- ; Link = GetNextNode (&gPeriodicSmiLibraryHandlers, Link)\r
- ) {\r
+ ; !IsNull (&gPeriodicSmiLibraryHandlers, Link)\r
+ ; Link = GetNextNode (&gPeriodicSmiLibraryHandlers, Link)\r
+ )\r
+ {\r
PeriodicSmiLibraryHandler = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_FROM_LINK (Link);\r
\r
if (PeriodicSmiLibraryHandler->DispatchHandle == DispatchHandle) {\r
**/\r
PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *\r
SetActivePeriodicSmiLibraryHandler (\r
- IN EFI_HANDLE DispatchHandle OPTIONAL\r
+ IN EFI_HANDLE DispatchHandle OPTIONAL\r
)\r
{\r
if (DispatchHandle == NULL) {\r
} else {\r
gActivePeriodicSmiLibraryHandler = LookupPeriodicSmiLibraryHandler (DispatchHandle);\r
}\r
+\r
return gActivePeriodicSmiLibraryHandler;\r
}\r
\r
**/\r
VOID\r
ReclaimPeriodicSmiLibraryHandler (\r
- PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *PeriodicSmiLibraryHandler\r
+ PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT *PeriodicSmiLibraryHandler\r
)\r
{\r
ASSERT (PeriodicSmiLibraryHandler->DispatchHandle == NULL);\r
);\r
PeriodicSmiLibraryHandler->Stack = NULL;\r
}\r
+\r
RemoveEntryList (&PeriodicSmiLibraryHandler->Link);\r
InsertHeadList (&gFreePeriodicSmiLibraryHandlers, &PeriodicSmiLibraryHandler->Link);\r
}\r
if (PeriodicSmiLibraryHandler == NULL) {\r
break;\r
}\r
+\r
PeriodicSmiLibraryHandler->Signature = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_SIGNATURE;\r
InsertHeadList (&gFreePeriodicSmiLibraryHandlers, &PeriodicSmiLibraryHandler->Link);\r
}\r
\r
- return (BOOLEAN) (Index > 0);\r
+ return (BOOLEAN)(Index > 0);\r
}\r
\r
/**\r
// Must never return\r
//\r
ASSERT (FALSE);\r
- CpuDeadLoop();\r
+ CpuDeadLoop ();\r
}\r
\r
/**\r
// periodic SMI handler was dispatched.\r
//\r
PeriodicSmiLibraryHandler->DispatchFunction (\r
- PeriodicSmiLibraryHandler->Context,\r
- PeriodicSmiLibraryHandler->ElapsedTime\r
- );\r
+ PeriodicSmiLibraryHandler->Context,\r
+ PeriodicSmiLibraryHandler->ElapsedTime\r
+ );\r
\r
//\r
// If this DispatchFunction() returns, then unconditionally call PeriodicSmiExit()\r
// calculated.\r
//\r
PeriodicSmiLibraryHandler->DispatchTotalTime = 0;\r
- PeriodicSmiLibraryHandler->DispatchCheckPointTime = GetPerformanceCounter();\r
+ PeriodicSmiLibraryHandler->DispatchCheckPointTime = GetPerformanceCounter ();\r
\r
if (PeriodicSmiLibraryHandler->YieldFlag) {\r
//\r
// elapsed since the previous time this periodic SMI handler was dispatched.\r
//\r
PeriodicSmiLibraryHandler->DispatchFunction (\r
- PeriodicSmiLibraryHandler->Context,\r
- PeriodicSmiLibraryHandler->ElapsedTime\r
- );\r
+ PeriodicSmiLibraryHandler->Context,\r
+ PeriodicSmiLibraryHandler->ElapsedTime\r
+ );\r
\r
//\r
// If this DispatchFunction() returns, then unconditionally call PeriodicSmiExit()\r
// Must never return\r
//\r
ASSERT (FALSE);\r
- CpuDeadLoop();\r
+ CpuDeadLoop ();\r
}\r
\r
/**\r
//\r
PeriodicSmiLibraryHandler->ElapsedTime = 0;\r
if (CommBuffer != NULL) {\r
- TimerContext = (EFI_SMM_PERIODIC_TIMER_CONTEXT *)CommBuffer;\r
+ TimerContext = (EFI_SMM_PERIODIC_TIMER_CONTEXT *)CommBuffer;\r
PeriodicSmiLibraryHandler->ElapsedTime = TimerContext->ElapsedTime;\r
}\r
\r
// Dispatch the periodic SMI handler\r
//\r
if ((PeriodicSmiLibraryHandler->Cpu == PERIODIC_SMI_LIBRARY_ANY_CPU) ||\r
- (PeriodicSmiLibraryHandler->Cpu == gSmst->CurrentlyExecutingCpu) ) {\r
+ (PeriodicSmiLibraryHandler->Cpu == gSmst->CurrentlyExecutingCpu))\r
+ {\r
//\r
// Dispatch on the currently execution CPU if the CPU specified in PeriodicSmiEnable()\r
// was PERIODIC_SMI_LIBRARY_ANY_CPU or the currently executing CPU matches the CPU\r
break;\r
}\r
}\r
+\r
if (gSmiTickPeriodTable[Index] == 0) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
- if (Cpu != PERIODIC_SMI_LIBRARY_ANY_CPU && Cpu >= gSmst->NumberOfCpus) {\r
+ if ((Cpu != PERIODIC_SMI_LIBRARY_ANY_CPU) && (Cpu >= gSmst->NumberOfCpus)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// Find a free periodic SMI handler entry\r
//\r
- PeriodicSmiLibraryHandler = FindFreePeriodicSmiLibraryHandler();\r
+ PeriodicSmiLibraryHandler = FindFreePeriodicSmiLibraryHandler ();\r
if (PeriodicSmiLibraryHandler == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
if (PeriodicSmiLibraryHandler->Stack == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
ZeroMem (PeriodicSmiLibraryHandler->Stack, PeriodicSmiLibraryHandler->StackSize);\r
} else {\r
PeriodicSmiLibraryHandler->Stack = NULL;\r
}\r
+\r
InitializeSpinLock (&PeriodicSmiLibraryHandler->DispatchLock);\r
PeriodicSmiLibraryHandler->PerfomanceCounterRate = GetPerformanceCounterProperties (\r
&PeriodicSmiLibraryHandler->PerfomanceCounterStartValue,\r
);\r
PeriodicSmiLibraryHandler->RegisterContext.Period = TickPeriod;\r
PeriodicSmiLibraryHandler->RegisterContext.SmiTickInterval = TickPeriod;\r
- Status = gSmmPeriodicTimerDispatch2->Register (\r
- gSmmPeriodicTimerDispatch2,\r
- PeriodicSmiDispatchFunction,\r
- &PeriodicSmiLibraryHandler->RegisterContext,\r
- &PeriodicSmiLibraryHandler->DispatchHandle\r
- );\r
+ Status = gSmmPeriodicTimerDispatch2->Register (\r
+ gSmmPeriodicTimerDispatch2,\r
+ PeriodicSmiDispatchFunction,\r
+ &PeriodicSmiLibraryHandler->RegisterContext,\r
+ &PeriodicSmiLibraryHandler->DispatchHandle\r
+ );\r
if (EFI_ERROR (Status)) {\r
PeriodicSmiLibraryHandler->DispatchHandle = NULL;\r
ReclaimPeriodicSmiLibraryHandler (PeriodicSmiLibraryHandler);\r
if (DispatchHandle != NULL) {\r
*DispatchHandle = PeriodicSmiLibraryHandler->DispatchHandle;\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
\r
// Dispatch 2 Protocol supports.\r
//\r
SmiTickInterval = NULL;\r
- Count = 0;\r
+ Count = 0;\r
do {\r
Status = gSmmPeriodicTimerDispatch2->GetNextShorterInterval (\r
gSmmPeriodicTimerDispatch2,\r
// Fill in the table of supported periodic SMI tick periods.\r
//\r
SmiTickInterval = NULL;\r
- Count = 0;\r
+ Count = 0;\r
do {\r
gSmiTickPeriodTable[Count] = 0;\r
- Status = gSmmPeriodicTimerDispatch2->GetNextShorterInterval (\r
- gSmmPeriodicTimerDispatch2,\r
- &SmiTickInterval\r
- );\r
+ Status = gSmmPeriodicTimerDispatch2->GetNextShorterInterval (\r
+ gSmmPeriodicTimerDispatch2,\r
+ &SmiTickInterval\r
+ );\r
if (SmiTickInterval != NULL) {\r
gSmiTickPeriodTable[Count] = *SmiTickInterval;\r
}\r
+\r
Count++;\r
} while (SmiTickInterval != NULL);\r
\r
//\r
for (Link = GetFirstNode (&gPeriodicSmiLibraryHandlers); !IsNull (&gPeriodicSmiLibraryHandlers, Link);) {\r
PeriodicSmiLibraryHandler = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_FROM_LINK (Link);\r
- Link = GetNextNode (&gPeriodicSmiLibraryHandlers, Link);\r
+ Link = GetNextNode (&gPeriodicSmiLibraryHandlers, Link);\r
PeriodicSmiDisable (PeriodicSmiLibraryHandler->DispatchHandle);\r
}\r
\r
//\r
for (Link = GetFirstNode (&gFreePeriodicSmiLibraryHandlers); !IsNull (&gFreePeriodicSmiLibraryHandlers, Link);) {\r
PeriodicSmiLibraryHandler = PERIODIC_SMI_LIBRARY_HANDLER_CONTEXT_FROM_LINK (Link);\r
- Link = RemoveEntryList (Link);\r
+ Link = RemoveEntryList (Link);\r
FreePool (PeriodicSmiLibraryHandler);\r
}\r
\r