In V2, update array style to more than one dimension array.
In V3, Update Pcd Field value assignment with array index.
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1292

1. Support the syntax of the structure array for structure PCD
2. Add the syntax to initialize structure PCD with C style value

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Liming Gao <liming....@intel.com>
Cc: Bob Feng <bob.c.f...@intel.com>
---
 3_edk_ii_dec_file_format/310_pcd_sections.md                  |  2 +-
 .../32_package_declaration_dec_definitions.md                 | 11 +++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/3_edk_ii_dec_file_format/310_pcd_sections.md 
b/3_edk_ii_dec_file_format/310_pcd_sections.md
index 42beee9..2711788 100644
--- a/3_edk_ii_dec_file_format/310_pcd_sections.md
+++ b/3_edk_ii_dec_file_format/310_pcd_sections.md
@@ -125,7 +125,7 @@ PCDs listed in `PcdsFeatureFlag` sections must only be 
listed in
 <PcdUint32>       ::= {<NumValUint32>} {<Expression>} <FS> "UINT32"
 <Pcd64>           ::= <PcdName> <FS> <PcdUint64> <FS> <Token> <CbOrEol>
 <PcdUint64>       ::= {<NumValUint64>} {<Expression>} <FS> "UINT64"
-<PcdStruct>       ::= <PcdName> <FS> <PtrVal> <FS> <CName> <FS> <Token> "{" 
<EOL>
+<PcdStruct>       ::= <PcdName> <FS> <PtrVal> <FS> {<CName>} {<CArrayName>} 
<FS> <Token> "{" <EOL>
                       <TS> <PcdStructHF>
                       <TS> <PcdStructPKGs> "}" <CbOrEol>
 <PcdStructHF>     ::= "<HeaderFile>" <EOL> <PcdStructFile>
diff --git a/3_edk_ii_dec_file_format/32_package_declaration_dec_definitions.md 
b/3_edk_ii_dec_file_format/32_package_declaration_dec_definitions.md
index a3120f3..dc18fb0 100644
--- a/3_edk_ii_dec_file_format/32_package_declaration_dec_definitions.md
+++ b/3_edk_ii_dec_file_format/32_package_declaration_dec_definitions.md
@@ -87,6 +87,7 @@ DEC file (for example, `<Expression>` statements are not 
permitted).
 <NonDigit>            ::= (a-zA-Z_)
 <Identifier>          ::= <NonDigit> <Chars>*
 <CName>               ::= <Identifier> # A valid C variable name.
+<CArrayName>          ::= <Identifier>["["[<Number>]"]"]+ # A valid C variable 
array name.
 <AsciiChars>          ::= (0x21 - 0x7E)
 <CChars>              ::= [{0x21} {(0x23 - 0x26)} {(0x28 - 0x5B)}
                           {(0x5D - 0x7E)} {<EscapeSequence>}]*
@@ -166,7 +167,7 @@ DEC file (for example, `<Expression>` statements are not 
permitted).
 <MACRO>               ::= (A-Z)(A-Z0-9_)*
 <MACROVAL>            ::= "$(" <MACRO> ")"
 <PcdName>             ::= <TokenSpaceGuidCName> "." <PcdCName>
-<PcdFieldName>        ::= <TokenSpaceGuidCName> "." <PcdCName> "." <Field>
+<PcdFieldName>        ::= <TokenSpaceGuidCName> "." <PcdCName> 
["["<Number>"]"]* "." <Field>
 <PcdCName>            ::= <CName>
 <TokenSpaceGuidCName> ::= <CName>
 <PcdFieldEntry>       ::= <PcdFieldName> <FS> <PcdFieldValue> <EOL>
@@ -208,7 +209,7 @@ DEC file (for example, `<Expression>` statements are not 
permitted).
 <StringVal>           ::= {<UnicodeString>} {<CString>} {<Array>}
 <Array>               ::= "{" {<Array>} {[<Lable>] <ArrayVal> 
                            [<CommaSpace> [<Lable>] <ArrayVal>]* } "}"
-<ArrayVal>            ::= {<Num8Array>} {<GuidStr>} {<DevicePath>} 
+<ArrayVal>            ::= {<Num8Array>} {<GuidStr>} {<DevicePath>} {<CodeStr>}
 <NonNumType>          ::= {<BoolVal>}{<UnicodeString>} {<CString>}
                           {<Offset>} {<UintMac>}
 <Num8Array>           ::= {<NonNumType>} {<ShortNum>} {<UINT8>}
@@ -216,6 +217,7 @@ DEC file (for example, `<Expression>` statements are not 
permitted).
 <Num32Array>          ::= {<NonNumType>} {<LongNum>} {<UINT32>}
 <Num64Array>          ::= {<NonNumType>} {<LongLongNum>} {<UINT64>}
 <GuidStr>             ::= "GUID(" <GuidVal> ")"
+<CodeStr>             ::= "CODE(" <CData> ")"
 <GuidVal>             ::= {<DblQuote> <RegistryFormatGUID> <DblQuote>}
                           {<CFormatGUID>} {<CName>}
 <DevicePath>          ::= "DEVICE_PATH(" <DevicePathStr> ")"
@@ -326,6 +328,11 @@ All C data arrays used in PCD value fields must be byte 
arrays. The C format
 GUID style is a special case that is permitted in some fields that use the
 `<CArray>` nomenclature.
 
+**_CData_**
+
+All C data used in PCD value CODE syntax can be C style value to initialize 
+C structure or Array in C source code.
+
 **_EOL_**
 
 The DOS End Of Line: "0x0D 0x0A" character sequence must be used for all EDK II
-- 
2.13.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to