mirror of https://github.com/acidanthera/audk.git
248 lines
7.4 KiB
C
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;
|
|
}
|