+\r
+ //\r
+ // Now check the parent controller using this as the child.\r
+ //\r
+ if (DeviceNameToReturn == NULL){\r
+ PARSE_HANDLE_DATABASE_PARENTS(DeviceHandle, &ParentControllerCount, &ParentControllerBuffer);\r
+ for (LoopVar = 0 ; LoopVar < ParentControllerCount ; LoopVar++) {\r
+ PARSE_HANDLE_DATABASE_UEFI_DRIVERS(ParentControllerBuffer[LoopVar], &ParentDriverCount, &ParentDriverBuffer);\r
+ for (HandleCount = 0 ; HandleCount < ParentDriverCount ; HandleCount++) {\r
+ //\r
+ // try using that driver's component name with controller and our driver as the child.\r
+ //\r
+ Status = gBS->OpenProtocol(\r
+ ParentDriverBuffer[HandleCount],\r
+ &gEfiComponentName2ProtocolGuid,\r
+ (VOID**)&CompName2,\r
+ gImageHandle,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+ if (EFI_ERROR(Status)) {\r
+ Status = gBS->OpenProtocol(\r
+ ParentDriverBuffer[HandleCount],\r
+ &gEfiComponentNameProtocolGuid,\r
+ (VOID**)&CompName2,\r
+ gImageHandle,\r
+ NULL,\r
+ EFI_OPEN_PROTOCOL_GET_PROTOCOL);\r
+ }\r
+\r
+ if (EFI_ERROR(Status)) {\r
+ continue;\r
+ }\r
+ if (Language == NULL) {\r
+ Lang = AllocateZeroPool(AsciiStrSize(CompName2->SupportedLanguages));\r
+ if (Lang == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+ AsciiStrCpy(Lang, CompName2->SupportedLanguages);\r
+ TempChar = AsciiStrStr(Lang, ";");\r
+ if (TempChar != NULL){\r
+ *TempChar = CHAR_NULL;\r
+ }\r
+ } else {\r
+ Lang = AllocateZeroPool(AsciiStrSize(Language));\r
+ if (Lang == NULL) {\r
+ return (EFI_OUT_OF_RESOURCES);\r
+ }\r
+ AsciiStrCpy(Lang, Language);\r
+ }\r
+ Status = CompName2->GetControllerName(CompName2, ParentControllerBuffer[LoopVar], DeviceHandle, Lang, &DeviceNameToReturn);\r
+ FreePool(Lang);\r
+ Lang = NULL;\r
+ if (!EFI_ERROR(Status) && DeviceNameToReturn != NULL) {\r
+ break;\r
+ }\r
+\r
+\r
+\r
+ }\r
+ SHELL_FREE_NON_NULL(ParentDriverBuffer);\r
+ if (!EFI_ERROR(Status) && DeviceNameToReturn != NULL) {\r
+ break;\r
+ }\r
+ }\r
+ SHELL_FREE_NON_NULL(ParentControllerBuffer);\r
+ }\r
+ //\r
+ // dont return on fail since we will try device path if that bit is on\r
+ //\r