Date   

Re: [PATCH 3/3] BaseTools GCC/ARM: add -fno-builtin to CC flags

Ard Biesheuvel
 

On 5 August 2016 at 16:26, Gao, Liming <liming.gao@intel.com> wrote:
Reviewed-by: Liming Gao <liming.gao@intel.com>
Thanks all

Pushed as

59ceaa0a871d ArmPkg/ArmSoftFloatLib: disable LTO build for GCC
f8c51389c6db ArmPkg/CompilerIntrinsicsLib: make the default memset() weak
0667e985270b BaseTools GCC/ARM: add -fno-builtin to CC flags


-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
Sent: Thursday, August 4, 2016 10:43 PM
To: Zhu, Yonghong <yonghong.zhu@intel.com>; Gao, Liming <liming.gao@intel.com>; edk2-devel@lists.01.org
Cc: leif.lindholm@linaro.org; eugene@hp.com; Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH 3/3] BaseTools GCC/ARM: add -fno-builtin to CC flags

Avoid build errors when including OpensslLib, which may throw
undefined reference errors for builtin functions if -fno-builtin
is not specified (and it is already set for IA32, X64 and AARCH64)
So set it for ARM as well.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
BaseTools/Conf/tools_def.template | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
index 88af82a683d9..4f1dd4be378e 100644
--- a/BaseTools/Conf/tools_def.template
+++ b/BaseTools/Conf/tools_def.template
@@ -4334,7 +4334,7 @@ DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-strict-aliasing -
DEFINE GCC_IA32_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -m32 -malign-double -freorder-blocks -freorder-blocks-and-partition -O2 -mno-stack-arg-probe
DEFINE GCC_X64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-address -mno-stack-arg-probe
DEFINE GCC_IPF_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -minline-int-divide-min-latency
-DEFINE GCC_ARM_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -Wno-address -mthumb -mfloat-abi=soft
+DEFINE GCC_ARM_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin -Wno-address -mthumb -mfloat-abi=soft
DEFINE GCC_AARCH64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin -Wno-address -fno-asynchronous-unwind-tables
DEFINE GCC_AARCH64_CC_XIPFLAGS = -mstrict-align
DEFINE GCC_DLINK_FLAGS_COMMON = -nostdlib --pie
--
2.7.4


Re: [PATCH 3/3] BaseTools GCC/ARM: add -fno-builtin to CC flags

Liming Gao
 

Reviewed-by: Liming Gao <liming.gao@intel.com>

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
Sent: Thursday, August 4, 2016 10:43 PM
To: Zhu, Yonghong <yonghong.zhu@intel.com>; Gao, Liming <liming.gao@intel.com>; edk2-devel@lists.01.org
Cc: leif.lindholm@linaro.org; eugene@hp.com; Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH 3/3] BaseTools GCC/ARM: add -fno-builtin to CC flags

Avoid build errors when including OpensslLib, which may throw
undefined reference errors for builtin functions if -fno-builtin
is not specified (and it is already set for IA32, X64 and AARCH64)
So set it for ARM as well.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
---
BaseTools/Conf/tools_def.template | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
index 88af82a683d9..4f1dd4be378e 100644
--- a/BaseTools/Conf/tools_def.template
+++ b/BaseTools/Conf/tools_def.template
@@ -4334,7 +4334,7 @@ DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-strict-aliasing -
DEFINE GCC_IA32_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -m32 -malign-double -freorder-blocks -freorder-blocks-and-partition -O2 -mno-stack-arg-probe
DEFINE GCC_X64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-address -mno-stack-arg-probe
DEFINE GCC_IPF_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -minline-int-divide-min-latency
-DEFINE GCC_ARM_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -Wno-address -mthumb -mfloat-abi=soft
+DEFINE GCC_ARM_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin -Wno-address -mthumb -mfloat-abi=soft
DEFINE GCC_AARCH64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -fno-short-enums -fverbose-asm -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-builtin -Wno-address -fno-asynchronous-unwind-tables
DEFINE GCC_AARCH64_CC_XIPFLAGS = -mstrict-align
DEFINE GCC_DLINK_FLAGS_COMMON = -nostdlib --pie
--
2.7.4


Re: [PATCH 0/3] Build fixes for ARM/OpenSSL

Leif Lindholm <leif.lindholm@...>
 

I'm happy with these changes.
For the series:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

On 4 August 2016 at 15:42, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
This series addresses some issues that cause the build to be broken
for ARM GCC5 at the moment when including OpensslLib in the build.

Ard Biesheuvel (3):
ArmPkg/ArmSoftFloatLib: disable LTO build for GCC
ArmPkg/CompilerIntrinsicsLib: make the default memset() weak
BaseTools GCC/ARM: add -fno-builtin to CC flags

ArmPkg/Library/ArmSoftFloatLib/ArmSoftFloatLib.inf | 2 +-
ArmPkg/Library/CompilerIntrinsicsLib/Arm/memset.S | 8 ++++++++
BaseTools/Conf/tools_def.template | 2 +-
3 files changed, 10 insertions(+), 2 deletions(-)

--
2.7.4


Shell version 2.2

Meenakshi Aggarwal <meenakshi.aggarwal@...>
 

Hi,


