return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ An empty function to pass error checking of CreateEventEx ().\r
+\r
+ @param Event Event whose notification function is being invoked.\r
+ @param Context Pointer to the notification function's context,\r
+ which is implementation-dependent.\r
+\r
+**/\r
+STATIC\r
+VOID\r
+EFIAPI\r
+EmptyCallbackFunction (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+{\r
+}\r
+\r
//\r
// BDS Platform Functions\r
//\r
VOID\r
)\r
{\r
+ EFI_EVENT EndOfDxeEvent;\r
+ EFI_STATUS Status;\r
+\r
+ //\r
+ // Signal EndOfDxe PI Event\r
+ //\r
+ Status = gBS->CreateEventEx (\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_CALLBACK,\r
+ EmptyCallbackFunction,\r
+ NULL,\r
+ &gEfiEndOfDxeEventGroupGuid,\r
+ &EndOfDxeEvent\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ gBS->SignalEvent (EndOfDxeEvent);\r
+ gBS->CloseEvent (EndOfDxeEvent);\r
+ }\r
}\r
\r
STATIC\r
CHAR16* NextDevicePathStr;\r
EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL *EfiDevicePathFromTextProtocol;\r
\r
- Status = GetGlobalEnvironmentVariable (ConsoleVarName, NULL, NULL, (VOID**)&DevicePathInstances);\r
- if (EFI_ERROR(Status)) {\r
+ Status = EFI_SUCCESS;\r
+ Size = 0;\r
+\r
+ DevicePathInstances = BdsLibGetVariableAndSize (ConsoleVarName, &gEfiGlobalVariableGuid, &Size);\r
+ if (DevicePathInstances == NULL) {\r
// In case no default console device path has been defined we assume a driver handles the console (eg: SimpleTextInOutSerial)\r
if ((DefaultConsolePaths == NULL) || (DefaultConsolePaths[0] == L'\0')) {\r
*DevicePaths = NULL;\r
Status = gBS->LocateProtocol (&gEfiDevicePathFromTextProtocolGuid, NULL, (VOID **)&EfiDevicePathFromTextProtocol);\r
ASSERT_EFI_ERROR(Status);\r
\r
- DevicePathInstances = NULL;\r
-\r
// Extract the Device Path instances from the multi-device path string\r
while ((DefaultConsolePaths != NULL) && (DefaultConsolePaths[0] != L'\0')) {\r
NextDevicePathStr = StrStr (DefaultConsolePaths, L";");\r
while (ConsoleDevicePaths != NULL) {\r
DevicePath = GetNextDevicePathInstance (&ConsoleDevicePaths, &Size);\r
\r
- Status = BdsConnectDevicePath (DevicePath, Handle, NULL);\r
+ Status = BdsLibConnectDevicePath (DevicePath);\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // If BdsLibConnectDevicePath () succeeded, *Handle must have a non-NULL\r
+ // value. So ASSERT that this is the case.\r
+ //\r
+ gBS->LocateDevicePath (&gEfiDevicePathProtocolGuid, &DevicePath, Handle);\r
+ ASSERT (*Handle != NULL);\r
+ }\r
DEBUG_CODE_BEGIN();\r
if (EFI_ERROR(Status)) {\r
// We convert back to the text representation of the device Path\r
- EFI_DEVICE_PATH_TO_TEXT_PROTOCOL* DevicePathToTextProtocol;\r
- CHAR16* DevicePathTxt;\r
- EFI_STATUS Status;\r
+ EFI_DEVICE_PATH_TO_TEXT_PROTOCOL *DevicePathToTextProtocol;\r
+ CHAR16 *DevicePathTxt;\r
\r
- Status = gBS->LocateProtocol(&gEfiDevicePathToTextProtocolGuid, NULL, (VOID **)&DevicePathToTextProtocol);\r
- if (!EFI_ERROR(Status)) {\r
+ DevicePathToTextProtocol = NULL;\r
+ gBS->LocateProtocol(&gEfiDevicePathToTextProtocolGuid, NULL, (VOID **) &DevicePathToTextProtocol);\r
+ if (DevicePathToTextProtocol != NULL) {\r
DevicePathTxt = DevicePathToTextProtocol->ConvertDevicePathToText (DevicePath, TRUE, TRUE);\r
\r
DEBUG((EFI_D_ERROR,"Fail to start the console with the Device Path '%s'. (Error '%r')\n", DevicePathTxt, Status));\r
if (*Interface == NULL) {\r
Status = gBS->LocateHandleBuffer (ByProtocol, Protocol, NULL, &NoHandles, &Buffer);\r
if (EFI_ERROR (Status)) {\r
- BdsConnectAllDrivers ();\r
+ BdsLibConnectAll ();\r
Status = gBS->LocateHandleBuffer (ByProtocol, Protocol, NULL, &NoHandles, &Buffer);\r
}\r
\r
\r
Status = PlatformBdsConnectConsole ();\r
ASSERT_EFI_ERROR (Status);\r
+\r
+ //\r
+ // Show the splash screen.\r
+ //\r
+ EnableQuietBoot (PcdGetPtr (PcdLogoFile));\r
+\r
+ //\r
+ // Connect _all_ devices, to pick up plug-in and removable devices\r
+ // TODO: do this more cleanly, permitting faster boot times when boot config\r
+ // is known\r
+ //\r
+ BdsLibConnectAll ();\r
}\r
\r
/**\r