#include "PchSmiDispatchSmm.h"\r
\r
typedef struct {\r
- UINT8 EosBitOffset;\r
- UINT8 ApmBitOffset;\r
- UINT32 SmiEosAddr;\r
- UINT32 SmiApmStsAddr;\r
+ UINT8 EosBitOffset;\r
+ UINT8 ApmBitOffset;\r
+ UINT32 SmiEosAddr;\r
+ UINT32 SmiApmStsAddr;\r
} SMM_PCH_REGISTER;\r
\r
-SMM_PCH_REGISTER mSmiPchReg;\r
+SMM_PCH_REGISTER mSmiPchReg;\r
\r
-EFI_SMM_CPU_PROTOCOL *mSmmCpuProtocol;\r
-LIST_ENTRY mSmmSwDispatch2Queue = INITIALIZE_LIST_HEAD_VARIABLE (mSmmSwDispatch2Queue);\r
+EFI_SMM_CPU_PROTOCOL *mSmmCpuProtocol;\r
+LIST_ENTRY mSmmSwDispatch2Queue = INITIALIZE_LIST_HEAD_VARIABLE (mSmmSwDispatch2Queue);\r
\r
/**\r
Find SmmSwDispatch2Context by SwSmiInputValue.\r
**/\r
EFI_SMM_SW_DISPATCH2_CONTEXT *\r
FindContextBySwSmiInputValue (\r
- IN UINTN SwSmiInputValue\r
+ IN UINTN SwSmiInputValue\r
)\r
{\r
- LIST_ENTRY *Node;\r
- EFI_SMM_SW_DISPATCH2_CONTEXT *Dispatch2Context;\r
+ LIST_ENTRY *Node;\r
+ EFI_SMM_SW_DISPATCH2_CONTEXT *Dispatch2Context;\r
\r
Node = mSmmSwDispatch2Queue.ForwardLink;\r
- for (; Node != &mSmmSwDispatch2Queue; Node = Node->ForwardLink) {\r
+ for ( ; Node != &mSmmSwDispatch2Queue; Node = Node->ForwardLink) {\r
Dispatch2Context = BASE_CR (Node, EFI_SMM_SW_DISPATCH2_CONTEXT, Link);\r
if (Dispatch2Context->SwSmiInputValue == SwSmiInputValue) {\r
return Dispatch2Context;\r
}\r
}\r
+\r
return NULL;\r
}\r
\r
**/\r
EFI_SMM_SW_DISPATCH2_CONTEXT *\r
FindContextByDispatchHandle (\r
- IN EFI_HANDLE DispatchHandle\r
+ IN EFI_HANDLE DispatchHandle\r
)\r
{\r
- LIST_ENTRY *Node;\r
- EFI_SMM_SW_DISPATCH2_CONTEXT *Dispatch2Context;\r
+ LIST_ENTRY *Node;\r
+ EFI_SMM_SW_DISPATCH2_CONTEXT *Dispatch2Context;\r
\r
Node = mSmmSwDispatch2Queue.ForwardLink;\r
- for (; Node != &mSmmSwDispatch2Queue; Node = Node->ForwardLink) {\r
+ for ( ; Node != &mSmmSwDispatch2Queue; Node = Node->ForwardLink) {\r
Dispatch2Context = BASE_CR (Node, EFI_SMM_SW_DISPATCH2_CONTEXT, Link);\r
if (Dispatch2Context->DispatchHandle == DispatchHandle) {\r
return Dispatch2Context;\r
}\r
}\r
+\r
return NULL;\r
}\r
\r
**/\r
EFI_STATUS\r
SmmSwDispatcher (\r
- IN EFI_HANDLE DispatchHandle,\r
- IN CONST VOID *RegisterContext,\r
- IN OUT VOID *CommBuffer,\r
- IN OUT UINTN *CommBufferSize\r
+ IN EFI_HANDLE DispatchHandle,\r
+ IN CONST VOID *RegisterContext,\r
+ IN OUT VOID *CommBuffer,\r
+ IN OUT UINTN *CommBufferSize\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_SMM_SW_CONTEXT SwContext;\r
- UINTN Index;\r
- EFI_SMM_SW_DISPATCH2_CONTEXT *Context;\r
- EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction;\r
- EFI_SMM_SW_REGISTER_CONTEXT DispatchContext;\r
- UINTN Size;\r
- EFI_SMM_SAVE_STATE_IO_INFO IoInfo;\r
+ EFI_STATUS Status;\r
+ EFI_SMM_SW_CONTEXT SwContext;\r
+ UINTN Index;\r
+ EFI_SMM_SW_DISPATCH2_CONTEXT *Context;\r
+ EFI_SMM_HANDLER_ENTRY_POINT2 DispatchFunction;\r
+ EFI_SMM_SW_REGISTER_CONTEXT DispatchContext;\r
+ UINTN Size;\r
+ EFI_SMM_SAVE_STATE_IO_INFO IoInfo;\r
\r
//\r
// Construct new context\r
for (Index = 0; Index < gSmst->NumberOfCpus; Index++) {\r
Status = mSmmCpuProtocol->ReadSaveState (\r
mSmmCpuProtocol,\r
- sizeof(IoInfo),\r
+ sizeof (IoInfo),\r
EFI_SMM_SAVE_STATE_REGISTER_IO,\r
Index,\r
&IoInfo\r
if (EFI_ERROR (Status)) {\r
continue;\r
}\r
+\r
if (IoInfo.IoPort == SMM_CONTROL_PORT) {\r
//\r
// Great! Find it.\r
Status = EFI_SUCCESS;\r
goto End;\r
}\r
+\r
DEBUG ((DEBUG_VERBOSE, "Prepare to call handler for 0x%x\n", SwContext.CommandPort));\r
\r
//\r
// Dispatch\r
//\r
DispatchContext.SwSmiInputValue = SwContext.CommandPort;\r
- Size = sizeof(SwContext);\r
- DispatchFunction = (EFI_SMM_HANDLER_ENTRY_POINT2)Context->DispatchFunction;\r
- Status = DispatchFunction (DispatchHandle, &DispatchContext, &SwContext, &Size);\r
+ Size = sizeof (SwContext);\r
+ DispatchFunction = (EFI_SMM_HANDLER_ENTRY_POINT2)Context->DispatchFunction;\r
+ Status = DispatchFunction (DispatchHandle, &DispatchContext, &SwContext, &Size);\r
\r
End:\r
//\r
//\r
IoOr32 (mSmiPchReg.SmiApmStsAddr, 1 << mSmiPchReg.ApmBitOffset);\r
\r
-\r
//\r
// Set EOS bit\r
//\r
return Status;\r
}\r
\r
-\r
/**\r
Check the SwSmiInputValue is already used\r
\r
**/\r
EFI_STATUS\r
SmiInputValueCheck (\r
- IN UINTN SwSmiInputValue\r
+ IN UINTN SwSmiInputValue\r
)\r
{\r
- LIST_ENTRY *Node;\r
- EFI_SMM_SW_DISPATCH2_CONTEXT *Dispatch2Context;\r
+ LIST_ENTRY *Node;\r
+ EFI_SMM_SW_DISPATCH2_CONTEXT *Dispatch2Context;\r
\r
Node = mSmmSwDispatch2Queue.ForwardLink;\r
- for (; Node != &mSmmSwDispatch2Queue; Node = Node->ForwardLink) {\r
+ for ( ; Node != &mSmmSwDispatch2Queue; Node = Node->ForwardLink) {\r
Dispatch2Context = BASE_CR (Node, EFI_SMM_SW_DISPATCH2_CONTEXT, Link);\r
if (Dispatch2Context->SwSmiInputValue == SwSmiInputValue) {\r
return EFI_INVALID_PARAMETER;\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Register a child SMI source dispatch function for the specified software SMI.\r
\r
OUT EFI_HANDLE *DispatchHandle\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN Index;\r
- EFI_SMM_SW_DISPATCH2_CONTEXT *Context;\r
+ EFI_STATUS Status;\r
+ UINTN Index;\r
+ EFI_SMM_SW_DISPATCH2_CONTEXT *Context;\r
\r
if (RegContext->SwSmiInputValue == (UINTN)-1) {\r
//\r
break;\r
}\r
}\r
+\r
if (RegContext->SwSmiInputValue == (UINTN)-1) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
//\r
// Register\r
//\r
- Status = gSmst->SmmAllocatePool (EfiRuntimeServicesData, sizeof(*Context), (VOID **)&Context);\r
+ Status = gSmst->SmmAllocatePool (EfiRuntimeServicesData, sizeof (*Context), (VOID **)&Context);\r
ASSERT_EFI_ERROR (Status);\r
if (EFI_ERROR (Status)) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- *DispatchHandle = (EFI_HANDLE )Context;\r
+ *DispatchHandle = (EFI_HANDLE)Context;\r
Context->Signature = SMI_SW_HANDLER_SIGNATURE;\r
Context->SwSmiInputValue = RegContext->SwSmiInputValue;\r
Context->DispatchFunction = (UINTN)DispatchFunction;\r
return Status;\r
}\r
\r
-\r
/**\r
Unregister a child SMI source dispatch function for the specified software SMI.\r
\r
IN EFI_HANDLE DispatchHandle\r
)\r
{\r
- EFI_SMM_SW_DISPATCH2_CONTEXT *Context;\r
+ EFI_SMM_SW_DISPATCH2_CONTEXT *Context;\r
\r
//\r
// Unregister\r
return EFI_SUCCESS;\r
}\r
\r
-\r
-EFI_SMM_SW_DISPATCH2_PROTOCOL gSmmSwDispatch2 = {\r
+EFI_SMM_SW_DISPATCH2_PROTOCOL gSmmSwDispatch2 = {\r
SmmSwDispatch2Register,\r
SmmSwDispatch2UnRegister,\r
MAXIMUM_SWI_VALUE\r
};\r
\r
-\r
/**\r
Get specified SMI register based on given register ID\r
\r
**/\r
PLD_GENERIC_REGISTER *\r
GetSmmCtrlRegById (\r
- IN PLD_SMM_REGISTERS *SmmRegister,\r
- IN UINT32 Id\r
+ IN PLD_SMM_REGISTERS *SmmRegister,\r
+ IN UINT32 Id\r
)\r
{\r
- UINT32 Index;\r
- PLD_GENERIC_REGISTER *PldReg;\r
+ UINT32 Index;\r
+ PLD_GENERIC_REGISTER *PldReg;\r
\r
PldReg = NULL;\r
for (Index = 0; Index < SmmRegister->Count; Index++) {\r
(PldReg->Address.Address == 0) ||\r
(PldReg->Address.RegisterBitWidth != 1) ||\r
(PldReg->Address.AddressSpaceId != EFI_ACPI_3_0_SYSTEM_IO) ||\r
- (PldReg->Value != 1)) {\r
+ (PldReg->Value != 1))\r
+ {\r
DEBUG ((DEBUG_INFO, "Unexpected SMM register.\n"));\r
DEBUG ((DEBUG_INFO, "AddressSpaceId= 0x%x\n", PldReg->Address.AddressSpaceId));\r
DEBUG ((DEBUG_INFO, "RegBitWidth = 0x%x\n", PldReg->Address.RegisterBitWidth));\r
DEBUG ((DEBUG_INFO, "RegBitOffset = 0x%x\n", PldReg->Address.RegisterBitOffset));\r
DEBUG ((DEBUG_INFO, "AccessSize = 0x%x\n", PldReg->Address.AccessSize));\r
- DEBUG ((DEBUG_INFO, "Address = 0x%lx\n",PldReg->Address.Address ));\r
+ DEBUG ((DEBUG_INFO, "Address = 0x%lx\n", PldReg->Address.Address));\r
return NULL;\r
}\r
\r
return PldReg;\r
}\r
\r
-\r
/**\r
Entry Point for this driver.\r
\r
EFI_STATUS\r
EFIAPI\r
PchSmiDispatchEntryPoint (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HANDLE DispatchHandle;\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
- PLD_SMM_REGISTERS *SmmRegister;\r
- PLD_GENERIC_REGISTER *SmiEosReg;\r
- PLD_GENERIC_REGISTER *SmiApmStsReg;\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE DispatchHandle;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
+ PLD_SMM_REGISTERS *SmmRegister;\r
+ PLD_GENERIC_REGISTER *SmiEosReg;\r
+ PLD_GENERIC_REGISTER *SmiApmStsReg;\r
\r
GuidHob = GetFirstGuidHob (&gSmmRegisterInfoGuid);\r
if (GuidHob == NULL) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
- SmmRegister = (PLD_SMM_REGISTERS *) GET_GUID_HOB_DATA(GuidHob);\r
- SmiEosReg = GetSmmCtrlRegById (SmmRegister, REGISTER_ID_SMI_EOS);\r
+ SmmRegister = (PLD_SMM_REGISTERS *)GET_GUID_HOB_DATA (GuidHob);\r
+ SmiEosReg = GetSmmCtrlRegById (SmmRegister, REGISTER_ID_SMI_EOS);\r
if (SmiEosReg == NULL) {\r
DEBUG ((DEBUG_ERROR, "SMI EOS reg not found.\n"));\r
return EFI_NOT_FOUND;\r
}\r
+\r
mSmiPchReg.SmiEosAddr = (UINT32)SmiEosReg->Address.Address;\r
mSmiPchReg.EosBitOffset = SmiEosReg->Address.RegisterBitOffset;\r
\r
DEBUG ((DEBUG_ERROR, "SMI APM status reg not found.\n"));\r
return EFI_NOT_FOUND;\r
}\r
+\r
mSmiPchReg.SmiApmStsAddr = (UINT32)SmiApmStsReg->Address.Address;\r
mSmiPchReg.ApmBitOffset = SmiApmStsReg->Address.RegisterBitOffset;\r
\r
// Publish PI SMM SwDispatch2 Protocol\r
//\r
ImageHandle = NULL;\r
- Status = gSmst->SmmInstallProtocolInterface (\r
- &ImageHandle,\r
- &gEfiSmmSwDispatch2ProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &gSmmSwDispatch2\r
- );\r
+ Status = gSmst->SmmInstallProtocolInterface (\r
+ &ImageHandle,\r
+ &gEfiSmmSwDispatch2ProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ &gSmmSwDispatch2\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
\r
return Status;\r
}\r
-\r