I can see UEFI shell specification 2.2 (http://www.uefi.org/sites/default/files/resources/UEFI_Shell_2_2.pdf) is available,
But on edk2 master branch current version of Shell is still showing 2.1.

File:ShellPkg/Include/Protocol/EfiShell.h

enum ShellVersion {
SHELL_MAJOR_VERSION = 2,
SHELL_MINOR_VERSION = 1
};



Please tell if I am looking at correct file,
actually I want to update my shell to 2.2, but it looks like edk2 master branch doesn't support shell specification 2.2.

Is my understanding correct?



Thanks & Regards,
Meenakshi


[PATCH] ShellPkg SmbiosView: Show "SocketDesignation" instead of "Socket" for Type 4

Star Zeng <star.zeng@...>
 

It is to make the info shown more aligned with SMBIOS spec.

Cc: Amy Chan <amy.chan@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Jaben Carsey <jaben.carsey@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <star.zeng@intel.com>
---
ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
index 3f99dc4825dc..7e17b69d5afa 100644
--- a/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
+++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/SmbiosView/PrintInfo.c
@@ -1,7 +1,7 @@
/** @file
Module for clarifying the content of the smbios structure element information.

- Copyright (c) 2005 - 2015, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2005 - 2016, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials
@@ -399,7 +399,7 @@ SmbiosPrintStructure (
// Processor Information (Type 4)
//
case 4:
- PRINT_PENDING_STRING (Struct, Type4, Socket);
+ PRINT_SMBIOS_STRING (Struct, Struct->Type4->Socket, SocketDesignation)
DisplayProcessorType (Struct->Type4->ProcessorType, Option);
if (AE_SMBIOS_VERSION (0x2, 0x6) && (Struct->Hdr->Length > 0x28) &&
(Struct->Type4->ProcessorFamily == 0xFE)) {
--
2.8.1.windows.1


[PATCH] IntelFsp2Pkg: Converted PatchFvUserManual from .docx to .md format

Giri P Mudusuru <giri.p.mudusuru@...>
 

Converted the the word format of the documentation into markdown format
for PatchFvUserManual

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Maurice Ma <maurice.ma@intel.com>
Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Cc: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>
---
.../Tools/UserManuals/PatchFvUserManual.docx | Bin 21481 -> 0 bytes
.../Tools/UserManuals/PatchFvUserManual.md | 123 +++++++++++++++++++++
2 files changed, 123 insertions(+)
delete mode 100644 IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
create mode 100644 IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md

diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.docx
deleted file mode 100644
index ab1eda993e7b7d249a0390dc1db83ff4987395da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21481
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

diff --git a/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
new file mode 100644
index 0000000..3c5d89f
--- /dev/null
+++ b/IntelFsp2Pkg/Tools/UserManuals/PatchFvUserManual.md
@@ -0,0 +1,123 @@
+#Name
+**_PatchFv.py_** - The python script that patches the firmware volumes (**FV**)
+with in the flash device (**FD**) file post FSP build.
+
+#Synopsis
+
+```
+PatchFv FvBuildDir [FvFileBaseNames:]FdFileBaseNameToPatch ["Offset, Value"]+
+ | ["Offset, Value, @Comment"]+
+ | ["Offset, Value, $Command"]+
+ | ["Offset, Value, $Command, @Comment"]+
+```
+
+#Description
+The **_PatchFv.py_** tool allows the developer to fix up FD images to follow the
+Intel FSP Architecture specification. It also makes the FD image relocatable.
+The tool is written in Python and uses Python 2.7 or later to run.
+Consider using the tool in a build script.
+
+#FvBuildDir (Argument 1)
+This is the first argument that **_PatchFv.py_** requires. It is the build
+directory for all firmware volumes created during the FSP build. The path must
+be either an absolute path or a relevant path, relevant to the top level of the
+FSP tree.
+
+####Example usage:
+```
+ Build\YouPlatformFspPkg\%BD_TARGET%_%VS_VERSION%%VS_X86%\FV
+```
+
+The example used contains Windows batch script %VARIABLES%.
+
+#FvFileBaseNames (Argument 2: 0ptional Part 1)
+The firmware volume file base names (**_FvFileBaseNames_**) are the independent
+Fv’s that are to be patched within the FD. (0 or more in the form
+**FVFILEBASENAME:**) The colon **:** is used for delimiting the single
+argument and must be appended to the end of each (**_FvFileBaseNames_**).
+
+####Example usage:
+```
+STAGE1:STAGE2:MANIFEST:YOURPLATFORM
+```
+
+In the example **STAGE1** is **STAGE1.Fv** in **YOURPLATFORM.fd**.
+
+# FdFileNameToPatch (Argument 2: Mandatory Part 2)
+
+Firmware device file name to patch (**_FdFileNameToPatch_**) is the base name of
+the FD file that is to be patched. (1 only, in the form **YOURPLATFORM**)
+
+####Example usage:
+```
+STAGE1:STAGE2:MANIFEST:YOURPLATFORM
+```
+
+In the example **YOURPLATFORM** is from **_YOURPLATFORM.fd_**
+
+#"Offset, Value[, Command][, Comment]" (Argument 3)
+The **_Offset_** can be a positive or negative number and represents where the
+**_Value_** to be patched is located within the FD. The **_Value_** is what
+will be written at the given **_Offset_** in the FD. Constants may be used for
+both offsets and values. Also, this argument handles expressions for both
+offsets and values using these operators:
+
+```
+ = - * & | ~ ( ) [ ] { } < >
+```
+
+The entire argument includes the quote marks like in the example argument below:
+
+```
+0xFFFFFFC0, SomeCore:__EntryPoint - [0x000000F0],@SomeCore Entry
+```
+
+###Constants:
+ Hexadecimal (use **0x** as prefix) | Decimal
+
+####Examples:
+
+| **Positive Hex** | **Negative Hex** | **Positive Decimal** | **Negative Decimal** |
+| ---------------: | ---------------: | -------------------: | -------------------: |
+| 0x000000BC | 0xFFFFFFA2 | 188 | -94 |
+
+```
+ModuleName:FunctionName | ModuleName:GlobalVariableName
+ModuleGuid:Offset
+```
+
+###Operators:
+
+```
+
+ + Addition
+ - Subtraction
+ * Multiplication
+ & Logical and
+ | Logical or
+ ~ Complement
+ ( ) Evaluation control
+ [ ] Get a DWord value at the specified offset expression from [expr]
+ { } Convert an offset {expr} into an absolute address (FSP_BASE + expr)
+ < > Convert absolute address <expr> into an image offset (expr & FSP_SIZE)
+
+```
+
+###Special Commands:
+Special commands must use the **$** symbol as a prefix to the command itself.
+There is only one command available at this time.
+
+```
+$COPY – Copy a binary block from source to destination.
+```
+
+####Example:
+
+```
+0x94, [PlatformInit:__gPcd_BinPatch_FvRecOffset] + 0x94, [0x98], $COPY, @Sync up 2nd FSP Header
+```
+
+###Comments:
+Comments are allowed in the **Offset, Value [, Comment]** argument. Comments
+must use the **@** symbol as a prefix. The comment will output to the build
+window upon successful completion of patching along with the offset and value data.
--
2.9.0.windows.1


Re: [PATCH] IntelFsp2Pkg: Only include required header files in FspEas.h

Mudusuru, Giri P <giri.p.mudusuru@...>
 

Reviewed-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>

-----Original Message-----
From: Ma, Maurice
Sent: Thursday, August 4, 2016 9:20 PM
To: edk2-devel@lists.01.org
Cc: Ma, Maurice <maurice.ma@intel.com>; Yao, Jiewen
<jiewen.yao@intel.com>; Mudusuru, Giri P <giri.p.mudusuru@intel.com>
Subject: [edk2] [PATCH] IntelFsp2Pkg: Only include required header files in
FspEas.h

Current FspEas.h file includes Uefi.h which also refers to lots of other
UEFI header files not used by FSP consumer. It caused many unnecessary
header file overhead for a bootloader that consumes FSP, such as coreboot.
This change reduces the required header file number down to 3.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Maurice Ma <maurice.ma@intel.com>
---
IntelFsp2Pkg/Include/FspEas.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/IntelFsp2Pkg/Include/FspEas.h b/IntelFsp2Pkg/Include/FspEas.h
index 79bb0b8e8efc..00098a392699 100644
--- a/IntelFsp2Pkg/Include/FspEas.h
+++ b/IntelFsp2Pkg/Include/FspEas.h
@@ -16,7 +16,7 @@
#ifndef _FSP_EAS_H_
#define _FSP_EAS_H_

-#include <Uefi.h>
+#include <Uefi/UefiBaseType.h>
#include <Guid/GuidHobFspEas.h>
#include <Guid/FspHeaderFile.h>
#include <FspEas/FspApi.h>
--
1.9.5.msysgit.0


Re: [PATCH 10/17] NetworkPkg DSC: Add build option to disable deprecated APIs

Wu, Jiaxin <jiaxin.wu@...>
 

Reviewed-By: Wu Jiaxin <jiaxin.wu@intel.com>


Best Regards!
Jiaxin

-----Original Message-----
From: Wu, Hao A
Sent: Friday, August 5, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
Cc: Wu, Hao A <hao.a.wu@intel.com>; Fu, Siyuan <siyuan.fu@intel.com>;
Wu, Jiaxin <jiaxin.wu@intel.com>
Subject: [PATCH 10/17] NetworkPkg DSC: Add build option to disable
deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC files
to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Siyuan Fu <siyuan.fu@intel.com>
Cc: Jiaxin Wu <jiaxin.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
NetworkPkg/NetworkPkg.dsc | 3 +++
1 file changed, 3 insertions(+)

diff --git a/NetworkPkg/NetworkPkg.dsc b/NetworkPkg/NetworkPkg.dsc
index 3c809d5..1ef353e 100644
--- a/NetworkPkg/NetworkPkg.dsc
+++ b/NetworkPkg/NetworkPkg.dsc
@@ -123,3 +123,6 @@
NetworkPkg/IScsiDxe/IScsiDxe.inf
NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
NetworkPkg/Application/Ping6/Ping6.inf
+
+[BuildOptions]
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
--
1.9.5.msysgit.0


Re: [PATCH 16/17] UefiCpuPkg DSC: Add build option to disable deprecated APIs

Tian, Feng <feng.tian@...>
 

Reviewed-by: Feng Tian <feng.tian@Intel.com>

Thanks
Feng

-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Hao Wu
Sent: Friday, August 5, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
Cc: Wu, Hao A <hao.a.wu@intel.com>; Fan, Jeff <jeff.fan@intel.com>
Subject: [edk2] [PATCH 16/17] UefiCpuPkg DSC: Add build option to disable deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC files to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Jeff Fan <jeff.fan@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
UefiCpuPkg/UefiCpuPkg.dsc | 3 +++
1 file changed, 3 insertions(+)

diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc index b35f41b..bbd3880 100644
--- a/UefiCpuPkg/UefiCpuPkg.dsc
+++ b/UefiCpuPkg/UefiCpuPkg.dsc
@@ -124,3 +124,6 @@
UefiCpuPkg/SecCore/SecCore.inf
UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf
+
+[BuildOptions]
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
--
1.9.5.msysgit.0

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


Re: [PATCH 15/17] SourceLevelDebugPkg DSC: Add build option to disable deprecated APIs

Ni, Ruiyu <ruiyu.ni@...>
 

Since Jeff is happy on vocation, so
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>

-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Hao Wu
Sent: Friday, August 5, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
Cc: Wu, Hao A <hao.a.wu@intel.com>; Fan, Jeff <jeff.fan@intel.com>
Subject: [edk2] [PATCH 15/17] SourceLevelDebugPkg DSC: Add build option to disable deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC
files to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Jeff Fan <jeff.fan@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
SourceLevelDebugPkg/SourceLevelDebugPkg.dsc | 3 +++
1 file changed, 3 insertions(+)

diff --git a/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc b/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc
index bf14ec4..d9b1b84 100644
--- a/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc
+++ b/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc
@@ -107,3 +107,6 @@
SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf
SourceLevelDebugPkg/DebugAgentPei/DebugAgentPei.inf
SourceLevelDebugPkg/DebugAgentDxe/DebugAgentDxe.inf
+
+[BuildOptions]
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
--
1.9.5.msysgit.0

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


[PATCH] IntelFsp2Pkg: Only include required header files in FspEas.h

Ma, Maurice
 

Current FspEas.h file includes Uefi.h which also refers to lots of other
UEFI header files not used by FSP consumer. It caused many unnecessary
header file overhead for a bootloader that consumes FSP, such as coreboot.
This change reduces the required header file number down to 3.

Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Maurice Ma <maurice.ma@intel.com>
---
IntelFsp2Pkg/Include/FspEas.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/IntelFsp2Pkg/Include/FspEas.h b/IntelFsp2Pkg/Include/FspEas.h
index 79bb0b8e8efc..00098a392699 100644
--- a/IntelFsp2Pkg/Include/FspEas.h
+++ b/IntelFsp2Pkg/Include/FspEas.h
@@ -16,7 +16,7 @@
#ifndef _FSP_EAS_H_
#define _FSP_EAS_H_

-#include <Uefi.h>
+#include <Uefi/UefiBaseType.h>
#include <Guid/GuidHobFspEas.h>
#include <Guid/FspHeaderFile.h>
#include <FspEas/FspApi.h>
--
1.9.5.msysgit.0


Re: Breaking change issue with NetworkPkg/Ip6Dxe/Ip6ConfigImlp.[c, h]

Ye, Ting <ting.ye@...>
 

Hi Larry,

We are very sorry about the impact you suffered today. We made the change in early 2013 to support the existing NVRAM variable when firmware image was updated from IA32 to X64. Unfortunately we introduced an incompatibility issue as you raised. Now we prefer to keep the existing definition, since if we change it back that would introduce another similar incompatibility issue. What do you think about this?

Best Regards,
Ye Ting

-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Larry Cleeton
Sent: Wednesday, August 03, 2016 4:55 AM
To: edk2-devel@lists.01.org
Subject: [edk2] Breaking change issue with NetworkPkg/Ip6Dxe/Ip6ConfigImlp.[c, h]

This commit (fdc4b0b147b386e966e99893526181dfae9eaeef) changed a data structure that is stored in an NVRAM variable.
See NetworkPkg/Ip6Dxe/Ip6ConfigImpl.[c,h]

This data structure:

typedef struct {
UINT16 Offset;
UINTN DataSize;
EFI_IP6_CONFIG_DATA_TYPE DataType;
} IP6_CONFIG_DATA_RECORD;

Is now:

typedef struct {
UINT16 Offset;
UINT32 DataSize; <---------------- changed size in 64bit environments
EFI_IP6_CONFIG_DATA_TYPE DataType;
} IP6_CONFIG_DATA_RECORD;

Unfortunately with a 64bit implementation this current structure is now *not* compatible with an existing NVRAM variable written with the previous version of the structure. It's causing me considerable grief so I'm just sharing the discovery. It would only impact you if you update some 64bit machine's firmware with a new version containing this change.

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


Re: [PATCH 17/17] CryptoPkg DSC: Add build option to disable deprecated APIs

Ye, Ting <ting.ye@...>
 

Reviewed-by: Ye Ting <ting.ye@intel.com>

-----Original Message-----
From: Wu, Hao A
Sent: Friday, August 05, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
Cc: Wu, Hao A <hao.a.wu@intel.com>; Long, Qin <qin.long@intel.com>; Ye, Ting <ting.ye@intel.com>
Subject: [PATCH 17/17] CryptoPkg DSC: Add build option to disable deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC files to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Qin Long <qin.long@intel.com>
Cc: Ting Ye <ting.ye@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
CryptoPkg/CryptoPkg.dsc | 3 +++
1 file changed, 3 insertions(+)

diff --git a/CryptoPkg/CryptoPkg.dsc b/CryptoPkg/CryptoPkg.dsc index 5ae0e67..3c3e444 100644
--- a/CryptoPkg/CryptoPkg.dsc
+++ b/CryptoPkg/CryptoPkg.dsc
@@ -133,3 +133,6 @@

[Components.IPF]
CryptoPkg/Library/BaseCryptLibRuntimeCryptProtocol/BaseCryptLibRuntimeCryptProtocol.inf
+
+[BuildOptions]
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
--
1.9.5.msysgit.0


Re: [PATCH 17/17] CryptoPkg DSC: Add build option to disable deprecated APIs

Long, Qin <qin.long@...>
 

Reviewed-by: Qin Long <qin.long@intel.com>

-----Original Message-----
From: Wu, Hao A
Sent: Friday, August 05, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming
Cc: Wu, Hao A; Long, Qin; Ye, Ting
Subject: [PATCH 17/17] CryptoPkg DSC: Add build option to disable
deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC files
to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Qin Long <qin.long@intel.com>
Cc: Ting Ye <ting.ye@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
CryptoPkg/CryptoPkg.dsc | 3 +++
1 file changed, 3 insertions(+)

diff --git a/CryptoPkg/CryptoPkg.dsc b/CryptoPkg/CryptoPkg.dsc index
5ae0e67..3c3e444 100644
--- a/CryptoPkg/CryptoPkg.dsc
+++ b/CryptoPkg/CryptoPkg.dsc
@@ -133,3 +133,6 @@

[Components.IPF]

CryptoPkg/Library/BaseCryptLibRuntimeCryptProtocol/BaseCryptLibRuntime
CryptProtocol.inf
+
+[BuildOptions]
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
--
1.9.5.msysgit.0


Re: [PATCH 13/17] SecurityPkg DSC: Add build option to disable deprecated APIs

Zhang, Chao B <chao.b.zhang@...>
 

Reviewed-by: Chao Zhang <chao.b.zhang@intel.com>





Thanks & Best regards
Chao Zhang

-----Original Message-----
From: Wu, Hao A
Sent: Friday, August 05, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming
Cc: Wu, Hao A; Zhang, Chao B
Subject: [PATCH 13/17] SecurityPkg DSC: Add build option to disable deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC
files to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Chao Zhang <chao.b.zhang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
SecurityPkg/SecurityPkg.dsc | 1 +
1 file changed, 1 insertion(+)

diff --git a/SecurityPkg/SecurityPkg.dsc b/SecurityPkg/SecurityPkg.dsc
index 21cac78..0ac4dfb 100644
--- a/SecurityPkg/SecurityPkg.dsc
+++ b/SecurityPkg/SecurityPkg.dsc
@@ -325,4 +325,5 @@
[BuildOptions]
MSFT:*_*_IA32_DLINK_FLAGS = /ALIGN:256
INTEL:*_*_IA32_DLINK_FLAGS = /ALIGN:256
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

--
1.9.5.msysgit.0


Re: [PATCH 08/17] MdeModulePkg DSC: Add build option to disable deprecated APIs

Tian, Feng <feng.tian@...>
 

Reviewed-by: Feng Tian <feng.tian@Intel.com>

Thanks
Feng

-----Original Message-----
From: Wu, Hao A
Sent: Friday, August 5, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
Cc: Wu, Hao A <hao.a.wu@intel.com>; Tian, Feng <feng.tian@intel.com>; Zeng, Star <star.zeng@intel.com>
Subject: [PATCH 08/17] MdeModulePkg DSC: Add build option to disable deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC files to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Feng Tian <feng.tian@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
MdeModulePkg/MdeModulePkg.dsc | 3 +++
1 file changed, 3 insertions(+)

diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc index ce29eb9..05120c7 100644
--- a/MdeModulePkg/MdeModulePkg.dsc
+++ b/MdeModulePkg/MdeModulePkg.dsc
@@ -460,3 +460,6 @@
[Components.X64]
MdeModulePkg/Universal/CapsulePei/CapsuleX64.inf

+[BuildOptions]
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
+
--
1.9.5.msysgit.0


[patch 2/2] MdeModulePkg/Browser: Share default if some default value are not specified

Dandan Bi
 

Add a new implementation policy of getting default in SetupBrowser.
The new policy is only for the situation that a question has default
value but doesn't have default value for all supported default type.
In this case, we will choose the smallest default id from the existing
defaults, and share its value to other default id which has no
default value.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
---
MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 66 +++++++++++++++++++++++++-
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h | 5 ++
2 files changed, 70 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
index 6b38547..9473eb1 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
@@ -4016,10 +4016,50 @@ ValueToOption (
}

return NULL;
}

+/**
+ This function is to get the default Id array, the default ids are in ascending order in the array.
+
+ @param FormSet The form set.
+ @param DefaultIdArray Point to the default Id Array.
+
+ @retval DefaultIdCount Return the default Id number in the array.
+
+**/
+UINT16
+GetDefaultIdArray (
+ IN FORM_BROWSER_FORMSET *FormSet,
+ IN OUT UINT16 *DefaultIdArray
+ )
+{
+ FORMSET_DEFAULTSTORE *DefaultStore;
+ LIST_ENTRY *DefaultLink;
+ UINT16 DefaultIdCount;
+ UINT16 Index;
+
+ DefaultIdCount = 0;
+
+ DefaultLink = GetFirstNode (&FormSet->DefaultStoreListHead);
+ while (!IsNull (&FormSet->DefaultStoreListHead, DefaultLink)) {
+ DefaultStore = FORMSET_DEFAULTSTORE_FROM_LINK(DefaultLink);
+ Index = DefaultIdCount;
+ //
+ // Insert the DefaultId to the Array with ascending order.
+ //
+ while (Index > 0 && DefaultStore->DefaultId < DefaultIdArray[Index - 1]) {
+ DefaultIdArray[Index] = DefaultIdArray[Index -1];
+ Index--;
+ }
+ DefaultIdArray[Index] = DefaultStore->DefaultId;
+ DefaultLink = GetNextNode (&FormSet->DefaultStoreListHead, DefaultLink);
+ DefaultIdCount++;
+ }
+
+ return DefaultIdCount;
+}

/**
Reset Question to its default value.

@param FormSet The form set.
@@ -4048,29 +4088,38 @@ GetQuestionDefault (
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;
EFI_BROWSER_ACTION_REQUEST ActionRequest;
INTN Action;
CHAR16 *NewString;
EFI_IFR_TYPE_VALUE *TypeValue;
+ UINT16 DefaultIdNumber;
+ UINT16 DefaultIdArray[EFI_HII_MAX_SUPPORT_DEFAULT_TYPE];
+ UINT16 ReGetCount;
+ UINT16 OriginalDefaultId;

Status = EFI_NOT_FOUND;
StrValue = NULL;
+ ReGetCount = 0;
+ OriginalDefaultId = DefaultId;

//
// Statement don't have storage, skip them
//
if (Question->QuestionId == 0) {
return Status;
}

+ DefaultIdNumber = GetDefaultIdArray (FormSet, DefaultIdArray);
+
//
// There are Five ways to specify default value for a Question:
// 1, use call back function (highest priority)
// 2, use ExtractConfig function
// 3, use nested EFI_IFR_DEFAULT
// 4, set flags of EFI_ONE_OF_OPTION (provide Standard and Manufacturing default)
// 5, set flags of EFI_IFR_CHECKBOX (provide Standard and Manufacturing default) (lowest priority)
//
+ReGetDefault:
HiiValue = &Question->HiiValue;
TypeValue = &HiiValue->Value;
if (HiiValue->Type == EFI_IFR_TYPE_BUFFER) {
//
// For orderedlist, need to pass the BufferValue to Callback function.
@@ -4233,11 +4282,26 @@ GetQuestionDefault (
return EFI_SUCCESS;
}
}

//
- // For Questions without default
+ // For question without default value for current default Id, we try to re-get the default value form other default id in the DefaultIdArray.
+ // If get, will exit the function, if not, will choose next default id in the DefaultIdArray.
+ // The default id in DefaultIdArray are in ascending order to make sure choose the smallest default id every time.
+ //
+ while (ReGetCount < DefaultIdNumber) {
+ DefaultId = DefaultIdArray[ReGetCount];
+ if (DefaultId == OriginalDefaultId) {
+ ReGetCount ++;
+ continue;
+ }
+ ReGetCount ++;
+ goto ReGetDefault;
+ }
+
+ //
+ // For Questions without default value for all the default id in the DefaultIdArray.
//
Status = EFI_NOT_FOUND;
switch (Question->Operand) {
case EFI_IFR_NUMERIC_OP:
//
diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
index cbc5401..21f392c 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
@@ -61,10 +61,15 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define UI_ACTION_REFRESH_FORM 1
#define UI_ACTION_REFRESH_FORMSET 2
#define UI_ACTION_EXIT 3

//
+// The maximum number of default type
+//
+#define EFI_HII_MAX_SUPPORT_DEFAULT_TYPE 0x08
+
+//
//
// Time definitions
//
#define ONE_SECOND 10000000

--
1.9.5.msysgit.1


[patch 1/2] MdeModulePkg/HiiDB: Share default if some default value are not specified

Dandan Bi
 

Add a new implementation policy of getting default in HiiDatabase.
The new policy is only for the situation that a question has default
value but doesn't have default value for all supported default type.
In this case, we will choose the smallest default id from the existing
defaults, and share its value to other default id which has no
default value.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
---
.../Universal/HiiDatabaseDxe/ConfigRouting.c | 115 ++++++++++++++++++---
.../Universal/HiiDatabaseDxe/HiiDatabase.h | 2 +
2 files changed, 101 insertions(+), 16 deletions(-)

diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
index 0578352..0a5ea83 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
@@ -1150,11 +1150,11 @@ InsertDefaultValue (
DefaultValueArray = BASE_CR (Link, IFR_DEFAULT_DATA, Entry);
if (DefaultValueArray->DefaultId == DefaultValueData->DefaultId) {
//
// DEFAULT_VALUE_FROM_OPCODE has high priority, DEFAULT_VALUE_FROM_DEFAULT has low priority.
//
- if (DefaultValueData->Type > DefaultValueArray->Type) {
+ if (DefaultValueData->Type >= DefaultValueArray->Type) {
//
// Update the default value array in BlockData.
//
CopyMem (&DefaultValueArray->Value, &DefaultValueData->Value, sizeof (EFI_IFR_TYPE_VALUE));
DefaultValueArray->Type = DefaultValueData->Type;
@@ -2099,19 +2099,22 @@ ParseIfrData (
LIST_ENTRY *LinkData;
LIST_ENTRY *LinkDefault;
EFI_IFR_VARSTORE_NAME_VALUE *IfrNameValueVarStore;
EFI_HII_PACKAGE_HEADER *PackageHeader;
EFI_VARSTORE_ID VarStoreId;
+ UINT16 SmallestDefaultId;
+ UINT16 SmallestIdFromFlag;

Status = EFI_SUCCESS;
BlockData = NULL;
DefaultDataPtr = NULL;
FirstOneOfOption = FALSE;
VarStoreId = 0;
FirstOrderedList = FALSE;
VarStoreName = NULL;
ZeroMem (&DefaultData, sizeof (IFR_DEFAULT_DATA));
+ SmallestDefaultId = 0xFFFF;

//
// Go through the form package to parse OpCode one by one.
//
PackageOffset = sizeof (EFI_HII_PACKAGE_HEADER);
@@ -2473,10 +2476,12 @@ ParseIfrData (
//
//when go to there,BlockData can't be NULLL.
//
ASSERT (BlockData != NULL);

+ SmallestIdFromFlag = FALSE;
+
//
// Add default value for standard ID by CheckBox Flag
//
VarDefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
//
@@ -2487,21 +2492,20 @@ ParseIfrData (
//
// When flag is set, defautl value is TRUE.
//
DefaultData.Type = DefaultValueFromFlag;
DefaultData.Value.b = TRUE;
- } else {
- //
- // When flag is not set, defautl value is FASLE.
- //
- DefaultData.Type = DefaultValueFromDefault;
- DefaultData.Value.b = FALSE;
+ InsertDefaultValue (BlockData, &DefaultData);
+
+ if (SmallestDefaultId > EFI_HII_DEFAULT_CLASS_STANDARD) {
+ //
+ // Record the SmallestDefaultId and update the SmallestIdFromFlag.
+ //
+ SmallestDefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
+ SmallestIdFromFlag = TRUE;
+ }
}
- //
- // Add DefaultValue into current BlockData
- //
- InsertDefaultValue (BlockData, &DefaultData);

//
// Add default value for Manufacture ID by CheckBox Flag
//
VarDefaultId = EFI_HII_DEFAULT_CLASS_MANUFACTURING;
@@ -2513,21 +2517,49 @@ ParseIfrData (
//
// When flag is set, defautl value is TRUE.
//
DefaultData.Type = DefaultValueFromFlag;
DefaultData.Value.b = TRUE;
+ InsertDefaultValue (BlockData, &DefaultData);
+
+ if (SmallestDefaultId > EFI_HII_DEFAULT_CLASS_MANUFACTURING) {
+ //
+ // Record the SmallestDefaultId and update the SmallestIdFromFlag.
+ //
+ SmallestDefaultId = EFI_HII_DEFAULT_CLASS_MANUFACTURING;
+ SmallestIdFromFlag = TRUE;
+ }
+ }
+ if (SmallestIdFromFlag) {
+ //
+ // When smallest default Id is given by the flag of CheckBox, set defaut value with TRUE for other default Id in the DefaultId list.
+ //
+ DefaultData.Type = DefaultValueFromOtherDefault;
+ DefaultData.Value.b = TRUE;
+ //
+ // Set default value for all the default id in the DefaultId list.
+ //
+ for (LinkData = DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData = LinkData->ForwardLink) {
+ DefaultDataPtr = BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry);
+ DefaultData.DefaultId = DefaultDataPtr->DefaultId;
+ InsertDefaultValue (BlockData, &DefaultData);
+ }
} else {
//
// When flag is not set, defautl value is FASLE.
//
DefaultData.Type = DefaultValueFromDefault;
DefaultData.Value.b = FALSE;
+ //
+ // Set default value for all the default id in the DefaultId list.
+ //
+ for (LinkData = DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData = LinkData->ForwardLink) {
+ DefaultDataPtr = BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry);
+ DefaultData.DefaultId = DefaultDataPtr->DefaultId;
+ InsertDefaultValue (BlockData, &DefaultData);
+ }
}
- //
- // Add DefaultValue into current BlockData
- //
- InsertDefaultValue (BlockData, &DefaultData);
break;

case EFI_IFR_DATE_OP:
//
// offset by question header
@@ -2777,30 +2809,62 @@ ParseIfrData (
break;
}

//
// 1. Set default value for OneOf option when flag field has default attribute.
+ // And set the default value with the smallest default id for other default id in the DefaultId list.
//
if (((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT) == EFI_IFR_OPTION_DEFAULT) ||
((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT_MFG) == EFI_IFR_OPTION_DEFAULT_MFG)) {
//
// This flag is used to specify whether this option is the first. Set it to FALSE for the following options.
// The first oneof option value will be used as default value when no default value is specified.
//
FirstOneOfOption = FALSE;
+
+ SmallestIdFromFlag = FALSE;

// Prepare new DefaultValue
//
DefaultData.Type = DefaultValueFromFlag;
CopyMem (&DefaultData.Value, &IfrOneOfOption->Value, IfrOneOfOption->Header.Length - OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value));
if ((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT) == EFI_IFR_OPTION_DEFAULT) {
DefaultData.DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
InsertDefaultValue (BlockData, &DefaultData);
- }
+ if (SmallestDefaultId > EFI_HII_DEFAULT_CLASS_STANDARD) {
+ //
+ // Record the SmallestDefaultId and update the SmallestIdFromFlag.
+ //
+ SmallestDefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
+ SmallestIdFromFlag = TRUE;
+ }
+ }
if ((IfrOneOfOption->Flags & EFI_IFR_OPTION_DEFAULT_MFG) == EFI_IFR_OPTION_DEFAULT_MFG) {
DefaultData.DefaultId = EFI_HII_DEFAULT_CLASS_MANUFACTURING;
InsertDefaultValue (BlockData, &DefaultData);
+ if (SmallestDefaultId > EFI_HII_DEFAULT_CLASS_MANUFACTURING) {
+ //
+ // Record the SmallestDefaultId and update the SmallestIdFromFlag.
+ //
+ SmallestDefaultId = EFI_HII_DEFAULT_CLASS_MANUFACTURING;
+ SmallestIdFromFlag = TRUE;
+ }
+ }
+
+ if (SmallestIdFromFlag) {
+ //
+ // When smallest default Id is given by the flag of oneofOption, set this option value for other default Id in the DefaultId list.
+ //
+ DefaultData.Type = DefaultValueFromOtherDefault;
+ //
+ // Set default value for other default id in the DefaultId list.
+ //
+ for (LinkData = DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData = LinkData->ForwardLink) {
+ DefaultDataPtr = BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry);
+ DefaultData.DefaultId = DefaultDataPtr->DefaultId;
+ InsertDefaultValue (BlockData, &DefaultData);
+ }
}
}

//
// 2. Set as the default value when this is the first option.
@@ -2854,10 +2918,25 @@ ParseIfrData (
// Add DefaultValue into current BlockData
//
InsertDefaultValue (BlockData, &DefaultData);

//
+ // Set default value for other default id in the DefaultId list.
+ //
+ if (SmallestDefaultId >= VarDefaultId) {
+ SmallestDefaultId = VarDefaultId;
+ for (LinkData = DefaultIdArray->Entry.ForwardLink; LinkData != &DefaultIdArray->Entry; LinkData = LinkData->ForwardLink) {
+ DefaultDataPtr = BASE_CR (LinkData, IFR_DEFAULT_DATA, Entry);
+ if (DefaultDataPtr->DefaultId != DefaultData.DefaultId){
+ DefaultData.Type = DefaultValueFromOtherDefault;
+ DefaultData.DefaultId = DefaultDataPtr->DefaultId;
+ InsertDefaultValue (BlockData, &DefaultData);
+ }
+ }
+ }
+
+ //
// After insert the default value, reset the cleaned value for next
// time used. If not set here, need to set the value before everytime
// use it.
//
DefaultData.Cleaned = FALSE;
@@ -2871,10 +2950,14 @@ ParseIfrData (
if (BlockData->Scope > 0) {
BlockData->Scope--;
}
if (BlockData->Scope == 0) {
BlockData = NULL;
+ //
+ // when finishing parsing a question, clean the SmallestDefaultId of the question.
+ //
+ SmallestDefaultId = 0xFFFF;
}
}

break;

diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h
index d90bc02..d85a804 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabase.h
@@ -85,10 +85,12 @@ typedef struct {
//
// Get default value from IFR data.
//
typedef enum {
DefaultValueFromDefault = 0, // Get from the minimum or first one when not set default value.
+ DefaultValueFromOtherDefault, // Get default vale from other default when no default(When other
+ // defaults are more than one, use the default with smallest default id).
DefaultValueFromFlag, // Get default value from the defalut flag.
DefaultValueFromOpcode // Get default value from default opcode, highest priority.
} DEFAULT_VALUE_TYPE;

typedef struct {
--
1.9.5.msysgit.1


[patch 0/2] Share default value if some default value are not specified

Dandan Bi
 

Add a new implementation policy of get default value in HiiDatabaseDxe
and SetupBrowserDxe.
The new policy is only for the situation that a question has default
value but doesn't have default value for all supported default type.
In this case, we will choose the smallest default id from the existing
defaults, and share its value to other default id which has no
default value.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>

Dandan Bi (2):
MdeModulePkg/HiiDB: Share default if some default value are not specified
MdeModulePkg/Browser: Share default if some default value are not specified

.../Universal/HiiDatabaseDxe/ConfigRouting.c | 115 ++++++++++++++++++---
.../Universal/HiiDatabaseDxe/HiiDatabase.h | 2 +
MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 66 +++++++++++-
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h | 5 +
4 files changed, 171 insertions(+), 17 deletions(-)

--
1.9.5.msysgit.1


Re: [PATCH 14/17] ShellPkg DSC: Add build option to disable deprecated APIs

Ni, Ruiyu <ruiyu.ni@...>
 

Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>

-----Original Message-----
From: Wu, Hao A
Sent: Friday, August 5, 2016 8:53 AM
To: edk2-devel@lists.01.org; Gao, Liming <liming.gao@intel.com>
Cc: Wu, Hao A <hao.a.wu@intel.com>; Carsey, Jaben <jaben.carsey@intel.com>; Ni, Ruiyu <ruiyu.ni@intel.com>
Subject: [PATCH 14/17] ShellPkg DSC: Add build option to disable deprecated APIs

Add the following definition in the [BuildOptions] section in package DSC
files to disable APIs that are deprecated:

[BuildOptions]
*_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Jaben Carsey <jaben.carsey@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
---
ShellPkg/ShellPkg.dsc | 2 ++
1 file changed, 2 insertions(+)

diff --git a/ShellPkg/ShellPkg.dsc b/ShellPkg/ShellPkg.dsc
index 25c4fad..809bd42 100644
--- a/ShellPkg/ShellPkg.dsc
+++ b/ShellPkg/ShellPkg.dsc
@@ -122,3 +122,5 @@
!endif #$(NO_SHELL_PROFILES)
}

+[BuildOptions]
+ *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
--
1.9.5.msysgit.0