mirror of https://github.com/acidanthera/audk.git
BaseTools/AutoGen: auto generate MM template APIs and dependencies.
This patch adds changes to auto generate MM_CORE_STANDALONE and MM_STANDALONE Entry Point templates. Also, it adds changes to help auto generate dependency expressions for MM_STANDALONE modules. PI Specification v1.5 specifies Management Mode System Table (MMST) which is a collection of common services for managing MMRAM allocation and providing basic I/O services. MMST is similar to the UEFI System Table. (Currently, EFI_SMM_SYSTEM_TABLE2 defines Management Mode System Table) Some of auto generated MM_CORE_STANDALONE and MM_STANDALONE template APIs use MMST as parameter. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiewen Yao <jiewen.yao@intel.com> Signed-off-by: Supreeth Venkatesh <supreeth.venkatesh@arm.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
87d9a2b316
commit
5a9c3e3e58
|
@ -237,6 +237,100 @@ ProcessModuleEntryPointList (
|
||||||
${END}
|
${END}
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
## MM_CORE_STANDALONE Entry Point Templates
|
||||||
|
gMmCoreStandaloneEntryPointPrototype = TemplateString("""
|
||||||
|
${BEGIN}
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
${Function} (
|
||||||
|
IN VOID *HobStart
|
||||||
|
);
|
||||||
|
${END}
|
||||||
|
""")
|
||||||
|
|
||||||
|
gMmCoreStandaloneEntryPointString = TemplateString("""
|
||||||
|
${BEGIN}
|
||||||
|
const UINT32 _gMmRevision = ${PiSpecVersion};
|
||||||
|
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
ProcessModuleEntryPointList (
|
||||||
|
IN VOID *HobStart
|
||||||
|
)
|
||||||
|
{
|
||||||
|
${Function} (HobStart);
|
||||||
|
}
|
||||||
|
${END}
|
||||||
|
""")
|
||||||
|
|
||||||
|
## MM_STANDALONE Entry Point Templates
|
||||||
|
gMmStandaloneEntryPointPrototype = TemplateString("""
|
||||||
|
${BEGIN}
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
${Function} (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SMM_SYSTEM_TABLE2 *MmSystemTable
|
||||||
|
);
|
||||||
|
${END}
|
||||||
|
""")
|
||||||
|
|
||||||
|
gMmStandaloneEntryPointString = [
|
||||||
|
TemplateString("""
|
||||||
|
GLOBAL_REMOVE_IF_UNREFERENCED const UINT32 _gMmRevision = ${PiSpecVersion};
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ProcessModuleEntryPointList (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SMM_SYSTEM_TABLE2 *MmSystemTable
|
||||||
|
)
|
||||||
|
|
||||||
|
{
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
"""),
|
||||||
|
TemplateString("""
|
||||||
|
GLOBAL_REMOVE_IF_UNREFERENCED const UINT32 _gMmRevision = ${PiSpecVersion};
|
||||||
|
${BEGIN}
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ProcessModuleEntryPointList (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SMM_SYSTEM_TABLE2 *MmSystemTable
|
||||||
|
)
|
||||||
|
|
||||||
|
{
|
||||||
|
return ${Function} (ImageHandle, MmSystemTable);
|
||||||
|
}
|
||||||
|
${END}
|
||||||
|
"""),
|
||||||
|
TemplateString("""
|
||||||
|
GLOBAL_REMOVE_IF_UNREFERENCED const UINT32 _gMmRevision = ${PiSpecVersion};
|
||||||
|
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
ProcessModuleEntryPointList (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SMM_SYSTEM_TABLE2 *MmSystemTable
|
||||||
|
)
|
||||||
|
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_STATUS CombinedStatus;
|
||||||
|
|
||||||
|
CombinedStatus = EFI_LOAD_ERROR;
|
||||||
|
${BEGIN}
|
||||||
|
Status = ${Function} (ImageHandle, MmSystemTable);
|
||||||
|
if (!EFI_ERROR (Status) || EFI_ERROR (CombinedStatus)) {
|
||||||
|
CombinedStatus = Status;
|
||||||
|
}
|
||||||
|
${END}
|
||||||
|
return CombinedStatus;
|
||||||
|
}
|
||||||
|
""")
|
||||||
|
]
|
||||||
|
|
||||||
## DXE SMM Entry Point Templates
|
## DXE SMM Entry Point Templates
|
||||||
gDxeSmmEntryPointPrototype = TemplateString("""
|
gDxeSmmEntryPointPrototype = TemplateString("""
|
||||||
${BEGIN}
|
${BEGIN}
|
||||||
|
@ -580,6 +674,15 @@ ${Function} (
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
);${END}
|
);${END}
|
||||||
"""),
|
"""),
|
||||||
|
|
||||||
|
'MM' : TemplateString("""${BEGIN}
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
${Function} (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SMM_SYSTEM_TABLE2 *MmSystemTable
|
||||||
|
);${END}
|
||||||
|
"""),
|
||||||
}
|
}
|
||||||
|
|
||||||
gLibraryStructorCall = {
|
gLibraryStructorCall = {
|
||||||
|
@ -597,6 +700,11 @@ gLibraryStructorCall = {
|
||||||
Status = ${Function} (ImageHandle, SystemTable);
|
Status = ${Function} (ImageHandle, SystemTable);
|
||||||
ASSERT_EFI_ERROR (Status);${END}
|
ASSERT_EFI_ERROR (Status);${END}
|
||||||
"""),
|
"""),
|
||||||
|
|
||||||
|
'MM' : TemplateString("""${BEGIN}
|
||||||
|
Status = ${Function} (ImageHandle, MmSystemTable);
|
||||||
|
ASSERT_EFI_ERROR (Status);${END}
|
||||||
|
"""),
|
||||||
}
|
}
|
||||||
|
|
||||||
## Library Constructor and Destructor Templates
|
## Library Constructor and Destructor Templates
|
||||||
|
@ -644,6 +752,21 @@ ${BEGIN} EFI_STATUS Status;
|
||||||
${FunctionCall}${END}
|
${FunctionCall}${END}
|
||||||
}
|
}
|
||||||
"""),
|
"""),
|
||||||
|
|
||||||
|
'MM' : TemplateString("""
|
||||||
|
${BEGIN}${FunctionPrototype}${END}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
ProcessLibrary${Type}List (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SMM_SYSTEM_TABLE2 *MmSystemTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
${BEGIN} EFI_STATUS Status;
|
||||||
|
${FunctionCall}${END}
|
||||||
|
}
|
||||||
|
"""),
|
||||||
}
|
}
|
||||||
|
|
||||||
gBasicHeaderFile = "Base.h"
|
gBasicHeaderFile = "Base.h"
|
||||||
|
@ -661,6 +784,8 @@ gModuleTypeHeaderFile = {
|
||||||
"UEFI_DRIVER" : ["Uefi.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/UefiBootServicesTableLib.h", "Library/UefiDriverEntryPoint.h"],
|
"UEFI_DRIVER" : ["Uefi.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/UefiBootServicesTableLib.h", "Library/UefiDriverEntryPoint.h"],
|
||||||
"UEFI_APPLICATION" : ["Uefi.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/UefiBootServicesTableLib.h", "Library/UefiApplicationEntryPoint.h"],
|
"UEFI_APPLICATION" : ["Uefi.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/UefiBootServicesTableLib.h", "Library/UefiApplicationEntryPoint.h"],
|
||||||
"SMM_CORE" : ["PiDxe.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/UefiDriverEntryPoint.h"],
|
"SMM_CORE" : ["PiDxe.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/UefiDriverEntryPoint.h"],
|
||||||
|
"MM_STANDALONE" : ["PiSmm.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/SmmDriverStandaloneEntryPoint.h"],
|
||||||
|
"MM_CORE_STANDALONE" : ["PiSmm.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/SmmCoreStandaloneEntryPoint.h"],
|
||||||
"USER_DEFINED" : [gBasicHeaderFile]
|
"USER_DEFINED" : [gBasicHeaderFile]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1266,6 +1391,9 @@ def CreateLibraryConstructorCode(Info, AutoGenC, AutoGenH):
|
||||||
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']:
|
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']:
|
||||||
ConstructorPrototypeString.Append(gLibraryStructorPrototype['DXE'].Replace(Dict))
|
ConstructorPrototypeString.Append(gLibraryStructorPrototype['DXE'].Replace(Dict))
|
||||||
ConstructorCallingString.Append(gLibraryStructorCall['DXE'].Replace(Dict))
|
ConstructorCallingString.Append(gLibraryStructorCall['DXE'].Replace(Dict))
|
||||||
|
elif Lib.ModuleType in ['MM_STANDALONE','MM_CORE_STANDALONE']:
|
||||||
|
ConstructorPrototypeString.Append(gLibraryStructorPrototype['MM'].Replace(Dict))
|
||||||
|
ConstructorCallingString.Append(gLibraryStructorCall['MM'].Replace(Dict))
|
||||||
|
|
||||||
if str(ConstructorPrototypeString) == '':
|
if str(ConstructorPrototypeString) == '':
|
||||||
ConstructorPrototypeList = []
|
ConstructorPrototypeList = []
|
||||||
|
@ -1291,6 +1419,8 @@ def CreateLibraryConstructorCode(Info, AutoGenC, AutoGenH):
|
||||||
elif Info.ModuleType in ['DXE_CORE','DXE_DRIVER','DXE_SMM_DRIVER','DXE_RUNTIME_DRIVER',
|
elif Info.ModuleType in ['DXE_CORE','DXE_DRIVER','DXE_SMM_DRIVER','DXE_RUNTIME_DRIVER',
|
||||||
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']:
|
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']:
|
||||||
AutoGenC.Append(gLibraryString['DXE'].Replace(Dict))
|
AutoGenC.Append(gLibraryString['DXE'].Replace(Dict))
|
||||||
|
elif Info.ModuleType in ['MM_STANDALONE','MM_CORE_STANDALONE']:
|
||||||
|
AutoGenC.Append(gLibraryString['MM'].Replace(Dict))
|
||||||
|
|
||||||
## Create code for library destructor
|
## Create code for library destructor
|
||||||
#
|
#
|
||||||
|
@ -1323,6 +1453,9 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH):
|
||||||
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION', 'SMM_CORE']:
|
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION', 'SMM_CORE']:
|
||||||
DestructorPrototypeString.Append(gLibraryStructorPrototype['DXE'].Replace(Dict))
|
DestructorPrototypeString.Append(gLibraryStructorPrototype['DXE'].Replace(Dict))
|
||||||
DestructorCallingString.Append(gLibraryStructorCall['DXE'].Replace(Dict))
|
DestructorCallingString.Append(gLibraryStructorCall['DXE'].Replace(Dict))
|
||||||
|
elif Lib.ModuleType in ['MM_STANDALONE','MM_CORE_STANDALONE']:
|
||||||
|
DestructorPrototypeString.Append(gLibraryStructorPrototype['MM'].Replace(Dict))
|
||||||
|
DestructorCallingString.Append(gLibraryStructorCall['MM'].Replace(Dict))
|
||||||
|
|
||||||
if str(DestructorPrototypeString) == '':
|
if str(DestructorPrototypeString) == '':
|
||||||
DestructorPrototypeList = []
|
DestructorPrototypeList = []
|
||||||
|
@ -1348,6 +1481,8 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH):
|
||||||
elif Info.ModuleType in ['DXE_CORE','DXE_DRIVER','DXE_SMM_DRIVER','DXE_RUNTIME_DRIVER',
|
elif Info.ModuleType in ['DXE_CORE','DXE_DRIVER','DXE_SMM_DRIVER','DXE_RUNTIME_DRIVER',
|
||||||
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']:
|
'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']:
|
||||||
AutoGenC.Append(gLibraryString['DXE'].Replace(Dict))
|
AutoGenC.Append(gLibraryString['DXE'].Replace(Dict))
|
||||||
|
elif Info.ModuleType in ['MM_STANDALONE','MM_CORE_STANDALONE']:
|
||||||
|
AutoGenC.Append(gLibraryString['MM'].Replace(Dict))
|
||||||
|
|
||||||
|
|
||||||
## Create code for ModuleEntryPoint
|
## Create code for ModuleEntryPoint
|
||||||
|
@ -1377,7 +1512,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
|
||||||
'UefiSpecVersion': UefiSpecVersion + 'U'
|
'UefiSpecVersion': UefiSpecVersion + 'U'
|
||||||
}
|
}
|
||||||
|
|
||||||
if Info.ModuleType in ['PEI_CORE', 'DXE_CORE', 'SMM_CORE']:
|
if Info.ModuleType in ['PEI_CORE', 'DXE_CORE', 'SMM_CORE', 'MM_CORE_STANDALONE']:
|
||||||
if Info.SourceFileList <> None and Info.SourceFileList <> []:
|
if Info.SourceFileList <> None and Info.SourceFileList <> []:
|
||||||
if NumEntryPoints != 1:
|
if NumEntryPoints != 1:
|
||||||
EdkLogger.error(
|
EdkLogger.error(
|
||||||
|
@ -1396,6 +1531,9 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
|
||||||
elif Info.ModuleType == 'SMM_CORE':
|
elif Info.ModuleType == 'SMM_CORE':
|
||||||
AutoGenC.Append(gSmmCoreEntryPointString.Replace(Dict))
|
AutoGenC.Append(gSmmCoreEntryPointString.Replace(Dict))
|
||||||
AutoGenH.Append(gSmmCoreEntryPointPrototype.Replace(Dict))
|
AutoGenH.Append(gSmmCoreEntryPointPrototype.Replace(Dict))
|
||||||
|
elif Info.ModuleType == 'MM_CORE_STANDALONE':
|
||||||
|
AutoGenC.Append(gMmCoreStandaloneEntryPointString.Replace(Dict))
|
||||||
|
AutoGenH.Append(gMmCoreStandaloneEntryPointPrototype.Replace(Dict))
|
||||||
elif Info.ModuleType == 'PEIM':
|
elif Info.ModuleType == 'PEIM':
|
||||||
if NumEntryPoints < 2:
|
if NumEntryPoints < 2:
|
||||||
AutoGenC.Append(gPeimEntryPointString[NumEntryPoints].Replace(Dict))
|
AutoGenC.Append(gPeimEntryPointString[NumEntryPoints].Replace(Dict))
|
||||||
|
@ -1414,6 +1552,12 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH):
|
||||||
else:
|
else:
|
||||||
AutoGenC.Append(gDxeSmmEntryPointString[1].Replace(Dict))
|
AutoGenC.Append(gDxeSmmEntryPointString[1].Replace(Dict))
|
||||||
AutoGenH.Append(gDxeSmmEntryPointPrototype.Replace(Dict))
|
AutoGenH.Append(gDxeSmmEntryPointPrototype.Replace(Dict))
|
||||||
|
elif Info.ModuleType == 'MM_STANDALONE':
|
||||||
|
if NumEntryPoints < 2:
|
||||||
|
AutoGenC.Append(gMmStandaloneEntryPointString[NumEntryPoints].Replace(Dict))
|
||||||
|
else:
|
||||||
|
AutoGenC.Append(gMmStandaloneEntryPointString[2].Replace(Dict))
|
||||||
|
AutoGenH.Append(gMmStandaloneEntryPointPrototype.Replace(Dict))
|
||||||
elif Info.ModuleType == 'UEFI_APPLICATION':
|
elif Info.ModuleType == 'UEFI_APPLICATION':
|
||||||
if NumEntryPoints < 2:
|
if NumEntryPoints < 2:
|
||||||
AutoGenC.Append(gUefiApplicationEntryPointString[NumEntryPoints].Replace(Dict))
|
AutoGenC.Append(gUefiApplicationEntryPointString[NumEntryPoints].Replace(Dict))
|
||||||
|
|
|
@ -42,6 +42,8 @@ gType2Phase = {
|
||||||
"UEFI_DRIVER" : "DXE",
|
"UEFI_DRIVER" : "DXE",
|
||||||
"UEFI_APPLICATION" : "DXE",
|
"UEFI_APPLICATION" : "DXE",
|
||||||
"SMM_CORE" : "DXE",
|
"SMM_CORE" : "DXE",
|
||||||
|
"MM_STANDALONE" : "MM",
|
||||||
|
"MM_CORE_STANDALONE" : "MM",
|
||||||
}
|
}
|
||||||
|
|
||||||
## Convert dependency expression string into EFI internal representation
|
## Convert dependency expression string into EFI internal representation
|
||||||
|
@ -98,6 +100,19 @@ class DependencyExpression:
|
||||||
"FALSE" : 0x07,
|
"FALSE" : 0x07,
|
||||||
"END" : 0x08,
|
"END" : 0x08,
|
||||||
"SOR" : 0x09
|
"SOR" : 0x09
|
||||||
|
},
|
||||||
|
|
||||||
|
"MM" : {
|
||||||
|
"BEFORE": 0x00,
|
||||||
|
"AFTER" : 0x01,
|
||||||
|
"PUSH" : 0x02,
|
||||||
|
"AND" : 0x03,
|
||||||
|
"OR" : 0x04,
|
||||||
|
"NOT" : 0x05,
|
||||||
|
"TRUE" : 0x06,
|
||||||
|
"FALSE" : 0x07,
|
||||||
|
"END" : 0x08,
|
||||||
|
"SOR" : 0x09
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +304,7 @@ class DependencyExpression:
|
||||||
return
|
return
|
||||||
|
|
||||||
# don't generate depex if all operands are architecture protocols
|
# don't generate depex if all operands are architecture protocols
|
||||||
if self.ModuleType in ['UEFI_DRIVER', 'DXE_DRIVER', 'DXE_RUNTIME_DRIVER', 'DXE_SAL_DRIVER', 'DXE_SMM_DRIVER'] and \
|
if self.ModuleType in ['UEFI_DRIVER', 'DXE_DRIVER', 'DXE_RUNTIME_DRIVER', 'DXE_SAL_DRIVER', 'DXE_SMM_DRIVER', 'MM_STANDALONE'] and \
|
||||||
Op == 'AND' and \
|
Op == 'AND' and \
|
||||||
self.ArchProtocols == set([GuidStructureStringToGuidString(Guid) for Guid in AllOperand]):
|
self.ArchProtocols == set([GuidStructureStringToGuidString(Guid) for Guid in AllOperand]):
|
||||||
self.PostfixNotation = []
|
self.PostfixNotation = []
|
||||||
|
|
Loading…
Reference in New Issue