mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/EbcDxe: add EBC Debugger configuration application
* Introduce a generic Debugger Configuration protocol. * Add private configuration data in the EBC Debugger and make it register the Debugger Configuration protocol on initialization. * Add a shell application that uses the protocol above to access the private data in order to configure the EBC debugger. Cc: Jiewen Yao <jiewen.yao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Pete Batard <pete@akeo.ie> reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
parent
75fe0a78ae
commit
2b2efe33ea
|
@ -0,0 +1,32 @@
|
|||
/** @file
|
||||
EBC Debugger configuration protocol.
|
||||
|
||||
Copyright (c) 2007-2016, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions
|
||||
of the BSD License which accompanies this distribution. The
|
||||
full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __EFI_DEBUGGER_CONFIGURATION_H__
|
||||
#define __EFI_DEBUGGER_CONFIGURATION_H__
|
||||
|
||||
#define EFI_DEBUGGER_CONFIGURATION_PROTOCOL_GUID \
|
||||
{ 0x577d959c, 0xe967, 0x4546, 0x86, 0x20, 0xc7, 0x78, 0xfa, 0xe5, 0xda, 0x5 }
|
||||
|
||||
#define EFI_DEBUGGER_CONFIGURATION_VERSION 0x00000001
|
||||
|
||||
typedef struct _EFI_DEBUGGER_CONFIGURATION_PROTOCOL {
|
||||
UINT32 DebuggerConfigurationRevision;
|
||||
VOID *DebuggerPrivateData;
|
||||
} EFI_DEBUGGER_CONFIGURATION_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiDebuggerConfigurationProtocolGuid;
|
||||
|
||||
#endif
|
|
@ -420,6 +420,10 @@
|
|||
# Include/Protocol/GenericMemoryTest.h
|
||||
gEfiGenericMemTestProtocolGuid = { 0x309DE7F1, 0x7F5E, 0x4ACE, { 0xB4, 0x9C, 0x53, 0x1B, 0xE5, 0xAA, 0x95, 0xEF }}
|
||||
|
||||
## This protocol defines the Debugger Configuration interface.
|
||||
# Include/Protocol/DebuggerConfiguration.h
|
||||
gEfiDebuggerConfigurationProtocolGuid = { 0x577d959c, 0xe967, 0x4546, { 0x86, 0x20, 0xc7, 0x78, 0xfa, 0xe5, 0xda, 0x05 }}
|
||||
|
||||
## Include/Protocol/Dpc.h
|
||||
gEfiDpcProtocolGuid = {0x480f8ae9, 0xc46, 0x4aa9, { 0xbc, 0x89, 0xdb, 0x9f, 0xba, 0x61, 0x98, 0x6 }}
|
||||
|
||||
|
|
|
@ -432,6 +432,7 @@
|
|||
MdeModulePkg/Universal/DebugSupportDxe/DebugSupportDxe.inf
|
||||
MdeModulePkg/Universal/EbcDxe/EbcDxe.inf
|
||||
MdeModulePkg/Universal/EbcDxe/EbcDebugger.inf
|
||||
MdeModulePkg/Universal/EbcDxe/EbcDebuggerConfig.inf
|
||||
|
||||
[Components.IA32, Components.X64, Components.Ebc]
|
||||
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf {
|
||||
|
|
|
@ -102,6 +102,7 @@
|
|||
[Protocols]
|
||||
gEfiDebugSupportProtocolGuid ## PRODUCES
|
||||
gEfiEbcProtocolGuid ## PRODUCES
|
||||
gEfiDebuggerConfigurationProtocolGuid ## PRODUCES
|
||||
gEfiEbcVmTestProtocolGuid ## SOMETIMES_PRODUCES
|
||||
gEfiEbcSimpleDebuggerProtocolGuid ## SOMETIMES_CONSUMES
|
||||
gEfiPciRootBridgeIoProtocolGuid ## SOMETIMES_CONSUMES
|
||||
|
|
|
@ -0,0 +1,232 @@
|
|||
/** @file
|
||||
Configuration application for the EBC Debugger.
|
||||
|
||||
Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#include <Uefi.h>
|
||||
#include <Protocol/ShellParameters.h>
|
||||
|
||||
#include "EdbCommon.h"
|
||||
#include "EdbSupport.h"
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
VOID
|
||||
EdbShowInfo (
|
||||
EFI_DEBUGGER_CONFIGURATION_PROTOCOL *DebuggerConfiguration
|
||||
)
|
||||
{
|
||||
Print (L"Not supported!\n");
|
||||
return ;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
|
@ -27,6 +27,10 @@ EFI_DEBUGGER_PRIVATE_DATA mDebuggerPrivate = {
|
|||
EBC_DEBUGGER_MINOR_VERSION, // EfiDebuggerRevision
|
||||
(VM_MAJOR_VERSION << 16) |
|
||||
VM_MINOR_VERSION, // EbcVmRevision
|
||||
{
|
||||
EFI_DEBUGGER_CONFIGURATION_VERSION,
|
||||
&mDebuggerPrivate,
|
||||
}, // DebuggerConfiguration
|
||||
NULL, // DebugImageInfoTableHeader
|
||||
NULL, // Vol
|
||||
NULL, // PciRootBridgeIo
|
||||
|
|
|
@ -30,9 +30,11 @@ Abstract:
|
|||
#include <Library/PrintLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Protocol/Ebc.h>
|
||||
#include <Protocol/EbcVmTest.h>
|
||||
#include <Protocol/DebugSupport.h>
|
||||
#include <Protocol/PciRootBridgeIo.h>
|
||||
#include <Protocol/SimpleFileSystem.h>
|
||||
#include <Protocol/DebuggerConfiguration.h>
|
||||
#include <Guid/FileInfo.h>
|
||||
#include <Guid/FileSystemInfo.h>
|
||||
#include <Guid/FileSystemVolumeLabelInfo.h>
|
||||
|
@ -227,6 +229,7 @@ typedef struct _EFI_DEBUGGER_PRIVATE_DATA {
|
|||
EFI_INSTRUCTION_SET_ARCHITECTURE Isa;
|
||||
UINT32 EfiDebuggerRevision;
|
||||
UINT32 EbcVmRevision;
|
||||
EFI_DEBUGGER_CONFIGURATION_PROTOCOL DebuggerConfiguration;
|
||||
EFI_DEBUG_IMAGE_INFO_TABLE_HEADER *DebugImageInfoTableHeader;
|
||||
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *Vol;
|
||||
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;
|
||||
|
|
|
@ -447,6 +447,17 @@ Returns:
|
|||
(VOID**) &mDebuggerPrivate.DebugImageInfoTableHeader
|
||||
);
|
||||
|
||||
//
|
||||
// Register Debugger Configuration Protocol, for config in shell
|
||||
//
|
||||
Status = gBS->InstallProtocolInterface (
|
||||
&Handle,
|
||||
&gEfiDebuggerConfigurationProtocolGuid,
|
||||
EFI_NATIVE_INTERFACE,
|
||||
&mDebuggerPrivate.DebuggerConfiguration
|
||||
);
|
||||
|
||||
//
|
||||
//
|
||||
// Create break event
|
||||
//
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
## @file
|
||||
# EBC Debugger configuration application.
|
||||
#
|
||||
# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
#
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = EdbCfg
|
||||
MODULE_UNI_FILE = EbcDebuggerConfig.uni
|
||||
FILE_GUID = 8CFC5233-23C6-49e3-8A2D-7E581AB305BA
|
||||
MODULE_TYPE = UEFI_APPLICATION
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = InitializeEbcDebuggerConfig
|
||||
|
||||
#
|
||||
# The following information is for reference only and not required by the build tools.
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF AARCH64
|
||||
#
|
||||
|
||||
[Sources]
|
||||
EbcDebugger/EbcDebuggerConfig.c
|
||||
EbcDebugger/EdbCommon.h
|
||||
EbcDebugger/EdbSupportString.c
|
||||
EbcDebugger/EdbSupport.h
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
UefiLib
|
||||
BaseLib
|
||||
DebugLib
|
||||
UefiApplicationEntryPoint
|
||||
|
||||
[Protocols]
|
||||
gEfiDebuggerConfigurationProtocolGuid ## CONSUMES
|
||||
gEfiShellParametersProtocolGuid ## CONSUMES
|
||||
|
||||
[Depex]
|
||||
TRUE
|
||||
|
||||
[UserExtensions.TianoCore."ExtraFiles"]
|
||||
EbcDebuggerConfigExtra.uni
|
|
@ -0,0 +1,18 @@
|
|||
// /** @file
|
||||
// EBC Debugger configuration application.
|
||||
//
|
||||
// Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
|
||||
//
|
||||
// This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// http://opensource.org/licenses/bsd-license.php
|
||||
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
//
|
||||
// **/
|
||||
|
||||
|
||||
#string STR_MODULE_ABSTRACT #language en-US "EBC Debugger configuration application"
|
||||
|
||||
#string STR_MODULE_DESCRIPTION #language en-US "This application allows configuring the EBC Debugger."
|
|
@ -0,0 +1,17 @@
|
|||
// /** @file
|
||||
// EBC Debugger configuration application.
|
||||
//
|
||||
// Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
|
||||
//
|
||||
// This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// http://opensource.org/licenses/bsd-license.php
|
||||
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
//
|
||||
// **/
|
||||
|
||||
#string STR_PROPERTIES_MODULE_NAME
|
||||
#language en-US
|
||||
"EBC Debugger Config"
|
Loading…
Reference in New Issue