#include <AcpiCpuData.h>\r
#include <CpuHotPlugData.h>\r
\r
-#include <Register/Cpuid.h>\r
-#include <Register/Msr.h>\r
+#include <Register/Intel/Cpuid.h>\r
+#include <Register/Intel/Msr.h>\r
\r
#include "CpuService.h"\r
#include "SmmProfile.h"\r
UINTN Signature;\r
LIST_ENTRY Link;\r
\r
- SPIN_LOCK *ProcedureToken;\r
+ SPIN_LOCK *SpinLock;\r
+ volatile UINT32 RunningApCount;\r
+ BOOLEAN Used;\r
} PROCEDURE_TOKEN;\r
\r
#define PROCEDURE_TOKEN_FROM_LINK(a) CR (a, PROCEDURE_TOKEN, Link, PROCEDURE_TOKEN_SIGNATURE)\r
\r
+#define TOKEN_BUFFER_SIGNATURE SIGNATURE_32 ('T', 'K', 'B', 'S')\r
+\r
+typedef struct {\r
+ UINTN Signature;\r
+ LIST_ENTRY Link;\r
+\r
+ UINT8 *Buffer;\r
+} TOKEN_BUFFER;\r
+\r
+#define TOKEN_BUFFER_FROM_LINK(a) CR (a, TOKEN_BUFFER, Link, TOKEN_BUFFER_SIGNATURE)\r
+\r
//\r
// Private structure for the SMM CPU module that is stored in DXE Runtime memory\r
// Contains the SMM Configuration Protocols that is produced.\r
\r
PROCEDURE_WRAPPER *ApWrapperFunc;\r
LIST_ENTRY TokenList;\r
-\r
} SMM_CPU_PRIVATE_DATA;\r
\r
extern SMM_CPU_PRIVATE_DATA *gSmmCpuPrivate;\r
volatile VOID *Parameter;\r
volatile UINT32 *Run;\r
volatile BOOLEAN *Present;\r
- SPIN_LOCK *Token;\r
+ PROCEDURE_TOKEN *Token;\r
EFI_STATUS *Status;\r
} SMM_CPU_DATA_BLOCK;\r
\r
Note that timeout support is optional. Whether an implementation\r
supports this feature can be determined via the Attributes data\r
member.\r
- @param[in,out] CPUStatus This optional pointer may be used to get the status code returned\r
+ @param[in,out] CpuStatus This optional pointer may be used to get the status code returned\r
by Procedure when it completes execution on the target AP, or with\r
EFI_TIMEOUT if the Procedure fails to complete within the optional\r
timeout. The implementation will update this variable with\r
**/\r
EFI_STATUS\r
RegisterStartupProcedure (\r
- IN EFI_AP_PROCEDURE Procedure,\r
- IN VOID *ProcedureArguments OPTIONAL\r
+ IN EFI_AP_PROCEDURE Procedure,\r
+ IN OUT VOID *ProcedureArguments OPTIONAL\r
);\r
\r
/**\r
VOID\r
);\r
\r
+/**\r
+ Return whether access to non-SMRAM is restricted.\r
+\r
+ @retval TRUE Access to non-SMRAM is restricted.\r
+ @retval FALSE Access to non-SMRAM is not restricted.\r
+**/\r
+BOOLEAN\r
+IsRestrictedMemoryAccess (\r
+ VOID\r
+ );\r
+\r
#endif\r