This patch is good to me.

Reviewed-by: Bob Feng <bob.c.f...@intel.com>

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Konstantin 
Aladyshev
Sent: Wednesday, July 20, 2022 10:01 PM
To: devel@edk2.groups.io
Cc: Feng, Bob C <bob.c.f...@intel.com>; Gao, Liming <gaolim...@byosoft.com.cn>; 
Chen, Christine <yuwei.c...@intel.com>; Konstantin Aladyshev 
<aladyshe...@gmail.com>
Subject: [edk2-devel] [PATCH] BaseTools: Add support for SUBTYPE_GUID section 
generation

EFI_SECTION_FREEFORM_SUBTYPE_GUID is a leaf section type that contains a single 
EFI_GUID in the header to describe the raw data.
Currently is is not possible to generate such section.
This patch adds initial support for the generation of such sections.
The added syntax for this type of section corresponds to EDKII "[FV] section" 
documentation from the FDF Specification:
```
SECTION SUBTYPE_GUID <GUID> = <File>
```

Signed-off-by: Konstantin Aladyshev <aladyshe...@gmail.com>
---
 .../Source/Python/CommonDataClass/FdfClass.py | 12 +++
 BaseTools/Source/Python/GenFds/FdfParser.py   | 22 ++++++
 .../Python/GenFds/SubTypeGuidSection.py       | 76 +++++++++++++++++++
 3 files changed, 110 insertions(+)
 create mode 100644 BaseTools/Source/Python/GenFds/SubTypeGuidSection.py

diff --git a/BaseTools/Source/Python/CommonDataClass/FdfClass.py 
b/BaseTools/Source/Python/CommonDataClass/FdfClass.py
index 2fbb7b436a..c8cfdaae32 100644
--- a/BaseTools/Source/Python/CommonDataClass/FdfClass.py
+++ b/BaseTools/Source/Python/CommonDataClass/FdfClass.py
@@ -190,6 +190,18 @@ class GuidSectionClassObject (SectionClassObject) :
         self.FvParentAddr = None         self.IncludeFvSection = False +## 
SubType GUID section data in FDF+#+#+class SubTypeGuidSectionClassObject 
(SectionClassObject) :+    ## The constructor+    #+    #   @param  self        
The object pointer+    #+    def __init__(self):+        
SectionClassObject.__init__(self)+        self.SubTypeGuid = None+ ## UI 
section data in FDF # #diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py 
b/BaseTools/Source/Python/GenFds/FdfParser.py
index 5c8263f9bc..aa18fef09e 100644
--- a/BaseTools/Source/Python/GenFds/FdfParser.py
+++ b/BaseTools/Source/Python/GenFds/FdfParser.py
@@ -42,6 +42,7 @@ from .DataSection import DataSection  from .DepexSection 
import DepexSection from .CompressSection import CompressSection from 
.GuidSection import GuidSection+from .SubTypeGuidSection import 
SubTypeGuidSection from .Capsule import EFI_CERT_TYPE_PKCS7_GUID, 
EFI_CERT_TYPE_RSA2048_SHA256_GUID, Capsule from .CapsuleData import CapsuleFfs, 
CapsulePayload, CapsuleFv, CapsuleFd, CapsuleAnyFile, CapsuleAfile from 
.RuleComplexFile import RuleComplexFile@@ -2892,6 +2893,27 @@ class FdfParser:
             DepexSectionObj.Expression = 
self._SkippedChars.rstrip(T_CHAR_BRACE_R)             
Obj.SectionList.append(DepexSectionObj) +        elif 
self._IsKeyword("SUBTYPE_GUID"):+            if AlignValue == 'Auto':+          
      raise Warning("Auto alignment can only be used in PE32 or TE section ", 
self.FileName, self.CurrentLineNumber)+            SubTypeGuidValue = None+     
       if not self._GetNextGuid():+                raise 
