From 892f9fd10a573dd46651db37a7b0805876e8c021 Mon Sep 17 00:00:00 2001 From: vit9696 Date: Sat, 18 Apr 2020 22:21:58 +0300 Subject: [PATCH] OpenCoreUefi: Added `AppleRtcRam` protocol implementation closes acidanthera/bugtracker#765 --- Changelog.md | 1 + Docs/Configuration.pdf | Bin 533961 -> 534255 bytes Docs/Configuration.tex | 16 +++++- Docs/Differences/Differences.pdf | Bin 330418 -> 333821 bytes Docs/Differences/Differences.tex | 22 ++++++-- Docs/Sample.plist | 11 ++++ Docs/SampleFull.plist | 11 ++++ Include/Guid/OcVariables.h | 5 ++ Include/Library/OcConfigurationLib.h | 1 + .../OcConfigurationLib/OcConfigurationLib.c | 1 + Library/OcRtcLib/AppleRtcRam.c | 48 ++++++++++++++++-- Library/OcRtcLib/OcRtcLib.inf | 4 ++ Platform/OpenCore/OpenCoreUefi.c | 5 ++ 13 files changed, 116 insertions(+), 9 deletions(-) diff --git a/Changelog.md b/Changelog.md index b3a7a4e1..f6ff688f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -14,6 +14,7 @@ OpenCore Changelog - Added memory region reservation support - Added RtcRw tool to manipulate RTC memory - Added `PatchAppleRtcChecksum` kernel quirk +- Added `AppleRtcRam` protocol implementation #### v0.5.7 - Added TimeMachine detection to picker diff --git a/Docs/Configuration.pdf b/Docs/Configuration.pdf index 4931c4ffd412b267b2b91b50237455ea927fc326..f406b44422974fd0e2632ebd78b634a44724aef6 100644 GIT binary patch delta 29961 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 Jp(F|Se*if@D=z>5 delta 29745 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 JTtNc<{{WrYJLmua diff --git a/Docs/Configuration.tex b/Docs/Configuration.tex index cdfb2c9d..7ff72135 100755 --- a/Docs/Configuration.tex +++ b/Docs/Configuration.tex @@ -1987,8 +1987,8 @@ blocking. kernel extension if this is desired. \emph{Note 2}: This option will not protect areas from being overwritten - at firmware stage (e.g. macOS bootloader), see \texttt{RTC} (FIXME) section - if this is desired. + at firmware stage (e.g. macOS bootloader), see \texttt{AppleRtc} protocol + description if this is desired. \item \texttt{DummyPowerManagement}\\ @@ -4826,6 +4826,18 @@ functioning. Feature highlights: \textbf{Description}: Reinstalls Apple Key Map protocols with builtin versions. +\item + \texttt{AppleRtc}\\ + \textbf{Type}: \texttt{plist\ boolean}\\ + \textbf{Failsafe}: \texttt{false}\\ + \textbf{Description}: Reinstalls Apple RTC RAM protocol with builtin + version. + + \emph{Note}: Builtin version of Apple RTC RAM protocol may filter out + I/O attempts to select RTC memory addresses. The list of addresses + can be specified in \texttt{4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:rtc-blacklist} + variable as a data array. + \item \texttt{AppleSmcIo}\\ \textbf{Type}: \texttt{plist\ boolean}\\ diff --git a/Docs/Differences/Differences.pdf b/Docs/Differences/Differences.pdf index b032a70c35feed85a9b1064dec1dff593b4a0d62..52f56680c285abea6f039054dcd4d34cf84dc001 100644 GIT binary patch delta 18780 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

)#jqc7|-hFeya9urfZsAgt;^U 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 delta 15421 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 diff --git a/Docs/Differences/Differences.tex b/Docs/Differences/Differences.tex index 08db585e..1455e30a 100644 --- a/Docs/Differences/Differences.tex +++ b/Docs/Differences/Differences.tex @@ -1,7 +1,7 @@ \documentclass[]{article} %DIF LATEXDIFF DIFFERENCE FILE %DIF DEL PreviousConfiguration.tex Tue Apr 7 19:32:13 2020 -%DIF ADD ../Configuration.tex Sat Apr 18 15:39:07 2020 +%DIF ADD ../Configuration.tex Sat Apr 18 22:12:54 2020 \usepackage{lmodern} \usepackage{amssymb,amsmath} @@ -2050,8 +2050,8 @@ blocking. } \emph{\DIFadd{Note 2}}\DIFadd{: This option will not protect areas from being overwritten - at firmware stage (e.g. macOS bootloader), see }\texttt{\DIFadd{RTC}} \DIFadd{(FIXME) section - if this is desired. + at firmware stage (e.g. macOS bootloader), see }\texttt{\DIFadd{AppleRtc}} \DIFadd{protocol + description if this is desired. } \item @@ -4911,7 +4911,21 @@ functioning. Feature highlights: versions. \item - \texttt{AppleSmcIo}\\ + \DIFaddbegin \texttt{\DIFadd{AppleRtc}}\\ + \textbf{\DIFadd{Type}}\DIFadd{: }\texttt{\DIFadd{plist\ boolean}}\\ + \textbf{\DIFadd{Failsafe}}\DIFadd{: }\texttt{\DIFadd{false}}\\ + \textbf{\DIFadd{Description}}\DIFadd{: Reinstalls Apple RTC RAM protocol with builtin + version. +} + + \emph{\DIFadd{Note}}\DIFadd{: Builtin version of Apple RTC RAM protocol may filter out + I/O attempts to select RTC memory addresses. The list of addresses + can be specified in }\texttt{\DIFadd{4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:rtc-blacklist}} + \DIFadd{variable as a data array. +} + +\item + \DIFaddend \texttt{AppleSmcIo}\\ \textbf{Type}: \texttt{plist\ boolean}\\ \textbf{Failsafe}: \texttt{false}\\ \textbf{Description}: Reinstalls Apple SMC I/O protocol with a builtin diff --git a/Docs/Sample.plist b/Docs/Sample.plist index c179ccd4..ba31873a 100644 --- a/Docs/Sample.plist +++ b/Docs/Sample.plist @@ -683,6 +683,11 @@ prev-lang:kbd cnUtUlU6MjUy + 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 + + rtc-blacklist + + Block @@ -695,6 +700,10 @@ boot-args + 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 + + rtc-blacklist + LegacyEnable @@ -864,6 +873,8 @@ AppleKeyMap + AppleRtcRam + AppleSmcIo AppleUserInterfaceTheme diff --git a/Docs/SampleFull.plist b/Docs/SampleFull.plist index 6d4ab9bd..f550f897 100644 --- a/Docs/SampleFull.plist +++ b/Docs/SampleFull.plist @@ -683,6 +683,11 @@ prev-lang:kbd cnUtUlU6MjUy + 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 + + rtc-blacklist + + Block @@ -695,6 +700,10 @@ boot-args + 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 + + rtc-blacklist + LegacyEnable @@ -967,6 +976,8 @@ AppleKeyMap + AppleRtcRam + AppleSmcIo AppleUserInterfaceTheme diff --git a/Include/Guid/OcVariables.h b/Include/Guid/OcVariables.h index 4064325e..d67e2eed 100644 --- a/Include/Guid/OcVariables.h +++ b/Include/Guid/OcVariables.h @@ -77,6 +77,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. // #define OC_ACPI_CPU_FREQUENCY_VARIABLE_NAME L"acpi-cpu-frequency" +// +// Variable used to mark blacklisted RTC values. +// +#define OC_RTC_BLACKLIST_VARIABLE_NAME L"rtc-blacklist" + // // 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 // This GUID is specifically used for normal variable access by Lilu kernel extension and its plugins. diff --git a/Include/Library/OcConfigurationLib.h b/Include/Library/OcConfigurationLib.h index ea0dde89..9907b98e 100644 --- a/Include/Library/OcConfigurationLib.h +++ b/Include/Library/OcConfigurationLib.h @@ -535,6 +535,7 @@ typedef enum { _(BOOLEAN , AppleEvent , , FALSE , ()) \ _(BOOLEAN , AppleImageConversion , , FALSE , ()) \ _(BOOLEAN , AppleKeyMap , , FALSE , ()) \ + _(BOOLEAN , AppleRtcRam , , FALSE , ()) \ _(BOOLEAN , AppleSmcIo , , FALSE , ()) \ _(BOOLEAN , AppleUserInterfaceTheme , , FALSE , ()) \ _(BOOLEAN , DataHub , , FALSE , ()) \ diff --git a/Library/OcConfigurationLib/OcConfigurationLib.c b/Library/OcConfigurationLib/OcConfigurationLib.c index 4a3e5914..a196af46 100644 --- a/Library/OcConfigurationLib/OcConfigurationLib.c +++ b/Library/OcConfigurationLib/OcConfigurationLib.c @@ -547,6 +547,7 @@ mUefiProtocolsSchema[] = { OC_SCHEMA_BOOLEAN_IN ("AppleEvent", OC_GLOBAL_CONFIG, Uefi.Protocols.AppleEvent), OC_SCHEMA_BOOLEAN_IN ("AppleImageConversion", OC_GLOBAL_CONFIG, Uefi.Protocols.AppleImageConversion), OC_SCHEMA_BOOLEAN_IN ("AppleKeyMap", OC_GLOBAL_CONFIG, Uefi.Protocols.AppleKeyMap), + OC_SCHEMA_BOOLEAN_IN ("AppleRtcRam", OC_GLOBAL_CONFIG, Uefi.Protocols.AppleRtcRam), OC_SCHEMA_BOOLEAN_IN ("AppleSmcIo", OC_GLOBAL_CONFIG, Uefi.Protocols.AppleSmcIo), OC_SCHEMA_BOOLEAN_IN ("AppleUserInterfaceTheme", OC_GLOBAL_CONFIG, Uefi.Protocols.AppleUserInterfaceTheme), OC_SCHEMA_BOOLEAN_IN ("DataHub", OC_GLOBAL_CONFIG, Uefi.Protocols.DataHub), diff --git a/Library/OcRtcLib/AppleRtcRam.c b/Library/OcRtcLib/AppleRtcRam.c index 272a95c3..bc06dcbb 100644 --- a/Library/OcRtcLib/AppleRtcRam.c +++ b/Library/OcRtcLib/AppleRtcRam.c @@ -16,9 +16,11 @@ **/ +#include #include #include #include +#include #include #include #include @@ -26,6 +28,9 @@ #include "OcRtcLibInternal.h" STATIC EFI_LOCK mAppleRtcRamLock; +STATIC UINT8 mEmulatedRtcArea[APPLE_RTC_TOTAL_SIZE]; +STATIC BOOLEAN mEmulatedRtcStatus[APPLE_RTC_TOTAL_SIZE]; + STATIC EFI_STATUS @@ -36,6 +41,10 @@ SyncRtcRead ( { EFI_STATUS Status; + if (mEmulatedRtcStatus[Address]) { + return mEmulatedRtcArea[Address]; + } + Status = EfiAcquireLockOrFail (&mAppleRtcRamLock); if (EFI_ERROR (Status)) { return Status; @@ -55,6 +64,11 @@ SyncRtcWrite ( { EFI_STATUS Status; + if (mEmulatedRtcStatus[Address]) { + mEmulatedRtcArea[Address] = Value; + return EFI_SUCCESS; + } + Status = EfiAcquireLockOrFail (&mAppleRtcRamLock); if (EFI_ERROR (Status)) { return Status; @@ -150,7 +164,7 @@ AppleRtcRamReadData ( return Status; } - if (((UINT32) Temp ^ (UINT32) *Buffer) != 0xFF) { + if ((Temp ^ *Buffer) != 0xFF) { *Buffer = 0; } } @@ -275,8 +289,11 @@ OcAppleRtcRamInstallProtocol ( IN BOOLEAN Reinstall ) { - EFI_STATUS Status; - APPLE_RTC_RAM_PROTOCOL *Protocol; + EFI_STATUS Status; + APPLE_RTC_RAM_PROTOCOL *Protocol; + UINT8 *RtcBlacklist; + UINTN Index; + UINTN RtcBlacklistSize; DEBUG ((DEBUG_VERBOSE, "OcAppleRtcRamInstallProtocol\n")); @@ -298,6 +315,31 @@ OcAppleRtcRamInstallProtocol ( } } + DEBUG (( + DEBUG_INFO, + "OCRTC: Wake log is 0x%02X 0x%02X % 3d 0x%02X\n", + OcRtcRead (APPLE_RTC_TRACE_DATA_ADDR), + OcRtcRead (APPLE_RTC_WL_MASK_ADDR), + OcRtcRead (APPLE_RTC_WL_EVENT_ADDR), + OcRtcRead (APPLE_RTC_WL_EVENT_EXTRA_ADDR) + )); + + Status = GetVariable2 ( + OC_RTC_BLACKLIST_VARIABLE_NAME, + &gOcVendorVariableGuid, + (VOID **) &RtcBlacklist, + &RtcBlacklistSize + ); + + if (!EFI_ERROR (Status)) { + for (Index = 0; Index < APPLE_RTC_TOTAL_SIZE; ++Index) { + mEmulatedRtcStatus[RtcBlacklist[Index]] = TRUE; + DEBUG ((DEBUG_INFO, "OCRTC: Blacklisted %02x address\n", RtcBlacklist[Index])); + } + + FreePool (RtcBlacklist); + } + // // Note, for debugging on QEMU this will need to changed to TPL_CALLBACK. // By default we follow AppleRtcRam implementation. diff --git a/Library/OcRtcLib/OcRtcLib.inf b/Library/OcRtcLib/OcRtcLib.inf index 61bb0b78..558e7a58 100644 --- a/Library/OcRtcLib/OcRtcLib.inf +++ b/Library/OcRtcLib/OcRtcLib.inf @@ -38,6 +38,9 @@ MdePkg/MdePkg.dec OpenCorePkg/OpenCorePkg.dec +[Guids] + gOcVendorVariableGuid + [Protocols] gAppleRtcRamProtocolGuid @@ -45,6 +48,7 @@ BaseMemoryLib DebugLib IoLib + MemoryAllocationLib OcMiscLib UefiLib UefiBootServicesTableLib diff --git a/Platform/OpenCore/OpenCoreUefi.c b/Platform/OpenCore/OpenCoreUefi.c index bfff9d35..4dbb6ede 100644 --- a/Platform/OpenCore/OpenCoreUefi.c +++ b/Platform/OpenCore/OpenCoreUefi.c @@ -38,6 +38,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include #include @@ -339,6 +340,10 @@ OcReinstallProtocols ( if (OcOSInfoInstallProtocol (Config->Uefi.Protocols.OSInfo) == NULL) { DEBUG ((DEBUG_ERROR, "OC: Failed to install os info protocol\n")); } + + if (OcAppleRtcRamInstallProtocol (Config->Uefi.Protocols.AppleRtcRam) == NULL) { + DEBUG ((DEBUG_ERROR, "OC: Failed to install rtc ram protocol\n")); + } } VOID