]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/DevicePath/Dxe/DevicePath.c
Update Device Path Module to use PCD Feature Flags to determine of the Device Path...
[mirror_edk2.git] / EdkModulePkg / Universal / DevicePath / Dxe / DevicePath.c
index 78c5defe3a98f239fd1677dfb868233ff4f2e58b..6117a3245e4862bb5a59fd632bcbd6cb36691215 100644 (file)
@@ -22,10 +22,31 @@ Abstract:
 
 #include "DevicePath.h"
 
-DEVICE_PATH_DRIVER_PRIVATE_DATA mPrivateData;
-
-EFI_GUID mEfiDevicePathMessagingUartFlowControlGuid = DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL;
-EFI_GUID mEfiDevicePathMessagingSASGuid             = DEVICE_PATH_MESSAGING_SAS;
+EFI_HANDLE  mDevicePathHandle = NULL;
+
+GLOBAL_REMOVE_IF_UNREFERENCED const EFI_DEVICE_PATH_UTILITIES_PROTOCOL mDevicePathUtilities = {\r
+  GetDevicePathSizeProtocolInterface,
+  DuplicateDevicePathProtocolInterface,
+  AppendDevicePathProtocolInterface,
+  AppendDeviceNodeProtocolInterface,
+  AppendDevicePathInstanceProtocolInterface,
+  GetNextDevicePathInstanceProtocolInterface,
+  IsDevicePathMultiInstanceProtocolInterface,
+  CreateDeviceNodeProtocolInterface
+};\r
+\r
+GLOBAL_REMOVE_IF_UNREFERENCED const EFI_DEVICE_PATH_TO_TEXT_PROTOCOL   mDevicePathToText = {\r
+  ConvertDeviceNodeToText,
+  ConvertDevicePathToText
+};\r
+\r
+GLOBAL_REMOVE_IF_UNREFERENCED const EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL mDevicePathFromText = {\r
+  ConvertTextToDeviceNode,  \r
+  ConvertTextToDevicePath  \r
+};\r
+\r
+GLOBAL_REMOVE_IF_UNREFERENCED const EFI_GUID mEfiDevicePathMessagingUartFlowControlGuid = DEVICE_PATH_MESSAGING_UART_FLOW_CONTROL;
+GLOBAL_REMOVE_IF_UNREFERENCED const EFI_GUID mEfiDevicePathMessagingSASGuid             = DEVICE_PATH_MESSAGING_SAS;
 
 EFI_STATUS
 EFIAPI
@@ -49,36 +70,40 @@ DevicePathEntryPoint (
 --*/
 {
   EFI_STATUS  Status;
-
-  mPrivateData.Signature = DEVICE_PATH_DRIVER_SIGNATURE;
-
-  mPrivateData.DevicePathUtilities.GetDevicePathSize         = GetDevicePathSizeProtocolInterface;
-  mPrivateData.DevicePathUtilities.DuplicateDevicePath       = DuplicateDevicePathProtocolInterface;
-  mPrivateData.DevicePathUtilities.AppendDevicePath          = AppendDevicePathProtocolInterface;
-  mPrivateData.DevicePathUtilities.AppendDeviceNode          = AppendDeviceNodeProtocolInterface;
-  mPrivateData.DevicePathUtilities.AppendDevicePathInstance  = AppendDevicePathInstanceProtocolInterface;
-  mPrivateData.DevicePathUtilities.GetNextDevicePathInstance = GetNextDevicePathInstanceProtocolInterface;
-  mPrivateData.DevicePathUtilities.IsDevicePathMultiInstance = IsDevicePathMultiInstanceProtocolInterface;
-  mPrivateData.DevicePathUtilities.CreateDeviceNode          = CreateDeviceNodeProtocolInterface;
-
-  mPrivateData.DevicePathToText.ConvertDeviceNodeToText      = ConvertDeviceNodeToText;
-  mPrivateData.DevicePathToText.ConvertDevicePathToText      = ConvertDevicePathToText;
-
-  mPrivateData.DevicePathFromText.ConvertTextToDeviceNode    = ConvertTextToDeviceNode;
-  mPrivateData.DevicePathFromText.ConvertTextToDevicePath    = ConvertTextToDevicePath;
-
-  mPrivateData.Handle                                        = NULL;
-  
-  Status = gBS->InstallMultipleProtocolInterfaces (
-                  &mPrivateData.Handle,
-                  &gEfiDevicePathUtilitiesProtocolGuid,
-                  &mPrivateData.DevicePathUtilities,
-                  &gEfiDevicePathToTextProtocolGuid,
-                  &mPrivateData.DevicePathToText,
-                  &gEfiDevicePathFromTextProtocolGuid,
-                  &mPrivateData.DevicePathFromText,
-                  NULL
-                  );
-
+  Status = EFI_UNSUPPORTED;
+  if (FeaturePcdGet (PcdDevicePathSupportDevicePathToText)) {\r
+    if (FeaturePcdGet (PcdDevicePathSupportDevicePathFromText)) {\r
+      Status = gBS->InstallMultipleProtocolInterfaces (
+                      &mDevicePathHandle,
+                      &gEfiDevicePathUtilitiesProtocolGuid, &mDevicePathUtilities,
+                      &gEfiDevicePathToTextProtocolGuid,    &mDevicePathToText,
+                      &gEfiDevicePathFromTextProtocolGuid,  &mDevicePathFromText,
+                      NULL
+                      );
+    } else {\r
+      Status = gBS->InstallMultipleProtocolInterfaces (
+                      &mDevicePathHandle,
+                      &gEfiDevicePathUtilitiesProtocolGuid, &mDevicePathUtilities,
+                      &gEfiDevicePathToTextProtocolGuid,    &mDevicePathToText,
+                      NULL
+                      );
+    }\r
+  } else {\r
+    if (FeaturePcdGet (PcdDevicePathSupportDevicePathFromText)) {\r
+      Status = gBS->InstallMultipleProtocolInterfaces (
+                      &mDevicePathHandle,
+                      &gEfiDevicePathUtilitiesProtocolGuid, &mDevicePathUtilities,
+                      &gEfiDevicePathFromTextProtocolGuid,  &mDevicePathFromText,
+                      NULL
+                      );
+    } else {\r
+      Status = gBS->InstallMultipleProtocolInterfaces (
+                      &mDevicePathHandle,
+                      &gEfiDevicePathUtilitiesProtocolGuid, &mDevicePathUtilities,
+                      NULL
+                      );
+    }\r
+  }\r
   return Status;
 }