]> git.proxmox.com Git - mirror_edk2.git/commitdiff
EDKII:Display engine should not depend on the framework code
authorDandan Bi <dandan.bi@intel.com>
Tue, 9 Jun 2015 05:09:50 +0000 (05:09 +0000)
committerdandanbi <dandanbi@Edk2>
Tue, 9 Jun 2015 05:09:50 +0000 (05:09 +0000)
Display engine base on class opcode to detect whether in
front page.Now remove class/subclass and use FormsetGuid
or ClassGuid to judge whether in front page

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17590 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Universal/BdsDxe/FrontPageVfr.Vfr
MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLibInternal.c
MdeModulePkg/MdeModulePkg.dec
MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
MdeModulePkg/Universal/SetupBrowserDxe/Presentation.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h

index d5fe4f4c480e4880ff713b3fab20f19f4cf08f68..a2d92dff518577b70d206b93e914e93548453376 100644 (file)
@@ -2,7 +2,7 @@
 //  \r
 //    Browser formset.\r
 //  \r
-//  Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
+//  Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
 //  This program and the accompanying materials\r
 //  are licensed and made available under the terms and conditions of the BSD License\r
 //  which accompanies this distribution.  The full text of the license may be found at\r
@@ -41,8 +41,6 @@ formset
   title    = STRING_TOKEN(STR_FRONT_PAGE_TITLE),\r
   help     = STRING_TOKEN(STR_NULL_STRING),\r
   classguid = FRONT_PAGE_FORMSET_GUID,\r
-  class    = FRONT_PAGE_CLASS,\r
-  subclass = FRONT_PAGE_SUBCLASS,\r
 \r
   form formid = FRONT_PAGE_FORM_ID,\r
        title  = STRING_TOKEN(STR_FRONT_PAGE_TITLE);\r
index cdcc25610b9f23aed2f92efce087ae9506e90ab0..23528948a3999dfa44b26bb1369b2253371f6d5d 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # Customize display library used by display engine.\r
 #\r
-#  Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) 2013 - 2015, Intel Corporation. All rights reserved.<BR>\r
 #\r
 #  This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
@@ -61,4 +61,5 @@
   gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserSubtitleTextColor               ## CONSUMES\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextColor                  ## CONSUMES\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldTextHighlightColor         ## CONSUMES\r
-  gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldBackgroundHighlightColor   ## CONSUMES
\ No newline at end of file
+  gEfiMdeModulePkgTokenSpaceGuid.PcdBrowserFieldBackgroundHighlightColor   ## CONSUMES\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFrontPageFormSetGuid                   ## CONSUMES
\ No newline at end of file
index ad4bc9ac90898a07def7570180f29397e274b8c2..f9032b86de5e04fc2228b77c204def33e6074228 100644 (file)
@@ -2,7 +2,7 @@
 \r
   This library class defines a set of interfaces to customize Display module\r
 \r
-Copyright (c) 2013, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2013-2015, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials are licensed and made available under \r
 the terms and conditions of the BSD License that accompanies this distribution.  \r
 The full text of the license may be found at\r
