/** @file Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include #include #include #define INIT_NAME_BUFFER_SIZE 128 CHAR8 *mAttributeShortName[] = { "NV", "BS", "RT", "HR", "AU", "AT", "AP", }; VOID DumpVarAttrName ( IN UINT32 Attributes ) { UINTN Index; BOOLEAN IsFirst; IsFirst = TRUE; DEBUG ((DEBUG_INFO, "(")); for (Index = 0; Index < sizeof(mAttributeShortName)/sizeof(mAttributeShortName[0]); Index++) { if ((Attributes & (1 << Index)) != 0) { if (!IsFirst) { DEBUG ((DEBUG_INFO, "|")); } DEBUG ((DEBUG_INFO, mAttributeShortName[Index])); if (IsFirst) { IsFirst = FALSE; } } } DEBUG ((DEBUG_INFO, ")")); } VOID DumpVarProperty ( IN VAR_CHECK_VARIABLE_PROPERTY *VariableProperty ) { if ((VariableProperty->Property & VAR_CHECK_VARIABLE_PROPERTY_READ_ONLY) != 0) { DEBUG ((DEBUG_INFO, " (RO)")); } } VOID TestPointDumpVariable ( VOID ) { CHAR16 *VariableName; UINTN NameSize; UINTN NameBufferSize; EFI_STATUS Status; EFI_GUID Guid; UINTN VarSize; UINT32 Attributes; VOID *VarData; EDKII_VAR_CHECK_PROTOCOL *VarCheck; VAR_CHECK_VARIABLE_PROPERTY VariableProperty; DEBUG ((DEBUG_INFO, "==== TestPointDumpVariable - Enter\n")); Status = gBS->LocateProtocol (&gEdkiiVarCheckProtocolGuid, NULL, (VOID **)&VarCheck); DEBUG ((DEBUG_INFO, "VarCheck - %r\n", Status)); Status = EFI_SUCCESS; DEBUG ((DEBUG_INFO, "Variable List:\n")); NameBufferSize = INIT_NAME_BUFFER_SIZE; VariableName = AllocateZeroPool(NameBufferSize); if (VariableName == NULL) { goto Done ; } *VariableName = CHAR_NULL; while (!EFI_ERROR(Status)) { // // Get Name/Guid // NameSize = NameBufferSize; Status = gRT->GetNextVariableName(&NameSize, VariableName, &Guid); if (Status == EFI_NOT_FOUND){ Status = EFI_SUCCESS; break; } else if (Status == EFI_BUFFER_TOO_SMALL) { NameBufferSize = NameSize > NameBufferSize * 2 ? NameSize : NameBufferSize * 2; if (VariableName != NULL) { FreePool (VariableName); } VariableName = AllocateZeroPool(NameBufferSize); if (VariableName == NULL) { Status = EFI_OUT_OF_RESOURCES; break; } NameSize = NameBufferSize; Status = gRT->GetNextVariableName(&NameSize, VariableName, &Guid); } if (EFI_ERROR(Status)) { break; } // // Get Attributes/Size // VarSize = 0; Attributes = 0; Status = gRT->GetVariable(VariableName, &Guid, &Attributes, &VarSize, NULL); if (Status == EFI_BUFFER_TOO_SMALL){ VarData = AllocateZeroPool (VarSize); if (VarData == NULL) { goto Done; } Status = gRT->GetVariable(VariableName, &Guid, &Attributes, &VarSize, VarData); if (!EFI_ERROR(Status)) { DEBUG ((DEBUG_INFO, " Name=L\"%s\" Guid=%g Size=0x%x Attr=0x%x ", VariableName, &Guid, VarSize, Attributes )); DumpVarAttrName (Attributes); if (VarCheck != NULL) { Status = VarCheck->VariablePropertyGet (VariableName, &Guid, &VariableProperty); if (!EFI_ERROR(Status)) { DumpVarProperty (&VariableProperty); } } DEBUG ((DEBUG_INFO, "\n")); FreePool (VarData); Status = EFI_SUCCESS; } } } if (VariableName != NULL) { FreePool (VariableName); } Done: DEBUG ((DEBUG_INFO, "==== TestPointDumpVariable - Exit\n")); return ; }