]> git.proxmox.com Git - mirror_edk2.git/blobdiff - StandaloneMmPkg/Core/Dispatcher.c
StandaloneMmPkg/Core: stop abusing EFI_HANDLE for FwVolHeader tracking
[mirror_edk2.git] / StandaloneMmPkg / Core / Dispatcher.c
index 3788389f95ed6809dda8f32d34a2164d3589f468..9853445a64a1e20aaf789ce6ece6a1ffcb131691 100644 (file)
@@ -5,7 +5,7 @@
             is added to the mDiscoveredList. The Before, and After Depex are\r
             pre-processed as drivers are added to the mDiscoveredList. If an Apriori\r
             file exists in the FV those drivers are addeded to the\r
-            mScheduledQueue. The mFvHandleList is used to make sure a\r
+            mScheduledQueue. The mFwVolList is used to make sure a\r
             FV is only processed once.\r
 \r
   Step #2 - Dispatch. Remove driver from the mScheduledQueue and load and\r
 //\r
 // MM Dispatcher Data structures\r
 //\r
-#define KNOWN_HANDLE_SIGNATURE  SIGNATURE_32('k','n','o','w')\r
+#define KNOWN_FWVOL_SIGNATURE  SIGNATURE_32('k','n','o','w')\r
 \r
 typedef struct {\r
-  UINTN           Signature;\r
-  LIST_ENTRY      Link;         // mFvHandleList\r
-  EFI_HANDLE      Handle;\r
-} KNOWN_HANDLE;\r
+  UINTN                      Signature;\r
+  LIST_ENTRY                 Link;         // mFwVolList\r
+  EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader;\r
+} KNOWN_FWVOL;\r
 \r
 //\r
 // Function Prototypes\r
@@ -86,9 +86,10 @@ LIST_ENTRY  mDiscoveredList = INITIALIZE_LIST_HEAD_VARIABLE (mDiscoveredList);
 LIST_ENTRY  mScheduledQueue = INITIALIZE_LIST_HEAD_VARIABLE (mScheduledQueue);\r
 \r
 //\r
-// List of handles who's Fv's have been parsed and added to the mFwDriverList.\r
+// List of firmware volume headers whose containing firmware volumes have been\r
+// parsed and added to the mFwDriverList.\r
 //\r
-LIST_ENTRY  mFvHandleList = INITIALIZE_LIST_HEAD_VARIABLE (mFvHandleList);\r
+LIST_ENTRY  mFwVolList = INITIALIZE_LIST_HEAD_VARIABLE (mFwVolList);\r
 \r
 //\r
 // Flag for the MM Dispacher.  TRUE if dispatcher is execuing.\r
