\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
)\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
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
&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
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
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