/** @file

Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _EFI_EDB_COMMON_H_
#define _EFI_EDB_COMMON_H_

#include <Uefi.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/DebugLib.h>
#include <Library/UefiLib.h>
#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/DebugImageInfoTable.h>

typedef UINTN EFI_DEBUG_STATUS;

typedef struct _EFI_DEBUGGER_PRIVATE_DATA EFI_DEBUGGER_PRIVATE_DATA;

//
// Definition for Debugger Command
//
typedef
EFI_DEBUG_STATUS
(* EFI_DEBUGGER_COMMAND) (
  IN     CHAR16                    *CommandArg,
  IN     EFI_DEBUGGER_PRIVATE_DATA *DebuggerPrivate,
  IN     EFI_EXCEPTION_TYPE        ExceptionType,
  IN OUT EFI_SYSTEM_CONTEXT        SystemContext
);

typedef struct {
  CHAR16                *CommandName;
  CHAR16                *CommandTitle;
  CHAR16                *CommandHelp;
  CHAR16                *CommandSyntax;
  CHAR16                *ClassName;
  EFI_INPUT_KEY         CommandKey;
  EFI_DEBUGGER_COMMAND  CommandFunc;
} EFI_DEBUGGER_COMMAND_SET;

//
// Definition for Debugger Symbol
//
#define EFI_DEBUGGER_SYMBOL_NAME_MAX     256
#define EFI_DEBUGGER_SYMBOL_ENTRY_MAX    512
#define EFI_DEBUGGER_SYMBOL_OBJECT_MAX   32

//
// We have following SYMBOL data structure:
//
// SYMBOL_CONTEXT -> SYMBOL_OBJECT -> SYMBOL_ENTRY (FuncXXX, 0xXXX)
//                                    SYMBOL_ENTRY (VarYYY,  0xYYY)
//                                    SYMBOL_ENTRY
//
//                   SYMBOL_OBJECT -> SYMBOL_ENTRY
//                                    SYMBOL_ENTRY
//
//                   SYMBOL_OBJECT -> SYMBOL_ENTRY
//                                    SYMBOL_ENTRY
//

typedef enum {
  EfiDebuggerSymbolFunction,
  EfiDebuggerSymbolStaticFunction,
  EfiDebuggerSymbolGlobalVariable,
  EfiDebuggerSymbolStaticVariable,
  EfiDebuggerSymbolTypeMax,
} EFI_DEBUGGER_SYMBOL_TYPE;

typedef struct {
  CHAR8                      Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];
  UINTN                      Rva;
  EFI_DEBUGGER_SYMBOL_TYPE   Type;
  CHAR8                      ObjName[EFI_DEBUGGER_SYMBOL_NAME_MAX];
  CHAR8                      *CodBuffer;
  UINTN                      CodBufferSize;
  UINTN                      FuncOffsetBase;
  CHAR8                      *SourceBuffer;
} EFI_DEBUGGER_SYMBOL_ENTRY;

typedef struct {
  CHAR16                     Name[EFI_DEBUGGER_SYMBOL_NAME_MAX];
  UINTN                      EntryCount;
  UINTN                      MaxEntryCount;
  UINTN                      BaseAddress;
  UINTN                      StartEntrypointRVA;
  UINTN                      MainEntrypointRVA;
  EFI_DEBUGGER_SYMBOL_ENTRY  *Entry;
  VOID                       **SourceBuffer;
} EFI_DEBUGGER_SYMBOL_OBJECT;

typedef struct {
  UINTN                       ObjectCount;
  UINTN                       MaxObjectCount;
  EFI_DEBUGGER_SYMBOL_OBJECT  *Object;
  BOOLEAN                     DisplaySymbol;
  BOOLEAN                     DisplayCodeOnly;
} EFI_DEBUGGER_SYMBOL_CONTEXT;

//
// Definition for Debugger Breakpoint
//
#define EFI_DEBUGGER_BREAKPOINT_MAX    0x10

typedef struct {
  EFI_PHYSICAL_ADDRESS      BreakpointAddress;
  UINT64                    OldInstruction;    // UINT64 is enough for an instruction
  BOOLEAN                   State;
} EFI_DEBUGGER_BREAKPOINT_CONTEXT;

//
// Definition for Debugger Call-Stack
//
#define EFI_DEBUGGER_CALLSTACK_MAX     0x10

typedef enum {
  EfiDebuggerBranchTypeEbcCall,
  EfiDebuggerBranchTypeEbcCallEx,
  EfiDebuggerBranchTypeEbcRet,
  EfiDebuggerBranchTypeEbcJmp,
  EfiDebuggerBranchTypeEbcJmp8,
  EfiDebuggerBranchTypeEbcMax,
} EFI_DEBUGGER_BRANCH_TYPE;

#define EFI_DEBUGGER_CALL_MAX_PARAMETER      0x16
#define EFI_DEBUGGER_CALL_DEFAULT_PARAMETER  0x8

typedef struct {
  EFI_PHYSICAL_ADDRESS      SourceAddress;
  EFI_PHYSICAL_ADDRESS      DestAddress;
  //
  // We save all parameter here, because code may update the parameter as local variable.
  //
  UINTN                     ParameterAddr;
  UINTN                     Parameter[EFI_DEBUGGER_CALL_MAX_PARAMETER];
  EFI_DEBUGGER_BRANCH_TYPE  Type;
} EFI_DEBUGGER_CALLSTACK_CONTEXT;

//
// Definition for Debugger Trace
//
#define EFI_DEBUGGER_TRACE_MAX         0x10

typedef struct {
  EFI_PHYSICAL_ADDRESS      SourceAddress;
  EFI_PHYSICAL_ADDRESS      DestAddress;
  EFI_DEBUGGER_BRANCH_TYPE  Type;
} EFI_DEBUGGER_TRACE_CONTEXT;

//
// Definition for Debugger Step
//
typedef struct {
  EFI_PHYSICAL_ADDRESS      BreakAddress;
  EFI_PHYSICAL_ADDRESS      FramePointer;
} EFI_DEBUGGER_STEP_CONTEXT;

//
// Definition for Debugger GoTil
//
typedef struct {
  EFI_PHYSICAL_ADDRESS      BreakAddress;
} EFI_DEBUGGER_GOTIL_CONTEXT;

//
// Definition for Debugger private data structure
//
#define EFI_DEBUGGER_SIGNATURE         SIGNATURE_32 ('e', 'd', 'b', '!')

#define EFI_DEBUG_DEFAULT_INSTRUCTION_NUMBER  5

#define EFI_DEBUG_BREAK_TIMER_INTERVAL        10000000   // 1 second

#define EFI_DEBUG_FLAG_EBC            0x80000000
#define EFI_DEBUG_FLAG_EBC_B_BOC      0x1
#define EFI_DEBUG_FLAG_EBC_B_BOCX     0x2
#define EFI_DEBUG_FLAG_EBC_B_BOR      0x4
#define EFI_DEBUG_FLAG_EBC_B_BOE      0x8
#define EFI_DEBUG_FLAG_EBC_B_BOT      0x10
#define EFI_DEBUG_FLAG_EBC_B_STEPOVER 0x20
#define EFI_DEBUG_FLAG_EBC_B_STEPOUT  0x40
#define EFI_DEBUG_FLAG_EBC_B_BP       0x80
#define EFI_DEBUG_FLAG_EBC_B_GT       0x100
#define EFI_DEBUG_FLAG_EBC_B_BOK      0x200
#define EFI_DEBUG_FLAG_EBC_BOC        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOC)
#define EFI_DEBUG_FLAG_EBC_BOCX       (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOCX)
#define EFI_DEBUG_FLAG_EBC_BOR        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOR)
#define EFI_DEBUG_FLAG_EBC_BOE        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOE)
#define EFI_DEBUG_FLAG_EBC_BOT        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOT)
#define EFI_DEBUG_FLAG_EBC_STEPOVER   (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOVER)
#define EFI_DEBUG_FLAG_EBC_STEPOUT    (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_STEPOUT)
#define EFI_DEBUG_FLAG_EBC_BP         (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BP)
#define EFI_DEBUG_FLAG_EBC_GT         (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_GT)
#define EFI_DEBUG_FLAG_EBC_BOK        (EFI_DEBUG_FLAG_EBC | EFI_DEBUG_FLAG_EBC_B_BOK)

//
// Debugger private data structure
//
typedef struct _EFI_DEBUGGER_PRIVATE_DATA {
  UINT32                                      Signature;
  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;
  EFI_DEBUGGER_COMMAND_SET                    *DebuggerCommandSet;
  EFI_DEBUGGER_SYMBOL_CONTEXT                 DebuggerSymbolContext;
  UINTN                                       DebuggerBreakpointCount;
  EFI_DEBUGGER_BREAKPOINT_CONTEXT             DebuggerBreakpointContext[EFI_DEBUGGER_BREAKPOINT_MAX + 1];
  UINTN                                       CallStackEntryCount;
  EFI_DEBUGGER_CALLSTACK_CONTEXT              CallStackEntry[EFI_DEBUGGER_CALLSTACK_MAX + 1];
  UINTN                                       TraceEntryCount;
  EFI_DEBUGGER_TRACE_CONTEXT                  TraceEntry[EFI_DEBUGGER_TRACE_MAX + 1];
  EFI_DEBUGGER_STEP_CONTEXT                   StepContext;
  EFI_DEBUGGER_GOTIL_CONTEXT                  GoTilContext;
  EFI_PHYSICAL_ADDRESS                        InstructionScope;
  UINTN                                       InstructionNumber;
  UINT32                                      FeatureFlags;
  UINT32                                      StatusFlags;
  BOOLEAN                                     EnablePageBreak;
  EFI_EVENT                                   BreakEvent;
} EFI_DEBUGGER_PRIVATE_DATA;

#endif
