[edk2] [Patch 2/3] DscSpecification: Add DefaultStores section to describe the default setting

Liming Gao posted 3 patches 6 years, 9 months ago
[edk2] [Patch 2/3] DscSpecification: Add DefaultStores section to describe the default setting
Posted by Liming Gao 6 years, 9 months ago
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Liming Gao <liming.gao@intel.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
---
 .../213_[defaultstores]_section_processing.md      | 49 ++++++++++++
 3_edk_ii_dsc_file_format/310_pcd_sections.md       | 86 ++++++++++++++++++++--
 .../313_[defaultstores]_section.md                 | 60 +++++++++++++++
 3 files changed, 190 insertions(+), 5 deletions(-)
 create mode 100644 2_dsc_overview/213_[defaultstores]_section_processing.md
 create mode 100644 3_edk_ii_dsc_file_format/313_[defaultstores]_section.md

diff --git a/2_dsc_overview/213_[defaultstores]_section_processing.md b/2_dsc_overview/213_[defaultstores]_section_processing.md
new file mode 100644
index 0000000..88a7ad2
--- /dev/null
+++ b/2_dsc_overview/213_[defaultstores]_section_processing.md
@@ -0,0 +1,49 @@
+<!--- @file
+  2.13 [DefaultStores] Section Processing
+
+  Copyright (c) 2006-2018, Intel Corporation. All rights reserved.<BR>
+
+  Redistribution and use in source (original document form) and 'compiled'
+  forms (converted to PDF, epub, HTML and other formats) with or without
+  modification, are permitted provided that the following conditions are met:
+
+  1) Redistributions of source code (original document form) must retain the
+     above copyright notice, this list of conditions and the following
+     disclaimer as the first lines of this file unmodified.
+
+  2) Redistributions in compiled form (transformed to other DTDs, converted to
+     PDF, epub, HTML and other formats) must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+
+  THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR
+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+  EVENT SHALL TIANOCORE PROJECT  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF
+  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+
+## 2.13 [DefaultStores] Section Processing
+
+The contents of this section are used to define DefaultStores names. Default 
+store is UEFI HII concept. It is used to define HII default setting for the 
+different store, such as standard default, manufacturing default. Platform 
+can define the supported default store for DynamicHii/DynamicExHii PCD in this 
+section, tag name to be used. This section is optional. By default, standard 
+default will be used. Each entry below the section header is of the form:
+
+`Number | word`
+
+The following is an example of a `[DefaultStores]` section:
+
+```
+[DefaultStores]
+  0 | Standard        # UEFI Standard default
+  1 | Manufacturing   # UEFI Manufacturing default
+```
diff --git a/3_edk_ii_dsc_file_format/310_pcd_sections.md b/3_edk_ii_dsc_file_format/310_pcd_sections.md
index 18a243d..f79a0fd 100644
--- a/3_edk_ii_dsc_file_format/310_pcd_sections.md
+++ b/3_edk_ii_dsc_file_format/310_pcd_sections.md
@@ -1,7 +1,7 @@
 <!--- @file
   3.10 PCD Sections
 
-  Copyright (c) 2006-2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2006-2018, Intel Corporation. All rights reserved.<BR>
 
   Redistribution and use in source (original document form) and 'compiled'
   forms (converted to PDF, epub, HTML and other formats) with or without
@@ -457,10 +457,12 @@ sections of the DSC file.
 <PdvEntries>     ::= {<MacroDefinition>} {<IncludeStatement>} {<TS> <VpdEntry>}
 <PcdsHii>        ::= "[PcdsDynamicHii" [<PdhAttribs>] "]" <EOL>
                      <PcdHiiEntries>*
