From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.101.70]) by ml01.01.org (Postfix) with ESMTP id 652DC21AE30D1 for ; Mon, 5 Jun 2017 14:43:39 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8CAE6344; Mon, 5 Jun 2017 14:44:45 -0700 (PDT) Received: from u201365.usa.Arm.com (bc-c3-3-14.eu.iaas.arm.com [10.6.43.238]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7527D3F25D; Mon, 5 Jun 2017 14:44:44 -0700 (PDT) From: Supreeth Venkatesh To: edk2-devel@lists.01.org Cc: leif.lindholm@arm.com, ard.biesheuvel@linaro.org, achin.gupta@arm.com, supreeth.venkatesh@arm.com, Jiewen Yao Date: Mon, 5 Jun 2017 22:43:47 +0100 Message-Id: <1496699034-4186-4-git-send-email-supreeth.venkatesh@arm.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1496699034-4186-1-git-send-email-supreeth.venkatesh@arm.com> References: <1496699034-4186-1-git-send-email-supreeth.venkatesh@arm.com> Subject: [PATCH 03/10] BaseTools: Tools change to support PI v1.5 Specification. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 05 Jun 2017 21:43:39 -0000 This patch adds changes to auto generate SMM_CORE_STANDALONE and SMM_STANDALONE Entry Point templates. Also, it adds changes to help auto generate dependency expressions for SMM_STANDALONE modules. PI Specification v1.6 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. Some of auto generated SMM_CORE_STANDALONE and SMM_STANDALONE template APIs use MMST as parameter. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiewen Yao Signed-off-by: Supreeth Venkatesh --- BaseTools/Source/Python/AutoGen/GenC.py | 148 +++++++++++++++++++++++++++- BaseTools/Source/Python/AutoGen/GenDepex.py | 17 +++- 2 files changed, 162 insertions(+), 3 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py index 67aaef7..d42dd45 100644 --- a/BaseTools/Source/Python/AutoGen/GenC.py +++ b/BaseTools/Source/Python/AutoGen/GenC.py @@ -237,6 +237,100 @@ ProcessModuleEntryPointList ( ${END} """) +## SMM_CORE_STANDALONE Entry Point Templates +gSmmCoreStandaloneEntryPointPrototype = TemplateString(""" +${BEGIN} +EFI_STATUS +EFIAPI +${Function} ( + IN VOID *HobStart + ); +${END} +""") + +gSmmCoreStandaloneEntryPointString = TemplateString(""" +${BEGIN} +const UINT32 _gSmmRevision = ${PiSpecVersion}; + +VOID +EFIAPI +ProcessModuleEntryPointList ( + IN VOID *HobStart + ) +{ + ${Function} (HobStart); +} +${END} +""") + +## SMM_STANDALONE Entry Point Templates +gSmmStandaloneEntryPointPrototype = TemplateString(""" +${BEGIN} +EFI_STATUS +EFIAPI +${Function} ( + IN EFI_HANDLE ImageHandle, + IN EFI_SMM_SYSTEM_TABLE2 *SmmSystemTable + ); +${END} +""") + +gSmmStandaloneEntryPointString = [ +TemplateString(""" +GLOBAL_REMOVE_IF_UNREFERENCED const UINT32 _gSmmRevision = ${PiSpecVersion}; + +EFI_STATUS +EFIAPI +ProcessModuleEntryPointList ( + IN EFI_HANDLE ImageHandle, + IN EFI_SMM_SYSTEM_TABLE2 *SmmSystemTable + ) + +{ + return EFI_SUCCESS; +} +"""), +TemplateString(""" +GLOBAL_REMOVE_IF_UNREFERENCED const UINT32 _gSmmRevision = ${PiSpecVersion}; +${BEGIN} +EFI_STATUS +EFIAPI +ProcessModuleEntryPointList ( + IN EFI_HANDLE ImageHandle, + IN EFI_SMM_SYSTEM_TABLE2 *SmmSystemTable + ) + +{ + return ${Function} (ImageHandle, SmmSystemTable); +} +${END} +"""), +TemplateString(""" +GLOBAL_REMOVE_IF_UNREFERENCED const UINT32 _gSmmRevision = ${PiSpecVersion}; + +EFI_STATUS +EFIAPI +ProcessModuleEntryPointList ( + IN EFI_HANDLE ImageHandle, + IN EFI_SMM_SYSTEM_TABLE2 *SmmSystemTable + ) + +{ + EFI_STATUS Status; + EFI_STATUS CombinedStatus; + + CombinedStatus = EFI_LOAD_ERROR; +${BEGIN} + Status = ${Function} (ImageHandle, SmmSystemTable); + if (!EFI_ERROR (Status) || EFI_ERROR (CombinedStatus)) { + CombinedStatus = Status; + } +${END} + return CombinedStatus; +} +""") +] + ## DXE SMM Entry Point Templates gDxeSmmEntryPointPrototype = TemplateString(""" ${BEGIN} @@ -580,6 +674,15 @@ ${Function} ( IN EFI_SYSTEM_TABLE *SystemTable );${END} """), + +'SMM' : TemplateString("""${BEGIN} +EFI_STATUS +EFIAPI +${Function} ( + IN EFI_HANDLE ImageHandle, + IN EFI_SMM_SYSTEM_TABLE2 *SmmSystemTable + );${END} +"""), } gLibraryStructorCall = { @@ -597,6 +700,11 @@ gLibraryStructorCall = { Status = ${Function} (ImageHandle, SystemTable); ASSERT_EFI_ERROR (Status);${END} """), + +'SMM' : TemplateString("""${BEGIN} + Status = ${Function} (ImageHandle, SmmSystemTable); + ASSERT_EFI_ERROR (Status);${END} +"""), } ## Library Constructor and Destructor Templates @@ -644,6 +752,21 @@ ${BEGIN} EFI_STATUS Status; ${FunctionCall}${END} } """), + +'SMM' : TemplateString(""" +${BEGIN}${FunctionPrototype}${END} + +VOID +EFIAPI +ProcessLibrary${Type}List ( + IN EFI_HANDLE ImageHandle, + IN EFI_SMM_SYSTEM_TABLE2 *SmmSystemTable + ) +{ +${BEGIN} EFI_STATUS Status; +${FunctionCall}${END} +} +"""), } 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_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_STANDALONE" : ["PiSmm.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/SmmDriverStandaloneEntryPoint.h"], + "SMM_CORE_STANDALONE" : ["PiSmm.h", "Library/BaseLib.h", "Library/DebugLib.h", "Library/SmmCoreStandaloneEntryPoint.h"], "USER_DEFINED" : [gBasicHeaderFile] } @@ -1266,6 +1391,9 @@ def CreateLibraryConstructorCode(Info, AutoGenC, AutoGenH): 'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']: ConstructorPrototypeString.Append(gLibraryStructorPrototype['DXE'].Replace(Dict)) ConstructorCallingString.Append(gLibraryStructorCall['DXE'].Replace(Dict)) + elif Lib.ModuleType in ['SMM_STANDALONE','SMM_CORE_STANDALONE']: + ConstructorPrototypeString.Append(gLibraryStructorPrototype['SMM'].Replace(Dict)) + ConstructorCallingString.Append(gLibraryStructorCall['SMM'].Replace(Dict)) if str(ConstructorPrototypeString) == '': ConstructorPrototypeList = [] @@ -1291,6 +1419,8 @@ def CreateLibraryConstructorCode(Info, AutoGenC, AutoGenH): elif Info.ModuleType in ['DXE_CORE','DXE_DRIVER','DXE_SMM_DRIVER','DXE_RUNTIME_DRIVER', 'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']: AutoGenC.Append(gLibraryString['DXE'].Replace(Dict)) + elif Info.ModuleType in ['SMM_STANDALONE','SMM_CORE_STANDALONE']: + AutoGenC.Append(gLibraryString['SMM'].Replace(Dict)) ## Create code for library destructor # @@ -1323,6 +1453,9 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH): 'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION', 'SMM_CORE']: DestructorPrototypeString.Append(gLibraryStructorPrototype['DXE'].Replace(Dict)) DestructorCallingString.Append(gLibraryStructorCall['DXE'].Replace(Dict)) + elif Lib.ModuleType in ['SMM_STANDALONE','SMM_CORE_STANDALONE']: + DestructorPrototypeString.Append(gLibraryStructorPrototype['SMM'].Replace(Dict)) + DestructorCallingString.Append(gLibraryStructorCall['SMM'].Replace(Dict)) if str(DestructorPrototypeString) == '': DestructorPrototypeList = [] @@ -1348,6 +1481,8 @@ def CreateLibraryDestructorCode(Info, AutoGenC, AutoGenH): elif Info.ModuleType in ['DXE_CORE','DXE_DRIVER','DXE_SMM_DRIVER','DXE_RUNTIME_DRIVER', 'DXE_SAL_DRIVER','UEFI_DRIVER','UEFI_APPLICATION','SMM_CORE']: AutoGenC.Append(gLibraryString['DXE'].Replace(Dict)) + elif Info.ModuleType in ['SMM_STANDALONE','SMM_CORE_STANDALONE']: + AutoGenC.Append(gLibraryString['SMM'].Replace(Dict)) ## Create code for ModuleEntryPoint @@ -1377,7 +1512,7 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH): 'UefiSpecVersion': UefiSpecVersion + 'U' } - if Info.ModuleType in ['PEI_CORE', 'DXE_CORE', 'SMM_CORE']: + if Info.ModuleType in ['PEI_CORE', 'DXE_CORE', 'SMM_CORE', 'SMM_CORE_STANDALONE']: if Info.SourceFileList <> None and Info.SourceFileList <> []: if NumEntryPoints != 1: EdkLogger.error( @@ -1396,6 +1531,9 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH): elif Info.ModuleType == 'SMM_CORE': AutoGenC.Append(gSmmCoreEntryPointString.Replace(Dict)) AutoGenH.Append(gSmmCoreEntryPointPrototype.Replace(Dict)) + elif Info.ModuleType == 'SMM_CORE_STANDALONE': + AutoGenC.Append(gSmmCoreStandaloneEntryPointString.Replace(Dict)) + AutoGenH.Append(gSmmCoreStandaloneEntryPointPrototype.Replace(Dict)) elif Info.ModuleType == 'PEIM': if NumEntryPoints < 2: AutoGenC.Append(gPeimEntryPointString[NumEntryPoints].Replace(Dict)) @@ -1413,7 +1551,13 @@ def CreateModuleEntryPointCode(Info, AutoGenC, AutoGenH): AutoGenC.Append(gDxeSmmEntryPointString[0].Replace(Dict)) else: AutoGenC.Append(gDxeSmmEntryPointString[1].Replace(Dict)) - AutoGenH.Append(gDxeSmmEntryPointPrototype.Replace(Dict)) + AutoGenH.Append(gDxeSmmEntryPointPrototype.Replace(Dict)) + elif Info.ModuleType == 'SMM_STANDALONE': + if NumEntryPoints < 2: + AutoGenC.Append(gSmmStandaloneEntryPointString[NumEntryPoints].Replace(Dict)) + else: + AutoGenC.Append(gSmmStandaloneEntryPointString[2].Replace(Dict)) + AutoGenH.Append(gSmmStandaloneEntryPointPrototype.Replace(Dict)) elif Info.ModuleType == 'UEFI_APPLICATION': if NumEntryPoints < 2: AutoGenC.Append(gUefiApplicationEntryPointString[NumEntryPoints].Replace(Dict)) diff --git a/BaseTools/Source/Python/AutoGen/GenDepex.py b/BaseTools/Source/Python/AutoGen/GenDepex.py index 5923a75..9d3002f 100644 --- a/BaseTools/Source/Python/AutoGen/GenDepex.py +++ b/BaseTools/Source/Python/AutoGen/GenDepex.py @@ -42,6 +42,8 @@ gType2Phase = { "UEFI_DRIVER" : "DXE", "UEFI_APPLICATION" : "DXE", "SMM_CORE" : "DXE", + "SMM_STANDALONE" : "SMM", + "SMM_CORE_STANDALONE" : "SMM", } ## Convert dependency expression string into EFI internal representation @@ -98,6 +100,19 @@ class DependencyExpression: "FALSE" : 0x07, "END" : 0x08, "SOR" : 0x09 + }, + + "SMM" : { + "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 # 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', 'SMM_STANDALONE'] and \ Op == 'AND' and \ self.ArchProtocols == set([GuidStructureStringToGuidString(Guid) for Guid in AllOperand]): self.PostfixNotation = [] -- 2.7.4