mirror of https://github.com/acidanthera/audk.git
130 lines
6.2 KiB
C
130 lines
6.2 KiB
C
/** @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
|