-<PdhAttribs>     ::= <attrs> ["," <TS> "PcdsDynamicHii <attrs>]* <PdvEntries>*
+<PdhAttribs>     ::= <phattrs> ["," <TS> "PcdsDynamicHii <phattrs>]* <PdvEntries>*
 <PcdHiiEntries>  ::= {<MacroDefinition>} {<IncludeStatement>} {<TS> <HiiEntry>}
 <attrs>          ::= "." <arch> ["." <SkuIds>]
+<phattrs>        ::= "." <arch> ["." <SkuIds>]["." <DefaultStore>]
 <SkuIdS>         ::= <Keyword> [<FS> <Keyword>]*
+<DefaultStore>   ::= <Keyword>
 <Keyword>        ::= <UiName>
 <UiName>         ::= <Word>
 <MinEntry>       ::= <PcdName> [<FS> <PcdValue>] <EOL>
@@ -555,6 +557,42 @@ the `[Defines]` section. Use of the `SkuId` modifier for the `[PcdsDynamic*]`
 section tag can be used as a conditional modifier or to groups sets of PCDs
 according to the `SkuId` identifier.
 
+**_DefaultStore_**
+
+`DefaultStore` in the DSC file is used to specify DynamicHii/DynamicExHii PCD 
+value as the default EFI variable for which default store. It is only valid in 
+DynamicHii/DynamicExHii section. If it is not specified, DynamicHii/DynamicExHii 
+PCD value will be used as the standard default EFI variable. For the different 
+combination of SKU and DefaultStore, their inheritance is described as the below.
+
+SKU will inherit its parent SKU setting. DEFAULT SKU is the default parent SKU.
+DefaultStore is the subsection of SKU. It will first inherit from the same 
+DefaultStore in its parent SKU, then inherit other DefaultStore in the same SKU. 
+DefaultStore with the big default store ID will inherit the setting from one with 
+the small default store ID. If there are more than one small default store ID, 
+it will use the biggest one to be inherit. Here is the example. Four PcdsDynamicHii
+sections are defined.
+
+# Four PcdsDynamicHii section
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Default.Manufacturing]
+[PcdsDynamicHii.common.Sku1.Standard]
+[PcdsDynamicHii.common.Sku1.Manufacturing]
+
+# DEFAULT Manufacturing setting based on two sections
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Default.Manufacturing]
+
+# SKU1 Standard setting based on two sections
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Sku1.Standard]
+
+# SKU1 Manufacturing setting based on four sections
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Default.Manufacturing]
+[PcdsDynamicHii.common.Sku1.Standard]
+[PcdsDynamicHii.common.Sku1.Manufacturing]
+
 **_PcdValues_**
 
 PCD values are optional for `[PcdsDynamicDefault]` sections. The PCD values for
@@ -584,7 +622,7 @@ the _UEFI Specification_ for a description of these attributes.
   gNoSuchTokenSpaceGuid.PcdOemBootOptionPath|0x2338|100|" "             # VOID*
   gNoSuchTokenSpaceGuid.PcdEnableFastBoot   |0x239C|1  |FALSE           # BOOLEAN
 
