60 IN OC_GLOBAL_CONFIG *Config
64 UINT32 DeleteGuidIndex;
66 UINT32 DeleteVariableIndex;
67 UINT32 AddVariableIndex;
68 CONST CHAR8 *AsciiVariableName;
69 CHAR16 *UnicodeVariableName;
71 OC_ASSOC *VariableMap;
73 UINTN CurrentValueSize;
76 for (DeleteGuidIndex = 0; DeleteGuidIndex < Config->Nvram.Delete.Count; ++DeleteGuidIndex) {
78 OC_BLOB_GET (Config->Nvram.Delete.Keys[DeleteGuidIndex]),
84 if (EFI_ERROR (Status)) {
94 for (AddGuidIndex = 0; AddGuidIndex < Config->Nvram.Add.Count; ++AddGuidIndex) {
96 OC_BLOB_GET (Config->Nvram.Delete.Keys[DeleteGuidIndex]),
104 for (DeleteVariableIndex = 0; DeleteVariableIndex < Config->Nvram.Delete.Values[DeleteGuidIndex]->Count; ++DeleteVariableIndex) {
105 AsciiVariableName =
OC_BLOB_GET (Config->Nvram.Delete.Values[DeleteGuidIndex]->Values[DeleteVariableIndex]);
110 if (AsciiVariableName[0] ==
'#') {
111 DEBUG ((DEBUG_INFO,
"OC: Variable skip deleting %a\n", AsciiVariableName));
117 if (UnicodeVariableName == NULL) {
118 DEBUG ((DEBUG_WARN,
"OC: Failed to convert NVRAM variable name %a\n", AsciiVariableName));
122 if (AddGuidIndex != Config->Nvram.Add.Count) {
124 for (AddVariableIndex = 0; AddVariableIndex < Config->Nvram.Add.Values[AddGuidIndex]->Count; ++AddVariableIndex) {
125 if (AsciiStrCmp (AsciiVariableName,
OC_BLOB_GET (Config->Nvram.Add.Values[AddGuidIndex]->Keys[AddVariableIndex])) == 0) {
126 VariableMap = Config->Nvram.Add.Values[AddGuidIndex];
131 if (VariableMap != NULL) {
132 Status = GetVariable2 (UnicodeVariableName, &VariableGuid, &CurrentValue, &CurrentValueSize);
134 if (!EFI_ERROR (Status)) {
135 SameContents = CurrentValueSize == VariableMap->Values[AddVariableIndex]->Size
136 &&
CompareMem (
OC_BLOB_GET (VariableMap->Values[AddVariableIndex]), CurrentValue, CurrentValueSize) == 0;
137 FreePool (CurrentValue);
138 }
else if ((Status == EFI_NOT_FOUND) && (VariableMap->Values[AddVariableIndex]->Size == 0)) {
141 SameContents = FALSE;
145 DEBUG ((DEBUG_INFO,
"OC: Not deleting NVRAM %g:%a, matches add\n", &VariableGuid, AsciiVariableName));
146 FreePool (UnicodeVariableName);
152 Status =
gRT->SetVariable (UnicodeVariableName, &VariableGuid, 0, 0, 0);
154 EFI_ERROR (Status) && Status != EFI_NOT_FOUND ? DEBUG_WARN : DEBUG_INFO,
155 "OC: Deleting NVRAM %g:%a - %r\n",
161 FreePool (UnicodeVariableName);
169 IN OC_GLOBAL_CONFIG *Config
174 UINT32 VariableIndex;
176 OC_ASSOC *VariableMap;
178 for (GuidIndex = 0; GuidIndex < Config->Nvram.Add.Count; ++GuidIndex) {
186 if (EFI_ERROR (Status)) {
190 VariableMap = Config->Nvram.Add.Values[GuidIndex];
192 for (VariableIndex = 0; VariableIndex < VariableMap->Count; ++VariableIndex) {
197 VariableMap->Values[VariableIndex]->Size,
CONST CHAR8 * OcMiscGetVersionString(VOID)
EFI_STATUS OcSetSystemVariable(IN CHAR16 *VariableName, IN UINT32 Attributes, IN UINTN DataSize, IN VOID *Data, IN EFI_GUID *VendorGuid OPTIONAL)
VOID OcSetNvramVariable(IN CONST CHAR8 *AsciiVariableName, IN EFI_GUID *VariableGuid, IN UINT32 Attributes, IN UINT32 VariableSize, IN VOID *VariableData, IN OC_NVRAM_LEGACY_ENTRY *SchemaEntry OPTIONAL, IN BOOLEAN Overwrite)