]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/PlatformDriverOverride/PlatOverMngr/PlatOverMngr.c
1, Add <Library/DevicePathLib.h> for all source that use device path utility macros
[mirror_edk2.git] / MdeModulePkg / Universal / PlatformDriverOverride / PlatOverMngr / PlatOverMngr.c
index 11b3d32f4c6873fec9e0a6d5639ab079749deaca..5d9bfe127a330ec5db4744803102f6d86a7f0a88 100644 (file)
@@ -31,28 +31,25 @@ Abstract:
 \r
 #include "PlatOverMngr.h"\r
 \r
-STATIC  EFI_GUID      mPlatformOverridesManagerGuid = PLAT_OVER_MNGR_GUID;\r
+EFI_GUID      mPlatformOverridesManagerGuid = PLAT_OVER_MNGR_GUID;\r
 \r
-STATIC  LIST_ENTRY    mMappingDataBase = INITIALIZE_LIST_HEAD_VARIABLE (mMappingDataBase);\r
+LIST_ENTRY    mMappingDataBase = INITIALIZE_LIST_HEAD_VARIABLE (mMappingDataBase);\r
 \r
-STATIC  EFI_HANDLE    *mDevicePathHandleBuffer;\r
-STATIC  EFI_HANDLE    *mDriverImageHandleBuffer;\r
-STATIC  EFI_HANDLE    mSelectedCtrDPHandle;\r
+EFI_HANDLE    *mDevicePathHandleBuffer;\r
+EFI_HANDLE    *mDriverImageHandleBuffer;\r
 \r
-STATIC CFG_PROTOCOL_INVOKER_CHOICE mChoice[MAX_CHOICE_NUM];\r
+UINTN         mSelectedCtrIndex;\r
+EFI_STRING_ID mControllerToken[MAX_CHOICE_NUM];\r
 \r