-[PcdsDynamicHii.IA32, PcdsDynamicHii.X64.Sku1]
+[PcdsDynamicHii.IA32, PcdsDynamicHii.X64.Sku1.Standard]
   gEfiMyModulePkgTokenSpaceGuid.PcdChassisIntrution|0x0053 0x0065 0x0074 0x0075 0x0070|gSysConfigGuid|0x83|0x0
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|10  # Variable: L"Timeout"
 ```
@@ -633,11 +671,13 @@ sections of the DSC file.
                      {<TS> <VpdEntry>}
 <PcdsExHii>      ::= "[PcdsDynamicExHii" [<PdhAttribs>] "]" <EOL>
                      <PcdHiiEntries>*
-<PdhAttribs>     ::= <attrs> ["," <TS> "PcdsDynamicExHii <attrs>]*
+<PdhAttribs>     ::= <phattrs> ["," <TS> "PcdsDynamicExHii <phattrs>]*
                      <PdvEntries>*
 <PcdHiiEntries>  ::= {<MacroDefinition>} {<IncludeStatement>} {<TS> <HiiEntry>}
 <attrs>          ::= "." <arch> ["." <SkuIds>]
+<phattrs>        ::= "." <arch> ["." <SkuIds>]["." <DefaultStore>]
 <SkuIdS>         ::= <Keyword> [<FS> <Keyword>]*
+<DefaultStore>   ::= <Keyword>
 <Keyword>        ::= <UiName>
 <UiName>         ::= <Word>
 <MinEntry>       ::= <PcdName> [<FS> <PcdValue>] <EOL>
@@ -732,6 +772,42 @@ the `[Defines]` section. Use of the `SkuId` modifier for the `[PcdsDynamic*]`
 section tag can be used as a conditional modifier or to groups sets of PCDs
 according to the `SkuId` identifier.
 
+**_DefaultStore_**
+
+`DefaultStore` in the DSC file is used to specify DynamicHii/DynamicExHii PCD 
+value as the default EFI variable for which default store. It is only valid in 
+DynamicHii/DynamicExHii section. If it is not specified, DynamicHii/DynamicExHii 
+PCD value will be used as the standard default EFI variable. For the different 
+combination of SKU and DefaultStore, their inheritance is described as the below.
+
+SKU will inherit its parent SKU setting. DEFAULT SKU is the default parent SKU.
+DefaultStore is the subsection of SKU. It will first inherit from the same 
+DefaultStore in its parent SKU, then inherit other DefaultStore in the same SKU. 
+DefaultStore with the big default store ID will inherit the setting from one with 
+the small default store ID. If there are more than one small default store ID, 
+it will use the biggest one to be inherit. Here is the example. Four PcdsDynamicExHii
+sections are defined.
+
+# Four PcdsDynamicExHii section
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Default.Manufacturing]
+[PcdsDynamicExHii.common.Sku1.Standard]
+[PcdsDynamicExHii.common.Sku1.Manufacturing]
+
+# DEFAULT Manufacturing setting based on two sections
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Default.Manufacturing]
+
+# SKU1 Standard setting based on two sections
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Sku1.Standard]
+
+# SKU1 Manufacturing setting based on four sections
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Default.Manufacturing]
+[PcdsDynamicExHii.common.Sku1.Standard]
+[PcdsDynamicExHii.common.Sku1.Manufacturing]
+
 **_PcdValues_**
 
 PCD values are optional for `[PcdsDynamicExDefault]` sections. The PCD values
@@ -761,7 +837,7 @@ the _UEFI Specification_ for a description of these attributes.
   gNoSuchTokenSpaceGuid.PcdOemBootOptionPath|0x2338|100|" "              # VOID*
   gNoSuchTokenSpaceGuid.PcdEnableFastBoot   |0x239C|FALSE                # BOOLEAN
 
-[PcdsDynamicExHii.IA32, PcdsDynamicExHii.X64.Sku1]
+[PcdsDynamicExHii.IA32, PcdsDynamicExHii.X64.Sku1.Standard]
   gEfiMyModulePkgTokenSpaceGuid.PcdChassisIntrution|0x0053 0x0065 0x0074 0x0075 0x0070|gSysConfigGuid|0x83|0x0
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0  # Variable: L"Timeout"
 ```