@@ -256,7 +256,32 @@ ProcessUserOpcode(
   IN  EFI_IFR_OP_HEADER         *OpCodeData\r
   )\r
 {\r
+  EFI_GUID *   ClassGuid;\r
+  UINT8        ClassGuidNum;\r
+\r
+  ClassGuid    = NULL;\r
+  ClassGuidNum = 0;\r
+\r
   switch (OpCodeData->OpCode) {\r
+    case EFI_IFR_FORM_SET_OP:\r
+      //\r
+      // process the statement outside of form,if it is formset op, get its formsetguid or classguid and compared with gFrontPageFormSetGuid\r
+      //\r
+      if (CompareGuid((EFI_GUID*)PcdGetPtr (PcdFrontPageFormSetGuid),(EFI_GUID*)&((EFI_IFR_FORM_SET *) OpCodeData)->Guid)){\r
+        gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;\r
+      } else{\r
+        ClassGuidNum = (UINT8)(((EFI_IFR_FORM_SET *)OpCodeData)->Flags & 0x3);\r
+        ClassGuid    = (EFI_GUID *)(VOID *)((UINT8 *)OpCodeData + sizeof (EFI_IFR_FORM_SET));\r
+        while (ClassGuidNum-- > 0){\r
+          if (CompareGuid((EFI_GUID*)PcdGetPtr (PcdFrontPageFormSetGuid),ClassGuid)){\r
+            gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;\r
+            break;\r
+          }\r
+          ClassGuid ++;\r
+        }\r
+      }\r
+      break;\r
+\r
     case EFI_IFR_GUID_OP:     \r
       if (CompareGuid (&gEfiIfrTianoGuid, (EFI_GUID *)((CHAR8*) OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {\r
         //\r
index e3f46006c972edfafb81f6156967f24dbe620789..39793b878f10e0ac85de6ec4c79726cfcd5e61a5 100644 (file)
   gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow|25|UINT32|0x4000000e\r
 \r
 [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]\r
+  ## This PCD points to the front page formset GUID\r
+  #  Compare the FormsetGuid or ClassGuid with this PCD value can detect whether in front page\r
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFrontPageFormSetGuid|{ 0xbc, 0x30, 0x0c, 0x9e,0x06, 0x3f, 0xa6, 0x4b, 0x82, 0x88, 0x9, 0x17, 0x9b, 0x85, 0x5d, 0xbe }|VOID*|0x0001006e\r
+\r
   ## Base address of the NV variable range in flash device.\r
   # @Prompt Base address of flash NV variable range.\r
   gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0x0|UINT32|0x30000001\r
index 3785c32f3c6ae47f4fa85a1d1a025522d56dcefb..45405609c14f9d4cb6deafcf91639d04dce4afdc 100644 (file)
@@ -1709,6 +1709,7 @@ ParseOpCodes (
 \r
       CopyMem (&FormSet->FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));\r
       CopyMem (&FormSet->Help,         &((EFI_IFR_FORM_SET *) OpCodeData)->Help,         sizeof (EFI_STRING_ID));\r
+      FormSet->OpCode = (EFI_IFR_OP_HEADER *) OpCodeData;//save the opcode address of formset\r
 \r
       if (OpCodeLength > OFFSET_OF (EFI_IFR_FORM_SET, Flags)) {\r
         //\r
index 002a86a9b5ddc10d1be95329b22f3a3cf30ffcb8..356cd9cd9ab630514c25772c4dd59ec7bdb959f1 100644 (file)
@@ -545,6 +545,21 @@ AddStatementToDisplayForm (
     InsertTailList(&gDisplayFormData.StatementListOSF, &DisplayStatement->DisplayLink);\r
   }\r
 \r
+  //\r
+  // treat formset as statement outside the form,get its opcode.\r
+  //\r
+  DisplayStatement = AllocateZeroPool (sizeof (FORM_DISPLAY_ENGINE_STATEMENT));\r
+  ASSERT (DisplayStatement != NULL);\r
+\r
+  DisplayStatement->Signature = FORM_DISPLAY_ENGINE_STATEMENT_SIGNATURE;\r
+  DisplayStatement->Version   = FORM_DISPLAY_ENGINE_STATEMENT_VERSION_1;\r
+  DisplayStatement->OpCode = gCurrentSelection->FormSet->OpCode;\r
+\r
+  InitializeListHead (&DisplayStatement->NestStatementList);\r
+  InitializeListHead (&DisplayStatement->OptionListHead);\r
+\r
+  InsertTailList(&gDisplayFormData.StatementListOSF, &DisplayStatement->DisplayLink);\r
+\r
   //\r
   // Process the statement in this form.\r
   //\r
index c8aa9dde44646e013d6f2d0a8c80f095daf190f5..82bc23bbf17539976e5ac2b3b77fe1d1332e541d 100644 (file)
@@ -454,6 +454,7 @@ typedef struct {
   UINT16                          Class;                // Tiano extended Class code\r
   UINT16                          SubClass;             // Tiano extended Subclass code\r
   EFI_IMAGE_ID                    ImageId;\r
+  EFI_IFR_OP_HEADER               *OpCode;              //mainly for formset op to get ClassGuid\r
 \r
   FORM_BROWSER_STATEMENT          *StatementBuffer;     // Buffer for all Statements and Questions\r
   EXPRESSION_OPCODE               *ExpressionBuffer;    // Buffer for all Expression OpCode\r