mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
191 lines
4.2 KiB
C
191 lines
4.2 KiB
C
/** @file
|
|
Copyright (C) 2018, vit9696. All rights reserved.
|
|
Copyright (C) 2020, PMheart. All rights reserved.
|
|
|
|
All rights reserved.
|
|
|
|
This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
**/
|
|
|
|
#include "NvramKeyInfo.h"
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateNvramKeySize8 (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
(VOID)Value;
|
|
|
|
return ValueSize == sizeof (UINT8);
|
|
}
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateNvramKeySize32 (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
(VOID)Value;
|
|
|
|
return ValueSize == sizeof (UINT32);
|
|
}
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateNvramKeySize64 (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
(VOID)Value;
|
|
|
|
return ValueSize == sizeof (UINT64);
|
|
}
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateUIScale (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
UINTN Index;
|
|
CONST UINT8 *UIScaleValue;
|
|
STATIC CONST UINT8 AllowedUIScaleValue[] = {
|
|
0x01,
|
|
0x02 ///< HiDPI
|
|
};
|
|
|
|
UIScaleValue = (CONST UINT8 *)Value;
|
|
|
|
if (!ValidateNvramKeySize8 (NULL, ValueSize)) {
|
|
return FALSE;
|
|
}
|
|
|
|
for (Index = 0; Index < ARRAY_SIZE (AllowedUIScaleValue); ++Index) {
|
|
if (*UIScaleValue == AllowedUIScaleValue[Index]) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateNvdaDrv (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
UINTN Index;
|
|
CONST UINT8 *NvdaDrvValue;
|
|
STATIC CONST UINT8 AllowedNvdaDrvValue[] = {
|
|
0x30, ///< "0" - WebDriver off
|
|
0x31 ///< "1" - WebDriver on
|
|
};
|
|
|
|
NvdaDrvValue = (CONST UINT8 *)Value;
|
|
|
|
if (!ValidateNvramKeySize8 (NULL, ValueSize)) {
|
|
return FALSE;
|
|
}
|
|
|
|
for (Index = 0; Index < ARRAY_SIZE (AllowedNvdaDrvValue); ++Index) {
|
|
if (*NvdaDrvValue == AllowedNvdaDrvValue[Index]) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateBootArgs (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
CONST CHAR8 *BootArgsValue;
|
|
|
|
BootArgsValue = (CONST CHAR8 *)Value;
|
|
|
|
return OcAsciiStringNPrintable (BootArgsValue, ValueSize);
|
|
}
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateBooterCfg (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
//
|
|
// bootercfg is similar to boot-args.
|
|
//
|
|
return ValidateBootArgs (Value, ValueSize);
|
|
}
|
|
|
|
STATIC
|
|
BOOLEAN
|
|
ValidateDefaultBackgroundColor (
|
|
IN CONST VOID *Value,
|
|
IN UINT32 ValueSize
|
|
)
|
|
{
|
|
//
|
|
// Cast Value to UINT8 * to ensure alignment.
|
|
//
|
|
CONST UINT8 *DefaultBackgroundColorValue;
|
|
|
|
DefaultBackgroundColorValue = (CONST UINT8 *)Value;
|
|
|
|
//
|
|
// Even if casted to UINT8 *, DefaultBackgroundColor is still 32-bit.
|
|
//
|
|
if (!ValidateNvramKeySize32 (NULL, ValueSize)) {
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// The last byte must be zero.
|
|
//
|
|
return DefaultBackgroundColorValue[3] == 0U;
|
|
}
|
|
|
|
STATIC NVRAM_KEY_MAP mAppleBootVariableGuidKeyMaps[] = {
|
|
{ "nvda_drv", ValidateNvdaDrv },
|
|
{ "boot-args", ValidateBootArgs },
|
|
{ "bootercfg", ValidateBooterCfg },
|
|
{ "csr-active-config", ValidateNvramKeySize32 },
|
|
{ "StartupMute", ValidateNvramKeySize8 },
|
|
{ "SystemAudioVolume", ValidateNvramKeySize8 },
|
|
};
|
|
|
|
STATIC NVRAM_KEY_MAP mAppleVendorVariableGuidKeyMaps[] = {
|
|
{ "UIScale", ValidateUIScale },
|
|
{ "FirmwareFeatures", ValidateNvramKeySize32 },
|
|
{ "ExtendedFirmwareFeatures", ValidateNvramKeySize64 },
|
|
{ "FirmwareFeaturesMask", ValidateNvramKeySize32 },
|
|
{ "ExtendedFirmwareFeaturesMask", ValidateNvramKeySize64 },
|
|
{ "DefaultBackgroundColor", ValidateDefaultBackgroundColor },
|
|
};
|
|
|
|
NVRAM_GUID_MAP mGUIDMaps[] = {
|
|
{ &gAppleBootVariableGuid, &mAppleBootVariableGuidKeyMaps[0], ARRAY_SIZE (mAppleBootVariableGuidKeyMaps) },
|
|
{ &gAppleVendorVariableGuid, &mAppleVendorVariableGuidKeyMaps[0], ARRAY_SIZE (mAppleVendorVariableGuidKeyMaps) },
|
|
};
|
|
UINTN mGUIDMapsCount = ARRAY_SIZE (mGUIDMaps);
|
|
|
|
BOOLEAN mHasNvramUIScale = FALSE;
|