2_fdf_design_discussion/24_[fd]_sections.md | 6 --- 2_fdf_design_discussion/25_[fv]_sections.md | 6 --- 2_fdf_design_discussion/26_[capsule]_sections.md | 6 --- 3_edk_ii_fdf_file_format/32_fdf_definition.md | 62 +++++++++++++++++++---- 3_edk_ii_fdf_file_format/34_[defines]_section.md | 4 +- 3_edk_ii_fdf_file_format/35_[fd]_sections.md | 9 ++-- 3_edk_ii_fdf_file_format/36_[fv]_sections.md | 2 +- 3_edk_ii_fdf_file_format/37_[capsule]_sections.md | 2 +- 8 files changed, 60 insertions(+), 37 deletions(-)
Cc: Liming Gao <liming.gao@intel.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Kevin W Shaw <kevin.w.shaw@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
---
2_fdf_design_discussion/24_[fd]_sections.md | 6 ---
2_fdf_design_discussion/25_[fv]_sections.md | 6 ---
2_fdf_design_discussion/26_[capsule]_sections.md | 6 ---
3_edk_ii_fdf_file_format/32_fdf_definition.md | 62 +++++++++++++++++++----
3_edk_ii_fdf_file_format/34_[defines]_section.md | 4 +-
3_edk_ii_fdf_file_format/35_[fd]_sections.md | 9 ++--
3_edk_ii_fdf_file_format/36_[fv]_sections.md | 2 +-
3_edk_ii_fdf_file_format/37_[capsule]_sections.md | 2 +-
8 files changed, 60 insertions(+), 37 deletions(-)
diff --git a/2_fdf_design_discussion/24_[fd]_sections.md b/2_fdf_design_discussion/24_[fd]_sections.md
index d55b793..2e1facb 100644
--- a/2_fdf_design_discussion/24_[fd]_sections.md
+++ b/2_fdf_design_discussion/24_[fd]_sections.md
@@ -155,16 +155,10 @@ The following is an example of the `SET` statement:
`SET gFlashDevicePkgTokenSpaceGuid.PcdEfiMemoryMapped = TRUE`
The `VALUE` specified must match the PCD's datum type and must be the content
data.
-For a PCD that has a datum type of `VOID`*, the data can be a Unicode string,
-as in `L"text"`, a valid C data array (it must be either a C format GUID or a
-hex byte array), as in `{0x20, 0x01, 0x50, 0x00, 0x32, 0xFF, 0x00, 0xAA, {0xFF, 0xF0, 0x00, 0x00, 0x00}}.`
-For other PCD datum types, the value may be a boolean or a hex value, as in
-`0x0000000F,` with a value that is consistent with the PCD's datum type.
-
The value may also be a macro or it may be computed, using arithmetic
operations, arithmetic expressions and or logical expressions. The value
portion of the `SET` statement, when using any of these computations are in-fix
expressions that are evaluated left to right, with items within parenthesis
evaluated before the outer expressions are evaluated. Use of parenthesis is
diff --git a/2_fdf_design_discussion/25_[fv]_sections.md b/2_fdf_design_discussion/25_[fv]_sections.md
index 7b50017..343e252 100644
--- a/2_fdf_design_discussion/25_[fv]_sections.md
+++ b/2_fdf_design_discussion/25_[fv]_sections.md
@@ -130,16 +130,10 @@ The following is an example of the `SET` statement:
`SET gEfiMyTokenSpaceGuid.PcdDisableOnboardVideo = TRUE`
The `VALUE` specified must match the Pcd's datum type and must be the content
data.
-For a PCD that has a datum type of `VOID`*, the data can be a Unicode string,
-as in `L"text"`, a valid C data array (it must be either a C format GUID or a
-hex byte array), as in `{0x20, 0x00, 0x20, 0x00, 0x32, 0xFF, 0x00, 0xAA, {0xFF, 0xF0, 0x00, 0x00, 0x00}}.`
-Other PCD datum types are either boolean values or a hex value, as in
-`0x0000000F`, with a value that is consistent with the PCD's datum type
-
The value may also be a macro or it may be computed, using arithmetic
operations, arithmetic expressions and or logical expressions. The value
portion of the `SET` statement, when using any of these computations are in-fix
expressions that are evaluated left to right, with items within parenthesis
evaluated before the outer expressions are evaluated. Use of parenthesis is
diff --git a/2_fdf_design_discussion/26_[capsule]_sections.md b/2_fdf_design_discussion/26_[capsule]_sections.md
index ba93268..d0b956a 100644
--- a/2_fdf_design_discussion/26_[capsule]_sections.md
+++ b/2_fdf_design_discussion/26_[capsule]_sections.md
@@ -97,16 +97,10 @@ The following is an example of the `SET` statement.
`SET gEfiMyTokenSpaceGuid.PcdSecStartLocalApicTimer = TRUE`
The `VALUE` specified must match the PCD's datum type and must be the content
data.
-For a PCD that has a datum type of `VOID`*, the data can be a Unicode string,
-as in `L"text"`, a valid C data array (it must be either a C format GUID or a
-hex Byte array), as in `{0x20002000, 0x32FF, 0x00AA, {0xFF, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xEF, 0x1A, 0x55}}.`
-Other PCD datum types are either boolean values or a hex value, as in
-`0x0000000F`, with a value that is consistent with the PCD's datum type.
-
### 2.6.3 Capsule Data
`EFI_CAPSULE_DATA` follows the `EFI_CAPSULE_HEADER` token definitions in the
`[Capsule]` section or sub-sections. The content consists of one or more files,
FD UiName, FV UiName or the following.
diff --git a/3_edk_ii_fdf_file_format/32_fdf_definition.md b/3_edk_ii_fdf_file_format/32_fdf_definition.md
index 1379db4..0eb9108 100644
--- a/3_edk_ii_fdf_file_format/32_fdf_definition.md
+++ b/3_edk_ii_fdf_file_format/32_fdf_definition.md
@@ -96,15 +96,16 @@ The following are common definitions used by multiple section types.
<Digit> ::= (0-9)
<NonDigit> ::= (a-zA-Z_)
<Identifier> ::= <NonDigit> <Chars>*
<CName> ::= <Identifier> # A valid C variable name.
<AsciiChars> ::= (0x21 - 0x7E)
-<CChars> ::= [{0x21} {(0x23 - 0x5B)} {(0x5D - 0x7E)}
- {<EscapeSequence>}]*
+<CChars> ::= [{0x21} {(0x23 - 0x26)} {(0x28 - 0x5B)}
+ {(0x5D - 0x7E)} {<EscapeSequence>}]*
<DblQuote> ::= 0x22
+<SglQuote> ::= 0x27
<EscapeSequence> ::= "\" {"n"} {"t"} {"f"} {"r"} {"b"} {"0"}
- {"\"} {<DblQuote>}
+ {"\"} {<DblQuote>} {<SglQuote>}
<TabSpace> ::= {<Tab>} {<Space>}
<TS> ::= <TabSpace>*
<MTS> ::= <TabSpace>+
<Tab> ::= 0x09
<Space> ::= 0x20
@@ -122,15 +123,16 @@ The following are common definitions used by multiple section types.
<AsciiString> ::= [ <TS>* <AsciiChars>* ]*
<EmptyString> ::= <DblQuote> <DblQuote>
<CFlags> ::= <AsciiString>
<PrintChars> ::= {<TS>} {<CChars>}
<QuotedString> ::= <DblQuote> <PrintChars>* <DblQuote>
-<CString> ::= ["L"] <QuotedString>
+<SglQuotedString> ::= <SglQuote> <PrintChars>* <SglQuote>
+<CString> ::= {<QuotedString>} {<SglQuotedString>}
<NormalizedString> ::= <DblQuote> [{<Word>} {<Space>}]+ <DblQuote>
<GlobalComment> ::= <WS> "#" [<AsciiString>] <EOL>+
<Comment> ::= "#" <AsciiString> <EOL>+
-<UnicodeString> ::= "L" <QuotedString>
+<UnicodeString> ::= "L" {<QuotedString>} {<SglQuotedString>}
<HexDigit> ::= (a-fA-F0-9)
<HexByte> ::= {"0x"} {"0X"} [<HexDigit>] <HexDigit>
<HexNumber> ::= {"0x"} {"0X"} <HexDigit>+
<HexVersion> ::= "0x" [0]* <Major> <Minor>
<Major> ::= <HexDigit>? <HexDigit>? <HexDigit>?
@@ -169,11 +171,12 @@ The following are common definitions used by multiple section types.
<NumNz> ::= (1-18446744073709551615)
<GZ> ::= {<NumNz>} {<HexNz>}
<TRUE> ::= {"TRUE"} {"true"} {"True"} {"0x1"}
{"0x01"} {"1"}
<FALSE> ::= {"FALSE"} {"false"} {"False"} {"0x0"} {"0x00"} {"0"}
-<BoolType> ::= {<TRUE>} {<FALSE>}
+<BoolVal> ::= {<TRUE>} {<FALSE>}
+<BoolType> ::= {<BoolVal>} {"{"<BoolVal>"}"}
<MACRO> ::= (A-Z)(A-Z0-9_)*
<MACROVAL> ::= "$(" <MACRO> ")"
<PcdName> ::= <TokenSpaceGuidCName> "." <PcdCName>
<PcdCName> ::= <CName>
<TokenSpaceGuidCName> ::= <CName>
@@ -195,14 +198,45 @@ The following are common definitions used by multiple section types.
<HexDigit> <HexDigit>
<ShortNum> ::= (0-255)
<IntNum> ::= (0-65535)
<LongNum> ::= (0-4294967295)
<LongLongNum> ::= (0-18446744073709551615)
-<NumValUint8> ::= {<ShortNum>} {<UINT8>}
-<NumValUint16> ::= {<IntNum>} {<UINT16>}
-<NumValUint32> ::= {<LongNum>} {<UINT32>}
-<NumValUint64> ::= {<LongLongNum>} {<UINT64>}
+<ValUint8> ::= {<ShortNum>} {<UINT8>} {<BoolVal>}
+ {<CString>} {<UnicodeString>}
+<ValUint16> ::= {<IntNum>} {<UINT16>} {<BoolVal>}
+ {<CString>} {<UnicodeString>}
+<ValUint32> ::= {<LongNum>} {<UINT32>} {<BoolVal>}
+ {<CString>} {<UnicodeString>}
+<ValUint64> ::= {<LongLongNum>} {<UINT64>} {<BoolVal>}
+ {<CString>} {<UnicodeString>}
+<NumValUint8> ::= {<ValUint8>} {"{"<ValUint8>"}"}
+<NumValUint16> ::= {<ValUint16>}
+ {"{"<ValUint16> [<CommaSpace> <ValUint16>]*"}"}
+<NumValUint32> ::= {<ValUint32>}
+ {"{"<ValUint32> [<CommaSpace> <ValUint32>]*"}"}
+<NumValUint64> ::= {<ValUint64>}
+ {"{"<ValUint64> [<CommaSpace> <ValUint64>]*"}"}
+<StringVal> ::= {<UnicodeString>} {<CString>} {<Array>}
+<Array> ::= "{"[<Lable>] <ArrayVal>
+ [<CommaSpace> [<Lable>] <ArrayVal>]*"}"
+<ArrayVal> ::= {<NumArray>} {<GuidStr>} {<DevicePath>}
+<NumArray> ::= {<BoolVal>} {<Number>} {<UnicodeString>} {<CString>}
+ {<Offset>} {<UintMac>}
+<GuidStr> ::= "GUID(" <GuidVal> ")"
+<GuidVal> ::= {<DblQuote> <RegistryFormatGUID> <DblQuote>}
+ {<CFormatGUID>} {<CName>}
+<DevicePath> ::= "DEVICE_PATH(" <DevicePathStr> ")"
+<DevicePathStr> ::= A double quoted string that follow the device path
+ as string format defined in UEFI Specification 2.6
+ Section 9.6
+<UintMac> ::= {<Uint8Mac>} {<Uint16Mac>} {<Uint32Mac>} {<Uint64Mac>}
+<Uint8Mac> ::= "UINT8(" <NumArray> ")"
+<Uint16Mac> ::= "UINT16(" <NumArray> ")"
+<Uint32Mac> ::= "UINT32(" <NumArray> ")"
+<Uint64Mac> ::= "UINT64(" <NumArray> ")"
+<Lable> ::= "LABEL(" <CName> ")"
+<Offset> ::= "OFFSET_OF(" <CName> ")"
<ModuleType> ::= {"BASE"} {"SEC"} {"PEI_CORE"} {"PEIM"}
{"DXE_CORE"} {"DXE_DRIVER"} {"SMM_CORE"}
{"DXE_RUNTIME_DRIVER"} {"DXE_SAL_DRIVER"}
{"DXE_SMM_DRIVER"} {"UEFI_DRIVER"}
{"UEFI_APPLICATION"} {"USER_DEFINED"}
@@ -231,10 +265,18 @@ The following are common definitions used by multiple section types.
{"256K"} {"512K"} {"1M"} {"2M"} {"4M"} {"8M"}
{"16M"}
```
**********
+**Note:** When using CString, UnicodeString or byte array format as
+UINT8/UINT16/UINT32/UINT64 values, please make sure they fit in the
+target type's size, otherwise tool would report failure.
+**********
+**Note:** LABEL() macro in byte arrays to tag the byte offset of a
+location in a byte array. OFFSET_OF() macro in byte arrays that returns
+the byte offset of a LABEL() declared in a byte array.
+**********
**Note:** When using the characters "|" or "||" in an expression, the
expression must be encapsulated in open "(" and close ")" parenthesis.
**********
**Note:** Comments may appear anywhere within a FDF file, provided they follow
the rules that a comment may not be enclosed within Section headers, and that
diff --git a/3_edk_ii_fdf_file_format/34_[defines]_section.md b/3_edk_ii_fdf_file_format/34_[defines]_section.md
index 7011db8..5bbb890 100644
--- a/3_edk_ii_fdf_file_format/34_[defines]_section.md
+++ b/3_edk_ii_fdf_file_format/34_[defines]_section.md
@@ -60,12 +60,12 @@ Conditional statements may be used anywhere within this section.
[<TS> "FDF_VERSION" <Eq> <DecimalVersion> <EOL>] <DefStmts>*
<DefStmts> ::= {<MacroDefinition>} {<SetStmts>} {<IncludeStatement>}
<UiNameType> ::= <AsciiString>
<SpecVer> ::= {<HexVersion>} {(0-9)+ "." (0-9)+}
<SetStmts> ::= <TS> "SET" <MTS> <PcdName> <Eq> [<VALUE>] <EOL>
-<VALUE> ::= {<Number>} {<Boolean>} {<GUID>} {<CArray>}
- {<CString>} {<UnicodeString>} {<Expression>}
+<VALUE> ::= {<Number>} {<BoolVal>} {<Array>} {<UnicodeString>}
+ {<CString>} {<Expression>}
```
#### Parameters
**_Expression_**
diff --git a/3_edk_ii_fdf_file_format/35_[fd]_sections.md b/3_edk_ii_fdf_file_format/35_[fd]_sections.md
index 6c87ebd..8558e7e 100644
--- a/3_edk_ii_fdf_file_format/35_[fd]_sections.md
+++ b/3_edk_ii_fdf_file_format/35_[fd]_sections.md
@@ -65,11 +65,11 @@ Conditional statements may be used anywhere within this section.
<SetPcd> ::= <FS> <PcdName>
<BlockStatements> ::= <TS> "BlockSize" <Eq> <UINT32> [<SetPcd>]
<EOL>
[<TS> "NumBlocks" <Eq> <UINT32> <EOL>]
<SetStatements> ::= <TS> "SET" <PcdName> <Eq> <VALUE> <EOL>
-<VALUE> ::= {<Number>} {<Boolean>} {<GUID>} {<CArray>}
+<VALUE> ::= {<Number>} {<BoolVal>} {<Array>}
{<CString>} {<UnicodeString>} {<Expression>}
<RegionLayout> ::= <TS> <Offset> <FS> <Size> <EOL>
[<TS> <PcdOffset> [<FS> <PcdSize>] <EOL>]
[<RegionType>]
<Offset> ::= {<HexNumber>} {<Expression>}
@@ -149,14 +149,13 @@ in this the file.
The `FvUiName` must be specified in a `[FV]` section header defined in this the
file.
**_PcdValue_**
-The PCD Value may be a specific numeric value, an array of numeric bytes, a
-GUID, a quoted string, an L quoted string (representing a unicode string), an
-arithmetic expression, a logic expression or a macro from a previously defined
-macro statement.
+The PCD Value may be a specific numeric value, an byte array, a quoted
+string, an L quoted string (representing a unicode string), an expression
+or a macro from a previously defined macro statement.
**_Expression_**
Refer to the EDK II Expression Syntax Specification for more information.
diff --git a/3_edk_ii_fdf_file_format/36_[fv]_sections.md b/3_edk_ii_fdf_file_format/36_[fv]_sections.md
index b4f292a..63e877e 100644
--- a/3_edk_ii_fdf_file_format/36_[fv]_sections.md
+++ b/3_edk_ii_fdf_file_format/36_[fv]_sections.md
@@ -85,11 +85,11 @@ Conditional statements may be used anywhere within this section.
<GlobalStmts> ::= {<MacroDefinition>} {<IncludeStatement>}
<BlockStatements> ::= <FixedBlocks>
<FixedBlocks> ::= [<TS> "BlockSize" <Eq> <UINT32> <EOL>]
[<TS> "NumBlocks" <Eq> <UINT32> <EOL>]
<SetStatements> ::= <TS> "SET" <MTS> <PcdName> <Eq> <VALUE> <EOL>
-<VALUE> ::= {<Number>} {<Boolean>} {<GUID>} {<CArray>}
+<VALUE> ::= {<Number>} {<BoolVal>} {<Array>}
{<CString>} {<UnicodeString>} {<Expression>}
<FvAlignment> ::= [<TS> "FvBaseAddress" <Eq> <UINT64> <EOL>]
[<TS> "FvForceRebase" <Eq> <TrueFalse> <EOL>]
<TS> "FvAlignment" <Eq>
<FvAlignmentValues> <EOL>
diff --git a/3_edk_ii_fdf_file_format/37_[capsule]_sections.md b/3_edk_ii_fdf_file_format/37_[capsule]_sections.md
index 6606d56..673cb37 100644
--- a/3_edk_ii_fdf_file_format/37_[capsule]_sections.md
+++ b/3_edk_ii_fdf_file_format/37_[capsule]_sections.md
@@ -48,11 +48,11 @@ Conditional statements may be used anywhere within this section.
<Capsule> ::= "[Capsule" <UiCapsuleName> "]" <EOL>
<UefiTokens>
<CapsuleStmts>*
<UiCapsuleName> ::= "." <Word>
<SetStatements> ::= <TS> "SET" <MTS> <PcdName> <Eq> <VALUE> <EOL>
-<VALUE> ::= {<Number>} {<Boolean>} {<GUID>} {<CArray>}
+<VALUE> ::= {<Number>} {<BoolVal>} {<Array>}
{<CString>} {<UnicodeString>} {<Expression>}
<UefiTokens> ::= <TS> "CAPSULE_GUID" <Eq> <GuidValue> <EOL>
[<TS> "CAPSULE_HEADER_SIZE" <Eq> <Bytes> <EOL>] [<TS>
"CAPSULE_FLAGS" <Eq> <Flags> <EOL>]
[<TS> "CAPSULE_HEADER_INIT_VERSION" <Eq> <Hex2> <EOL>]
--
2.6.1.windows.1
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
© 2016 - 2024 Red Hat, Inc.