提交 0ee57bde 编写于 作者: V vit9696

OcConsoleLib: Fixed builtin text renderer failing to provide ConsoleControl

上级 b4ade479
......@@ -26,6 +26,7 @@ OpenCore Changelog
- Added `DeduplicateBootOrder` UEFI quirk
- Removed `DirectGopCacheMode` due to being ineffective
- Fixed assertions on log exhaustion causing boot failures
- Fixed builtin text renderer failing to provide ConsoleControl
#### v0.5.8
- Fixed invalid CPU object reference in SSDT-PLUG
......
......@@ -74,10 +74,26 @@ GetArguments (
@retval EFI_SUCCESS on success.
**/
EFI_STATUS
UninstallAllProtocolInstances (
OcUninstallAllProtocolInstances (
EFI_GUID *Protocol
);
/**
Handle protocol on handle and fallback to any protocol when missing.
@param[in] Handle Handle to search for protocol.
@param[in] Protocol Protocol to search for.
@param[out] Interface Protocol interface if found.
@retval EFI_SUCCESS on success.
**/
EFI_STATUS
OcHandleProtocolFallback (
IN EFI_HANDLE Handle,
IN EFI_GUID *Protocol,
OUT VOID **Interface
);
/**
Release UEFI ownership from USB controllers at booting.
**/
......
......@@ -1658,7 +1658,7 @@ OcAppleBootPolicyInstallProtocol (
EFI_HANDLE Handle;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleBootPolicyProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleBootPolicyProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCBP: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -563,7 +563,7 @@ OcAppleEventInstallProtocol (
DEBUG ((DEBUG_VERBOSE, "OcAppleEventInstallProtocol\n"));
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleEventProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleEventProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCAE: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -231,7 +231,7 @@ OcAppleImageConversionInstallProtocol (
EFI_HANDLE NewHandle;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleImageConversionProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleImageConversionProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCIC: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -595,8 +595,8 @@ OcAppleKeyMapInstallProtocols (
APPLE_KEY_MAP_AGGREGATOR_PROTOCOL *Aggregator;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleKeyMapDatabaseProtocolGuid);
Status2 = UninstallAllProtocolInstances (&gAppleKeyMapAggregatorProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleKeyMapDatabaseProtocolGuid);
Status2 = OcUninstallAllProtocolInstances (&gAppleKeyMapAggregatorProtocolGuid);
if (EFI_ERROR (Status) || EFI_ERROR (Status2)) {
DEBUG ((DEBUG_ERROR, "OCKM: Uninstall failed: %r/%r\n", Status, Status2));
return NULL;
......
......@@ -998,7 +998,7 @@ OcAppleSecureBootInstallProtocol (
UINTN DataSize;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleSecureBootProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleSecureBootProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCSB: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -55,7 +55,7 @@ OcAppleUserInterfaceThemeInstallProtocol (
EFI_HANDLE NewHandle;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gEfiUserInterfaceThemeProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gEfiUserInterfaceThemeProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCUT: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -80,7 +80,7 @@ OcAudioInstallProtocols (
if (Reinstall) {
for (Index = 0; Index < ARRAY_SIZE (mAudioProtocols); ++Index) {
Status = UninstallAllProtocolInstances (mAudioProtocols[Index]);
Status = OcUninstallAllProtocolInstances (mAudioProtocols[Index]);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCAU: Uninstall %g failed: %r\n", mAudioProtocols[Index], Status));
return NULL;
......
......@@ -34,9 +34,9 @@ OcConsoleControlSetMode (
EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl;
EFI_CONSOLE_CONTROL_SCREEN_MODE OldMode;
Status = gBS->LocateProtocol (
Status = OcHandleProtocolFallback (
&gST->ConsoleOutHandle,
&gEfiConsoleControlProtocolGuid,
NULL,
(VOID *) &ConsoleControl
);
......@@ -80,9 +80,9 @@ OcConsoleControlInstallProtocol (
EFI_STATUS Status;
EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl;
Status = gBS->LocateProtocol (
Status = OcHandleProtocolFallback (
&gST->ConsoleOutHandle,
&gEfiConsoleControlProtocolGuid,
NULL,
(VOID *) &ConsoleControl
);
......
......@@ -21,6 +21,7 @@
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/OcConsoleLib.h>
#include <Library/OcMiscLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Protocol/ConsoleControl.h>
......@@ -432,7 +433,7 @@ AsciiTextReset (
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);
Status = gBS->HandleProtocol (
Status = OcHandleProtocolFallback (
gST->ConsoleOutHandle,
&gEfiGraphicsOutputProtocolGuid,
(VOID **) &mGraphicsOutput
......@@ -909,11 +910,10 @@ ConsoleControlInstall (
{
EFI_STATUS Status;
EFI_CONSOLE_CONTROL_PROTOCOL *ConsoleControl;
EFI_HANDLE NewHandle;
Status = gBS->LocateProtocol (
Status = OcHandleProtocolFallback (
&gST->ConsoleOutHandle,
&gEfiConsoleControlProtocolGuid,
NULL,
(VOID *) &ConsoleControl
);
......@@ -927,9 +927,8 @@ ConsoleControlInstall (
);
}
NewHandle = NULL;
gBS->InstallMultipleProtocolInterfaces (
&NewHandle,
&gST->ConsoleOutHandle,
&gEfiConsoleControlProtocolGuid,
&mConsoleControlProtocol,
NULL
......
......@@ -148,7 +148,7 @@ ControlledClearScreen (
UINTN SizeOfInfo;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
Status = gBS->HandleProtocol (
Status = OcHandleProtocolFallback (
gST->ConsoleOutHandle,
&gEfiGraphicsOutputProtocolGuid,
(VOID **) &GraphicsOutput
......@@ -257,7 +257,7 @@ ConsoleControlSetMode (
mConsoleMode = Mode;
if (mClearScreenOnModeSwitch && Mode == EfiConsoleControlScreenText) {
Status = gBS->HandleProtocol (
Status = OcHandleProtocolFallback (
gST->ConsoleOutHandle,
&gEfiGraphicsOutputProtocolGuid,
(VOID **) &GraphicsOutput
......
......@@ -53,7 +53,7 @@ OcDataHubInstallProtocol (
EFI_DATA_HUB_PROTOCOL *DataHub;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gEfiDataHubProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gEfiDataHubProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCDH: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -256,7 +256,7 @@ OcAppleDebugLogInstallProtocol (
EFI_HANDLE Handle;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleDebugLogProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleDebugLogProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCL: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -796,7 +796,7 @@ OcDevicePathPropertyInstallProtocol (
EFI_HANDLE Handle;
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gEfiDevicePathPropertyDatabaseProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gEfiDevicePathPropertyDatabaseProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCDP: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -197,7 +197,7 @@ OcHashServicesInstallProtocol (
//
// Uninstall all the existing protocol instances (which are not to be trusted).
//
Status = UninstallAllProtocolInstances (&gEfiHashServiceBindingProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gEfiHashServiceBindingProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCHS: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -58,7 +58,7 @@ GetArguments (
}
EFI_STATUS
UninstallAllProtocolInstances (
OcUninstallAllProtocolInstances (
EFI_GUID *Protocol
)
{
......@@ -110,3 +110,28 @@ UninstallAllProtocolInstances (
return Status;
}
EFI_STATUS
OcHandleProtocolFallback (
IN EFI_HANDLE Handle,
IN EFI_GUID *Protocol,
OUT VOID **Interface
)
{
EFI_STATUS Status;
Status = gBS->HandleProtocol (
Handle,
Protocol,
Interface
);
if (EFI_ERROR (Status)) {
Status = gBS->LocateProtocol (
Protocol,
NULL,
Interface
);
}
return Status;
}
......@@ -205,7 +205,7 @@ OcOSInfoInstallProtocol (
DEBUG ((DEBUG_VERBOSE, "OcOSInfoInstallProtocol\n"));
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gEfiOSInfoProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gEfiOSInfoProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCOS: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -298,7 +298,7 @@ OcAppleRtcRamInstallProtocol (
DEBUG ((DEBUG_VERBOSE, "OcAppleRtcRamInstallProtocol\n"));
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleRtcRamProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleRtcRamProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCRTC: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -597,7 +597,7 @@ OcSmcIoInstallProtocol (
}
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gAppleSmcIoProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gAppleSmcIoProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCSMC: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -22,7 +22,7 @@ OcUnicodeCollationEngInstallProtocol (
OcUnicodeCollationInitializeMappingTables ();
if (Reinstall) {
Status = UninstallAllProtocolInstances (&gEfiUnicodeCollation2ProtocolGuid);
Status = OcUninstallAllProtocolInstances (&gEfiUnicodeCollation2ProtocolGuid);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "OCUC: Uninstall failed: %r\n", Status));
return NULL;
......
......@@ -15,6 +15,7 @@
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/OcGuardLib.h>
#include <Library/OcMiscLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include "../OpenCanopy.h"
......@@ -333,32 +334,6 @@ InternalUpdateStateAbsolute (
return EFI_SUCCESS;
}
STATIC
EFI_STATUS
InternalHandleProtocolFallback (
IN EFI_HANDLE Handle,
IN EFI_GUID *Protocol,
OUT VOID **Interface
)
{
EFI_STATUS Status;
Status = gBS->HandleProtocol (
Handle,
Protocol,
Interface
);
if (EFI_ERROR (Status)) {
Status = gBS->LocateProtocol (
Protocol,
NULL,
Interface
);
}
return Status;
}
VOID
GuiPointerReset (
IN OUT GUI_POINTER_CONTEXT *Context
......@@ -480,7 +455,7 @@ GuiPointerConstruct (
Context.X = DefaultX;
Context.Y = DefaultY;
Status = InternalHandleProtocolFallback (
Status = OcHandleProtocolFallback (
gST->ConsoleInHandle,
&gAppleEventProtocolGuid,
(VOID **)&Context.AppleEvent
......@@ -519,14 +494,14 @@ GuiPointerConstruct (
}
if (EFI_ERROR (Status)) {
Status = InternalHandleProtocolFallback (
Status = OcHandleProtocolFallback (
gST->ConsoleInHandle,
&gEfiSimplePointerProtocolGuid,
(VOID **)&Context.Pointer
);
}
Status2 = InternalHandleProtocolFallback (
Status2 = OcHandleProtocolFallback (
gST->ConsoleInHandle,
&gEfiAbsolutePointerProtocolGuid,
(VOID **)&Context.AbsPointer
......
......@@ -72,6 +72,7 @@
OcBootManagementLib
OcCompressionLib
OcGuardLib
OcMiscLib
OcPngLib
OcStorageLib
UefiBootServicesTableLib
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册