| /** @file | |
| Internal header file for the module. | |
| Copyright (c) Microsoft Corporation. | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef VAR_POLICY_DYNAMIC_SHELL_COMMAND_H_ | |
| #define VAR_POLICY_DYNAMIC_SHELL_COMMAND_H_ | |
| #include <Uefi.h> | |
| #include <Protocol/Shell.h> | |
| #define VAR_POLICY_COMMAND_NAME L"varpolicy" | |
| typedef enum { | |
| VariableVendorCapsule, | |
| VariableVendorCapsuleReport, | |
| VariableVendorGlobal, | |
| VariableVendorMemoryTypeInfo, | |
| VariableVendorMonotonicCounter, | |
| VariableVendorMorControl, | |
| VariableVendorShell, | |
| VariableVendorGuidMax | |
| } VAR_POLICY_CMD_VENDOR_GUID_TYPE; | |
| typedef struct { | |
| VAR_POLICY_CMD_VENDOR_GUID_TYPE VendorGuidType; | |
| EFI_GUID *VendorGuid; | |
| CHAR16 *Description; | |
| } VAR_POLICY_CMD_VAR_NAMESPACE; | |
| /** | |
| Log a formatted console message. | |
| This is not specific to this shell command but scoped so to prevent global | |
| name conflicts. | |
| The hex dump is split into lines of 16 dumped bytes. | |
| The full hex dump is bracketed, and its byte ascii char also print. | |
| If the byte value is not an ascii code, it will print as '.' | |
| @param[in] Offset Offset to be display after PrefixFormat. | |
| Offset will be increased for each print line. | |
| @param[in] Data The data to dump. | |
| @param[in] DataSize Number of bytes in Data. | |
| **/ | |
| #define VAR_POLICY_CMD_SHELL_DUMP_HEX(Offset, \ | |
| Data, \ | |
| DataSize \ | |
| ) \ | |
| { \ | |
| UINT8 *_DataToDump; \ | |
| UINT8 _Val[50]; \ | |
| UINT8 _Str[20]; \ | |
| UINT8 _TempByte; \ | |
| UINTN _Size; \ | |
| UINTN _DumpHexIndex; \ | |
| UINTN _LocalOffset; \ | |
| UINTN _LocalDataSize; \ | |
| CONST CHAR8 *_Hex = "0123456789ABCDEF"; \ | |
| _LocalOffset = (Offset); \ | |
| _LocalDataSize = (DataSize); \ | |
| _DataToDump = (UINT8 *)(Data); \ | |
| \ | |
| ASSERT (_DataToDump != NULL); \ | |
| \ | |
| while (_LocalDataSize != 0) { \ | |
| _Size = 16; \ | |
| if (_Size > _LocalDataSize) { \ | |
| _Size = _LocalDataSize; \ | |
| } \ | |
| \ | |
| for (_DumpHexIndex = 0; _DumpHexIndex < _Size; _DumpHexIndex += 1) { \ | |
| _TempByte = (UINT8) _DataToDump[_DumpHexIndex]; \ | |
| _Val[_DumpHexIndex * 3 + 0] = (UINT8) _Hex[_TempByte >> 4]; \ | |
| _Val[_DumpHexIndex * 3 + 1] = (UINT8) _Hex[_TempByte & 0xF]; \ | |
| _Val[_DumpHexIndex * 3 + 2] = \ | |
| (CHAR8) ((_DumpHexIndex == 7) ? '-' : ' '); \ | |
| _Str[_DumpHexIndex] = \ | |
| (CHAR8) ((_TempByte < ' ' || _TempByte > '~') ? '.' : _TempByte); \ | |
| } \ | |
| \ | |
| _Val[_DumpHexIndex * 3] = 0; \ | |
| _Str[_DumpHexIndex] = 0; \ | |
| \ | |
| ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_HEX_DUMP_LINE), mVarPolicyShellCommandHiiHandle, _LocalOffset, _Val, _Str); \ | |
| _DataToDump = (UINT8 *)(((UINTN)_DataToDump) + _Size); \ | |
| _LocalOffset += _Size; \ | |
| _LocalDataSize -= _Size; \ | |
| } \ | |
| ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_LINE_BREAK), mVarPolicyShellCommandHiiHandle); \ | |
| } | |
| /** | |
| Retrieve HII package list from ImageHandle and publish to HII database. | |
| @param[in] ImageHandle The image handle of the process. | |
| @return HII handle. | |
| **/ | |
| EFI_HII_HANDLE | |
| InitializeHiiPackage ( | |
| IN EFI_HANDLE ImageHandle | |
| ); | |
| /** | |
| Main entry function for the "varpolicy" command/app. | |
| @param[in] ImageHandle Handle to the Image (NULL if Internal). | |
| @param[in] SystemTable Pointer to the System Table (NULL if Internal). | |
| @retval SHELL_SUCCESS The "varpolicy" shell command executed successfully. | |
| @retval SHELL_INVALID_PARAMETER An argument passed to the shell command is invalid. | |
| @retval Others A different error occurred. | |
| **/ | |
| SHELL_STATUS | |
| EFIAPI | |
| RunVarPolicy ( | |
| IN EFI_HANDLE ImageHandle, | |
| IN EFI_SYSTEM_TABLE *SystemTable | |
| ); | |
| #endif |