ocvalidate: Add checks for OpenCanopy and PickerMode

This commit is contained in:
PMheart 2021-01-07 19:58:07 +08:00
parent 4d8b7aa89c
commit 44ec67ee14
3 changed files with 34 additions and 4 deletions

View File

@ -64,7 +64,7 @@ Utility to validate whether a `config.plist` matches requirements and convention
### Misc
#### Boot
- HibernateMode: Only `None`, `Auto`, `RTC`, or `NVRAM` are accepted.
- PickerMode: Only `Builtin`, `External`, or `Apple` are accepted.
- PickerMode: Only `Builtin`, `External`, or `Apple` are accepted. When set to `External`, `OpenCanopy.efi` should be loaded in `UEFI->Drivers`.
- `PickerAudioAssist` requires `AudioSupport` in `UEFI->Audio` to be enabled.
#### Security
- AuthRestart: If enabled, `VirtualSMC.kext` should be present in `Kernel->Add`.
@ -95,6 +95,7 @@ Utility to validate whether a `config.plist` matches requirements and convention
- When `Ps2KeyboardDxe.efi` is in use, `KeySupport` in `UEFI->Input` should always be enabled altogether.
- `OpenUsbKbDxe.efi` and `Ps2KeyboardDxe.efi` should never co-exist.
- When HFS+ filesystem driver or `AudioDxe.efi` is in use, `ConnectDrivers` should be enabled altogether.
- When `OpenCanopy.efi` is in use, `PickerMode` in `Misc->Boot` should be set to `External`.
#### Input
- KeySupportMode: Only `Auto`, `V1`, `V2`, or `AMI` are accepted.
- When `PointerSupport` is enabled, the value of `PointerSupportMode` should only be `ASUS`.

View File

@ -152,6 +152,9 @@ CheckMiscBoot (
UINT32 ConsoleAttributes;
CONST CHAR8 *HibernateMode;
UINT32 PickerAttributes;
UINT32 Index;
CONST CHAR8 *Driver;
BOOLEAN HasOpenCanopyEfiDriver;
CONST CHAR8 *PickerMode;
CONST CHAR8 *PickerVariant;
BOOLEAN IsPickerAudioAssistEnabled;
@ -182,15 +185,23 @@ CheckMiscBoot (
++ErrorCount;
}
//
// FIXME: Is OpenCanopy.efi mandatory if set to External? Or is this just a suggestion?
//
HasOpenCanopyEfiDriver = FALSE;
for (Index = 0; Index < UserUefi->Drivers.Count; ++Index) {
Driver = OC_BLOB_GET (UserUefi->Drivers.Values[Index]);
if (AsciiStrCmp (Driver, "OpenCanopy.efi") == 0) {
HasOpenCanopyEfiDriver = TRUE;
}
}
PickerMode = OC_BLOB_GET (&UserMisc->Boot.PickerMode);
if (AsciiStrCmp (PickerMode, "Builtin") != 0
&& AsciiStrCmp (PickerMode, "External") != 0
&& AsciiStrCmp (PickerMode, "Apple") != 0) {
DEBUG ((DEBUG_WARN, "Misc->Boot->PickerMode is borked (Can only be Builtin, External, or Apple)!\n"));
++ErrorCount;
} else if (AsciiStrCmp (PickerMode, "External") == 0 && !HasOpenCanopyEfiDriver) {
DEBUG ((DEBUG_WARN, "Misc->Boot->PickerMode is set to External, but OpenCanopy is not loaded at UEFI->Drivers!\n"));
++ErrorCount;
}
PickerVariant = OC_BLOB_GET (&UserMisc->Boot.PickerVariant);

View File

@ -179,6 +179,7 @@ CheckUEFIDrivers (
{
UINT32 ErrorCount;
OC_UEFI_CONFIG *UserUefi;
OC_MISC_CONFIG *UserMisc;
UINT32 Index;
CONST CHAR8 *Driver;
BOOLEAN HasOpenRuntimeEfiDriver;
@ -190,12 +191,16 @@ CheckUEFIDrivers (
UINT32 IndexHfsEfiDriver;
BOOLEAN HasAudioDxeEfiDriver;
UINT32 IndexAudioDxeEfiDriver;
BOOLEAN HasOpenCanopyEfiDriver;
UINT32 IndexOpenCanopyEfiDriver;
CONST CHAR8 *PickerMode;
BOOLEAN IsRequestBootVarRoutingEnabled;
BOOLEAN IsKeySupportEnabled;
BOOLEAN IsConnectDriversEnabled;
ErrorCount = 0;
UserUefi = &Config->Uefi;
UserMisc = &Config->Misc;
HasOpenRuntimeEfiDriver = FALSE;
HasOpenUsbKbDxeEfiDriver = FALSE;
@ -205,6 +210,9 @@ CheckUEFIDrivers (
HasHfsEfiDriver = FALSE;
IndexHfsEfiDriver = 0;
HasAudioDxeEfiDriver = FALSE;
IndexAudioDxeEfiDriver = 0;
HasOpenCanopyEfiDriver = FALSE;
IndexOpenCanopyEfiDriver = 0;
for (Index = 0; Index < UserUefi->Drivers.Count; ++Index) {
Driver = OC_BLOB_GET (UserUefi->Drivers.Values[Index]);
@ -240,6 +248,10 @@ CheckUEFIDrivers (
HasAudioDxeEfiDriver = TRUE;
IndexAudioDxeEfiDriver = Index;
}
if (AsciiStrCmp (Driver, "OpenCanopy.efi") == 0) {
HasOpenCanopyEfiDriver = TRUE;
IndexOpenCanopyEfiDriver = Index;
}
}
//
@ -295,6 +307,12 @@ CheckUEFIDrivers (
}
}
PickerMode = OC_BLOB_GET (&UserMisc->Boot.PickerMode);
if (HasOpenCanopyEfiDriver && AsciiStrCmp (PickerMode, "External") != 0) {
DEBUG ((DEBUG_WARN, "OpenCanopy.efi is loaded at UEFI->Drivers[%u], but Misc->Boot->PickerMode is not set to External!\n", IndexOpenCanopyEfiDriver));
++ErrorCount;
}
return ErrorCount;
}