diff options
author | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-07-30 08:55:38 +0000 |
---|---|---|
committer | lgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-07-30 08:55:38 +0000 |
commit | e17e261f7b32866f3f7d712bc1e0e476aedda829 (patch) | |
tree | eebafd2a196de6a516c524c5b24362ced8aca8b3 | |
parent | 1505f7c3d03d6aa7a1598a0c6258d5bbb3828a2c (diff) | |
download | edk2-e17e261f7b32866f3f7d712bc1e0e476aedda829.tar.gz |
Sync patch r9905 from main trunk.
r9905 - Enhance BdsDxe to support original EFI_IFR_FORM_SET opcode in initial UEFI2.1 spec for compatibility.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/UDK2008@10742 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c b/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c index 6f153d0c3f..f3c3e81d46 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c @@ -237,18 +237,26 @@ ExtractDisplayedHiiFormFromHiiHandle ( OpCodeData = Package + Offset2;
if (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_FORM_SET_OP) {
- //
- // Find FormSet OpCode
- //
- ClassGuidNum = ((EFI_IFR_FORM_SET *) OpCodeData)->Flags;
- ClassGuid = (EFI_GUID *) (VOID *)(OpCodeData + sizeof (EFI_IFR_FORM_SET));
- while (ClassGuidNum-- > 0) {
- if (CompareGuid (SetupClassGuid, ClassGuid)) {
- CopyMem (FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));
- CopyMem (FormSetHelp, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));
- FreePool (HiiPackageList);
- return TRUE;
+ if (((EFI_IFR_OP_HEADER *) OpCodeData)->Length > OFFSET_OF (EFI_IFR_FORM_SET, Flags)) {
+ //
+ // Find FormSet OpCode
+ //
+ ClassGuidNum = ((EFI_IFR_FORM_SET *) OpCodeData)->Flags & 0x03;
+ ClassGuid = (EFI_GUID *) (VOID *)(OpCodeData + sizeof (EFI_IFR_FORM_SET));
+ while (ClassGuidNum-- > 0) {
+ if (CompareGuid (SetupClassGuid, ClassGuid)) {
+ CopyMem (FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));
+ CopyMem (FormSetHelp, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));
+ FreePool (HiiPackageList);
+ return TRUE;
+ }
+ ClassGuid ++;
}
+ } else {
+ CopyMem (FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));
+ CopyMem (FormSetHelp, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));
+ FreePool (HiiPackageList);
+ return TRUE;
}
}
|