#define __TRANSFER_PROTOCOL_H__\r
\r
#include "ProcessorContext.h"\r
-#include "SoftDebuggerDefinitions.h"\r
+\r
+//\r
+// Current revision of transfer protocol\r
+//\r
+#define DEBUG_AGENT_REVISION ((0 << 16) | 02)\r
+#define DEBUG_AGENT_CAPABILITIES 0\r
\r
//\r
// Definitions for break command.\r
//\r
-#define DEBUG_STARTING_SYMBOL_BREAK (0x21) // '!'\r
-#define DEBUG_STARTING_SYMBOL_BREAK_STRING ("!")\r
+#define DEBUG_STARTING_SYMBOL_BREAK (0xFC)\r
+\r
+//\r
+// Definitions for attach command\r
+//\r
+#define DEBUG_STARTING_SYMBOL_ATTACH (0xFA)\r
\r
//\r
-// Definition for starting symbol of a normal debug packet. Choose a non-ASCII to avoid conflict with other serial output.\r
+// Definition for starting symbol of a normal debug packet. Choose a non-ASCII to avoid conflict with other serial output.\r
//\r
#define DEBUG_STARTING_SYMBOL_NORMAL (0xFE)\r
\r
#pragma pack(1)\r
\r
//\r
-// Definition for common header for normal debug packets (not including break command)\r
+// Definition for debug packet header for normal debug packets (not including break/attach command)\r
//\r
typedef struct {\r
UINT8 StartSymbol;\r
UINT8 Command;\r
- UINT8 DataLength;\r
-} DEBUG_COMMAND_HEADER;\r
-\r
-//\r
-// Structure to facilitate debug packet header parsing or construction\r
-//\r
-typedef struct {\r
- UINT8 Command;\r
- UINT8 DataLength;\r
-} DEBUG_COMMAND_HEADER_NO_START_SYMBOL;\r
-\r
+ UINT8 Length; // Length of Debug Packet including header and payload in byte\r
+ UINT8 CheckSum;\r
+} DEBUG_PACKET_HEADER;\r
\r
//\r
// Definition for Command field for debug packets\r
#define DEBUG_COMMAND_REQUEST (0 << 7)\r
#define DEBUG_COMMAND_RESPONSE (1 << 7)\r
\r
-\r
-\r
-#define DEBUG_COMMAND_RESET (DEBUG_COMMAND_REQUEST | 0) // 0\r
-\r
-#define DEBUG_COMMAND_GO (DEBUG_COMMAND_REQUEST | 1) // 1\r
-\r
-#define DEBUG_COMMAND_BREAK_CAUSE (DEBUG_COMMAND_REQUEST | 2) // 2\r
-\r
-#define DEBUG_COMMAND_SET_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 3) // 3\r
-#define DEBUG_COMMAND_CLEAR_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 4) // 4\r
-\r
-#define DEBUG_COMMAND_SINGLE_STEPPING (DEBUG_COMMAND_REQUEST | 5) // 5\r
-\r
-#define DEBUG_COMMAND_SET_SW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 6) // 6\r
-#define DEBUG_COMMAND_CLEAR_SW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 7) // 7\r
-\r
-#define DEBUG_COMMAND_READ_MEMORY_8 (DEBUG_COMMAND_REQUEST | 8) // 8\r
-#define DEBUG_COMMAND_READ_MEMORY_16 (DEBUG_COMMAND_REQUEST | 9) // 9\r
-#define DEBUG_COMMAND_READ_MEMORY_32 (DEBUG_COMMAND_REQUEST | 10) // 10\r
-#define DEBUG_COMMAND_READ_MEMORY_64 (DEBUG_COMMAND_REQUEST | 11) // 11\r
-\r
-#define DEBUG_COMMAND_WRITE_MEMORY_8 (DEBUG_COMMAND_REQUEST | 12) // 12\r
-#define DEBUG_COMMAND_WRITE_MEMORY_16 (DEBUG_COMMAND_REQUEST | 13) // 13\r
-#define DEBUG_COMMAND_WRITE_MEMORY_32 (DEBUG_COMMAND_REQUEST | 14) // 14\r
-#define DEBUG_COMMAND_WRITE_MEMORY_64 (DEBUG_COMMAND_REQUEST | 15) // 15\r
-\r
-#define DEBUG_COMMAND_READ_IO (DEBUG_COMMAND_REQUEST | 16) // 16\r
-#define DEBUG_COMMAND_WRITE_IO (DEBUG_COMMAND_REQUEST | 20) // 20\r
-\r
-#define DEBUG_COMMAND_READ_REGISTER (DEBUG_COMMAND_REQUEST | 24) // 24\r
-#define DEBUG_COMMAND_WRITE_REGISTER (DEBUG_COMMAND_REQUEST | 26) // 26\r
-\r
-#define DEBUG_COMMAND_STEP_OVER (DEBUG_COMMAND_REQUEST | 28) // 28\r
-#define DEBUG_COMMAND_STEP_OUT (DEBUG_COMMAND_REQUEST | 29) // 29\r
-#define DEBUG_COMMAND_STEP_BRANCH (DEBUG_COMMAND_REQUEST | 30) // 30\r
-\r
-#define DEBUG_COMMAND_ARCH_MODE (DEBUG_COMMAND_REQUEST | 34) // 34\r
-\r
-#define DEBUG_COMMAND_READ_MSR (DEBUG_COMMAND_REQUEST | 35) // 35\r
-#define DEBUG_COMMAND_WRITE_MSR (DEBUG_COMMAND_REQUEST | 36) // 36\r
-\r
-#define DEBUG_COMMAND_READ_REGISTER_GROUP (DEBUG_COMMAND_REQUEST | 37) // 37\r
-\r
-#define DEBUG_COMMAND_SET_DEBUG_FLAG (DEBUG_COMMAND_REQUEST | 38) // 38\r
-\r
-#define DEBUG_COMMAND_GET_REVISION (DEBUG_COMMAND_REQUEST | 39) // 39\r
-\r
-#define DEBUG_COMMAND_GET_EXCEPTION (DEBUG_COMMAND_REQUEST | 40) // 40\r
-\r
-#define DEBUG_COMMAND_SET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 41) // 41\r
-\r
-#define DEBUG_COMMAND_GET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 42) // 42\r
-\r
-//\r
-// The below are target side initiated commands.\r
//\r
-#define DEBUG_COMMAND_INIT_BREAK (DEBUG_COMMAND_REQUEST | 63) // 63\r
-#define DEBUG_COMMAND_BREAK_POINT (DEBUG_COMMAND_REQUEST | 62) // 62\r
-#define DEBUG_COMMAND_MEMORY_READY (DEBUG_COMMAND_REQUEST | 61) // 61\r
-\r
-#define DEBUG_COMMAND_OK (DEBUG_COMMAND_RESPONSE | 0)\r
-#define DEBUG_COMMAND_RESEND (DEBUG_COMMAND_RESPONSE | 1)\r
-#define DEBUG_COMMAND_ABORT (DEBUG_COMMAND_RESPONSE | 2)\r
-\r
-//\r
-// The below 2 commands are used when transferring big data (like > ~250 bytes). The sequence is:\r
-// Host Macine Target Macine\r
-// Request =>\r
-// <= IN_PROGRESS with part of the data\r
-// CONTINUE =>\r
-// (could have multiple IN_PROGRESS and CONTINUE interactions)\r
-// <= OK with the last part of data\r
-// OK (no data as ACK) =>\r
-//\r
-#define DEBUG_COMMAND_IN_PROGRESS (DEBUG_COMMAND_RESPONSE | 3) // Used when trying to\r
-#define DEBUG_COMMAND_CONTINUE (DEBUG_COMMAND_RESPONSE | 4) // Used when trying to transfer big data (like > ~250 bytes)\r
-\r
-//\r
-// The below 2 commands are used to support deferred halt. HALT_DEFERRED will be returned when a halt request received while target is already in inter-active mode.\r
-// HALT_PROCESSED will be return as a possible return value for GO command, if target has a pending halt request.\r
-//\r
-#define DEBUG_COMMAND_HALT_DEFERRED (DEBUG_COMMAND_RESPONSE | 5)\r
-#define DEBUG_COMMAND_HALT_PROCESSED (DEBUG_COMMAND_RESPONSE | 6)\r
-\r
-#define DEBUG_COMMAND_TIMEOUT (DEBUG_COMMAND_RESPONSE | 7)\r
-#define DEBUG_COMMAND_NOT_SUPPORTED (DEBUG_COMMAND_RESPONSE | 15)\r
+// HOST initiated commands\r
+//\r
+#define DEBUG_COMMAND_RESET (DEBUG_COMMAND_REQUEST | 0x00)\r
+#define DEBUG_COMMAND_GO (DEBUG_COMMAND_REQUEST | 0x01)\r
+#define DEBUG_COMMAND_BREAK_CAUSE (DEBUG_COMMAND_REQUEST | 0x02)\r
+#define DEBUG_COMMAND_SET_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x03)\r
+#define DEBUG_COMMAND_CLEAR_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x04)\r
+#define DEBUG_COMMAND_SINGLE_STEPPING (DEBUG_COMMAND_REQUEST | 0x05)\r
+#define DEBUG_COMMAND_SET_SW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x06)\r
+#define DEBUG_COMMAND_READ_MEMORY (DEBUG_COMMAND_REQUEST | 0x07)\r
+#define DEBUG_COMMAND_WRITE_MEMORY (DEBUG_COMMAND_REQUEST | 0x08)\r
+#define DEBUG_COMMAND_READ_IO (DEBUG_COMMAND_REQUEST | 0x09)\r
+#define DEBUG_COMMAND_WRITE_IO (DEBUG_COMMAND_REQUEST | 0x0A)\r
+#define DEBUG_COMMAND_READ_REGISTER (DEBUG_COMMAND_REQUEST | 0x0B)\r
+#define DEBUG_COMMAND_WRITE_REGISTER (DEBUG_COMMAND_REQUEST | 0x0C)\r
+#define DEBUG_COMMAND_READ_ALL_REGISTERS (DEBUG_COMMAND_REQUEST | 0x0D)\r
+#define DEBUG_COMMAND_ARCH_MODE (DEBUG_COMMAND_REQUEST | 0x0E)\r
+#define DEBUG_COMMAND_READ_MSR (DEBUG_COMMAND_REQUEST | 0x0F)\r
+#define DEBUG_COMMAND_WRITE_MSR (DEBUG_COMMAND_REQUEST | 0x10)\r
+#define DEBUG_COMMAND_SET_DEBUG_SETTING (DEBUG_COMMAND_REQUEST | 0x11)\r
+#define DEBUG_COMMAND_GET_REVISION (DEBUG_COMMAND_REQUEST | 0x12)\r
+#define DEBUG_COMMAND_GET_EXCEPTION (DEBUG_COMMAND_REQUEST | 0x13)\r
+#define DEBUG_COMMAND_SET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 0x14)\r
+#define DEBUG_COMMAND_GET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 0x15)\r
+#define DEBUG_COMMAND_DETACH (DEBUG_COMMAND_REQUEST | 0x16)\r
+#define DEBUG_COMMAND_CPUID (DEBUG_COMMAND_REQUEST | 0x17)\r
+#define DEBUG_COMMAND_SEARCH_SIGNATURE (DEBUG_COMMAND_REQUEST | 0x18)\r
+\r
+//\r
+// TARGET initiated commands\r
+//\r
+#define DEBUG_COMMAND_INIT_BREAK (DEBUG_COMMAND_REQUEST | 0x3F)\r
+#define DEBUG_COMMAND_BREAK_POINT (DEBUG_COMMAND_REQUEST | 0x3E)\r
+#define DEBUG_COMMAND_MEMORY_READY (DEBUG_COMMAND_REQUEST | 0x3D)\r
+#define DEBUG_COMMAND_PRINT_MESSAGE (DEBUG_COMMAND_REQUEST | 0x3C)\r
+\r
+//\r
+// Response commands\r
+//\r
+#define DEBUG_COMMAND_OK (DEBUG_COMMAND_RESPONSE | 0x00)\r
+#define DEBUG_COMMAND_RESEND (DEBUG_COMMAND_RESPONSE | 0x01)\r
+#define DEBUG_COMMAND_ABORT (DEBUG_COMMAND_RESPONSE | 0x02)\r
+//\r
+// The below 2 commands are used when transferring big data (like > ~250 bytes).\r
+// The sequence is:\r
+// HOST TARGET\r
+// Request =>\r
+// <= IN_PROGRESS with partial data\r
+// CONTINUE =>\r
+// (could have multiple IN_PROGRESS and CONTINUE interactions)\r
+// <= OK with the last part of data\r
+// OK (no data as ACK) =>\r
+//\r
+#define DEBUG_COMMAND_IN_PROGRESS (DEBUG_COMMAND_RESPONSE | 0x03)\r
+#define DEBUG_COMMAND_CONTINUE (DEBUG_COMMAND_RESPONSE | 0x04)\r
+//\r
+// The below 2 commands are used to support deferred halt:\r
+// TARGET returns HALT_DEFERRED when it receives a HALT request in inter-active mode.\r
+// TARGET returns HALT_PROCESSED when it receives a GO request and has a pending HALT request.\r
+//\r
+#define DEBUG_COMMAND_HALT_DEFERRED (DEBUG_COMMAND_RESPONSE | 0x05)\r
+#define DEBUG_COMMAND_HALT_PROCESSED (DEBUG_COMMAND_RESPONSE | 0x06)\r
+\r
+#define DEBUG_COMMAND_TIMEOUT (DEBUG_COMMAND_RESPONSE | 0x07)\r
+#define DEBUG_COMMAND_NOT_SUPPORTED (DEBUG_COMMAND_RESPONSE | 0x0F)\r
\r
//\r
// Definition for data field for debug packets\r
//\r
-#define DEBUG_DATA_MAXIMUM_LENGTH_FOR_SMALL_COMMANDS 20\r
-\r
-#define DEBUG_DATA_UPPER_LIMIT 0xff // This is the upper limit for the data size, by the limit of the packet header definition.\r
-\r
-#define DEBUG_DATA_MAXIMUM_REAL_DATA 0xf8\r
+#define DEBUG_DATA_UPPER_LIMIT 0xff // Upper limit for the data size, by the limit of the packet header definition.\r
\r
-#define DEBUG_DEFINITION_MAX_IO_LENGTH 4\r
+#define DEBUG_DATA_MAXIMUM_REAL_DATA (DEBUG_DATA_UPPER_LIMIT - sizeof (DEBUG_PACKET_HEADER))\r
\r
//\r
// Response data for DEBUG_COMMAND_BREAK_CAUSE\r
UINT8 Cause;\r
UINT64 StopAddress;\r
} DEBUG_DATA_RESPONSE_BREAK_CAUSE;\r
-\r
//\r
// Break type defintions for DEBUG_DATA_BREAK_CAUSE\r
//\r
typedef struct {\r
UINT8 CpuMode;\r
} DEBUG_DATA_RESPONSE_ARCH_MODE;\r
-\r
//\r
// Cpu architecture defintions for DEBUG_DATA_RESPONSE_ARCH_MODE\r
//\r
#define DEBUG_DATA_BREAK_CPU_ARCH_IA32 1\r
#define DEBUG_DATA_BREAK_CPU_ARCH_X64 2\r
\r
-//\r
-// Command and response data for DEBUG_COMMAND_XX_YY_BREAKPOINT\r
-//\r
typedef struct {\r
UINT8 Length:2; // Refer to below DEBUG_DATA_BREAKPOINT_LENGTH_XX macros\r
UINT8 Access:2; // Refer to below DEBUG_DATA_BREAKPOINT_ACCESS_XX macros\r
UINT8 Index:2; // Index of debug register\r
UINT8 Reserved:2;\r
} DEBUG_DATA_BREAKPOINT_TYPE;\r
-\r
-#define DEBUG_DATA_BREAKPOINT_MEMORY_ACCESS (0x11)\r
-#define DEBUG_DATA_BREAKPOINT_IO_ACCESS (0x10)\r
-#define DEBUG_DATA_BREAKPOINT_MEMORY_WRITE (0x01)\r
-#define DEBUG_DATA_BREAKPOINT_MEMORY_EXECUTE (0x00)\r
-\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_64 (0x11)\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_32 (0x10)\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_16 (0x01)\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_8 (0x00)\r
+#define DEBUG_DATA_BREAKPOINT_MEMORY_ACCESS (0x3)\r
+#define DEBUG_DATA_BREAKPOINT_IO_ACCESS (0x2)\r
+#define DEBUG_DATA_BREAKPOINT_MEMORY_WRITE (0x1)\r
+#define DEBUG_DATA_BREAKPOINT_MEMORY_EXECUTE (0x0)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_32 (0x3)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_64 (0x2)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_16 (0x1)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_8 (0x0)\r
\r
//\r
-// Command data for DEBUG_COMMAND_SET_HW_BREAKPOINT\r
+// Request data for DEBUG_COMMAND_SET_HW_BREAKPOINT\r
//\r
typedef struct {\r
DEBUG_DATA_BREAKPOINT_TYPE Type;\r
} DEBUG_DATA_SET_HW_BREAKPOINT;\r
\r
//\r
-// Command data for DEBUG_COMMAND_CLEAR_HW_BREAKPOINT\r
+// Request data for DEBUG_COMMAND_CLEAR_HW_BREAKPOINT\r
//\r
typedef struct {\r
UINT8 IndexMask; // 0x0f will clear all hw breakpoints\r
} DEBUG_DATA_CLEAR_HW_BREAKPOINT;\r
\r
//\r
-// Command data for DEBUG_COMMAND_SET_SW_BREAKPOINT\r
+// Request and response data for DEBUG_COMMAND_SET_SW_BREAKPOINT\r
//\r
typedef struct {\r
UINT64 Address;\r
} DEBUG_DATA_SET_SW_BREAKPOINT;\r
\r
-//\r
-// Response data for DEBUG_COMMAND_SET_SW_BREAKPOINT\r
-//\r
typedef struct {\r
UINT8 OriginalData;\r
} DEBUG_DATA_RESPONSE_SET_SW_BREAKPOINT;\r
\r
//\r
-// Command data for DEBUG_COMMAND_CLEAR_SW_BREAKPOINT\r
-//\r
-typedef DEBUG_DATA_SET_SW_BREAKPOINT DEBUG_DATA_CLEAR_SW_BREAKPOINT;\r
-\r
-//\r
-// Command data for DEBUG_COMMAND_READ_MEMORY_XX\r
+// Request data for DEBUG_COMMAND_READ_MEMORY\r
//\r
typedef struct {\r
UINT64 Address;\r
+ UINT8 Width;\r
UINT16 Count;\r
-} DEBUG_DATA_READ_MEMORY_8;\r
-\r
-typedef DEBUG_DATA_READ_MEMORY_8 DEBUG_DATA_READ_MEMORY_16;\r
-\r
-typedef DEBUG_DATA_READ_MEMORY_8 DEBUG_DATA_READ_MEMORY_32;\r
-\r
-typedef DEBUG_DATA_READ_MEMORY_8 DEBUG_DATA_READ_MEMORY_64;\r
+} DEBUG_DATA_READ_MEMORY;\r
\r
//\r
-// Command data for DEBUG_COMMAND_WRITE_MEMORY_XX\r
+// Request data for DEBUG_COMMAND_WRITE_MEMORY\r
//\r
typedef struct {\r
UINT64 Address;\r
+ UINT8 Width;\r
UINT16 Count;\r
- UINT8 Data; // The actual length for this field is decided by Width x Count\r
-} DEBUG_DATA_WRITE_MEMORY_8;\r
-\r
-typedef DEBUG_DATA_WRITE_MEMORY_8 DEBUG_DATA_WRITE_MEMORY_16;\r
-\r
-typedef DEBUG_DATA_WRITE_MEMORY_8 DEBUG_DATA_WRITE_MEMORY_32;\r
-\r
-typedef DEBUG_DATA_WRITE_MEMORY_8 DEBUG_DATA_WRITE_MEMORY_64;\r
+ UINT8 Data[1]; // The actual length is (Width * Count)\r
+} DEBUG_DATA_WRITE_MEMORY;\r
\r
//\r
-// Command data for DEBUG_COMMAND_READ_IO\r
+// Request and response data for DEBUG_COMMAND_READ_IO\r
//\r
typedef struct {\r
- UINT16 Port;\r
+ UINT64 Port;\r
UINT8 Width;\r
} DEBUG_DATA_READ_IO;\r
\r
-//\r
-// Response data for DEBUG_COMMAND_READ_IO\r
-//\r
typedef struct {\r
- UINT8 Data; // The actual length of this structure will be adjusted according to the Width field\r
+ UINT8 Data[1]; // The actual length depends on the packet header\r
} DEBUG_DATA_RESPONSE_READ_IO;\r
\r
//\r
-// Command data for DEBUG_COMMAND_WRITE_IO\r
+// Request data for DEBUG_COMMAND_WRITE_IO\r
//\r
typedef struct {\r
- UINT16 Port;\r
+ UINT64 Port;\r
UINT8 Width;\r
- UINT8 Data; // The actual length of this structure will be adjusted according to the Width field\r
+ UINT8 Data[1]; // The actual length is Width\r
} DEBUG_DATA_WRITE_IO;\r
\r
//\r
-// Command data for DEBUG_COMMAND_READ_REGISTER\r
+// Request data for DEBUG_COMMAND_READ_REGISTER\r
//\r
typedef struct {\r
- UINT8 Index; // defined as DEBUG_DEFINITION_REGISTER_XX\r
- UINT8 Offset:4;\r
- UINT8 Length:4;\r
+ UINT8 Index; // defined as SOFT_DEBUGGER_REGISTER_XX\r
} DEBUG_DATA_READ_REGISTER;\r
\r
//\r
-// Command data for DEBUG_COMMAND_WRITE_REGISTER\r
+// Request data for DEBUG_COMMAND_WRITE_REGISTER\r
//\r
typedef struct {\r
- UINT8 Index; // defined as DEBUG_DEFINITION_REGISTER_XX\r
- UINT8 Offset:4;\r
- UINT8 Length:4;\r
- UINT64 Value;\r
+ UINT8 Index; // defined as SOFT_DEBUGGER_REGISTER_XX\r
+ UINT8 Length;\r
+ UINT8 Data[1]; // The actual length is Length\r
} DEBUG_DATA_WRITE_REGISTER;\r
\r
//\r
-// Command data for DEBUG_COMMAND_READ_MSR\r
+// Request and response data for DEBUG_COMMAND_READ_MSR\r
//\r
typedef struct {\r
UINT32 Index;\r
} DEBUG_DATA_READ_MSR;\r
\r
-//\r
-// Response data for DEBUG_COMMAND_READ_MSR\r
-//\r
typedef struct {\r
UINT64 Value;\r
} DEBUG_DATA_RESPONSE_READ_MSR;\r
\r
//\r
-// Command data for DEBUG_COMMAND_WRITE_MSR\r
+// Request data for DEBUG_COMMAND_WRITE_MSR\r
//\r
typedef struct {\r
UINT32 Index;\r
UINT64 Value;\r
} DEBUG_DATA_WRITE_MSR;\r
\r
-//\r
-// Command data for DEBUG_COMMAND_READ_REGISTER_GROUP\r
-//\r
-typedef struct {\r
- // For possible values, refer to the definition for DEBUG_DEFINITION_REGISTER_GROUP_XXX (in another .h file as it is architecture specific)\r
- UINT8 Index;\r
-} DEBUG_DATA_READ_REGISTER_GROUP;\r
-\r
//\r
// Response data for DEBUG_COMMAND_GET_REVISION\r
//\r
//\r
typedef struct {\r
UINT8 ExceptionNum;\r
- UINT64 ExceptionData;\r
+ UINT32 ExceptionData;\r
} DEBUG_DATA_RESPONSE_GET_EXCEPTION;\r
\r
-typedef struct {\r
- UINT8 DRn; // The index of DR register which to be used as temporary breakpoint\r
-} DEBUG_DATA_STEP_OVER;\r
-\r
//\r
-// Command data for DEBUG_COMMAND_SET_DEBUG_FLAG\r
+// Request data for DEBUG_DATA_SET_DEBUG_SETTING\r
//\r
typedef struct {\r
- UINT32 DebugFlag; // The index of DR register which to be used as temporary breakpoint\r
-} DEBUG_DATA_SET_DEBUG_FLAG;\r
+ UINT8 Key;\r
+ UINT8 Value;\r
+} DEBUG_DATA_SET_DEBUG_SETTING;\r
+//\r
+// Supported keys\r
+//\r
+#define DEBUG_AGENT_SETTING_SMM_ENTRY_BREAK 1\r
+#define DEBUG_AGENT_SETTING_PRINT_ERROR_LEVEL 2\r
+//\r
+// Bitmask of print error level for debug message\r
+//\r
+#define DEBUG_AGENT_ERROR BIT0\r
+#define DEBUG_AGENT_WARNING BIT1\r
+#define DEBUG_AGENT_INFO BIT2\r
+#define DEBUG_AGENT_VERBOSE BIT3\r
\r
//\r
-// Command data for DEBUG_COMMAND_SET_VIEWPOINT\r
-// If viewpoint is changed successfully, DEBUG_COMMAND_OK will be returned.\r
-// If viewpoint is not availabe, DEBUG_COMMAND_NOT_SUPPORTED will be returned.\r
+// Request data for DEBUG_COMMAND_SET_VIEWPOINT\r
//\r
typedef struct {\r
UINT32 ViewPoint; // The index of viewpoint will be set\r
UINT32 ViewPoint; // The index of viewpoint will be returned\r
} DEBUG_DATA_RESPONSE_GET_VIEWPOINT;\r
\r
-#pragma pack()\r
+//\r
+// Request and response data for DEBUG_COMMAND_CPUID\r
+//\r
+typedef struct {\r
+ UINT32 Eax; // The value of EAX prior to invoking the CPUID instruction\r
+ UINT32 Ecx; // The value of ECX prior to invoking the CPUID instruction\r
+} DEBUG_DATA_CPUID;\r
+\r
+typedef struct {\r
+ UINT32 Eax; // The value of EAX returned by the CPUID instruction\r
+ UINT32 Ebx; // The value of EBX returned by the CPUID instruction\r
+ UINT32 Ecx; // The value of ECX returned by the CPUID instruction\r
+ UINT32 Edx; // The value of EDX returned by the CPUID instruction\r
+} DEBUG_DATA_RESPONSE_CPUID;\r
\r
-#define DEBUG_PACKET_CONSTRUCTOR_WITH_NO_DATA(DebugPacket,ShortCommandType) \\r
- ((DEBUG_COMMAND_HEADER *)DebugPacket)->StartSymbol = DEBUG_STARTING_SYMBOL_NORMAL; \\r
- ((DEBUG_COMMAND_HEADER *)DebugPacket)->Command = DEBUG_COMMAND_##ShortCommandType; \\r
- ((DEBUG_COMMAND_HEADER *)DebugPacket)->DataLength = 0;\r
-\r
-#define DEBUG_PACKET_CONSTRUCTOR_WITH_DATA(DebugPacket,ShortCommandType, DebugPacketDataPointer, PacketLength) \\r
- ((DEBUG_COMMAND_HEADER *)DebugPacket)->StartSymbol = DEBUG_STARTING_SYMBOL_NORMAL; \\r
- ((DEBUG_COMMAND_HEADER *)DebugPacket)->Command = DEBUG_COMMAND_##ShortCommandType; \\r
- ((DEBUG_COMMAND_HEADER *)DebugPacket)->DataLength = sizeof (DEBUG_DATA_##ShortCommandType); \\r
- *DebugPacketDataPointer = (DEBUG_DATA_##ShortCommandType *)((DEBUG_COMMAND_HEADER *)DebugPacket+1); \\r
- *PacketLength = sizeof (DEBUG_COMMAND_HEADER) + sizeof (DEBUG_DATA_##ShortCommandType);\r
+//\r
+// Request and response data for DEBUG_COMMAND_SEARCH_SIGNATURE\r
+//\r
+typedef struct {\r
+ UINT64 Start;\r
+ UINT32 Count;\r
+ UINT32 Alignment;\r
+ BOOLEAN Positive; // TRUE to search in higher address memory\r
+ UINT8 DataLength;\r
+ UINT8 Data[1];\r
+} DEBUG_DATA_SEARCH_SIGNATURE;\r
+\r
+typedef struct {\r
+ UINT64 Address; // -1 indicates not found\r
+} DEBUG_DATA_RESPONSE_SEARCH_SIGNATURE;\r
+\r
+#pragma pack()\r
\r
#endif\r
\r