CloverBootloader/MdeModulePkg/Universal/EbcDxe/EbcDebugger/EbcDebuggerConfig.c
2019-09-03 12:58:42 +03:00

248 lines
7.4 KiB
C

/** @file
Configuration application for the EBC Debugger.
Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Uefi.h>
#include <Protocol/ShellParameters.h>
#include "EdbCommon.h"
#include "EdbSupport.h"
/**
The function that displays the utility usage message.
**/
VOID
PrintUsage (
VOID
)
{
Print (
L"EbcDebuggerConfig Version 1.0\n"
L"Copyright (C) Intel Corp 2007-2016. All rights reserved.\n"
L"\n"
L"Configure EbcDebugger in EFI Shell Environment.\n"
L"\n"
L"usage: EdbCfg <Command>\n"
L" CommandList:\n"
L" BO[C|CX|R|E|T|K] <ON|OFF> - Enable/Disable BOC/BOCX/BOR/BOE/BOT/BOK.\n"
// L" SHOWINFO - Show Debugger Information.\n"
L"\n"
);
return;
}
/**
The function is to show some information.
@param DebuggerConfiguration Point to the EFI_DEBUGGER_CONFIGURATION_PROTOCOL.
**/
VOID
EdbShowInfo (
EFI_DEBUGGER_CONFIGURATION_PROTOCOL *DebuggerConfiguration
)
{
Print (L"Not supported!\n");
return ;
}
/**
EdbConfigBreak function.
@param DebuggerConfiguration Point to the EFI_DEBUGGER_CONFIGURATION_PROTOCOL.
@param Command Point to the command.
@param CommandArg The argument for this command.
**/
VOID
EdbConfigBreak (
EFI_DEBUGGER_CONFIGURATION_PROTOCOL *DebuggerConfiguration,
CHAR16 *Command,
CHAR16 *CommandArg
)
{
EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate;
DebuggerPrivate = (EFI_DEBUGGER_PRIVATE_DATA *)DebuggerConfiguration->DebuggerPrivateData;
if (StriCmp (Command, L"BOC") == 0) {
if (CommandArg == NULL) {
if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOC) == EFI_DEBUG_FLAG_EBC_BOC) {
Print (L"BOC on\n");
} else {
Print (L"BOC off\n");
}
} else if (StriCmp (CommandArg, L"ON") == 0) {
DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOC;
} else if (StriCmp (CommandArg, L"OFF") == 0) {
DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOC;
} else {
Print (L"Invalid parameter\n");
}
} else if (StriCmp (Command, L"BOCX") == 0) {
if (CommandArg == NULL) {
if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOCX) == EFI_DEBUG_FLAG_EBC_BOCX) {
Print (L"BOCX on\n");
} else {
Print (L"BOCX off\n");
}
} else if (StriCmp (CommandArg, L"ON") == 0) {
DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOCX;
} else if (StriCmp (CommandArg, L"OFF") == 0) {
DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOCX;
} else {
Print (L"Invalid parameter\n");
}
} else if (StriCmp (Command, L"BOR") == 0) {
if (CommandArg == NULL) {
if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOR) == EFI_DEBUG_FLAG_EBC_BOR) {
Print (L"BOR on\n");
} else {
Print (L"BOR off\n");
}
} else if (StriCmp (CommandArg, L"ON") == 0) {
DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOR;
} else if (StriCmp (CommandArg, L"OFF") == 0) {
DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOR;
} else {
Print (L"Invalid parameter\n");
}
} else if (StriCmp (Command, L"BOE") == 0) {
if (CommandArg == NULL) {
if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOE) == EFI_DEBUG_FLAG_EBC_BOE) {
Print (L"BOE on\n");
} else {
Print (L"BOE off\n");
}
} else if (StriCmp (CommandArg, L"ON") == 0) {
DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOE;
} else if (StriCmp (CommandArg, L"OFF") == 0) {
DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOE;
} else {
Print (L"Invalid parameter\n");
}
} else if (StriCmp (Command, L"BOT") == 0) {
if (CommandArg == NULL) {
if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOT) == EFI_DEBUG_FLAG_EBC_BOT) {
Print (L"BOT on\n");
} else {
Print (L"BOT off\n");
}
} else if (StriCmp (CommandArg, L"ON") == 0) {
DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOT;
} else if (StriCmp (CommandArg, L"OFF") == 0) {
DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOT;
} else {
Print (L"Invalid parameter\n");
}
} else if (StriCmp (Command, L"BOK") == 0) {
if (CommandArg == NULL) {
if ((DebuggerPrivate->FeatureFlags & EFI_DEBUG_FLAG_EBC_BOK) == EFI_DEBUG_FLAG_EBC_BOK) {
Print (L"BOK on\n");
} else {
Print (L"BOK off\n");
}
} else if (StriCmp (CommandArg, L"ON") == 0) {
DebuggerPrivate->FeatureFlags |= EFI_DEBUG_FLAG_EBC_BOK;
} else if (StriCmp (CommandArg, L"OFF") == 0) {
DebuggerPrivate->FeatureFlags &= ~EFI_DEBUG_FLAG_EBC_B_BOK;
} else {
Print (L"Invalid parameter\n");
}
}
return ;
}
/**
Alter the EBC Debugger configuration.
@param[in] ImageHandle The image handle.
@param[in] SystemTable The system table.
@retval EFI_SUCCESS Operation completed successfully.
@retval EFI_INVALID_PARAMETER Usage error.
@retval EFI_NOT_FOUND A running debugger cannot be located.
**/
EFI_STATUS
EFIAPI
InitializeEbcDebuggerConfig (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
UINTN Argc;
CHAR16 **Argv;
EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters;
EFI_DEBUGGER_CONFIGURATION_PROTOCOL *DebuggerConfiguration;
EFI_STATUS Status;
Status = gBS->HandleProtocol (
gImageHandle,
&gEfiShellParametersProtocolGuid,
(VOID**)&ShellParameters
);
if (EFI_ERROR(Status)) {
Print (L"Please use UEFI Shell to run this application.\n");
return EFI_INVALID_PARAMETER;
}
Argc = ShellParameters->Argc;
Argv = ShellParameters->Argv;
if (Argc < 2) {
PrintUsage ();
return EFI_INVALID_PARAMETER;
}
if (Argc == 2) {
if ((StrCmp (Argv[1], L"/?") == 0) ||
(StrCmp (Argv[1], L"-?") == 0) ||
(StrCmp (Argv[1], L"-h") == 0) ||
(StrCmp (Argv[1], L"-H") == 0) ) {
PrintUsage ();
return EFI_SUCCESS;
}
}
Status = gBS->LocateProtocol (
&gEfiDebuggerConfigurationProtocolGuid,
NULL,
(VOID**)&DebuggerConfiguration
);
if (EFI_ERROR(Status)) {
Print (L"Error: DebuggerConfiguration protocol not found.\n");
return EFI_NOT_FOUND;
}
if (StriCmp (Argv[1], L"SHOWINFO") == 0) {
EdbShowInfo (DebuggerConfiguration);
return EFI_SUCCESS;
}
if (((Argc == 2) || (Argc == 3)) &&
((StriCmp (Argv[1], L"BOC") == 0) ||
(StriCmp (Argv[1], L"BOCX") == 0) ||
(StriCmp (Argv[1], L"BOR") == 0) ||
(StriCmp (Argv[1], L"BOE") == 0) ||
(StriCmp (Argv[1], L"BOT") == 0) ||
(StriCmp (Argv[1], L"BOK") == 0))) {
if (Argc == 3) {
EdbConfigBreak (DebuggerConfiguration, Argv[1], Argv[2]);
} else {
EdbConfigBreak (DebuggerConfiguration, Argv[1], NULL);
}
return EFI_SUCCESS;
}
Print (L"Error: Invalid Command.\n");
return EFI_INVALID_PARAMETER;
}