2 Platform BDS customizations.
4 Copyright (c) 2004 - 2008, Intel Corporation. <BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
15 #include "BdsPlatform.h"
19 // BDS Platform Functions
24 IN EFI_BDS_ARCH_PROTOCOL_INSTANCE
*PrivateData
30 Platform Bds init. Incude the platform firmware vendor, revision
35 PrivateData - The EFI_BDS_ARCH_PROTOCOL_INSTANCE instance
43 DEBUG ((EFI_D_INFO
, "PlatformBdsInit\n"));
63 EFI_SUCCESS - Connect RootBridge successfully.
64 EFI_STATUS - Connect RootBridge fail.
69 EFI_HANDLE RootHandle
;
72 // Make all the PCI_IO protocols on PCI Seg 0 show up
74 BdsLibConnectDevicePath (gPlatformRootBridges
[0]);
76 Status
= gBS
->LocateDevicePath (
77 &gEfiDevicePathProtocolGuid
,
78 &gPlatformRootBridges
[0],
81 if (EFI_ERROR (Status
)) {
85 Status
= gBS
->ConnectController (RootHandle
, NULL
, NULL
, FALSE
);
86 if (EFI_ERROR (Status
)) {
95 PrepareLpcBridgeDevicePath (
96 IN EFI_HANDLE DeviceHandle
102 Add IsaKeyboard to ConIn,
103 add IsaSerial to ConOut, ConIn, ErrOut.
108 DeviceHandle - Handle of PCIIO protocol.
112 EFI_SUCCESS - LPC bridge is added to ConOut, ConIn, and ErrOut.
113 EFI_STATUS - No LPC bridge is added.
118 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
119 EFI_DEVICE_PATH_PROTOCOL
*TempDevicePath
;
123 Status
= gBS
->HandleProtocol (
125 &gEfiDevicePathProtocolGuid
,
128 if (EFI_ERROR (Status
)) {
131 TempDevicePath
= DevicePath
;
136 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gPnpPs2KeyboardDeviceNode
);
138 BdsLibUpdateConsoleVariable (VarConsoleInp
, DevicePath
, NULL
);
143 DevicePath
= TempDevicePath
;
144 gPnp16550ComPortDeviceNode
.UID
= 0;
146 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gPnp16550ComPortDeviceNode
);
147 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gUartDeviceNode
);
148 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gTerminalTypeDeviceNode
);
153 DevPathStr
= DevicePathToStr(DevicePath
);
156 "BdsPlatform.c+%d: COM%d DevPath: %s\n",
158 gPnp16550ComPortDeviceNode
.UID
+ 1,
161 FreePool(DevPathStr
);
163 BdsLibUpdateConsoleVariable (VarConsoleOut
, DevicePath
, NULL
);
164 BdsLibUpdateConsoleVariable (VarConsoleInp
, DevicePath
, NULL
);
165 BdsLibUpdateConsoleVariable (VarErrorOut
, DevicePath
, NULL
);
170 DevicePath
= TempDevicePath
;
171 gPnp16550ComPortDeviceNode
.UID
= 1;
173 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gPnp16550ComPortDeviceNode
);
174 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gUartDeviceNode
);
175 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gTerminalTypeDeviceNode
);
180 DevPathStr
= DevicePathToStr(DevicePath
);
183 "BdsPlatform.c+%d: COM%d DevPath: %s\n",
185 gPnp16550ComPortDeviceNode
.UID
+ 1,
188 FreePool(DevPathStr
);
190 BdsLibUpdateConsoleVariable (VarConsoleOut
, DevicePath
, NULL
);
191 BdsLibUpdateConsoleVariable (VarConsoleInp
, DevicePath
, NULL
);
192 BdsLibUpdateConsoleVariable (VarErrorOut
, DevicePath
, NULL
);
199 IN EFI_DEVICE_PATH_PROTOCOL
*PciDevicePath
,
200 OUT EFI_DEVICE_PATH_PROTOCOL
**GopDevicePath
205 EFI_HANDLE PciDeviceHandle
;
206 EFI_DEVICE_PATH_PROTOCOL
*TempDevicePath
;
207 EFI_DEVICE_PATH_PROTOCOL
*TempPciDevicePath
;
208 UINTN GopHandleCount
;
209 EFI_HANDLE
*GopHandleBuffer
;
211 if (PciDevicePath
== NULL
|| GopDevicePath
== NULL
) {
212 return EFI_INVALID_PARAMETER
;
216 // Initialize the GopDevicePath to be PciDevicePath
218 *GopDevicePath
= PciDevicePath
;
219 TempPciDevicePath
= PciDevicePath
;
221 Status
= gBS
->LocateDevicePath (
222 &gEfiDevicePathProtocolGuid
,
226 if (EFI_ERROR (Status
)) {
231 // Try to connect this handle, so that GOP dirver could start on this
232 // device and create child handles with GraphicsOutput Protocol installed
233 // on them, then we get device paths of these child handles and select
234 // them as possible console device.
236 gBS
->ConnectController (PciDeviceHandle
, NULL
, NULL
, FALSE
);
238 Status
= gBS
->LocateHandleBuffer (
240 &gEfiGraphicsOutputProtocolGuid
,
245 if (!EFI_ERROR (Status
)) {
247 // Add all the child handles as possible Console Device
249 for (Index
= 0; Index
< GopHandleCount
; Index
++) {
250 Status
= gBS
->HandleProtocol (GopHandleBuffer
[Index
], &gEfiDevicePathProtocolGuid
, (VOID
*)&TempDevicePath
);
251 if (EFI_ERROR (Status
)) {
257 GetDevicePathSize (PciDevicePath
) - END_DEVICE_PATH_LENGTH
260 // In current implementation, we only enable one of the child handles
261 // as console device, i.e. sotre one of the child handle's device
262 // path to variable "ConOut"
263 // In futhure, we could select all child handles to be console device
266 *GopDevicePath
= TempDevicePath
;
269 // Delete the PCI device's path that added by GetPlugInPciVgaDevicePath()
270 // Add the integrity GOP device path.
272 BdsLibUpdateConsoleVariable (VarConsoleOutDev
, NULL
, PciDevicePath
);
273 BdsLibUpdateConsoleVariable (VarConsoleOutDev
, TempDevicePath
, NULL
);
276 gBS
->FreePool (GopHandleBuffer
);
283 PreparePciVgaDevicePath (
284 IN EFI_HANDLE DeviceHandle
290 Add PCI VGA to ConOut.
295 DeviceHandle - Handle of PCIIO protocol.
299 EFI_SUCCESS - PCI VGA is added to ConOut.
300 EFI_STATUS - No PCI VGA device is added.
305 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
306 EFI_DEVICE_PATH_PROTOCOL
*GopDevicePath
;
309 Status
= gBS
->HandleProtocol (
311 &gEfiDevicePathProtocolGuid
,
314 if (EFI_ERROR (Status
)) {
318 GetGopDevicePath (DevicePath
, &GopDevicePath
);
319 DevicePath
= GopDevicePath
;
321 BdsLibUpdateConsoleVariable (VarConsoleOut
, DevicePath
, NULL
);
327 PreparePciSerialDevicePath (
328 IN EFI_HANDLE DeviceHandle
334 Add PCI Serial to ConOut, ConIn, ErrOut.
339 DeviceHandle - Handle of PCIIO protocol.
343 EFI_SUCCESS - PCI Serial is added to ConOut, ConIn, and ErrOut.
344 EFI_STATUS - No PCI Serial device is added.
349 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
352 Status
= gBS
->HandleProtocol (
354 &gEfiDevicePathProtocolGuid
,
357 if (EFI_ERROR (Status
)) {
361 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gUartDeviceNode
);
362 DevicePath
= AppendDevicePathNode (DevicePath
, (EFI_DEVICE_PATH_PROTOCOL
*)&gTerminalTypeDeviceNode
);
364 BdsLibUpdateConsoleVariable (VarConsoleOut
, DevicePath
, NULL
);
365 BdsLibUpdateConsoleVariable (VarConsoleInp
, DevicePath
, NULL
);
366 BdsLibUpdateConsoleVariable (VarErrorOut
, DevicePath
, NULL
);
372 DetectAndPreparePlatformPciDevicePath (
373 BOOLEAN DetectVgaOnly
379 Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut
383 DetectVgaOnly - Only detect VGA device if it's TRUE.
387 EFI_SUCCESS - PCI Device check and Console variable update successfully.
388 EFI_STATUS - PCI Device check or Console variable update fail.
394 EFI_HANDLE
*HandleBuffer
;
396 EFI_PCI_IO_PROTOCOL
*PciIo
;
400 // Start to check all the PciIo to find all possible device
404 Status
= gBS
->LocateHandleBuffer (
406 &gEfiPciIoProtocolGuid
,
411 if (EFI_ERROR (Status
)) {
415 for (Index
= 0; Index
< HandleCount
; Index
++) {
416 Status
= gBS
->HandleProtocol (HandleBuffer
[Index
], &gEfiPciIoProtocolGuid
, (VOID
*)&PciIo
);
417 if (EFI_ERROR (Status
)) {
422 // Check for all PCI device
424 Status
= PciIo
->Pci
.Read (
428 sizeof (Pci
) / sizeof (UINT32
),
431 if (EFI_ERROR (Status
)) {
435 if (!DetectVgaOnly
) {
437 // Here we decide whether it is LPC Bridge
439 if ((IS_PCI_LPC (&Pci
)) ||
440 ((IS_PCI_ISA_PDECODE (&Pci
)) &&
441 (Pci
.Hdr
.VendorId
== 0x8086) &&
442 (Pci
.Hdr
.DeviceId
== 0x7000)
445 Status
= PciIo
->Attributes (
447 EfiPciIoAttributeOperationEnable
,
448 EFI_PCI_DEVICE_ENABLE
,
452 // Add IsaKeyboard to ConIn,
453 // add IsaSerial to ConOut, ConIn, ErrOut
455 DEBUG ((EFI_D_INFO
, "Find the LPC Bridge device\n"));
456 PrepareLpcBridgeDevicePath (HandleBuffer
[Index
]);
460 // Here we decide which Serial device to enable in PCI bus
462 if (IS_PCI_16550SERIAL (&Pci
)) {
464 // Add them to ConOut, ConIn, ErrOut.
466 DEBUG ((EFI_D_INFO
, "Find the 16550 SERIAL device\n"));
467 PreparePciSerialDevicePath (HandleBuffer
[Index
]);
472 if ((Pci
.Hdr
.VendorId
== 0x8086) &&
473 (Pci
.Hdr
.DeviceId
== 0x7010)
475 Status
= PciIo
->Attributes (
477 EfiPciIoAttributeOperationEnable
,
478 EFI_PCI_DEVICE_ENABLE
,
484 // Here we decide which VGA device to enable in PCI bus
486 if (IS_PCI_VGA (&Pci
)) {
488 // Add them to ConOut.
490 DEBUG ((EFI_D_INFO
, "Find the VGA device\n"));
491 PreparePciVgaDevicePath (HandleBuffer
[Index
]);
496 gBS
->FreePool (HandleBuffer
);
503 PlatformBdsConnectConsole (
504 IN BDS_CONSOLE_CONNECT_ENTRY
*PlatformConsole
510 Connect the predefined platform default console device. Always try to find
511 and enable the vga device if have.
515 PlatformConsole - Predfined platform default console device array.
519 EFI_SUCCESS - Success connect at least one ConIn and ConOut
520 device, there must have one ConOut device is
523 EFI_STATUS - Return the status of
524 BdsLibConnectAllDefaultConsoles ()
530 EFI_DEVICE_PATH_PROTOCOL
*VarConout
;
531 EFI_DEVICE_PATH_PROTOCOL
*VarConin
;
532 UINTN DevicePathSize
;
535 // Connect RootBridge
537 ConnectRootBridge ();
539 VarConout
= BdsLibGetVariableAndSize (
541 &gEfiGlobalVariableGuid
,
544 VarConin
= BdsLibGetVariableAndSize (
546 &gEfiGlobalVariableGuid
,
550 if (VarConout
== NULL
|| VarConin
== NULL
) {
552 // Do platform specific PCI Device check and add them to ConOut, ConIn, ErrOut
554 DetectAndPreparePlatformPciDevicePath (FALSE
);
557 // Have chance to connect the platform default console,
558 // the platform default console is the minimue device group
559 // the platform should support
561 for (Index
= 0; PlatformConsole
[Index
].DevicePath
!= NULL
; ++Index
) {
563 // Update the console variable with the connect type
565 if ((PlatformConsole
[Index
].ConnectType
& CONSOLE_IN
) == CONSOLE_IN
) {
566 BdsLibUpdateConsoleVariable (VarConsoleInp
, PlatformConsole
[Index
].DevicePath
, NULL
);
568 if ((PlatformConsole
[Index
].ConnectType
& CONSOLE_OUT
) == CONSOLE_OUT
) {
569 BdsLibUpdateConsoleVariable (VarConsoleOut
, PlatformConsole
[Index
].DevicePath
, NULL
);
571 if ((PlatformConsole
[Index
].ConnectType
& STD_ERROR
) == STD_ERROR
) {
572 BdsLibUpdateConsoleVariable (VarErrorOut
, PlatformConsole
[Index
].DevicePath
, NULL
);
577 // Only detect VGA device and add them to ConOut
579 DetectAndPreparePlatformPciDevicePath (TRUE
);
583 // Connect the all the default console with current cosole variable
585 Status
= BdsLibConnectAllDefaultConsoles ();
586 if (EFI_ERROR (Status
)) {
599 // Device 0 Function 0
601 PciWrite8 (PCI_LIB_ADDRESS (0,0,0,0x3c), 0x00);
604 // Device 1 Function 0
606 PciWrite8 (PCI_LIB_ADDRESS (0,1,0,0x3c), 0x00);
607 PciWrite8 (PCI_LIB_ADDRESS (0,1,0,0x60), 0x8b);
608 PciWrite8 (PCI_LIB_ADDRESS (0,1,0,0x61), 0x89);
609 PciWrite8 (PCI_LIB_ADDRESS (0,1,0,0x62), 0x0a);
610 PciWrite8 (PCI_LIB_ADDRESS (0,1,0,0x63), 0x89);
611 //PciWrite8 (PCI_LIB_ADDRESS (0,1,0,0x82), 0x02);
614 // Device 1 Function 1
616 PciWrite8 (PCI_LIB_ADDRESS (0,1,1,0x3c), 0x00);
619 // Device 1 Function 3
621 PciWrite8 (PCI_LIB_ADDRESS (0,1,3,0x3c), 0x0b);
622 PciWrite8 (PCI_LIB_ADDRESS (0,1,3,0x3d), 0x01);
623 PciWrite8 (PCI_LIB_ADDRESS (0,1,3,0x5f), 0x90);
626 // Device 2 Function 0
628 PciWrite8 (PCI_LIB_ADDRESS (0,2,0,0x3c), 0x00);
631 // Device 3 Function 0
633 PciWrite8 (PCI_LIB_ADDRESS (0,3,0,0x3c), 0x0b);
634 PciWrite8 (PCI_LIB_ADDRESS (0,3,0,0x3d), 0x01);
639 PlatformBdsConnectSequence (
646 Connect with predeined platform connect sequence,
647 the OEM/IBV can customize with their own connect sequence.
661 DEBUG ((EFI_D_INFO
, "PlatformBdsConnectSequence\n"));
666 // Here we can get the customized platform connect sequence
667 // Notes: we can connect with new variable which record the
668 // last time boots connect device path sequence
670 while (gPlatformConnectSequence
[Index
] != NULL
) {
672 // Build the platform boot option
674 BdsLibConnectDevicePath (gPlatformConnectSequence
[Index
]);
679 // Just use the simple policy to connect all devices
683 PciInitialization ();
687 PlatformBdsGetDriverOption (
688 IN OUT LIST_ENTRY
*BdsDriverLists
694 Load the predefined driver option, OEM/IBV can customize this
695 to load their own drivers
699 BdsDriverLists - The header of the driver option link list.
707 DEBUG ((EFI_D_INFO
, "PlatformBdsGetDriverOption\n"));
712 PlatformBdsDiagnostics (
713 IN EXTENDMEM_COVERAGE_LEVEL MemoryTestLevel
,
720 Perform the platform diagnostic, such like test memory. OEM/IBV also
721 can customize this fuction to support specific platform diagnostic.
725 MemoryTestLevel - The memory test intensive level
727 QuietBoot - Indicate if need to enable the quiet boot
737 DEBUG ((EFI_D_INFO
, "PlatformBdsDiagnostics\n"));
740 // Here we can decide if we need to show
741 // the diagnostics screen
742 // Notes: this quiet boot code should be remove
743 // from the graphic lib
746 EnableQuietBoot (&gEfiDefaultBmpLogoGuid
);
748 // Perform system diagnostic
750 Status
= BdsMemoryTest (MemoryTestLevel
);
751 if (EFI_ERROR (Status
)) {
758 // Perform system diagnostic
760 Status
= BdsMemoryTest (MemoryTestLevel
);
766 PlatformBdsPolicyBehavior (
767 IN EFI_BDS_ARCH_PROTOCOL_INSTANCE
*PrivateData
,
768 IN OUT LIST_ENTRY
*DriverOptionList
,
769 IN OUT LIST_ENTRY
*BootOptionList
775 The function will excute with as the platform policy, current policy
776 is driven by boot mode. IBV/OEM can customize this code for their specific
781 PrivateData - The EFI_BDS_ARCH_PROTOCOL_INSTANCE instance
783 DriverOptionList - The header of the driver option link list
785 BootOptionList - The header of the boot option link list
795 EFI_EVENT UserInputDurationTime
;
797 BDS_COMMON_OPTION
*BootOption
;
802 DEBUG ((EFI_D_INFO
, "PlatformBdsPolicyBehavior\n"));
805 // Init the time out value
807 Timeout
= PcdGet16 (PcdPlatformBootTimeOut
);
810 // Load the driver option as the driver option list
812 PlatformBdsGetDriverOption (DriverOptionList
);
815 // Get current Boot Mode
817 Status
= BdsLibGetBootMode (&PrivateData
->BootMode
);
818 DEBUG ((EFI_D_ERROR
, "Boot Mode:%x\n", PrivateData
->BootMode
));
821 // Go the different platform policy with different boot mode
822 // Notes: this part code can be change with the table policy
824 ASSERT (PrivateData
->BootMode
== BOOT_WITH_FULL_CONFIGURATION
);
826 // Connect platform console
828 Status
= PlatformBdsConnectConsole (gPlatformConsole
);
829 if (EFI_ERROR (Status
)) {
831 // Here OEM/IBV can customize with defined action
833 PlatformBdsNoConsoleAction ();
836 // Create a 300ms duration event to ensure user has enough input time to enter Setup
838 Status
= gBS
->CreateEvent (
843 &UserInputDurationTime
845 ASSERT (Status
== EFI_SUCCESS
);
846 Status
= gBS
->SetTimer (UserInputDurationTime
, TimerRelative
, 3000000);
847 ASSERT (Status
== EFI_SUCCESS
);
849 // Memory test and Logo show
851 PlatformBdsDiagnostics (IGNORE
, TRUE
);
854 // Perform some platform specific connect sequence
856 PlatformBdsConnectSequence ();
859 // Give one chance to enter the setup if we
863 //PlatformBdsEnterFrontPage (Timeout, FALSE);
866 DEBUG ((EFI_D_INFO
, "BdsLibConnectAll\n"));
868 BdsLibEnumerateAllBootOption (BootOptionList
);
871 // Please uncomment above ConnectAll and EnumerateAll code and remove following first boot
872 // checking code in real production tip.
874 // In BOOT_WITH_FULL_CONFIGURATION boot mode, should always connect every device
875 // and do enumerate all the default boot options. But in development system board, the boot mode
876 // cannot be BOOT_ASSUMING_NO_CONFIGURATION_CHANGES because the machine box
877 // is always open. So the following code only do the ConnectAll and EnumerateAll at first boot.
879 Status
= BdsLibBuildOptionFromVar (BootOptionList
, L
"BootOrder");
880 if (EFI_ERROR(Status
)) {
882 // If cannot find "BootOrder" variable, it may be first boot.
883 // Try to connect all devices and enumerate all boot options here.
886 BdsLibEnumerateAllBootOption (BootOptionList
);
890 // To give the User a chance to enter Setup here, if user set TimeOut is 0.
891 // BDS should still give user a chance to enter Setup
893 // Connect first boot option, and then check user input before exit
895 for (Link
= BootOptionList
->ForwardLink
; Link
!= BootOptionList
;Link
= Link
->ForwardLink
) {
896 BootOption
= CR (Link
, BDS_COMMON_OPTION
, Link
, BDS_LOAD_OPTION_SIGNATURE
);
897 if (!IS_LOAD_OPTION_TYPE (BootOption
->Attribute
, LOAD_OPTION_ACTIVE
)) {
899 // skip the header of the link list, becuase it has no boot option
904 // Make sure the boot option device path connected, but ignore the BBS device path
906 if (DevicePathType (BootOption
->DevicePath
) != BBS_DEVICE_PATH
) {
907 BdsLibConnectDevicePath (BootOption
->DevicePath
);
914 // Check whether the user input after the duration time has expired
916 OldTpl
= EfiGetCurrentTpl();
917 gBS
->RestoreTPL (TPL_APPLICATION
);
918 gBS
->WaitForEvent (1, &UserInputDurationTime
, &Index
);
919 gBS
->CloseEvent (UserInputDurationTime
);
920 Status
= gST
->ConIn
->ReadKeyStroke (gST
->ConIn
, &Key
);
921 gBS
->RaiseTPL (OldTpl
);
923 if (!EFI_ERROR (Status
)) {
925 // Enter Setup if user input
928 PlatformBdsEnterFrontPage (Timeout
, FALSE
);
936 PlatformBdsBootSuccess (
937 IN BDS_COMMON_OPTION
*Option
943 Hook point after a boot attempt succeeds. We don't expect a boot option to
944 return, so the EFI 1.0 specification defines that you will default to an
945 interactive mode and stop processing the BootOrder list in this case. This
946 is alos a platform implementation and can be customized by IBV/OEM.
950 Option - Pointer to Boot Option that succeeded to boot.
960 DEBUG ((EFI_D_INFO
, "PlatformBdsBootSuccess\n"));
962 // If Boot returned with EFI_SUCCESS and there is not in the boot device
963 // select loop then we need to pop up a UI and wait for user input.
965 TmpStr
= Option
->StatusString
;
966 if (TmpStr
!= NULL
) {
967 BdsLibOutputStrings (gST
->ConOut
, TmpStr
, Option
->Description
, L
"\n\r", NULL
);
974 PlatformBdsBootFail (
975 IN BDS_COMMON_OPTION
*Option
,
976 IN EFI_STATUS Status
,
978 IN UINTN ExitDataSize
984 Hook point after a boot attempt fails.
988 Option - Pointer to Boot Option that failed to boot.
990 Status - Status returned from failed boot.
992 ExitData - Exit data returned from failed boot.
994 ExitDataSize - Exit data size returned from failed boot.
1004 DEBUG ((EFI_D_INFO
, "PlatformBdsBootFail\n"));
1007 // If Boot returned with failed status then we need to pop up a UI and wait
1010 TmpStr
= Option
->StatusString
;
1011 if (TmpStr
!= NULL
) {
1012 BdsLibOutputStrings (gST
->ConOut
, TmpStr
, Option
->Description
, L
"\n\r", NULL
);
1018 PlatformBdsNoConsoleAction (
1023 Routine Description:
1025 This function is remained for IBV/OEM to do some platform action,
1026 if there no console device can be connected.
1034 EFI_SUCCESS - Direct return success now.
1038 DEBUG ((EFI_D_INFO
, "PlatformBdsNoConsoleAction\n"));
1044 PlatformBdsLockNonUpdatableFlash (
1048 DEBUG ((EFI_D_INFO
, "PlatformBdsLockNonUpdatableFlash\n"));