diff --git a/3_edk_ii_dsc_file_format/313_[defaultstores]_section.md b/3_edk_ii_dsc_file_format/313_[defaultstores]_section.md
new file mode 100644
index 0000000..614ed01
--- /dev/null
+++ b/3_edk_ii_dsc_file_format/313_[defaultstores]_section.md
@@ -0,0 +1,60 @@
+<!--- @file
+  3.13 [DefaultStores] Section
+
+  Copyright (c) 2006-2018, Intel Corporation. All rights reserved.<BR>
+
+  Redistribution and use in source (original document form) and 'compiled'
+  forms (converted to PDF, epub, HTML and other formats) with or without
+  modification, are permitted provided that the following conditions are met:
+
+  1) Redistributions of source code (original document form) must retain the
+     above copyright notice, this list of conditions and the following
+     disclaimer as the first lines of this file unmodified.
+
+  2) Redistributions in compiled form (transformed to other DTDs, converted to
+     PDF, epub, HTML and other formats) must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+
+  THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY EXPRESS OR
+  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+  EVENT SHALL TIANOCORE PROJECT  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, EVEN IF
+  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+
+## 3.13 [DefaultStores] Section
+
+The `[DefaultStores]` section is optional in all EDK II DSC files.
+
+#### Summary
+
+Entries may appear in any order. This section lists numeric mappings to the 
+Default Store User Interface Name, only valid values from this list can be 
+specified in the PcdsDynamicHii/PcdsDynamicExHii section.
+
+If this section is not specified, the parsing tools will assume standard default
+be applied in PcdsDynamicHii/PcdsDynamicExHii section.
+
+#### Prototype
+
+```c
+<DefaultStore>     ::= "[DefaultStores]" <EOL>
+                {<Statement>*}
+<Statement> ::= <TS> <Number> <FS> <UiName> <EOL>
+<UiName>    ::= <Word>
+```
+
+#### Example
+
+```ini
+[DefaultStores]
+  0 | Standard        # UEFI Standard default
+  1 | Manufacturing   # UEFI Manufacturing default
+```
-- 
2.8.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [Patch 2/3] DscSpecification: Add DefaultStores section to describe the default setting
Posted by Zhu, Yonghong 6 years, 9 months ago
Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com> 

Best Regards,
Zhu Yonghong


-----Original Message-----
From: Gao, Liming 
Sent: Friday, March 16, 2018 12:42 PM
To: edk2-devel@lists.01.org
Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Zhu, Yonghong <yonghong.zhu@intel.com>
Subject: [Patch 2/3] DscSpecification: Add DefaultStores section to describe the default setting

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Liming Gao <liming.gao@intel.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
---
 .../213_[defaultstores]_section_processing.md      | 49 ++++++++++++
 3_edk_ii_dsc_file_format/310_pcd_sections.md       | 86 ++++++++++++++++++++--
 .../313_[defaultstores]_section.md                 | 60 +++++++++++++++
 3 files changed, 190 insertions(+), 5 deletions(-)  create mode 100644 2_dsc_overview/213_[defaultstores]_section_processing.md
 create mode 100644 3_edk_ii_dsc_file_format/313_[defaultstores]_section.md

diff --git a/2_dsc_overview/213_[defaultstores]_section_processing.md b/2_dsc_overview/213_[defaultstores]_section_processing.md
new file mode 100644
index 0000000..88a7ad2
--- /dev/null
+++ b/2_dsc_overview/213_[defaultstores]_section_processing.md
@@ -0,0 +1,49 @@
+<!--- @file
+  2.13 [DefaultStores] Section Processing
+
+  Copyright (c) 2006-2018, Intel Corporation. All rights reserved.<BR>
+
+  Redistribution and use in source (original document form) and 'compiled'
+  forms (converted to PDF, epub, HTML and other formats) with or 
+ without  modification, are permitted provided that the following conditions are met:
+
+  1) Redistributions of source code (original document form) must retain the
+     above copyright notice, this list of conditions and the following
+     disclaimer as the first lines of this file unmodified.
+
+  2) Redistributions in compiled form (transformed to other DTDs, converted to
+     PDF, epub, HTML and other formats) must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+
+  THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY 
+ EXPRESS OR  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+ IMPLIED WARRANTIES OF  MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+ PURPOSE ARE DISCLAIMED. IN NO  EVENT SHALL TIANOCORE PROJECT  BE 
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  SPECIAL, EXEMPLARY, OR 
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  PROCUREMENT OF 
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  OR 
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
+ OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, 
+ EVEN IF  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+
+## 2.13 [DefaultStores] Section Processing
+
+The contents of this section are used to define DefaultStores names. 
+Default store is UEFI HII concept. It is used to define HII default 
+setting for the different store, such as standard default, 
+manufacturing default. Platform can define the supported default store 
+for DynamicHii/DynamicExHii PCD in this section, tag name to be used. 
+This section is optional. By default, standard default will be used. Each entry below the section header is of the form:
+
+`Number | word`
+
+The following is an example of a `[DefaultStores]` section:
+
+```
+[DefaultStores]
+  0 | Standard        # UEFI Standard default
+  1 | Manufacturing   # UEFI Manufacturing default
+```
diff --git a/3_edk_ii_dsc_file_format/310_pcd_sections.md b/3_edk_ii_dsc_file_format/310_pcd_sections.md
index 18a243d..f79a0fd 100644
--- a/3_edk_ii_dsc_file_format/310_pcd_sections.md
+++ b/3_edk_ii_dsc_file_format/310_pcd_sections.md
@@ -1,7 +1,7 @@
 <!--- @file
   3.10 PCD Sections
 