-STATIC UINTN         mSelectedCtrIndex;\r
-STATIC EFI_STRING_ID mControllerToken[MAX_CHOICE_NUM];\r
-\r
-STATIC UINTN                        mDriverImageHandleCount;\r
-STATIC EFI_STRING_ID                mDriverImageToken[MAX_CHOICE_NUM];\r
-STATIC EFI_STRING_ID                mDriverImageFilePathToken[MAX_CHOICE_NUM];\r
-STATIC EFI_LOADED_IMAGE_PROTOCOL    *mDriverImageProtocol[MAX_CHOICE_NUM];\r
-STATIC EFI_DEVICE_PATH_PROTOCOL     *mControllerDevicePathProtocol[MAX_CHOICE_NUM];\r
-STATIC UINTN                        mSelectedDriverImageNum;\r
-STATIC UINTN                        mLastSavedDriverImageNum;\r
-STATIC CHAR8                        mLanguage[RFC_3066_ENTRY_SIZE];\r
-STATIC UINT16                       mCurrentPage;\r
+UINTN                        mDriverImageHandleCount;\r
+EFI_STRING_ID                mDriverImageToken[MAX_CHOICE_NUM];\r
+EFI_STRING_ID                mDriverImageFilePathToken[MAX_CHOICE_NUM];\r
+EFI_LOADED_IMAGE_PROTOCOL    *mDriverImageProtocol[MAX_CHOICE_NUM];\r
+EFI_DEVICE_PATH_PROTOCOL     *mControllerDevicePathProtocol[MAX_CHOICE_NUM];\r
+UINTN                        mSelectedDriverImageNum;\r
+UINTN                        mLastSavedDriverImageNum;\r
+CHAR8                        mLanguage[RFC_3066_ENTRY_SIZE];\r
+UINT16                       mCurrentPage;\r
 \r
 /**\r
   The driver Entry Point. The funciton will export a disk device class formset and\r
@@ -343,8 +340,8 @@ GetImageName (
   )\r
 {\r
   EFI_STATUS                        Status;\r
-  EFI_DEVICE_PATH_PROTOCOL          *DevPath;\r
   EFI_DEVICE_PATH_PROTOCOL          *DevPathNode;\r
+  EFI_DEVICE_PATH_PROTOCOL          *AlignedDevPathNode;\r
   MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvFilePath;\r
   VOID                              *Buffer;\r
   UINTN                             BufferSize;\r
@@ -360,21 +357,24 @@ GetImageName (
     return NULL;\r
   }\r
 \r
-  DevPath     = UnpackDevicePath (Image->FilePath);\r
+  DevPathNode  = Image->FilePath;\r
 \r
-  if (DevPath == NULL) {\r
+  if (DevPathNode == NULL) {\r
     return NULL;\r
   }\r
 \r
-  DevPathNode = DevPath;\r
-\r
   while (!IsDevicePathEnd (DevPathNode)) {\r
+    //\r
+    // Make sure device path node is aligned when accessing it's FV Name Guid field.\r
+    //\r
+    AlignedDevPathNode = AllocateCopyPool (DevicePathNodeLength(DevPathNode), DevPathNode);\r
+    \r
     //\r
     // Find the Fv File path\r
     //\r
-    NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevPathNode);\r
+    NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)AlignedDevPathNode);\r
     if (NameGuid != NULL) {\r
-      FvFilePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) DevPathNode;\r
+      FvFilePath = (MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) AlignedDevPathNode;\r
       Status = gBS->HandleProtocol (\r
                     Image->DeviceHandle,\r
                     &gEfiFirmwareVolume2ProtocolGuid,\r
@@ -391,18 +391,21 @@ GetImageName (
                         &AuthenticationStatus\r
                         );\r
         if (!EFI_ERROR (Status)) {\r
+          FreePool (AlignedDevPathNode);\r
           break;\r
         }\r
         Buffer = NULL;\r
       }\r
     }\r
+    \r
+    FreePool (AlignedDevPathNode);\r
+    \r
     //\r
     // Next device path node\r
     //\r
     DevPathNode = NextDevicePathNode (DevPathNode);\r
   }\r
 \r
-    gBS->FreePool (DevPath);\r
   return Buffer;\r
 }\r
 \r
@@ -1131,6 +1134,10 @@ PlatOverMngrExtractConfig (
   EFI_CALLBACK_INFO                *Private;\r
   EFI_HII_CONFIG_ROUTING_PROTOCOL  *HiiConfigRouting;\r
 \r
+  if (Request == NULL) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
   Private = EFI_CALLBACK_INFO_FROM_THIS (This);\r
   HiiConfigRouting = Private->HiiConfigRouting;\r
 \r
@@ -1315,74 +1322,6 @@ PlatOverMngrCallback (
   return EFI_SUCCESS;\r
 }\r
 \r
-/**\r
-  Function unpacks a device path data structure so that all the nodes\r
-  of a device path are naturally aligned.\r
-\r
-  @param  DevPath  A pointer to a device path data structure\r
-\r
-  @return If the memory for the device path is successfully allocated, then a\r
-  @return pointer to the new device path is returned.  Otherwise, NULL is returned.\r
-\r
-**/\r
-EFI_DEVICE_PATH_PROTOCOL *\r
-UnpackDevicePath (\r
-  IN EFI_DEVICE_PATH_PROTOCOL  *DevPath\r
-  )\r
-{\r
-  EFI_DEVICE_PATH_PROTOCOL  *Src;\r
-  EFI_DEVICE_PATH_PROTOCOL  *Dest;\r
-  EFI_DEVICE_PATH_PROTOCOL  *NewPath;\r
-  UINTN                     Size;\r
-\r
-  //\r
-  // Walk device path and round sizes to valid boundries\r
-  //\r
-  Src   = DevPath;\r
-  Size  = 0;\r
-  for (;;) {\r
-    Size += DevicePathNodeLength (Src);\r
-    Size += ALIGN_SIZE (Size);\r
-\r
-    if (IsDevicePathEnd (Src)) {\r
-      break;\r
-    }\r
-\r
-    Src = NextDevicePathNode (Src);\r
-  }\r
-  //\r
-  // Allocate space for the unpacked path\r
-  //\r
-  NewPath = AllocateZeroPool (Size);\r
-  if (NewPath) {\r
-\r
-    ASSERT (((UINTN) NewPath) % MIN_ALIGNMENT_SIZE == 0);\r
-\r
-    //\r
-    // Copy each node\r
-    //\r
-    Src   = DevPath;\r
-    Dest  = NewPath;\r
-    for (;;) {\r
-      Size = DevicePathNodeLength (Src);\r
-      CopyMem (Dest, Src, Size);\r
-      Size += ALIGN_SIZE (Size);\r
-      SetDevicePathNodeLength (Dest, Size);\r
-      Dest->Type |= EFI_DP_TYPE_UNPACKED;\r
-      Dest = (EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) Dest) + Size);\r
-\r
-      if (IsDevicePathEnd (Src)) {\r
-        break;\r
-      }\r
-\r
-      Src = NextDevicePathNode (Src);\r
-    }\r
-  }\r
-\r
-  return NewPath;\r
-}\r
-\r
-\r
 /**\r
   Get the description string by device path.\r
 \r