]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/Dependency/Dependency.c
MdeModulePkg PeiCore: FvCount to be checked for the registered for shadow PEIM
[mirror_edk2.git] / MdeModulePkg / Core / Pei / Dependency / Dependency.c
index 8146c19ca369f373f847840bcf9d7825d6b9eceb..e71566b5a74ec12cc229c6ec2b5bde9c57b25697 100644 (file)
@@ -5,8 +5,8 @@
   if a driver can be scheduled for execution.  The criteria for\r
   schedulability is that the dependency expression is satisfied.\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
+Copyright (c) 2006 - 2014, 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
 http://opensource.org/licenses/bsd-license.php                                            \r
@@ -16,8 +16,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 **/\r
 \r
-#include <PeiMain.h>\r
-#include "dependency.h"\r
+#include "PeiMain.h"\r
+#include "Dependency.h"\r
 \r
 /**\r
 \r
@@ -26,7 +26,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
   been published and can be queried from the PPI database.\r
 \r
 \r
-  @param PeiServices     The PEI core services table.\r
+  @param PeiServices     An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation\r
   @param Stack           Reference to EVAL_STACK_ENTRY that contains PPI GUID to check\r
 \r
   @retval TRUE  if the PPI is already installed.\r
@@ -84,7 +84,7 @@ IsPpiInstalled (
   operation types (AND, OR).\r
 \r
 \r
-  @param PeiServices            Calling context.\r
+  @param PeiServices            An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation\r
   @param DependencyExpression   Pointer to a dependency expression.  The Grammar adheres to\r
                                 the BNF described above and is stored in postfix notation.\r
 \r
@@ -106,7 +106,7 @@ PeimDispatchReadiness (
 \r
   Iterator  = DependencyExpression;\r
 \r
-  StackPtr = &EvalStack[0];\r
+  StackPtr = EvalStack;\r
 \r
   while (TRUE) {\r
 \r
@@ -123,6 +123,7 @@ PeimDispatchReadiness (
         // EvalStack on the push\r
         //\r
         if (StackPtr > &EvalStack[MAX_GRAMMAR_SIZE-1]) {\r
+          DEBUG ((DEBUG_DISPATCH, "  RESULT = FALSE (Underflow Error)\n"));\r
           return FALSE;\r
         }\r
 \r
@@ -132,11 +133,17 @@ PeimDispatchReadiness (
         //\r
         StackPtr->Operator = (VOID *) Iterator;\r
         Iterator = Iterator + sizeof (EFI_GUID);\r
+        DEBUG ((DEBUG_DISPATCH, "  PUSH GUID(%g) = %a\n", StackPtr->Operator, IsPpiInstalled (PeiServices, StackPtr) ? "TRUE" : "FALSE"));\r
         StackPtr++;\r
         break;\r
 \r
       case (EFI_DEP_AND):    \r
       case (EFI_DEP_OR):     \r
+        if (*(Iterator - 1) == EFI_DEP_AND) {\r
+          DEBUG ((DEBUG_DISPATCH, "  AND\n"));\r
+        } else {\r
+          DEBUG ((DEBUG_DISPATCH, "  OR\n"));\r
+        }\r
         //\r
         // Check to make sure the dependency grammar doesn't underflow the\r
         // EvalStack on the two POPs for the AND operation.  Don't need to\r
@@ -144,6 +151,7 @@ PeimDispatchReadiness (
         // did two POPs.\r
         //\r
         if (StackPtr < &EvalStack[2]) {\r
+          DEBUG ((DEBUG_DISPATCH, "  RESULT = FALSE (Underflow Error)\n"));\r
           return FALSE;\r
         }\r
 \r
@@ -176,18 +184,21 @@ PeimDispatchReadiness (
         break;\r
         \r
       case (EFI_DEP_END):\r
+        DEBUG ((DEBUG_DISPATCH, "  END\n"));\r
         StackPtr--;\r
         //\r
         // Check to make sure EvalStack is balanced.  If not, then there is\r
         // an error in the dependency grammar, so return EFI_INVALID_PARAMETER.\r
         //\r
         if (StackPtr != &EvalStack[0]) {\r
+          DEBUG ((DEBUG_DISPATCH, "  RESULT = FALSE (Underflow Error)\n"));\r
           return FALSE;\r
         }\r
+        DEBUG ((DEBUG_DISPATCH, "  RESULT = %a\n", IsPpiInstalled (PeiServices, StackPtr) ? "TRUE" : "FALSE"));\r
         return IsPpiInstalled (PeiServices, StackPtr);\r
-        break;\r
 \r
       case (EFI_DEP_NOT):    \r
+        DEBUG ((DEBUG_DISPATCH, "  NOT\n"));\r
         //\r
         // Check to make sure the dependency grammar doesn't underflow the\r
         // EvalStack on the POP for the NOT operation.  Don't need to\r
@@ -195,6 +206,7 @@ PeimDispatchReadiness (
         // did a POP.\r
         //\r
         if (StackPtr < &EvalStack[1]) {\r
+          DEBUG ((DEBUG_DISPATCH, "  RESULT = FALSE (Underflow Error)\n"));\r
           return FALSE;\r
         }\r
         (StackPtr-1)->Result = (BOOLEAN) !IsPpiInstalled (PeiServices, (StackPtr-1));\r
@@ -203,11 +215,17 @@ PeimDispatchReadiness (
 \r
       case (EFI_DEP_TRUE):\r
       case (EFI_DEP_FALSE):\r
+        if (*(Iterator - 1) == EFI_DEP_TRUE) {\r
+          DEBUG ((DEBUG_DISPATCH, "  TRUE\n"));\r
+        } else {\r
+          DEBUG ((DEBUG_DISPATCH, "  FALSE\n"));\r
+        }\r
         //\r
         // Check to make sure the dependency grammar doesn't overflow the\r
         // EvalStack on the push\r
         //\r
         if (StackPtr > &EvalStack[MAX_GRAMMAR_SIZE-1]) {\r
+          DEBUG ((DEBUG_DISPATCH, "  RESULT = FALSE (Underflow Error)\n"));\r
           return FALSE;\r
         }\r
         //\r
@@ -225,11 +243,11 @@ PeimDispatchReadiness (
         break;\r
 \r
       default:\r
+        DEBUG ((DEBUG_DISPATCH, "  RESULT = FALSE (Invalid opcode)\n"));\r
         //\r
         // The grammar should never arrive here\r
         //\r
         return FALSE;\r
-        break;\r
     }\r
   }\r
 }\r