-  Copyright (c) 2006-2017, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2006-2018, Intel Corporation. All rights reserved.<BR>
 
   Redistribution and use in source (original document form) and 'compiled'
   forms (converted to PDF, epub, HTML and other formats) with or without @@ -457,10 +457,12 @@ sections of the DSC file.
 <PdvEntries>     ::= {<MacroDefinition>} {<IncludeStatement>} {<TS> <VpdEntry>}
 <PcdsHii>        ::= "[PcdsDynamicHii" [<PdhAttribs>] "]" <EOL>
                      <PcdHiiEntries>*
-<PdhAttribs>     ::= <attrs> ["," <TS> "PcdsDynamicHii <attrs>]* <PdvEntries>*
+<PdhAttribs>     ::= <phattrs> ["," <TS> "PcdsDynamicHii <phattrs>]* <PdvEntries>*
 <PcdHiiEntries>  ::= {<MacroDefinition>} {<IncludeStatement>} {<TS> <HiiEntry>}
 <attrs>          ::= "." <arch> ["." <SkuIds>]
+<phattrs>        ::= "." <arch> ["." <SkuIds>]["." <DefaultStore>]
 <SkuIdS>         ::= <Keyword> [<FS> <Keyword>]*
+<DefaultStore>   ::= <Keyword>
 <Keyword>        ::= <UiName>
 <UiName>         ::= <Word>
 <MinEntry>       ::= <PcdName> [<FS> <PcdValue>] <EOL>
@@ -555,6 +557,42 @@ the `[Defines]` section. Use of the `SkuId` modifier for the `[PcdsDynamic*]`  section tag can be used as a conditional modifier or to groups sets of PCDs  according to the `SkuId` identifier.
 
+**_DefaultStore_**
+
+`DefaultStore` in the DSC file is used to specify 
+DynamicHii/DynamicExHii PCD value as the default EFI variable for which 
+default store. It is only valid in DynamicHii/DynamicExHii section. If 
+it is not specified, DynamicHii/DynamicExHii PCD value will be used as 
+the standard default EFI variable. For the different combination of SKU and DefaultStore, their inheritance is described as the below.
+
+SKU will inherit its parent SKU setting. DEFAULT SKU is the default parent SKU.
+DefaultStore is the subsection of SKU. It will first inherit from the 
+same DefaultStore in its parent SKU, then inherit other DefaultStore in the same SKU.
+DefaultStore with the big default store ID will inherit the setting 
+from one with the small default store ID. If there are more than one 
+small default store ID, it will use the biggest one to be inherit. Here 
+is the example. Four PcdsDynamicHii sections are defined.
+
+# Four PcdsDynamicHii section
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Default.Manufacturing]
+[PcdsDynamicHii.common.Sku1.Standard]
+[PcdsDynamicHii.common.Sku1.Manufacturing]
+
+# DEFAULT Manufacturing setting based on two sections 
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Default.Manufacturing]
+
+# SKU1 Standard setting based on two sections 
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Sku1.Standard]
+
+# SKU1 Manufacturing setting based on four sections 
+[PcdsDynamicHii.common.Default.Standard]
+[PcdsDynamicHii.common.Default.Manufacturing]
+[PcdsDynamicHii.common.Sku1.Standard]
+[PcdsDynamicHii.common.Sku1.Manufacturing]
+
 **_PcdValues_**
 
 PCD values are optional for `[PcdsDynamicDefault]` sections. The PCD values for @@ -584,7 +622,7 @@ the _UEFI Specification_ for a description of these attributes.
   gNoSuchTokenSpaceGuid.PcdOemBootOptionPath|0x2338|100|" "             # VOID*
   gNoSuchTokenSpaceGuid.PcdEnableFastBoot   |0x239C|1  |FALSE           # BOOLEAN
 
