提交 cc7fec68 编写于 作者: P PMheart

ocvalidate: Second fix for the checks for `LoadEarly`

Thanks @vit9696 and @mikebeaton

closes https://github.com/acidanthera/bugtracker/issues/2099#issuecomment-1201557471
上级 7a9d179a
......@@ -125,7 +125,9 @@ Utility to validate whether a `config.plist` matches requirements and convention
- `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`.
- When `OpenVariableRuntimeDxe.efi` is in use, its `LoadEarly` option must be set to `TRUE`; `LoadEarly` for any other driver must be set to `FALSE`.
- When `OpenVariableRuntimeDxe.efi` is in use, its `LoadEarly` option must be set to `TRUE`.
- `OpenRuntime.efi` must be placed after `OpenVariableRuntimeDxe.efi` when both are in use.
- `LoadEarly` for any other driver but `OpenVariableRuntimeDxe.efi` and `OpenRuntime.efi` must be set to `FALSE`.
#### Input
- KeySupportMode: Only `Auto`, `V1`, `V2`, or `AMI` are accepted.
- When `PointerSupport` is enabled, the value of `PointerSupportMode` should only be `ASUS`.
......
......@@ -296,12 +296,13 @@ CheckUefiDrivers (
{
UINT32 ErrorCount;
UINT32 Index;
UINT32 Index2;
OC_UEFI_DRIVER_ENTRY *DriverEntry;
CONST CHAR8 *Comment;
CONST CHAR8 *Driver;
UINTN DriverSumSize;
BOOLEAN HasOpenRuntimeEfiDriver;
BOOLEAN IsOpenRuntimeLoadEarly;
UINT32 IndexOpenRuntimeEfiDriver;
BOOLEAN HasOpenUsbKbDxeEfiDriver;
UINT32 IndexOpenUsbKbDxeEfiDriver;
BOOLEAN HasPs2KeyboardDxeEfiDriver;
......@@ -314,19 +315,23 @@ CheckUefiDrivers (
BOOLEAN IsKeySupportEnabled;
BOOLEAN IsConnectDriversEnabled;
BOOLEAN HasOpenVariableRuntimeDxeEfiDriver;
UINT32 IndexOpenVariableRuntimeDxeEfiDriver;
ErrorCount = 0;
HasOpenRuntimeEfiDriver = FALSE;
HasOpenUsbKbDxeEfiDriver = FALSE;
IndexOpenUsbKbDxeEfiDriver = 0;
HasPs2KeyboardDxeEfiDriver = FALSE;
IndexPs2KeyboardDxeEfiDriver = 0;
HasHfsEfiDriver = FALSE;
IndexHfsEfiDriver = 0;
HasAudioDxeEfiDriver = FALSE;
IndexAudioDxeEfiDriver = 0;
HasOpenVariableRuntimeDxeEfiDriver = FALSE;
HasOpenRuntimeEfiDriver = FALSE;
IndexOpenRuntimeEfiDriver = 0;
HasOpenUsbKbDxeEfiDriver = FALSE;
IndexOpenUsbKbDxeEfiDriver = 0;
HasPs2KeyboardDxeEfiDriver = FALSE;
IndexPs2KeyboardDxeEfiDriver = 0;
HasHfsEfiDriver = FALSE;
IndexHfsEfiDriver = 0;
HasAudioDxeEfiDriver = FALSE;
IndexAudioDxeEfiDriver = 0;
HasOpenVariableRuntimeDxeEfiDriver = FALSE;
IndexOpenVariableRuntimeDxeEfiDriver = 0;
IsOpenRuntimeLoadEarly = FALSE;
for (Index = 0; Index < Config->Uefi.Drivers.Count; ++Index) {
DriverEntry = Config->Uefi.Drivers.Values[Index];
Comment = OC_BLOB_GET (&DriverEntry->Comment);
......@@ -364,23 +369,28 @@ CheckUefiDrivers (
continue;
}
//
// For all drivers but OpenVariableRuntimeDxe.efi, LoadEarly must be FALSE.
//
if (AsciiStrCmp (Driver, "OpenVariableRuntimeDxe.efi") != 0) {
if (DriverEntry->LoadEarly) {
DEBUG ((DEBUG_WARN, "%a at UEFI->Drivers[%u] must have LoadEarly set to FALSE", Driver, Index));
++ErrorCount;
}
} else {
if (AsciiStrCmp (Driver, "OpenVariableRuntimeDxe.efi") == 0) {
HasOpenVariableRuntimeDxeEfiDriver = TRUE;
IndexOpenVariableRuntimeDxeEfiDriver = Index;
if (!DriverEntry->LoadEarly) {
DEBUG ((DEBUG_WARN, "OpenVariableRuntimeDxe at UEFI->Drivers[%u] must have LoadEarly set to TRUE!\n", Index));
++ErrorCount;
}
}
//
// For all drivers but OpenVariableRuntimeDxe.efi and OpenRuntime.efi, LoadEarly must be FALSE.
//
if ((AsciiStrCmp (Driver, "OpenVariableRuntimeDxe.efi") != 0) && (AsciiStrCmp (Driver, "OpenRuntime.efi") != 0) && DriverEntry->LoadEarly) {
DEBUG ((DEBUG_WARN, "%a at UEFI->Drivers[%u] must have LoadEarly set to FALSE!\n", Driver, Index));
++ErrorCount;
}
if (AsciiStrCmp (Driver, "OpenRuntime.efi") == 0) {
HasOpenRuntimeEfiDriver = TRUE;
HasOpenRuntimeEfiDriver = TRUE;
IndexOpenRuntimeEfiDriver = Index;
IsOpenRuntimeLoadEarly = DriverEntry->LoadEarly;
}
if (AsciiStrCmp (Driver, "OpenUsbKbDxe.efi") == 0) {
......@@ -416,21 +426,6 @@ CheckUefiDrivers (
}
}
//
// LoadEarly should only be TRUE when OpenVariableRuntimeDxe is used.
//
if (!HasOpenVariableRuntimeDxeEfiDriver) {
for (Index2 = 0; Index2 < Config->Uefi.Drivers.Count; ++Index2) {
DriverEntry = Config->Uefi.Drivers.Values[Index2];
Driver = OC_BLOB_GET (&DriverEntry->Path);
if (AsciiStrCmp (Driver, "OpenVariableRuntimeDxe.efi") != 0 && DriverEntry->LoadEarly) {
DEBUG ((DEBUG_WARN, "%a at UEFI->Drivers[%u] should have LoadEarly set to FALSE when OpenVariableRuntimeDxe is NOT used!\n", Driver, Index2));
++ErrorCount;
}
}
}
//
// Check duplicated Drivers.
//
......@@ -441,6 +436,28 @@ CheckUefiDrivers (
UefiDriverHasDuplication
);
if (HasOpenVariableRuntimeDxeEfiDriver && HasOpenRuntimeEfiDriver) {
if (!IsOpenRuntimeLoadEarly) {
DEBUG ((
DEBUG_WARN,
"OpenRuntime.efi at UEFI->Drivers[%u] should have its LoadEarly set to TRUE when OpenVariableRuntimeDxe.efi at UEFI->Drivers[%u] is in use!\n",
IndexOpenRuntimeEfiDriver,
IndexOpenVariableRuntimeDxeEfiDriver
));
++ErrorCount;
}
if (IndexOpenVariableRuntimeDxeEfiDriver >= IndexOpenRuntimeEfiDriver) {
DEBUG ((
DEBUG_WARN,
"OpenRuntime.efi (currently at UEFI->Drivers[%u]) should be placed after OpenVariableRuntimeDxe.efi (currently at UEFI->Drivers[%u])!\n",
IndexOpenRuntimeEfiDriver,
IndexOpenVariableRuntimeDxeEfiDriver
));
++ErrorCount;
}
}
IsRequestBootVarRoutingEnabled = Config->Uefi.Quirks.RequestBootVarRouting;
if (IsRequestBootVarRoutingEnabled) {
if (!HasOpenRuntimeEfiDriver) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册