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:
Pete Batard 2016-11-25 01:00:18 +08:00 committed by Jiewen Yao
parent 75fe0a78ae
commit 2b2efe33ea
11 changed files with 378 additions and 0 deletions

View File

@ -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

View File

@ -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 }}

View File

@ -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 {

View File

@ -102,6 +102,7 @@
[Protocols]
gEfiDebugSupportProtocolGuid ## PRODUCES
gEfiEbcProtocolGuid ## PRODUCES
gEfiDebuggerConfigurationProtocolGuid ## PRODUCES
gEfiEbcVmTestProtocolGuid ## SOMETIMES_PRODUCES
gEfiEbcSimpleDebuggerProtocolGuid ## SOMETIMES_CONSUMES
gEfiPciRootBridgeIoProtocolGuid ## SOMETIMES_CONSUMES

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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
//

View File

@ -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

View File

@ -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."

View File

@ -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"