31 IN CONST VOID *PrimaryEntry,
32 IN CONST VOID *SecondaryEntry
35 CONST OC_STRING *NvramAddPrimaryEntry;
36 CONST OC_STRING *NvramAddSecondaryEntry;
37 CONST CHAR8 *NvramAddPrimaryGUIDString;
38 CONST CHAR8 *NvramAddSecondaryGUIDString;
40 NvramAddPrimaryEntry = *(CONST OC_STRING **)PrimaryEntry;
41 NvramAddSecondaryEntry = *(CONST OC_STRING **)SecondaryEntry;
42 NvramAddPrimaryGUIDString =
OC_BLOB_GET (NvramAddPrimaryEntry);
43 NvramAddSecondaryGUIDString =
OC_BLOB_GET (NvramAddSecondaryEntry);
45 return StringIsDuplicated (
"NVRAM->Add", NvramAddPrimaryGUIDString, NvramAddSecondaryGUIDString);
59 IN CONST VOID *PrimaryEntry,
60 IN CONST VOID *SecondaryEntry
63 CONST OC_STRING *NvramDeletePrimaryEntry;
64 CONST OC_STRING *NvramDeleteSecondaryEntry;
65 CONST CHAR8 *NvramDeletePrimaryGUIDString;
66 CONST CHAR8 *NvramDeleteSecondaryGUIDString;
68 NvramDeletePrimaryEntry = *(CONST OC_STRING **)PrimaryEntry;
69 NvramDeleteSecondaryEntry = *(CONST OC_STRING **)SecondaryEntry;
70 NvramDeletePrimaryGUIDString =
OC_BLOB_GET (NvramDeletePrimaryEntry);
71 NvramDeleteSecondaryGUIDString =
OC_BLOB_GET (NvramDeleteSecondaryEntry);
73 return StringIsDuplicated (
"NVRAM->Delete", NvramDeletePrimaryGUIDString, NvramDeleteSecondaryGUIDString);
87 IN CONST VOID *PrimaryEntry,
88 IN CONST VOID *SecondaryEntry
91 CONST OC_STRING *NvramLegacySchemaPrimaryEntry;
92 CONST OC_STRING *NvramLegacySchemaSecondaryEntry;
93 CONST CHAR8 *NvramLegacySchemaPrimaryGUIDString;
94 CONST CHAR8 *NvramLegacySchemaSecondaryGUIDString;
96 NvramLegacySchemaPrimaryEntry = *(CONST OC_STRING **)PrimaryEntry;
97 NvramLegacySchemaSecondaryEntry = *(CONST OC_STRING **)SecondaryEntry;
98 NvramLegacySchemaPrimaryGUIDString =
OC_BLOB_GET (NvramLegacySchemaPrimaryEntry);
99 NvramLegacySchemaSecondaryGUIDString =
OC_BLOB_GET (NvramLegacySchemaSecondaryEntry);
101 return StringIsDuplicated (
"NVRAM->LegacySchema", NvramLegacySchemaPrimaryGUIDString, NvramLegacySchemaSecondaryGUIDString);
107 IN CONST CHAR8 *AsciiGuid,
108 IN CONST OC_ASSOC *VariableMap
114 UINT32 VariableIndex;
120 Status = AsciiStrToGuid (AsciiGuid, &Guid);
121 if (EFI_ERROR (Status)) {
122 DEBUG ((DEBUG_WARN,
"NVRAM->Add: Unable to check %a due to borked GUID format!\n", AsciiGuid));
129 for (VariableIndex = 0; VariableIndex < VariableMap->Count; ++VariableIndex) {
131 if (AsciiStrCmp (
mGUIDMaps[Index].NvramKeyMaps[Index2].KeyName,
OC_BLOB_GET (VariableMap->Keys[VariableIndex])) == 0) {
132 if (!
mGUIDMaps[Index].NvramKeyMaps[Index2].KeyChecker (
134 VariableMap->Values[VariableIndex]->Size
139 "NVRAM->Add->%g->%a has illegal value!\n",
148 if (AsciiStrCmp (
OC_BLOB_GET (VariableMap->Keys[VariableIndex]),
"UIScale") == 0) {
164 IN OC_GLOBAL_CONFIG *Config
169 UINT32 VariableIndex;
170 CONST CHAR8 *AsciiGuid;
171 CONST CHAR8 *AsciiNvramKey;
172 OC_ASSOC *VariableMap;
176 for (GuidIndex = 0; GuidIndex < Config->Nvram.Add.Count; ++GuidIndex) {
177 AsciiGuid =
OC_BLOB_GET (Config->Nvram.Add.Keys[GuidIndex]);
180 DEBUG ((DEBUG_WARN,
"NVRAM->Add[%u] has borked GUID!\n", GuidIndex));
184 VariableMap = Config->Nvram.Add.Values[GuidIndex];
186 for (VariableIndex = 0; VariableIndex < VariableMap->Count; ++VariableIndex) {
187 AsciiNvramKey =
OC_BLOB_GET (VariableMap->Keys[VariableIndex]);
195 "NVRAM->Add[%u]->Key[%u] contains illegal character!\n",
209 sizeof (VariableMap->Keys[0]),
223 Config->Nvram.Add.Keys,
224 Config->Nvram.Add.Count,
225 sizeof (Config->Nvram.Add.Keys[0]),
235 IN OC_GLOBAL_CONFIG *Config
240 UINT32 VariableIndex;
241 CONST CHAR8 *AsciiGuid;
242 CONST CHAR8 *AsciiNvramKey;
246 for (GuidIndex = 0; GuidIndex < Config->Nvram.Delete.Count; ++GuidIndex) {
247 AsciiGuid =
OC_BLOB_GET (Config->Nvram.Delete.Keys[GuidIndex]);
250 DEBUG ((DEBUG_WARN,
"NVRAM->Delete[%u] has borked GUID!\n", GuidIndex));
254 for (VariableIndex = 0; VariableIndex < Config->Nvram.Delete.Values[GuidIndex]->Count; ++VariableIndex) {
255 AsciiNvramKey =
OC_BLOB_GET (Config->Nvram.Delete.Values[GuidIndex]->Values[VariableIndex]);
263 "NVRAM->Delete[%u]->Key[%u] contains illegal character!\n",
275 Config->Nvram.Delete.Values[GuidIndex]->Values,
276 Config->Nvram.Delete.Values[GuidIndex]->Count,
277 sizeof (Config->Nvram.Delete.Values[GuidIndex]->Values[0]),
286 Config->Nvram.Delete.Keys,
287 Config->Nvram.Delete.Count,
288 sizeof (Config->Nvram.Delete.Keys[0]),
298 IN OC_GLOBAL_CONFIG *Config
303 UINT32 VariableIndex;
304 CONST CHAR8 *AsciiGuid;
305 CONST CHAR8 *AsciiNvramKey;
309 for (GuidIndex = 0; GuidIndex < Config->Nvram.Legacy.Count; ++GuidIndex) {
310 AsciiGuid =
OC_BLOB_GET (Config->Nvram.Legacy.Keys[GuidIndex]);
313 DEBUG ((DEBUG_WARN,
"NVRAM->LegacySchema[%u] has borked GUID!\n", GuidIndex));
317 for (VariableIndex = 0; VariableIndex < Config->Nvram.Legacy.Values[GuidIndex]->Count; ++VariableIndex) {
318 AsciiNvramKey =
OC_BLOB_GET (Config->Nvram.Legacy.Values[GuidIndex]->Values[VariableIndex]);
326 "NVRAM->LegacySchema[%u]->Key[%u] contains illegal character!\n",
338 Config->Nvram.Legacy.Values[GuidIndex]->Values,
339 Config->Nvram.Legacy.Values[GuidIndex]->Count,
340 sizeof (Config->Nvram.Legacy.Values[GuidIndex]->Values[0]),
349 Config->Nvram.Legacy.Keys,
350 Config->Nvram.Legacy.Count,
351 sizeof (Config->Nvram.Legacy.Keys[0]),
360 IN OC_GLOBAL_CONFIG *Config
371 DEBUG ((DEBUG_VERBOSE,
"config loaded into %a!\n", __func__));
375 for (Index = 0; Index <
ARRAY_SIZE (NvramCheckers); ++Index) {
376 ErrorCount += NvramCheckers[Index](Config);
#define ARRAY_SIZE(Array)
NVRAM_GUID_MAP mGUIDMaps[]
#define OC_BLOB_GET(Blob)
UINT32 ReportError(IN CONST CHAR8 *FuncName, IN UINT32 ErrorCount)
BOOLEAN StringIsDuplicated(IN CONST CHAR8 *EntrySection, IN CONST CHAR8 *FirstString, IN CONST CHAR8 *SecondString)
UINT32 FindArrayDuplication(IN VOID *First, IN UINTN Number, IN UINTN Size, IN DUPLICATION_CHECK DupChecker)
BOOLEAN AsciiGuidIsLegal(IN CONST CHAR8 *AsciiGuid)
BOOLEAN AsciiPropertyIsLegal(IN CONST CHAR8 *Property)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
STATIC UINT32 CheckNvramDelete(IN OC_GLOBAL_CONFIG *Config)
UINT32 CheckNvram(IN OC_GLOBAL_CONFIG *Config)
STATIC UINT32 CheckNvramAdd(IN OC_GLOBAL_CONFIG *Config)
STATIC BOOLEAN NvramDeleteHasDuplication(IN CONST VOID *PrimaryEntry, IN CONST VOID *SecondaryEntry)
STATIC BOOLEAN NvramLegacySchemaHasDuplication(IN CONST VOID *PrimaryEntry, IN CONST VOID *SecondaryEntry)
STATIC BOOLEAN NvramAddHasDuplication(IN CONST VOID *PrimaryEntry, IN CONST VOID *SecondaryEntry)
STATIC UINT32 CheckNvramSchema(IN OC_GLOBAL_CONFIG *Config)
STATIC UINT32 ValidateNvramKeyByGuid(IN CONST CHAR8 *AsciiGuid, IN CONST OC_ASSOC *VariableMap)
UINT32(* CONFIG_CHECK)(IN OC_GLOBAL_CONFIG *Config)