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
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
}\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
}\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
**/\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
\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