Warning.Expected("GUID", self.FileName, self.CurrentLineNumber)+            
else:+                SubTypeGuidValue = self._Token++            if not 
self._IsToken(TAB_EQUAL_SPLIT):+                raise 
Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber)+            if 
not self._GetNextToken():+                raise Warning.Expected("section file 
path", self.FileName, self.CurrentLineNumber)+            FileName = 
self._Token++            SubTypeGuidSectionObj = SubTypeGuidSection()+          
  SubTypeGuidSectionObj.Alignment = AlignValue+            
SubTypeGuidSectionObj.SubTypeGuid = SubTypeGuidValue+            
SubTypeGuidSectionObj.SectFileName = FileName+            
Obj.SectionList.append(SubTypeGuidSectionObj)+         else:             if not 
self._GetNextWord():                 raise Warning.Expected("section type", 
self.FileName, self.CurrentLineNumber)diff --git 
a/BaseTools/Source/Python/GenFds/SubTypeGuidSection.py 
b/BaseTools/Source/Python/GenFds/SubTypeGuidSection.py
new file mode 100644
index 0000000000..d522380117
--- /dev/null
+++ b/BaseTools/Source/Python/GenFds/SubTypeGuidSection.py
@@ -0,0 +1,76 @@
+## @file+# process Subtype GUIDed section generation+#+#  Copyright (c) 2022, 
Konstantin Aladyshev <aladyshe...@gmail.com>+#+#  SPDX-License-Identifier: 
BSD-2-Clause-Patent+#++##+# Import Modules+#+from __future__ import 
absolute_import+from . import Section+import subprocess+from .Ffs import 
SectionSuffix+import Common.LongFilePathOs as os+from .GenFdsGlobalVariable 
import GenFdsGlobalVariable+from .GenFdsGlobalVariable import 
FindExtendTool+from CommonDataClass.FdfClass import 
SubTypeGuidSectionClassObject+import sys+from Common import EdkLogger+from 
Common.BuildToolError import *+from .FvImageSection import FvImageSection+from 
Common.LongFilePathSupport import OpenLongFilePath as open+from Common.DataType 
import *++## generate SubType GUIDed section+#+#+class 
SubTypeGuidSection(SubTypeGuidSectionClassObject) :++    ## The constructor+    
#+    #   @param  self        The object pointer+    #+    def __init__(self):+ 
       SubTypeGuidSectionClassObject.__init__(self)++    ## GenSection() 
method+    #+    #   Generate GUIDed section+    #+    #   @param  self        
The object pointer+    #   @param  OutputPath  Where to place output file+    # 
  @param  ModuleName  Which module this section belongs to+    #   @param  
SecNum      Index of section+    #   @param  KeyStringList  Filter for inputs 
of section generation+    #   @param  FfsInf      FfsInfStatement object that 
contains this section data+    #   @param  Dict        dictionary contains 
macro and its value+    #   @retval tuple       (Generated file name, section 
alignment)+    #+    def GenSection(self, OutputPath, ModuleName, SecNum, 
KeyStringList, FfsInf=None, Dict=None, IsMakefile=False):+        #+        # 
Generate all section+        #+        self.KeyStringList = KeyStringList+      
  self.CurrentArchList = GenFdsGlobalVariable.ArchList+        if FfsInf is not 
None:+            self.Alignment = FfsInf.__ExtendMacro__(self.Alignment)+      
      self.SubTypeGuid = FfsInf.__ExtendMacro__(self.SubTypeGuid)+            
self.SectionType = FfsInf.__ExtendMacro__(self.SectionType)+            
self.CurrentArchList = [FfsInf.CurrentArch]++        if Dict is None:+          
  Dict = {}++        self.SectFileName = 
GenFdsGlobalVariable.ReplaceWorkspaceMacro(self.SectFileName)+        
self.SectFileName = GenFdsGlobalVariable.MacroExtend(self.SectFileName, Dict)++ 
       OutputFile = os.path.join(OutputPath, ModuleName + SUP_MODULE_SEC + 
SecNum + SectionSuffix.get("SUBTYPE_GUID"))+        
GenFdsGlobalVariable.GenerateSection(OutputFile, [self.SectFileName], 
'EFI_SECTION_FREEFORM_SUBTYPE_GUID', Guid=self.SubTypeGuid, 
IsMakefile=IsMakefile)++        OutputFileList = []+        
OutputFileList.append(OutputFile)+        return OutputFileList, 
self.Alignment+-- 
2.25.1



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#91583): https://edk2.groups.io/g/devel/message/91583
Mute This Topic: https://groups.io/mt/92504973/1768742
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [bob.c.f...@intel.com] 
-=-=-=-=-=-=




-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#94620): https://edk2.groups.io/g/devel/message/94620
Mute This Topic: https://groups.io/mt/92504973/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to