-[PcdsDynamicHii.IA32, PcdsDynamicHii.X64.Sku1]
+[PcdsDynamicHii.IA32, PcdsDynamicHii.X64.Sku1.Standard]
   gEfiMyModulePkgTokenSpaceGuid.PcdChassisIntrution|0x0053 0x0065 0x0074 0x0075 0x0070|gSysConfigGuid|0x83|0x0
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|10  # Variable: L"Timeout"
 ```
@@ -633,11 +671,13 @@ sections of the DSC file.
                      {<TS> <VpdEntry>}
 <PcdsExHii>      ::= "[PcdsDynamicExHii" [<PdhAttribs>] "]" <EOL>
                      <PcdHiiEntries>*
-<PdhAttribs>     ::= <attrs> ["," <TS> "PcdsDynamicExHii <attrs>]*
+<PdhAttribs>     ::= <phattrs> ["," <TS> "PcdsDynamicExHii <phattrs>]*
                      <PdvEntries>*
 <PcdHiiEntries>  ::= {<MacroDefinition>} {<IncludeStatement>} {<TS> <HiiEntry>}
 <attrs>          ::= "." <arch> ["." <SkuIds>]
+<phattrs>        ::= "." <arch> ["." <SkuIds>]["." <DefaultStore>]
 <SkuIdS>         ::= <Keyword> [<FS> <Keyword>]*
+<DefaultStore>   ::= <Keyword>
 <Keyword>        ::= <UiName>
 <UiName>         ::= <Word>
 <MinEntry>       ::= <PcdName> [<FS> <PcdValue>] <EOL>
@@ -732,6 +772,42 @@ the `[Defines]` section. Use of the `SkuId` modifier for the `[PcdsDynamic*]`  section tag can be used as a conditional modifier or to groups sets of PCDs  according to the `SkuId` identifier.
 
+**_DefaultStore_**
+
+`DefaultStore` in the DSC file is used to specify 
+DynamicHii/DynamicExHii PCD value as the default EFI variable for which 
+default store. It is only valid in DynamicHii/DynamicExHii section. If 
+it is not specified, DynamicHii/DynamicExHii PCD value will be used as 
+the standard default EFI variable. For the different combination of SKU and DefaultStore, their inheritance is described as the below.
+
+SKU will inherit its parent SKU setting. DEFAULT SKU is the default parent SKU.
+DefaultStore is the subsection of SKU. It will first inherit from the 
+same DefaultStore in its parent SKU, then inherit other DefaultStore in the same SKU.
+DefaultStore with the big default store ID will inherit the setting 
+from one with the small default store ID. If there are more than one 
+small default store ID, it will use the biggest one to be inherit. Here 
+is the example. Four PcdsDynamicExHii sections are defined.
+
+# Four PcdsDynamicExHii section
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Default.Manufacturing]
+[PcdsDynamicExHii.common.Sku1.Standard]
+[PcdsDynamicExHii.common.Sku1.Manufacturing]
+
+# DEFAULT Manufacturing setting based on two sections 
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Default.Manufacturing]
+
+# SKU1 Standard setting based on two sections 
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Sku1.Standard]
+
+# SKU1 Manufacturing setting based on four sections 
+[PcdsDynamicExHii.common.Default.Standard]
+[PcdsDynamicExHii.common.Default.Manufacturing]
+[PcdsDynamicExHii.common.Sku1.Standard]
+[PcdsDynamicExHii.common.Sku1.Manufacturing]
+
 **_PcdValues_**
 
 PCD values are optional for `[PcdsDynamicExDefault]` sections. The PCD values @@ -761,7 +837,7 @@ the _UEFI Specification_ for a description of these attributes.
   gNoSuchTokenSpaceGuid.PcdOemBootOptionPath|0x2338|100|" "              # VOID*
   gNoSuchTokenSpaceGuid.PcdEnableFastBoot   |0x239C|FALSE                # BOOLEAN
 
-[PcdsDynamicExHii.IA32, PcdsDynamicExHii.X64.Sku1]
+[PcdsDynamicExHii.IA32, PcdsDynamicExHii.X64.Sku1.Standard]
   gEfiMyModulePkgTokenSpaceGuid.PcdChassisIntrution|0x0053 0x0065 0x0074 0x0075 0x0070|gSysConfigGuid|0x83|0x0
   gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0  # Variable: L"Timeout"
 ```