@@ -769,26 +770,30 @@ MmInsertOnScheduledQueueWhileProcessingBeforeAndAfter (
 }\r
 \r
 /**\r
-  Return TRUE if the Fv has been processed, FALSE if not.\r
+  Return TRUE if the firmware volume has been processed, FALSE if not.\r
 \r
-  @param  FvHandle              The handle of a FV that's being tested\r
+  @param  FwVolHeader           The header of the firmware volume that's being\r
+                                tested.\r
 \r
-  @retval TRUE                  Fv protocol on FvHandle has been processed\r
-  @retval FALSE                 Fv protocol on FvHandle has not yet been\r
-                                processed\r
+  @retval TRUE                  The firmware volume denoted by FwVolHeader has\r
+                                been processed\r
+  @retval FALSE                 The firmware volume denoted by FwVolHeader has\r
+                                not yet been processed\r
 \r
 **/\r
 BOOLEAN\r
 FvHasBeenProcessed (\r
-  IN EFI_HANDLE  FvHandle\r
+  IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader\r
   )\r
 {\r
   LIST_ENTRY    *Link;\r
-  KNOWN_HANDLE  *KnownHandle;\r
+  KNOWN_FWVOL   *KnownFwVol;\r
 \r
-  for (Link = mFvHandleList.ForwardLink; Link != &mFvHandleList; Link = Link->ForwardLink) {\r
-    KnownHandle = CR (Link, KNOWN_HANDLE, Link, KNOWN_HANDLE_SIGNATURE);\r
-    if (KnownHandle->Handle == FvHandle) {\r
+  for (Link = mFwVolList.ForwardLink;\r
+       Link != &mFwVolList;\r
+       Link = Link->ForwardLink) {\r
+    KnownFwVol = CR (Link, KNOWN_FWVOL, Link, KNOWN_FWVOL_SIGNATURE);\r
+    if (KnownFwVol->FwVolHeader == FwVolHeader) {\r
       return TRUE;\r
     }\r
   }\r
@@ -796,28 +801,29 @@ FvHasBeenProcessed (
 }\r
 \r
 /**\r
-  Remember that Fv protocol on FvHandle has had it's drivers placed on the\r
-  mDiscoveredList. This fucntion adds entries on the mFvHandleList. Items are\r
-  never removed/freed from the mFvHandleList.\r
+  Remember that the firmware volume denoted by FwVolHeader has had its drivers\r
+  placed on mDiscoveredList. This function adds entries to mFwVolList. Items\r
+  are never removed/freed from mFwVolList.\r
 \r
-  @param  FvHandle              The handle of a FV that has been processed\r
+  @param  FwVolHeader           The header of the firmware volume that's being\r
+                                processed.\r
 \r
 **/\r
 VOID\r
 FvIsBeingProcesssed (\r
-  IN EFI_HANDLE  FvHandle\r
+  IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader\r
   )\r
 {\r
-  KNOWN_HANDLE  *KnownHandle;\r
+  KNOWN_FWVOL   *KnownFwVol;\r
 \r
-  DEBUG ((DEBUG_INFO, "FvIsBeingProcesssed - 0x%08x\n", FvHandle));\r
+  DEBUG ((DEBUG_INFO, "FvIsBeingProcesssed - 0x%08x\n", KnownFwVol));\r
 \r
-  KnownHandle = AllocatePool (sizeof (KNOWN_HANDLE));\r
-  ASSERT (KnownHandle != NULL);\r
+  KnownFwVol = AllocatePool (sizeof (KNOWN_FWVOL));\r
+  ASSERT (KnownFwVol != NULL);\r
 \r
-  KnownHandle->Signature = KNOWN_HANDLE_SIGNATURE;\r
-  KnownHandle->Handle = FvHandle;\r
-  InsertTailList (&mFvHandleList, &KnownHandle->Link);\r
+  KnownFwVol->Signature = KNOWN_FWVOL_SIGNATURE;\r
+  KnownFwVol->FwVolHeader = FwVolHeader;\r
+  InsertTailList (&mFwVolList, &KnownFwVol->Link);\r
 }\r
 \r
 /**\r
@@ -842,12 +848,12 @@ FvIsBeingProcesssed (
 **/\r
 EFI_STATUS\r
 MmAddToDriverList (\r
-  IN EFI_HANDLE   FvHandle,\r
-  IN VOID         *Pe32Data,\r
-  IN UINTN        Pe32DataSize,\r
-  IN VOID         *Depex,\r
-  IN UINTN        DepexSize,\r
-  IN EFI_GUID     *DriverName\r
+  IN EFI_FIRMWARE_VOLUME_HEADER *FwVolHeader,\r
+  IN VOID                       *Pe32Data,\r
+  IN UINTN                      Pe32DataSize,\r
+  IN VOID                       *Depex,\r
+  IN UINTN                      DepexSize,\r
+  IN EFI_GUID                   *DriverName\r
   )\r
 {\r
   EFI_MM_DRIVER_ENTRY  *DriverEntry;\r
@@ -863,7 +869,7 @@ MmAddToDriverList (
 \r
   DriverEntry->Signature        = EFI_MM_DRIVER_ENTRY_SIGNATURE;\r
   CopyGuid (&DriverEntry->FileName, DriverName);\r
-  DriverEntry->FvHandle         = FvHandle;\r
+  DriverEntry->FwVolHeader      = FwVolHeader;\r
   DriverEntry->Pe32Data         = Pe32Data;\r
   DriverEntry->Pe32DataSize     = Pe32DataSize;\r
   DriverEntry->Depex            = Depex;\r