98 IN EFI_IFR_OP_HEADER *IfrHeader,
99 IN OUT BOOLEAN *Stop OPTIONAL,
104 EFI_IFR_VARSTORE *VarStore;
107 VarStore = (EFI_IFR_VARSTORE *)IfrHeader;
109 if (VarStore->VarStoreId == Ctx->
Id) {
137 IN EFI_IFR_OP_HEADER *IfrHeader,
138 IN OUT BOOLEAN *Stop OPTIONAL,
147 UINT16 OldContextCount;
148 UINT64 VarStoreValue;
150 EFI_IFR_VARSTORE *IfrVarStore;
151 EFI_IFR_ONE_OF *IfrOneOf;
152 EFI_STRING HiiString;
153 EFI_STRING VarStoreName;
156 IfrOneOf = (EFI_IFR_ONE_OF *)IfrHeader;
158 HiiString = HiiGetString (Ctx->
EfiHandle, IfrOneOf->Question.Header.Prompt,
"en-US");
159 if (HiiString == NULL) {
160 Print (L
"\nCould not allocate memory for HiiString\n");
165 if (IfrVarStore == NULL) {
166 Print (L
"\nCould not retrieve IfrVarStore\n");
171 OldContextCount = Ctx->
Count;
179 if ( (Ctx->
IfrOneOf->Question.VarStoreId != IfrOneOf->Question.VarStoreId)
180 || (Ctx->
IfrOneOf->Question.VarStoreInfo.VarOffset != IfrOneOf->Question.VarStoreInfo.VarOffset))
188 if ((Ctx->
Count == Ctx->
StopAt) && (Stop != NULL)) {
197 L
"%X. %02X %04X %04X /%s/ VarStore Name: %s",
199 IfrOneOf->Header.OpCode,
200 IfrOneOf->Question.VarStoreInfo.VarName,
201 IfrOneOf->Question.VarStoreId,
207 Status =
gRT->GetVariable (
209 (VOID *)&IfrVarStore->Guid,
215 if (Status == EFI_BUFFER_TOO_SMALL) {
216 Data = AllocatePool (DataSize);
218 Status =
gRT->GetVariable (
220 (VOID *)&IfrVarStore->Guid,
226 if (!EFI_ERROR (Status)) {
227 VarSize =
sizeof (EFI_IFR_ONE_OF) - IfrOneOf->Header.Length;
228 VarSize = 8 - (VarSize / 3);
230 if (DataSize >= IfrOneOf->Question.VarStoreInfo.VarOffset + VarSize) {
231 VarPointer = Data + IfrOneOf->Question.VarStoreInfo.VarOffset;
234 VarStoreValue = *VarPointer;
237 VarStoreValue = *(UINT16 *)(VarPointer);
240 VarStoreValue = *(UINT32 *)(VarPointer);
243 VarStoreValue = *(UINT64 *)(VarPointer);
247 Print (L
" Value: value %X", VarStoreValue);
255 FreePool (VarStoreName);
260 FreePool (HiiString);
269 EFI_STRING HiiString;
275 UINT64 VarStoreValue;
278 HiiString = HiiGetString (Context->EfiHandle, Context->IfrOneOf->Question.Header.Prompt,
"en-US");
279 if (HiiString != NULL) {
280 Print (L
"\nBIOS Option found: %s\n", HiiString);
281 FreePool (HiiString);
285 if (HiiString == NULL) {
286 Print (L
"\nCould not allocate memory for HiiString\n");
290 VarSize =
sizeof (EFI_IFR_ONE_OF) - Context->IfrOneOf->Header.Length;
291 VarSize = 8 - (VarSize / 3);
294 L
"In VarStore \"%s\" GUID: %g Offset: %04X Size: %X ",
296 &Context->IfrVarStore->Guid,
297 Context->IfrOneOf->Question.VarStoreInfo.VarOffset,
303 Status =
gRT->GetVariable (
305 (VOID *)&Context->IfrVarStore->Guid,
311 if (Status == EFI_BUFFER_TOO_SMALL) {
312 Data = AllocatePool (DataSize);
314 Status =
gRT->GetVariable (
316 (VOID *)&Context->IfrVarStore->Guid,
322 if (!EFI_ERROR (Status)) {
323 ASSERT (DataSize >= Context->IfrOneOf->Question.VarStoreInfo.VarOffset + VarSize);
324 VarPointer = Data + Context->IfrOneOf->Question.VarStoreInfo.VarOffset;
327 VarStoreValue = *VarPointer;
330 VarStoreValue = *(UINT16 *)(VarPointer);
333 VarStoreValue = *(UINT32 *)(VarPointer);
337 VarStoreValue = *(UINT64 *)(VarPointer);
341 Print (L
"Value: value %X\n", VarStoreValue);
344 NewValue = VarStoreValue != 0 ? 0 : 1;
350 NewValue = VarStoreValue;
353 if (NewValue != VarStoreValue) {
355 Print (L
"Do you want to toggle the value y/n ?");
357 Print (L
"Do you want to set the value y/n ?");
359 Print (L
"Do you want to clear the value y/n ?");
365 *VarPointer = (UINT8)NewValue;
368 *(UINT16 *)(VarPointer) = (UINT16)NewValue;
371 *(UINT32 *)(VarPointer) = (UINT32)NewValue;
374 *(UINT64 *)(VarPointer) = NewValue;
378 Status =
gRT->SetVariable (
380 (VOID *)&Context->IfrVarStore->Guid,
386 if (!EFI_ERROR (Status)) {
387 Print (L
"\nDone. You will have to reboot for the change to take effect.\n");
389 Print (L
"\nProblem writing variable - %r\n", Status);
395 Print (L
"Value is as wanted already. No action required.\n");
398 Print (L
"\nCould not read Data\n");
403 Print (L
"\nCould not allocate memory for Data\n");
406 Print (L
"\nCould not find Variable.\n");
409 FreePool (HiiString);
EFI_IFR_OP_HEADER * IterateOpCode(IN EFI_IFR_OP_HEADER *Header, IN UINT8 OpCode, IN OUT BOOLEAN *Stop OPTIONAL, IN VOID *Context, IN OP_CODE_HANDLER Handler)