diff --git a/3_edk_ii_dsc_file_format/313_[defaultstores]_section.md b/3_edk_ii_dsc_file_format/313_[defaultstores]_section.md
new file mode 100644
index 0000000..614ed01
--- /dev/null
+++ b/3_edk_ii_dsc_file_format/313_[defaultstores]_section.md
@@ -0,0 +1,60 @@
+<!--- @file
+  3.13 [DefaultStores] Section
+
+  Copyright (c) 2006-2018, Intel Corporation. All rights reserved.<BR>
+
+  Redistribution and use in source (original document form) and 'compiled'
+  forms (converted to PDF, epub, HTML and other formats) with or 
+ without  modification, are permitted provided that the following conditions are met:
+
+  1) Redistributions of source code (original document form) must retain the
+     above copyright notice, this list of conditions and the following
+     disclaimer as the first lines of this file unmodified.
+
+  2) Redistributions in compiled form (transformed to other DTDs, converted to
+     PDF, epub, HTML and other formats) must reproduce the above copyright
+     notice, this list of conditions and the following disclaimer in the
+     documentation and/or other materials provided with the distribution.
+
+  THIS DOCUMENTATION IS PROVIDED BY TIANOCORE PROJECT "AS IS" AND ANY 
+ EXPRESS OR  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+ IMPLIED WARRANTIES OF  MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+ PURPOSE ARE DISCLAIMED. IN NO  EVENT SHALL TIANOCORE PROJECT  BE 
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  SPECIAL, EXEMPLARY, OR 
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,  PROCUREMENT OF 
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;  OR 
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
+ OR
+  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENTATION, 
+ EVEN IF  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+-->
+
+## 3.13 [DefaultStores] Section
+
+The `[DefaultStores]` section is optional in all EDK II DSC files.
+
+#### Summary
+
+Entries may appear in any order. This section lists numeric mappings to 
+the Default Store User Interface Name, only valid values from this list 
+can be specified in the PcdsDynamicHii/PcdsDynamicExHii section.
+
+If this section is not specified, the parsing tools will assume 
+standard default be applied in PcdsDynamicHii/PcdsDynamicExHii section.
+
+#### Prototype
+
+```c
+<DefaultStore>     ::= "[DefaultStores]" <EOL>
+                {<Statement>*}
+<Statement> ::= <TS> <Number> <FS> <UiName> <EOL>
+<UiName>    ::= <Word>
+```
+
+#### Example
+
+```ini
+[DefaultStores]
+  0 | Standard        # UEFI Standard default
+  1 | Manufacturing   # UEFI Manufacturing default
+```
--
2.8.0.windows.1

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