#include "DebugAgent.h"\r
#include "Ia32/DebugException.h"\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgVersionAlert[] = "\rThe SourceLevelDebugPkg you are using requires a newer version of the Intel(R) UDK Debugger Tool.\r\n";\r
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgSendInitPacket[] = "\rSend INIT break packet and try to connect the HOST (Intel(R) UDK Debugger Tool v1.5) ...\r\n";\r
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgConnectOK[] = "HOST connection is successful!\r\n";\r
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgConnectFail[] = "HOST connection is failed!\r\n";\r
-GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mWarningMsgIngoreBreakpoint[] = "Ignore break point in SMM for SMI issued during DXE debugging!\r\n";\r
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgVersionAlert[] = "\rThe SourceLevelDebugPkg you are using requires a newer version of the Intel(R) UDK Debugger Tool.\r\n";\r
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgSendInitPacket[] = "\rSend INIT break packet and try to connect the HOST (Intel(R) UDK Debugger Tool v1.5) ...\r\n";\r
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgConnectOK[] = "HOST connection is successful!\r\n";\r
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mErrorMsgConnectFail[] = "HOST connection is failed!\r\n";\r
+GLOBAL_REMOVE_IF_UNREFERENCED CHAR8 mWarningMsgIngoreBreakpoint[] = "Ignore break point in SMM for SMI issued during DXE debugging!\r\n";\r
\r
//\r
// Vector Handoff Info list used by Debug Agent for persist\r
//\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_VECTOR_HANDOFF_INFO mVectorHandoffInfoDebugAgent[] = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_VECTOR_HANDOFF_INFO mVectorHandoffInfoDebugAgent[] = {\r
{\r
DEBUG_EXCEPT_DIVIDE_ERROR, // Vector 0\r
EFI_VECTOR_HANDOFF_HOOK_BEFORE,\r
EFI_VECTOR_HANDOFF_HOOK_BEFORE,\r
EFI_DEBUG_AGENT_GUID\r
},\r
- {\r
+ {\r
DEBUG_EXCEPT_PAGE_FAULT, // Vector 14\r
EFI_VECTOR_HANDOFF_HOOK_BEFORE,\r
EFI_DEBUG_AGENT_GUID\r
}\r
};\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED UINTN mVectorHandoffInfoCount = sizeof (mVectorHandoffInfoDebugAgent) / sizeof (EFI_VECTOR_HANDOFF_INFO);\r
+GLOBAL_REMOVE_IF_UNREFERENCED UINTN mVectorHandoffInfoCount = sizeof (mVectorHandoffInfoDebugAgent) / sizeof (EFI_VECTOR_HANDOFF_INFO);\r
\r
/**\r
Calculate CRC16 for target data.\r
for (BitIndex = 0; BitIndex < 8; BitIndex++) {\r
if ((Crc & 0x8000) != 0) {\r
Crc <<= 1;\r
- Crc ^= 0x1021;\r
+ Crc ^= 0x1021;\r
} else {\r
Crc <<= 1;\r
}\r
}\r
}\r
+\r
return Crc;\r
}\r
\r
-\r
/**\r
Read IDT entry to check if IDT entries are setup by Debug Agent.\r
\r
VOID\r
)\r
{\r
- UINTN InterruptHandler;\r
+ UINTN InterruptHandler;\r
\r
- InterruptHandler = (UINTN) GetExceptionHandlerInIdtEntry (0);\r
- if (InterruptHandler >= 4 && *(UINT32 *)(InterruptHandler - 4) == AGENT_HANDLER_SIGNATURE) {\r
+ InterruptHandler = (UINTN)GetExceptionHandlerInIdtEntry (0);\r
+ if ((InterruptHandler >= 4) && (*(UINT32 *)(InterruptHandler - 4) == AGENT_HANDLER_SIGNATURE)) {\r
return TRUE;\r
} else {\r
return FALSE;\r
**/\r
VOID\r
FindAndReportModuleImageInfo (\r
- IN UINTN AlignSize\r
+ IN UINTN AlignSize\r
)\r
{\r
- UINTN Pe32Data;\r
- PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
+ UINTN Pe32Data;\r
+ PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
\r
//\r
// Find Image Base\r
//\r
- Pe32Data = PeCoffSearchImageBase ((UINTN) mErrorMsgVersionAlert);\r
+ Pe32Data = PeCoffSearchImageBase ((UINTN)mErrorMsgVersionAlert);\r
if (Pe32Data != 0) {\r
ImageContext.ImageAddress = Pe32Data;\r
- ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageContext.ImageAddress);\r
+ ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID *)(UINTN)ImageContext.ImageAddress);\r
PeCoffLoaderRelocateImageExtraAction (&ImageContext);\r
}\r
}\r
**/\r
VOID\r
TriggerSoftInterrupt (\r
- IN UINT32 Signature\r
+ IN UINT32 Signature\r
)\r
{\r
- UINTN Dr0;\r
- UINTN Dr1;\r
+ UINTN Dr0;\r
+ UINTN Dr1;\r
\r
//\r
// Save Debug Register State\r
//\r
AsmWriteDr0 (Dr0);\r
AsmWriteDr1 (Dr1);\r
-\r
}\r
\r
/**\r
**/\r
VOID\r
UpdateMailboxChecksum (\r
- IN DEBUG_AGENT_MAILBOX *Mailbox\r
+ IN DEBUG_AGENT_MAILBOX *Mailbox\r
)\r
{\r
Mailbox->CheckSum = CalculateCheckSum8 ((UINT8 *)Mailbox, sizeof (DEBUG_AGENT_MAILBOX) - 2);\r
**/\r
VOID\r
VerifyMailboxChecksum (\r
- IN DEBUG_AGENT_MAILBOX *Mailbox\r
+ IN DEBUG_AGENT_MAILBOX *Mailbox\r
)\r
{\r
- UINT8 CheckSum;\r
+ UINT8 CheckSum;\r
\r
- CheckSum = CalculateCheckSum8 ((UINT8 *) Mailbox, sizeof (DEBUG_AGENT_MAILBOX) - 2);\r
+ CheckSum = CalculateCheckSum8 ((UINT8 *)Mailbox, sizeof (DEBUG_AGENT_MAILBOX) - 2);\r
//\r
// The checksum updating process may be disturbed by hardware SMI, we need to check CheckSum field\r
// and ToBeCheckSum field to validate the mail box.\r
//\r
- if (CheckSum != Mailbox->CheckSum && CheckSum != Mailbox->ToBeCheckSum) {\r
+ if ((CheckSum != Mailbox->CheckSum) && (CheckSum != Mailbox->ToBeCheckSum)) {\r
DEBUG ((DEBUG_ERROR, "DebugAgent: Mailbox checksum error, stack or heap crashed!\n"));\r
DEBUG ((DEBUG_ERROR, "DebugAgent: CheckSum = %x, Mailbox->CheckSum = %x, Mailbox->ToBeCheckSum = %x\n", CheckSum, Mailbox->CheckSum, Mailbox->ToBeCheckSum));\r
CpuDeadLoop ();\r
**/\r
VOID\r
UpdateMailboxContent (\r
- IN DEBUG_AGENT_MAILBOX *Mailbox,\r
- IN UINTN Index,\r
- IN UINT64 Value\r
+ IN DEBUG_AGENT_MAILBOX *Mailbox,\r
+ IN UINTN Index,\r
+ IN UINT64 Value\r
)\r
{\r
AcquireMpSpinLock (&mDebugMpContext.MailboxSpinLock);\r
switch (Index) {\r
- case DEBUG_MAILBOX_DEBUG_FLAG_INDEX:\r
- Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->DebugFlag.Uint64, sizeof(UINT64))\r
- - CalculateSum8 ((UINT8 *)&Value, sizeof(UINT64));\r
- Mailbox->DebugFlag.Uint64 = Value;\r
- break;\r
- case DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX:\r
- Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->DebugPortHandle, sizeof(UINTN))\r
- - CalculateSum8 ((UINT8 *)&Value, sizeof(UINTN));\r
- Mailbox->DebugPortHandle = (UINTN) Value;\r
- break;\r
- case DEBUG_MAILBOX_EXCEPTION_BUFFER_POINTER_INDEX:\r
- Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->ExceptionBufferPointer, sizeof(UINTN))\r
- - CalculateSum8 ((UINT8 *)&Value, sizeof(UINTN));\r
- Mailbox->ExceptionBufferPointer = (UINTN) Value;\r
- break;\r
- case DEBUG_MAILBOX_LAST_ACK:\r
- Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->LastAck, sizeof(UINT8))\r
- - CalculateSum8 ((UINT8 *)&Value, sizeof(UINT8));\r
- Mailbox->LastAck = (UINT8) Value;\r
- break;\r
- case DEBUG_MAILBOX_SEQUENCE_NO_INDEX:\r
- Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->SequenceNo, sizeof(UINT8))\r
- - CalculateSum8 ((UINT8 *)&Value, sizeof(UINT8));\r
- Mailbox->SequenceNo = (UINT8) Value;\r
- break;\r
- case DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX:\r
- Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->HostSequenceNo, sizeof(UINT8))\r
- - CalculateSum8 ((UINT8 *)&Value, sizeof(UINT8));\r
- Mailbox->HostSequenceNo = (UINT8) Value;\r
- break;\r
- case DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY:\r
- Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->DebugTimerFrequency, sizeof(UINT32))\r
- - CalculateSum8 ((UINT8 *)&Value, sizeof(UINT32));\r
- Mailbox->DebugTimerFrequency = (UINT32) Value;\r
- break;\r
+ case DEBUG_MAILBOX_DEBUG_FLAG_INDEX:\r
+ Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->DebugFlag.Uint64, sizeof (UINT64))\r
+ - CalculateSum8 ((UINT8 *)&Value, sizeof (UINT64));\r
+ Mailbox->DebugFlag.Uint64 = Value;\r
+ break;\r
+ case DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX:\r
+ Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->DebugPortHandle, sizeof (UINTN))\r
+ - CalculateSum8 ((UINT8 *)&Value, sizeof (UINTN));\r
+ Mailbox->DebugPortHandle = (UINTN)Value;\r
+ break;\r
+ case DEBUG_MAILBOX_EXCEPTION_BUFFER_POINTER_INDEX:\r
+ Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->ExceptionBufferPointer, sizeof (UINTN))\r
+ - CalculateSum8 ((UINT8 *)&Value, sizeof (UINTN));\r
+ Mailbox->ExceptionBufferPointer = (UINTN)Value;\r
+ break;\r
+ case DEBUG_MAILBOX_LAST_ACK:\r
+ Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->LastAck, sizeof (UINT8))\r
+ - CalculateSum8 ((UINT8 *)&Value, sizeof (UINT8));\r
+ Mailbox->LastAck = (UINT8)Value;\r
+ break;\r
+ case DEBUG_MAILBOX_SEQUENCE_NO_INDEX:\r
+ Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->SequenceNo, sizeof (UINT8))\r
+ - CalculateSum8 ((UINT8 *)&Value, sizeof (UINT8));\r
+ Mailbox->SequenceNo = (UINT8)Value;\r
+ break;\r
+ case DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX:\r
+ Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->HostSequenceNo, sizeof (UINT8))\r
+ - CalculateSum8 ((UINT8 *)&Value, sizeof (UINT8));\r
+ Mailbox->HostSequenceNo = (UINT8)Value;\r
+ break;\r
+ case DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY:\r
+ Mailbox->ToBeCheckSum = Mailbox->CheckSum + CalculateSum8 ((UINT8 *)&Mailbox->DebugTimerFrequency, sizeof (UINT32))\r
+ - CalculateSum8 ((UINT8 *)&Value, sizeof (UINT32));\r
+ Mailbox->DebugTimerFrequency = (UINT32)Value;\r
+ break;\r
}\r
+\r
UpdateMailboxChecksum (Mailbox);\r
ReleaseMpSpinLock (&mDebugMpContext.MailboxSpinLock);\r
}\r
**/\r
UINTN\r
DebugAgentReadBuffer (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN UINT8 *Buffer,\r
- IN UINTN NumberOfBytes,\r
- IN UINTN Timeout\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes,\r
+ IN UINTN Timeout\r
)\r
{\r
- UINTN Index;\r
- UINT32 Begin;\r
- UINT32 TimeoutTicker;\r
- UINT32 TimerRound;\r
- UINT32 TimerFrequency;\r
- UINT32 TimerCycle;\r
-\r
- Begin = 0;\r
- TimeoutTicker = 0;\r
- TimerRound = 0;\r
- TimerFrequency = GetMailboxPointer()->DebugTimerFrequency;\r
- TimerCycle = GetApicTimerInitCount ();\r
+ UINTN Index;\r
+ UINT32 Begin;\r
+ UINT32 TimeoutTicker;\r
+ UINT32 TimerRound;\r
+ UINT32 TimerFrequency;\r
+ UINT32 TimerCycle;\r
+\r
+ Begin = 0;\r
+ TimeoutTicker = 0;\r
+ TimerRound = 0;\r
+ TimerFrequency = GetMailboxPointer ()->DebugTimerFrequency;\r
+ TimerCycle = GetApicTimerInitCount ();\r
\r
if (Timeout != 0) {\r
- Begin = GetApicTimerCurrentCount ();\r
- TimeoutTicker = (UINT32) DivU64x32 (\r
- MultU64x64 (\r
- TimerFrequency,\r
- Timeout\r
- ),\r
- 1000000u\r
- );\r
- TimerRound = (UINT32) DivU64x32Remainder (TimeoutTicker, TimerCycle / 2, &TimeoutTicker);\r
+ Begin = GetApicTimerCurrentCount ();\r
+ TimeoutTicker = (UINT32)DivU64x32 (\r
+ MultU64x64 (\r
+ TimerFrequency,\r
+ Timeout\r
+ ),\r
+ 1000000u\r
+ );\r
+ TimerRound = (UINT32)DivU64x32Remainder (TimeoutTicker, TimerCycle / 2, &TimeoutTicker);\r
}\r
+\r
Index = 0;\r
while (Index < NumberOfBytes) {\r
if (DebugPortPollBuffer (Handle)) {\r
DebugPortReadBuffer (Handle, Buffer + Index, 1, 0);\r
- Index ++;\r
+ Index++;\r
continue;\r
}\r
+\r
if (Timeout != 0) {\r
if (TimerRound == 0) {\r
if (IsDebugTimerTimeout (TimerCycle, Begin, TimeoutTicker)) {\r
}\r
} else {\r
if (IsDebugTimerTimeout (TimerCycle, Begin, TimerCycle / 2)) {\r
- TimerRound --;\r
+ TimerRound--;\r
Begin = GetApicTimerCurrentCount ();\r
}\r
}\r
**/\r
VOID\r
SetDebugFlag (\r
- IN UINT64 FlagMask,\r
- IN UINT32 FlagValue\r
+ IN UINT64 FlagMask,\r
+ IN UINT32 FlagValue\r
)\r
{\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- UINT64 Data64;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ UINT64 Data64;\r
\r
Mailbox = GetMailboxPointer ();\r
- Data64 = (Mailbox->DebugFlag.Uint64 & ~FlagMask) |\r
- (LShiftU64 ((UINT64)FlagValue, LowBitSet64 (FlagMask)) & FlagMask);\r
+ Data64 = (Mailbox->DebugFlag.Uint64 & ~FlagMask) |\r
+ (LShiftU64 ((UINT64)FlagValue, LowBitSet64 (FlagMask)) & FlagMask);\r
UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_FLAG_INDEX, Data64);\r
}\r
\r
**/\r
UINT32\r
GetDebugFlag (\r
- IN UINT64 FlagMask\r
+ IN UINT64 FlagMask\r
)\r
{\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- UINT32 DebugFlag;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ UINT32 DebugFlag;\r
\r
- Mailbox = GetMailboxPointer ();\r
- DebugFlag = (UINT32) RShiftU64 (Mailbox->DebugFlag.Uint64 & FlagMask, LowBitSet64 (FlagMask));\r
+ Mailbox = GetMailboxPointer ();\r
+ DebugFlag = (UINT32)RShiftU64 (Mailbox->DebugFlag.Uint64 & FlagMask, LowBitSet64 (FlagMask));\r
\r
return DebugFlag;\r
}\r
**/\r
VOID\r
SendDebugMsgPacket (\r
- IN CHAR8 *Buffer,\r
- IN UINTN Length\r
+ IN CHAR8 *Buffer,\r
+ IN UINTN Length\r
)\r
{\r
DEBUG_PACKET_HEADER DebugHeader;\r
DEBUG_PORT_HANDLE Handle;\r
\r
- Handle = GetDebugPortHandle();\r
+ Handle = GetDebugPortHandle ();\r
\r
DebugHeader.StartSymbol = DEBUG_STARTING_SYMBOL_NORMAL;\r
DebugHeader.Command = DEBUG_COMMAND_PRINT_MESSAGE;\r
- DebugHeader.Length = sizeof (DEBUG_PACKET_HEADER) + (UINT8) Length;\r
+ DebugHeader.Length = sizeof (DEBUG_PACKET_HEADER) + (UINT8)Length;\r
DebugHeader.SequenceNo = 0xEE;\r
DebugHeader.Crc = 0;\r
DebugHeader.Crc = CalculateCrc16 (\r
- (UINT8 *)Buffer, Length,\r
+ (UINT8 *)Buffer,\r
+ Length,\r
CalculateCrc16 ((UINT8 *)&DebugHeader, sizeof (DEBUG_PACKET_HEADER), 0)\r
);\r
\r
VOID\r
EFIAPI\r
DebugAgentMsgPrint (\r
- IN UINT8 ErrorLevel,\r
- IN CHAR8 *Format,\r
+ IN UINT8 ErrorLevel,\r
+ IN CHAR8 *Format,\r
...\r
)\r
{\r
- CHAR8 Buffer[DEBUG_DATA_MAXIMUM_REAL_DATA];\r
- VA_LIST Marker;\r
+ CHAR8 Buffer[DEBUG_DATA_MAXIMUM_REAL_DATA];\r
+ VA_LIST Marker;\r
\r
//\r
// Check driver debug mask value and global mask\r
VOID\r
EFIAPI\r
DebugAgentDataMsgPrint (\r
- IN UINT8 ErrorLevel,\r
- IN BOOLEAN IsSend,\r
- IN UINT8 *Data,\r
- IN UINT8 Length\r
+ IN UINT8 ErrorLevel,\r
+ IN BOOLEAN IsSend,\r
+ IN UINT8 *Data,\r
+ IN UINT8 Length\r
)\r
{\r
- CHAR8 Buffer[DEBUG_DATA_MAXIMUM_REAL_DATA];\r
- CHAR8 *DestBuffer;\r
- UINTN Index;\r
+ CHAR8 Buffer[DEBUG_DATA_MAXIMUM_REAL_DATA];\r
+ CHAR8 *DestBuffer;\r
+ UINTN Index;\r
\r
//\r
// Check driver debug mask value and global mask\r
SendDebugMsgPacket (Buffer, DestBuffer - Buffer);\r
DestBuffer = Buffer;\r
}\r
+\r
DestBuffer += AsciiSPrint (DestBuffer, DEBUG_DATA_MAXIMUM_REAL_DATA - (DestBuffer - Buffer), "%02x ", Data[Index]);\r
- Index ++;\r
+ Index++;\r
if (Index >= Length) {\r
//\r
// The last character of debug message has been formatted in buffer\r
//\r
- DestBuffer += AsciiSPrint(DestBuffer, DEBUG_DATA_MAXIMUM_REAL_DATA - (DestBuffer - Buffer), "]\n");\r
+ DestBuffer += AsciiSPrint (DestBuffer, DEBUG_DATA_MAXIMUM_REAL_DATA - (DestBuffer - Buffer), "]\n");\r
SendDebugMsgPacket (Buffer, DestBuffer - Buffer);\r
break;\r
}\r
**/\r
EFI_STATUS\r
ReadRemainingBreakPacket (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN OUT DEBUG_PACKET_HEADER *DebugHeader\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN OUT DEBUG_PACKET_HEADER *DebugHeader\r
)\r
{\r
- UINT16 Crc;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
+ UINT16 Crc;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
\r
//\r
// Has received start symbol, try to read the rest part\r
return EFI_TIMEOUT;\r
}\r
\r
- Crc = DebugHeader->Crc;\r
+ Crc = DebugHeader->Crc;\r
DebugHeader->Crc = 0;\r
if (CalculateCrc16 ((UINT8 *)DebugHeader, DebugHeader->Length, 0) != Crc) {\r
- DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "Debug Timer CRC (%x) against (%x)\n", Crc, CalculateCrc16 ((UINT8 *) &DebugHeader, DebugHeader->Length, 0));\r
+ DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "Debug Timer CRC (%x) against (%x)\n", Crc, CalculateCrc16 ((UINT8 *)&DebugHeader, DebugHeader->Length, 0));\r
DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, FALSE, (UINT8 *)DebugHeader, DebugHeader->Length);\r
return EFI_CRC_ERROR;\r
}\r
- Mailbox = GetMailboxPointer();\r
+\r
+ Mailbox = GetMailboxPointer ();\r
if (IS_REQUEST (DebugHeader)) {\r
- if (DebugHeader->SequenceNo == (UINT8) (Mailbox->HostSequenceNo + 1)) {\r
+ if (DebugHeader->SequenceNo == (UINT8)(Mailbox->HostSequenceNo + 1)) {\r
//\r
// Only updagte HostSequenceNo for new command packet\r
//\r
UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, DebugHeader->SequenceNo);\r
return EFI_SUCCESS;\r
}\r
+\r
if (DebugHeader->SequenceNo == Mailbox->HostSequenceNo) {\r
return EFI_SUCCESS;\r
}\r
VOID\r
)\r
{\r
- return (BOOLEAN) (GetDebugFlag (DEBUG_AGENT_FLAG_HOST_ATTACHED) == 1);\r
+ return (BOOLEAN)(GetDebugFlag (DEBUG_AGENT_FLAG_HOST_ATTACHED) == 1);\r
}\r
\r
/**\r
**/\r
VOID\r
SetHostAttached (\r
- IN BOOLEAN Attached\r
+ IN BOOLEAN Attached\r
)\r
{\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "Attach status is %d\n", Attached);\r
IN DEBUG_DATA_SET_DEBUG_SETTING *DebugSetting\r
)\r
{\r
- RETURN_STATUS Status;\r
+ RETURN_STATUS Status;\r
\r
Status = RETURN_SUCCESS;\r
switch (DebugSetting->Key) {\r
- case DEBUG_AGENT_SETTING_SMM_ENTRY_BREAK:\r
- SetDebugFlag (DEBUG_AGENT_FLAG_BREAK_ON_NEXT_SMI, DebugSetting->Value);\r
- break;\r
- case DEBUG_AGENT_SETTING_PRINT_ERROR_LEVEL:\r
- SetDebugFlag (DEBUG_AGENT_FLAG_PRINT_ERROR_LEVEL, DebugSetting->Value);\r
- break;\r
- case DEBUG_AGENT_SETTING_BOOT_SCRIPT_ENTRY_BREAK:\r
- SetDebugFlag (DEBUG_AGENT_FLAG_BREAK_BOOT_SCRIPT, DebugSetting->Value);\r
- break;\r
- default:\r
- Status = RETURN_UNSUPPORTED;\r
+ case DEBUG_AGENT_SETTING_SMM_ENTRY_BREAK:\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_BREAK_ON_NEXT_SMI, DebugSetting->Value);\r
+ break;\r
+ case DEBUG_AGENT_SETTING_PRINT_ERROR_LEVEL:\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_PRINT_ERROR_LEVEL, DebugSetting->Value);\r
+ break;\r
+ case DEBUG_AGENT_SETTING_BOOT_SCRIPT_ENTRY_BREAK:\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_BREAK_BOOT_SCRIPT, DebugSetting->Value);\r
+ break;\r
+ default:\r
+ Status = RETURN_UNSUPPORTED;\r
}\r
+\r
return Status;\r
}\r
\r
**/\r
VOID\r
CommandGo (\r
- IN DEBUG_CPU_CONTEXT *CpuContext\r
+ IN DEBUG_CPU_CONTEXT *CpuContext\r
)\r
{\r
- IA32_EFLAGS32 *Eflags;\r
+ IA32_EFLAGS32 *Eflags;\r
\r
- Eflags = (IA32_EFLAGS32 *) &CpuContext->Eflags;\r
+ Eflags = (IA32_EFLAGS32 *)&CpuContext->Eflags;\r
Eflags->Bits.TF = 0;\r
Eflags->Bits.RF = 1;\r
}\r
**/\r
VOID\r
CommandStepping (\r
- IN DEBUG_CPU_CONTEXT *CpuContext\r
+ IN DEBUG_CPU_CONTEXT *CpuContext\r
)\r
{\r
- IA32_EFLAGS32 *Eflags;\r
+ IA32_EFLAGS32 *Eflags;\r
\r
- Eflags = (IA32_EFLAGS32 *) &CpuContext->Eflags;\r
+ Eflags = (IA32_EFLAGS32 *)&CpuContext->Eflags;\r
Eflags->Bits.TF = 1;\r
Eflags->Bits.RF = 1;\r
//\r
**/\r
VOID\r
CommandSteppingCleanup (\r
- IN DEBUG_CPU_CONTEXT *CpuContext\r
+ IN DEBUG_CPU_CONTEXT *CpuContext\r
)\r
{\r
- IA32_EFLAGS32 *Eflags;\r
+ IA32_EFLAGS32 *Eflags;\r
\r
- Eflags = (IA32_EFLAGS32 *) &CpuContext->Eflags;\r
+ Eflags = (IA32_EFLAGS32 *)&CpuContext->Eflags;\r
//\r
// Restore EFLAGS.IF\r
//\r
IN DEBUG_DATA_SET_HW_BREAKPOINT *SetHwBreakpoint\r
)\r
{\r
- UINT8 RegisterIndex;\r
- UINTN Dr7Value;\r
+ UINT8 RegisterIndex;\r
+ UINTN Dr7Value;\r
\r
RegisterIndex = SetHwBreakpoint->Type.Index;\r
\r
//\r
// Set debug address\r
//\r
- * ((UINTN *) &CpuContext->Dr0 + RegisterIndex) = (UINTN) SetHwBreakpoint->Address;\r
+ *((UINTN *)&CpuContext->Dr0 + RegisterIndex) = (UINTN)SetHwBreakpoint->Address;\r
\r
Dr7Value = CpuContext->Dr7;\r
\r
//\r
// Enable Gx, Lx\r
//\r
- Dr7Value |= (UINTN) (0x3 << (RegisterIndex * 2));\r
+ Dr7Value |= (UINTN)(0x3 << (RegisterIndex * 2));\r
//\r
// Set RWx and Lenx\r
//\r
- Dr7Value &= (UINTN) (~(0xf << (16 + RegisterIndex * 4)));\r
- Dr7Value |= (UINTN) ((SetHwBreakpoint->Type.Length << 2) | SetHwBreakpoint->Type.Access) << (16 + RegisterIndex * 4);\r
+ Dr7Value &= (UINTN)(~(0xf << (16 + RegisterIndex * 4)));\r
+ Dr7Value |= (UINTN)((SetHwBreakpoint->Type.Length << 2) | SetHwBreakpoint->Type.Access) << (16 + RegisterIndex * 4);\r
//\r
// Enable GE, LE\r
//\r
**/\r
VOID\r
ClearDebugRegister (\r
- IN DEBUG_CPU_CONTEXT *CpuContext,\r
- IN DEBUG_DATA_CLEAR_HW_BREAKPOINT *ClearHwBreakpoint\r
+ IN DEBUG_CPU_CONTEXT *CpuContext,\r
+ IN DEBUG_DATA_CLEAR_HW_BREAKPOINT *ClearHwBreakpoint\r
)\r
{\r
if ((ClearHwBreakpoint->IndexMask & BIT0) != 0) {\r
- CpuContext->Dr0 = 0;\r
+ CpuContext->Dr0 = 0;\r
CpuContext->Dr7 &= (UINTN)(~(0x3 << 0));\r
}\r
+\r
if ((ClearHwBreakpoint->IndexMask & BIT1) != 0) {\r
- CpuContext->Dr1 = 0;\r
+ CpuContext->Dr1 = 0;\r
CpuContext->Dr7 &= (UINTN)(~(0x3 << 2));\r
}\r
+\r
if ((ClearHwBreakpoint->IndexMask & BIT2) != 0) {\r
- CpuContext->Dr2 = 0;\r
+ CpuContext->Dr2 = 0;\r
CpuContext->Dr7 &= (UINTN)(~(0x3 << 4));\r
}\r
+\r
if ((ClearHwBreakpoint->IndexMask & BIT3) != 0) {\r
- CpuContext->Dr3 = 0;\r
+ CpuContext->Dr3 = 0;\r
CpuContext->Dr7 &= (UINTN)(~(0x3 << 6));\r
}\r
}\r
\r
-\r
/**\r
Return the offset of FP / MMX / XMM registers in the FPU saved state by register index.\r
\r
**/\r
UINT16\r
ArchReadFxStatOffset (\r
- IN UINT8 Index,\r
- OUT UINT8 *Width\r
+ IN UINT8 Index,\r
+ OUT UINT8 *Width\r
)\r
{\r
if (Index < SOFT_DEBUGGER_REGISTER_ST0) {\r
switch (Index) {\r
- case SOFT_DEBUGGER_REGISTER_FP_FCW:\r
- *Width = (UINT8) sizeof (UINT16);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Fcw);\r
+ case SOFT_DEBUGGER_REGISTER_FP_FCW:\r
+ *Width = (UINT8)sizeof (UINT16);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Fcw);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_FSW:\r
- *Width = (UINT8) sizeof (UINT16);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Fsw);\r
+ case SOFT_DEBUGGER_REGISTER_FP_FSW:\r
+ *Width = (UINT8)sizeof (UINT16);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Fsw);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_FTW:\r
- *Width = (UINT8) sizeof (UINT16);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Ftw);\r
+ case SOFT_DEBUGGER_REGISTER_FP_FTW:\r
+ *Width = (UINT8)sizeof (UINT16);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Ftw);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_OPCODE:\r
- *Width = (UINT8) sizeof (UINT16);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Opcode);\r
+ case SOFT_DEBUGGER_REGISTER_FP_OPCODE:\r
+ *Width = (UINT8)sizeof (UINT16);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Opcode);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_EIP:\r
- *Width = (UINT8) sizeof (UINT32);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Eip);\r
+ case SOFT_DEBUGGER_REGISTER_FP_EIP:\r
+ *Width = (UINT8)sizeof (UINT32);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Eip);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_CS:\r
- *Width = (UINT8) sizeof (UINT16);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Cs);\r
+ case SOFT_DEBUGGER_REGISTER_FP_CS:\r
+ *Width = (UINT8)sizeof (UINT16);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Cs);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_DATAOFFSET:\r
- *Width = (UINT8) sizeof (UINT32);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, DataOffset);\r
+ case SOFT_DEBUGGER_REGISTER_FP_DATAOFFSET:\r
+ *Width = (UINT8)sizeof (UINT32);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, DataOffset);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_DS:\r
- *Width = (UINT8) sizeof (UINT16);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Ds);\r
+ case SOFT_DEBUGGER_REGISTER_FP_DS:\r
+ *Width = (UINT8)sizeof (UINT16);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Ds);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_MXCSR:\r
- *Width = (UINT8) sizeof (UINT32);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Mxcsr);\r
+ case SOFT_DEBUGGER_REGISTER_FP_MXCSR:\r
+ *Width = (UINT8)sizeof (UINT32);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Mxcsr);\r
\r
- case SOFT_DEBUGGER_REGISTER_FP_MXCSR_MASK:\r
- *Width = (UINT8) sizeof (UINT32);\r
- return OFFSET_OF(DEBUG_DATA_FX_SAVE_STATE, Mxcsr_Mask);\r
+ case SOFT_DEBUGGER_REGISTER_FP_MXCSR_MASK:\r
+ *Width = (UINT8)sizeof (UINT32);\r
+ return OFFSET_OF (DEBUG_DATA_FX_SAVE_STATE, Mxcsr_Mask);\r
}\r
}\r
\r
**/\r
UINT8 *\r
ArchReadRegisterBuffer (\r
- IN DEBUG_CPU_CONTEXT *CpuContext,\r
- IN UINT8 Index,\r
- OUT UINT8 *Width\r
+ IN DEBUG_CPU_CONTEXT *CpuContext,\r
+ IN UINT8 Index,\r
+ OUT UINT8 *Width\r
)\r
{\r
- UINT8 *Buffer;\r
+ UINT8 *Buffer;\r
\r
if (Index < SOFT_DEBUGGER_REGISTER_FP_BASE) {\r
- Buffer = (UINT8 *) CpuContext + OFFSET_OF (DEBUG_CPU_CONTEXT, Dr0) + Index * sizeof (UINTN);\r
- *Width = (UINT8) sizeof (UINTN);\r
+ Buffer = (UINT8 *)CpuContext + OFFSET_OF (DEBUG_CPU_CONTEXT, Dr0) + Index * sizeof (UINTN);\r
+ *Width = (UINT8)sizeof (UINTN);\r
} else {\r
//\r
// FPU/MMX/XMM registers\r
//\r
- Buffer = (UINT8 *) CpuContext + OFFSET_OF (DEBUG_CPU_CONTEXT, FxSaveState) + ArchReadFxStatOffset (Index, Width);\r
+ Buffer = (UINT8 *)CpuContext + OFFSET_OF (DEBUG_CPU_CONTEXT, FxSaveState) + ArchReadFxStatOffset (Index, Width);\r
}\r
\r
return Buffer;\r
**/\r
VOID\r
SendPacketWithoutData (\r
- IN UINT8 CommandType,\r
- IN UINT8 SequenceNo\r
+ IN UINT8 CommandType,\r
+ IN UINT8 SequenceNo\r
)\r
{\r
- DEBUG_PACKET_HEADER DebugHeader;\r
- DEBUG_PORT_HANDLE Handle;\r
+ DEBUG_PACKET_HEADER DebugHeader;\r
+ DEBUG_PORT_HANDLE Handle;\r
\r
- Handle = GetDebugPortHandle();\r
+ Handle = GetDebugPortHandle ();\r
\r
DebugHeader.StartSymbol = DEBUG_STARTING_SYMBOL_NORMAL;\r
DebugHeader.Command = CommandType;\r
DebugHeader.Crc = 0;\r
DebugHeader.Crc = CalculateCrc16 ((UINT8 *)&DebugHeader, sizeof (DEBUG_PACKET_HEADER), 0);\r
\r
- DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, TRUE, (UINT8 *) &DebugHeader, DebugHeader.Length);\r
- DebugPortWriteBuffer (Handle, (UINT8 *) &DebugHeader, DebugHeader.Length);\r
+ DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, TRUE, (UINT8 *)&DebugHeader, DebugHeader.Length);\r
+ DebugPortWriteBuffer (Handle, (UINT8 *)&DebugHeader, DebugHeader.Length);\r
}\r
\r
/**\r
**/\r
VOID\r
SendAckPacket (\r
- IN UINT8 AckCommand\r
+ IN UINT8 AckCommand\r
)\r
{\r
- UINT8 SequenceNo;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
+ UINT8 SequenceNo;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
\r
if (AckCommand != DEBUG_COMMAND_OK) {\r
//\r
//\r
DebugAgentMsgPrint (DEBUG_AGENT_ERROR, "Send ACK(%d)\n", AckCommand);\r
}\r
- Mailbox = GetMailboxPointer();\r
+\r
+ Mailbox = GetMailboxPointer ();\r
SequenceNo = Mailbox->HostSequenceNo;\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "SendAckPacket: SequenceNo = %x\n", SequenceNo);\r
SendPacketWithoutData (AckCommand, SequenceNo);\r
**/\r
UINT8\r
DecompressDataInPlace (\r
- IN OUT UINT8 *Data,\r
- IN UINTN Length\r
+ IN OUT UINT8 *Data,\r
+ IN UINTN Length\r
)\r
{\r
- UINTN Index;\r
- UINT16 LastChar;\r
- UINTN LastCharCount;\r
- UINT8 CurrentChar;\r
+ UINTN Index;\r
+ UINT16 LastChar;\r
+ UINTN LastCharCount;\r
+ UINT8 CurrentChar;\r
\r
- LastChar = (UINT16) -1;\r
+ LastChar = (UINT16)-1;\r
LastCharCount = 0;\r
for (Index = 0; Index < Length; Index++) {\r
CurrentChar = Data[Index];\r
if (LastCharCount == 2) {\r
LastCharCount = 0;\r
CopyMem (&Data[Index + CurrentChar], &Data[Index + 1], Length - Index - 1);\r
- SetMem (&Data[Index], CurrentChar, (UINT8) LastChar);\r
- LastChar = (UINT16) -1;\r
- Index += CurrentChar - 1;\r
- Length += CurrentChar - 1;\r
+ SetMem (&Data[Index], CurrentChar, (UINT8)LastChar);\r
+ LastChar = (UINT16)-1;\r
+ Index += CurrentChar - 1;\r
+ Length += CurrentChar - 1;\r
} else {\r
if (LastChar != CurrentChar) {\r
LastCharCount = 0;\r
}\r
+\r
LastCharCount++;\r
LastChar = CurrentChar;\r
}\r
\r
ASSERT (Length <= DEBUG_DATA_MAXIMUM_REAL_DATA);\r
\r
- return (UINT8) Length;\r
+ return (UINT8)Length;\r
}\r
\r
/**\r
**/\r
RETURN_STATUS\r
ReceivePacket (\r
- OUT UINT8 *InputPacket,\r
- OUT BOOLEAN *BreakReceived,\r
- OUT BOOLEAN *IncompatibilityFlag OPTIONAL,\r
- IN UINTN Timeout,\r
- IN BOOLEAN SkipStartSymbol\r
+ OUT UINT8 *InputPacket,\r
+ OUT BOOLEAN *BreakReceived,\r
+ OUT BOOLEAN *IncompatibilityFlag OPTIONAL,\r
+ IN UINTN Timeout,\r
+ IN BOOLEAN SkipStartSymbol\r
)\r
{\r
- DEBUG_PACKET_HEADER *DebugHeader;\r
- UINTN Received;\r
- DEBUG_PORT_HANDLE Handle;\r
- UINT16 Crc;\r
- UINTN TimeoutForStartSymbol;\r
+ DEBUG_PACKET_HEADER *DebugHeader;\r
+ UINTN Received;\r
+ DEBUG_PORT_HANDLE Handle;\r
+ UINT16 Crc;\r
+ UINTN TimeoutForStartSymbol;\r
\r
- Handle = GetDebugPortHandle();\r
+ Handle = GetDebugPortHandle ();\r
if (SkipStartSymbol) {\r
TimeoutForStartSymbol = 0;\r
} else {\r
TimeoutForStartSymbol = Timeout;\r
}\r
\r
- DebugHeader = (DEBUG_PACKET_HEADER *) InputPacket;\r
+ DebugHeader = (DEBUG_PACKET_HEADER *)InputPacket;\r
while (TRUE) {\r
//\r
// Find the valid start symbol\r
//\r
Received = DebugAgentReadBuffer (\r
Handle,\r
- (UINT8 *) DebugHeader + OFFSET_OF (DEBUG_PACKET_HEADER, Command),\r
+ (UINT8 *)DebugHeader + OFFSET_OF (DEBUG_PACKET_HEADER, Command),\r
OFFSET_OF (DEBUG_PACKET_HEADER, Length) + sizeof (DebugHeader->Length) - sizeof (DebugHeader->StartSymbol),\r
Timeout\r
);\r
DebugAgentMsgPrint (DEBUG_AGENT_ERROR, "DebugAgentReadBuffer(Command) timeout\n");\r
return RETURN_TIMEOUT;\r
}\r
+\r
if (DebugHeader->Length < sizeof (DEBUG_PACKET_HEADER)) {\r
if (IncompatibilityFlag != NULL) {\r
//\r
//\r
// Read the payload data include the CRC field\r
//\r
- Received = DebugAgentReadBuffer (Handle, &DebugHeader->SequenceNo, (UINT8) (DebugHeader->Length - OFFSET_OF (DEBUG_PACKET_HEADER, SequenceNo)), Timeout);\r
+ Received = DebugAgentReadBuffer (Handle, &DebugHeader->SequenceNo, (UINT8)(DebugHeader->Length - OFFSET_OF (DEBUG_PACKET_HEADER, SequenceNo)), Timeout);\r
if (Received == 0) {\r
DebugAgentMsgPrint (DEBUG_AGENT_ERROR, "DebugAgentReadBuffer(SequenceNo) timeout\n");\r
return RETURN_TIMEOUT;\r
}\r
+\r
//\r
// Calculate the CRC of Debug Packet\r
//\r
- Crc = DebugHeader->Crc;\r
+ Crc = DebugHeader->Crc;\r
DebugHeader->Crc = 0;\r
- if (Crc == CalculateCrc16 ((UINT8 *) DebugHeader, DebugHeader->Length, 0)) {\r
+ if (Crc == CalculateCrc16 ((UINT8 *)DebugHeader, DebugHeader->Length, 0)) {\r
break;\r
}\r
+\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "CRC Error (received CRC is %x)\n", Crc);\r
- DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, FALSE, (UINT8 *) DebugHeader, DebugHeader->Length);\r
+ DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, FALSE, (UINT8 *)DebugHeader, DebugHeader->Length);\r
}\r
}\r
\r
- DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, FALSE, (UINT8 *) DebugHeader, DebugHeader->Length);\r
+ DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, FALSE, (UINT8 *)DebugHeader, DebugHeader->Length);\r
\r
if (DebugHeader->StartSymbol == DEBUG_STARTING_SYMBOL_COMPRESS) {\r
DebugHeader->StartSymbol = DEBUG_STARTING_SYMBOL_NORMAL;\r
DebugHeader->Length = DecompressDataInPlace (\r
- (UINT8 *) (DebugHeader + 1), DebugHeader->Length - sizeof (DEBUG_PACKET_HEADER)\r
+ (UINT8 *)(DebugHeader + 1),\r
+ DebugHeader->Length - sizeof (DEBUG_PACKET_HEADER)\r
) + sizeof (DEBUG_PACKET_HEADER);\r
}\r
+\r
return RETURN_SUCCESS;\r
}\r
\r
**/\r
RETURN_STATUS\r
SendCommandAndWaitForAckOK (\r
- IN UINT8 Command,\r
- IN UINTN Timeout,\r
- OUT BOOLEAN *BreakReceived OPTIONAL,\r
- OUT BOOLEAN *IncompatibilityFlag OPTIONAL\r
+ IN UINT8 Command,\r
+ IN UINTN Timeout,\r
+ OUT BOOLEAN *BreakReceived OPTIONAL,\r
+ OUT BOOLEAN *IncompatibilityFlag OPTIONAL\r
)\r
{\r
- RETURN_STATUS Status;\r
- UINT8 InputPacketBuffer[DEBUG_DATA_UPPER_LIMIT];\r
- DEBUG_PACKET_HEADER *DebugHeader;\r
- UINT8 SequenceNo;\r
- UINT8 HostSequenceNo;\r
- UINT8 RetryCount;\r
+ RETURN_STATUS Status;\r
+ UINT8 InputPacketBuffer[DEBUG_DATA_UPPER_LIMIT];\r
+ DEBUG_PACKET_HEADER *DebugHeader;\r
+ UINT8 SequenceNo;\r
+ UINT8 HostSequenceNo;\r
+ UINT8 RetryCount;\r
\r
RetryCount = 3;\r
- DebugHeader = (DEBUG_PACKET_HEADER *) InputPacketBuffer;\r
+ DebugHeader = (DEBUG_PACKET_HEADER *)InputPacketBuffer;\r
Status = RETURN_TIMEOUT;\r
while (RetryCount > 0) {\r
- SequenceNo = GetMailboxPointer()->SequenceNo;\r
- HostSequenceNo = GetMailboxPointer()->HostSequenceNo;\r
+ SequenceNo = GetMailboxPointer ()->SequenceNo;\r
+ HostSequenceNo = GetMailboxPointer ()->HostSequenceNo;\r
SendPacketWithoutData (Command, SequenceNo);\r
- Status = ReceivePacket ((UINT8 *) DebugHeader, BreakReceived, IncompatibilityFlag, Timeout, FALSE);\r
+ Status = ReceivePacket ((UINT8 *)DebugHeader, BreakReceived, IncompatibilityFlag, Timeout, FALSE);\r
if (Status == RETURN_TIMEOUT) {\r
if (Command == DEBUG_COMMAND_INIT_BREAK) {\r
RetryCount--;\r
} else {\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "TARGET: Timeout when waiting for ACK packet.\n");\r
}\r
+\r
continue;\r
}\r
+\r
ASSERT_EFI_ERROR (Status);\r
//\r
// Status == RETURN_SUCCESS\r
//\r
- if (DebugHeader->Command == DEBUG_COMMAND_OK && DebugHeader->SequenceNo == SequenceNo) {\r
+ if ((DebugHeader->Command == DEBUG_COMMAND_OK) && (DebugHeader->SequenceNo == SequenceNo)) {\r
//\r
// Received Ack OK\r
//\r
- UpdateMailboxContent (GetMailboxPointer(), DEBUG_MAILBOX_SEQUENCE_NO_INDEX, ++SequenceNo);\r
+ UpdateMailboxContent (GetMailboxPointer (), DEBUG_MAILBOX_SEQUENCE_NO_INDEX, ++SequenceNo);\r
return Status;\r
}\r
- if (DebugHeader->Command == DEBUG_COMMAND_GO && (DebugHeader->SequenceNo == HostSequenceNo || Command == DEBUG_COMMAND_INIT_BREAK)) {\r
+\r
+ if ((DebugHeader->Command == DEBUG_COMMAND_GO) && ((DebugHeader->SequenceNo == HostSequenceNo) || (Command == DEBUG_COMMAND_INIT_BREAK))) {\r
//\r
// Received Old GO\r
//\r
if (Command == DEBUG_COMMAND_INIT_BREAK) {\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "TARGET: Receive GO() in last boot\n");\r
}\r
+\r
SendPacketWithoutData (DEBUG_COMMAND_OK, DebugHeader->SequenceNo);\r
}\r
}\r
**/\r
UINT8\r
GetBreakCause (\r
- IN UINTN Vector,\r
- IN DEBUG_CPU_CONTEXT *CpuContext\r
+ IN UINTN Vector,\r
+ IN DEBUG_CPU_CONTEXT *CpuContext\r
)\r
{\r
- UINT8 Cause;\r
+ UINT8 Cause;\r
\r
Cause = DEBUG_DATA_BREAK_CAUSE_UNKNOWN;\r
\r
switch (Vector) {\r
- case DEBUG_INT1_VECTOR:\r
- case DEBUG_INT3_VECTOR:\r
+ case DEBUG_INT1_VECTOR:\r
+ case DEBUG_INT3_VECTOR:\r
\r
- if (Vector == DEBUG_INT1_VECTOR) {\r
- //\r
- // INT 1\r
- //\r
- if ((CpuContext->Dr6 & BIT14) != 0) {\r
- Cause = DEBUG_DATA_BREAK_CAUSE_STEPPING;\r
+ if (Vector == DEBUG_INT1_VECTOR) {\r
//\r
- // DR6.BIT14 Indicates (when set) that the debug exception was\r
- // triggered by the single step execution mode.\r
- // The single-step mode is the highest priority debug exception.\r
- // This is single step, no need to check DR0, to ensure single step\r
- // work in PeCoffExtraActionLib (right after triggering a breakpoint\r
- // to report image load/unload).\r
+ // INT 1\r
//\r
- return Cause;\r
-\r
+ if ((CpuContext->Dr6 & BIT14) != 0) {\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_STEPPING;\r
+ //\r
+ // DR6.BIT14 Indicates (when set) that the debug exception was\r
+ // triggered by the single step execution mode.\r
+ // The single-step mode is the highest priority debug exception.\r
+ // This is single step, no need to check DR0, to ensure single step\r
+ // work in PeCoffExtraActionLib (right after triggering a breakpoint\r
+ // to report image load/unload).\r
+ //\r
+ return Cause;\r
+ } else {\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_HW_BREAKPOINT;\r
+ }\r
} else {\r
- Cause = DEBUG_DATA_BREAK_CAUSE_HW_BREAKPOINT;\r
+ //\r
+ // INT 3\r
+ //\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_SW_BREAKPOINT;\r
}\r
- } else {\r
- //\r
- // INT 3\r
- //\r
- Cause = DEBUG_DATA_BREAK_CAUSE_SW_BREAKPOINT;\r
- }\r
\r
- switch (CpuContext->Dr0) {\r
- case IMAGE_LOAD_SIGNATURE:\r
- case IMAGE_UNLOAD_SIGNATURE:\r
+ switch (CpuContext->Dr0) {\r
+ case IMAGE_LOAD_SIGNATURE:\r
+ case IMAGE_UNLOAD_SIGNATURE:\r
\r
- if (CpuContext->Dr3 == IO_PORT_BREAKPOINT_ADDRESS) {\r
+ if (CpuContext->Dr3 == IO_PORT_BREAKPOINT_ADDRESS) {\r
+ Cause = (UINT8)((CpuContext->Dr0 == IMAGE_LOAD_SIGNATURE) ?\r
+ DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD : DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD);\r
+ }\r
\r
- Cause = (UINT8) ((CpuContext->Dr0 == IMAGE_LOAD_SIGNATURE) ?\r
- DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD : DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD);\r
- }\r
- break;\r
+ break;\r
\r
- case SOFT_INTERRUPT_SIGNATURE:\r
+ case SOFT_INTERRUPT_SIGNATURE:\r
\r
- if (CpuContext->Dr1 == MEMORY_READY_SIGNATURE) {\r
- Cause = DEBUG_DATA_BREAK_CAUSE_MEMORY_READY;\r
- CpuContext->Dr0 = 0;\r
- } else if (CpuContext->Dr1 == SYSTEM_RESET_SIGNATURE) {\r
- Cause = DEBUG_DATA_BREAK_CAUSE_SYSTEM_RESET;\r
- CpuContext->Dr0 = 0;\r
- }\r
- break;\r
+ if (CpuContext->Dr1 == MEMORY_READY_SIGNATURE) {\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_MEMORY_READY;\r
+ CpuContext->Dr0 = 0;\r
+ } else if (CpuContext->Dr1 == SYSTEM_RESET_SIGNATURE) {\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_SYSTEM_RESET;\r
+ CpuContext->Dr0 = 0;\r
+ }\r
\r
- default:\r
- break;\r
+ break;\r
\r
- }\r
+ default:\r
+ break;\r
+ }\r
\r
- break;\r
+ break;\r
\r
- case DEBUG_TIMER_VECTOR:\r
- Cause = DEBUG_DATA_BREAK_CAUSE_USER_HALT;\r
- break;\r
+ case DEBUG_TIMER_VECTOR:\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_USER_HALT;\r
+ break;\r
\r
- default:\r
- if (Vector < 20) {\r
- if (GetDebugFlag (DEBUG_AGENT_FLAG_STEPPING) == 1) {\r
- //\r
- // If stepping command is executing\r
- //\r
- Cause = DEBUG_DATA_BREAK_CAUSE_STEPPING;\r
- } else {\r
- Cause = DEBUG_DATA_BREAK_CAUSE_EXCEPTION;\r
+ default:\r
+ if (Vector < 20) {\r
+ if (GetDebugFlag (DEBUG_AGENT_FLAG_STEPPING) == 1) {\r
+ //\r
+ // If stepping command is executing\r
+ //\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_STEPPING;\r
+ } else {\r
+ Cause = DEBUG_DATA_BREAK_CAUSE_EXCEPTION;\r
+ }\r
}\r
- }\r
- break;\r
+\r
+ break;\r
}\r
\r
return Cause;\r
**/\r
VOID\r
CopyMemByWidth (\r
- OUT UINT8 *Dest,\r
- IN UINT8 *Src,\r
- IN UINT16 Count,\r
- IN UINT8 Width\r
+ OUT UINT8 *Dest,\r
+ IN UINT8 *Src,\r
+ IN UINT16 Count,\r
+ IN UINT8 Width\r
)\r
{\r
- UINT8 *Destination;\r
- UINT8 *Source;\r
- INT8 Step;\r
+ UINT8 *Destination;\r
+ UINT8 *Source;\r
+ INT8 Step;\r
\r
if (Src > Dest) {\r
Destination = Dest;\r
\r
while (Count-- != 0) {\r
switch (Width) {\r
- case 1:\r
- *(UINT8 *) Destination = MmioRead8 ((UINTN) Source);\r
- break;\r
- case 2:\r
- *(UINT16 *) Destination = MmioRead16 ((UINTN) Source);\r
- break;\r
- case 4:\r
- *(UINT32 *) Destination = MmioRead32 ((UINTN) Source);\r
- break;\r
- case 8:\r
- *(UINT64 *) Destination = MmioRead64 ((UINTN) Source);\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
+ case 1:\r
+ *(UINT8 *)Destination = MmioRead8 ((UINTN)Source);\r
+ break;\r
+ case 2:\r
+ *(UINT16 *)Destination = MmioRead16 ((UINTN)Source);\r
+ break;\r
+ case 4:\r
+ *(UINT32 *)Destination = MmioRead32 ((UINTN)Source);\r
+ break;\r
+ case 8:\r
+ *(UINT64 *)Destination = MmioRead64 ((UINTN)Source);\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
}\r
+\r
Source += Step;\r
Destination += Step;\r
}\r
**/\r
VOID\r
CompressData (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN UINT8 *Data,\r
- IN UINT8 Length,\r
- IN BOOLEAN Send,\r
- OUT UINTN *CompressedLength OPTIONAL,\r
- OUT UINT16 *CompressedCrc OPTIONAL\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN UINT8 *Data,\r
+ IN UINT8 Length,\r
+ IN BOOLEAN Send,\r
+ OUT UINTN *CompressedLength OPTIONAL,\r
+ OUT UINT16 *CompressedCrc OPTIONAL\r
)\r
{\r
- UINTN Index;\r
- UINT8 LastChar;\r
- UINT8 LastCharCount;\r
- UINT8 CurrentChar;\r
- UINTN CompressedIndex;\r
+ UINTN Index;\r
+ UINT8 LastChar;\r
+ UINT8 LastCharCount;\r
+ UINT8 CurrentChar;\r
+ UINTN CompressedIndex;\r
\r
ASSERT (Length > 0);\r
LastChar = Data[0] + 1; // Just ensure it's different from the first byte.\r
if (Index < Length) {\r
CurrentChar = Data[Index];\r
} else {\r
- CurrentChar = (UINT8) LastChar + 1; // just ensure it's different from LastChar\r
+ CurrentChar = (UINT8)LastChar + 1; // just ensure it's different from LastChar\r
}\r
+\r
if (LastChar != CurrentChar) {\r
if (LastCharCount == 1) {\r
CompressedIndex++;\r
if (CompressedCrc != NULL) {\r
*CompressedCrc = CalculateCrc16 (&LastChar, 1, *CompressedCrc);\r
}\r
+\r
if (Send) {\r
DebugPortWriteBuffer (Handle, &LastChar, 1);\r
}\r
-\r
} else if (LastCharCount >= 2) {\r
CompressedIndex += 3;\r
- LastCharCount -= 2;\r
+ LastCharCount -= 2;\r
if (CompressedCrc != NULL) {\r
*CompressedCrc = CalculateCrc16 (&LastChar, 1, *CompressedCrc);\r
*CompressedCrc = CalculateCrc16 (&LastChar, 1, *CompressedCrc);\r
*CompressedCrc = CalculateCrc16 (&LastCharCount, 1, *CompressedCrc);\r
}\r
+\r
if (Send) {\r
DebugPortWriteBuffer (Handle, &LastChar, 1);\r
DebugPortWriteBuffer (Handle, &LastChar, 1);\r
DebugPortWriteBuffer (Handle, &LastCharCount, 1);\r
}\r
}\r
+\r
LastCharCount = 0;\r
}\r
+\r
LastCharCount++;\r
LastChar = CurrentChar;\r
}\r
**/\r
RETURN_STATUS\r
ReadMemoryAndSendResponsePacket (\r
- IN UINT8 *Data,\r
- IN UINT16 Count,\r
- IN UINT8 Width,\r
- IN DEBUG_PACKET_HEADER *DebugHeader\r
+ IN UINT8 *Data,\r
+ IN UINT16 Count,\r
+ IN UINT8 Width,\r
+ IN DEBUG_PACKET_HEADER *DebugHeader\r
)\r
{\r
- RETURN_STATUS Status;\r
- BOOLEAN LastPacket;\r
- DEBUG_PORT_HANDLE Handle;\r
- UINT8 SequenceNo;\r
- UINTN RemainingDataSize;\r
- UINT8 CurrentDataSize;\r
- UINTN CompressedDataSize;\r
+ RETURN_STATUS Status;\r
+ BOOLEAN LastPacket;\r
+ DEBUG_PORT_HANDLE Handle;\r
+ UINT8 SequenceNo;\r
+ UINTN RemainingDataSize;\r
+ UINT8 CurrentDataSize;\r
+ UINTN CompressedDataSize;\r
\r
- Handle = GetDebugPortHandle();\r
+ Handle = GetDebugPortHandle ();\r
\r
RemainingDataSize = Count * Width;\r
while (TRUE) {\r
- SequenceNo = GetMailboxPointer()->HostSequenceNo;\r
+ SequenceNo = GetMailboxPointer ()->HostSequenceNo;\r
if (RemainingDataSize <= DEBUG_DATA_MAXIMUM_REAL_DATA) {\r
//\r
// If the remaining data is less one real packet size, this is the last data packet\r
//\r
- CurrentDataSize = (UINT8) RemainingDataSize;\r
- LastPacket = TRUE;\r
+ CurrentDataSize = (UINT8)RemainingDataSize;\r
+ LastPacket = TRUE;\r
DebugHeader->Command = DEBUG_COMMAND_OK;\r
} else {\r
//\r
// Data is too larger to be sent in one packet, calculate the actual data size could\r
// be sent in one Maximum data packet\r
//\r
- CurrentDataSize = (DEBUG_DATA_MAXIMUM_REAL_DATA / Width) * Width;\r
- LastPacket = FALSE;\r
+ CurrentDataSize = (DEBUG_DATA_MAXIMUM_REAL_DATA / Width) * Width;\r
+ LastPacket = FALSE;\r
DebugHeader->Command = DEBUG_COMMAND_IN_PROGRESS;\r
}\r
+\r
//\r
// Construct the rest Debug header\r
//\r
DebugHeader->Length = CurrentDataSize + sizeof (DEBUG_PACKET_HEADER);\r
DebugHeader->SequenceNo = SequenceNo;\r
DebugHeader->Crc = 0;\r
- CopyMemByWidth ((UINT8 *) (DebugHeader + 1), Data, CurrentDataSize / Width, Width);\r
+ CopyMemByWidth ((UINT8 *)(DebugHeader + 1), Data, CurrentDataSize / Width, Width);\r
\r
//\r
// Compression/decompression support was added since revision 0.4.\r
// Revision 0.3 shouldn't compress the packet.\r
//\r
- if (PcdGet32(PcdTransferProtocolRevision) >= DEBUG_AGENT_REVISION_04) {\r
+ if (PcdGet32 (PcdTransferProtocolRevision) >= DEBUG_AGENT_REVISION_04) {\r
//\r
// Get the compressed data size without modifying the packet.\r
//\r
CompressData (\r
Handle,\r
- (UINT8 *) (DebugHeader + 1),\r
+ (UINT8 *)(DebugHeader + 1),\r
CurrentDataSize,\r
FALSE,\r
&CompressedDataSize,\r
} else {\r
CompressedDataSize = CurrentDataSize;\r
}\r
+\r
if (CompressedDataSize < CurrentDataSize) {\r
- DebugHeader->Length = (UINT8) CompressedDataSize + sizeof (DEBUG_PACKET_HEADER);\r
+ DebugHeader->Length = (UINT8)CompressedDataSize + sizeof (DEBUG_PACKET_HEADER);\r
DebugHeader->StartSymbol = DEBUG_STARTING_SYMBOL_COMPRESS;\r
//\r
// Compute the CRC of the packet head without modifying the packet.\r
//\r
- DebugHeader->Crc = CalculateCrc16 ((UINT8 *) DebugHeader, sizeof (DEBUG_PACKET_HEADER), 0);\r
+ DebugHeader->Crc = CalculateCrc16 ((UINT8 *)DebugHeader, sizeof (DEBUG_PACKET_HEADER), 0);\r
CompressData (\r
Handle,\r
- (UINT8 *) (DebugHeader + 1),\r
+ (UINT8 *)(DebugHeader + 1),\r
CurrentDataSize,\r
FALSE,\r
NULL,\r
//\r
// Send out the packet head.\r
//\r
- DebugPortWriteBuffer (Handle, (UINT8 *) DebugHeader, sizeof (DEBUG_PACKET_HEADER));\r
+ DebugPortWriteBuffer (Handle, (UINT8 *)DebugHeader, sizeof (DEBUG_PACKET_HEADER));\r
//\r
// Compress and send out the packet data.\r
//\r
CompressData (\r
Handle,\r
- (UINT8 *) (DebugHeader + 1),\r
+ (UINT8 *)(DebugHeader + 1),\r
CurrentDataSize,\r
TRUE,\r
NULL,\r
NULL\r
);\r
} else {\r
-\r
//\r
// Calculate and fill the checksum, DebugHeader->Crc should be 0 before invoking CalculateCrc16 ()\r
//\r
- DebugHeader->Crc = CalculateCrc16 ((UINT8 *) DebugHeader, DebugHeader->Length, 0);\r
+ DebugHeader->Crc = CalculateCrc16 ((UINT8 *)DebugHeader, DebugHeader->Length, 0);\r
\r
- DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, TRUE, (UINT8 *) DebugHeader, DebugHeader->Length);\r
+ DebugAgentDataMsgPrint (DEBUG_AGENT_VERBOSE, TRUE, (UINT8 *)DebugHeader, DebugHeader->Length);\r
\r
- DebugPortWriteBuffer (Handle, (UINT8 *) DebugHeader, DebugHeader->Length);\r
+ DebugPortWriteBuffer (Handle, (UINT8 *)DebugHeader, DebugHeader->Length);\r
}\r
\r
while (TRUE) {\r
- Status = ReceivePacket ((UINT8 *) DebugHeader, NULL, NULL, READ_PACKET_TIMEOUT, FALSE);\r
+ Status = ReceivePacket ((UINT8 *)DebugHeader, NULL, NULL, READ_PACKET_TIMEOUT, FALSE);\r
if (Status == RETURN_TIMEOUT) {\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "TARGET: Timeout in SendDataResponsePacket()\n");\r
break;\r
}\r
+\r
if ((DebugHeader->Command == DEBUG_COMMAND_OK) && (DebugHeader->SequenceNo == SequenceNo) && LastPacket) {\r
//\r
// If this is the last packet, return RETURN_SUCCESS.\r
//\r
return RETURN_SUCCESS;\r
}\r
- if ((DebugHeader->Command == DEBUG_COMMAND_CONTINUE) && (DebugHeader->SequenceNo == (UINT8) (SequenceNo + 1))) {\r
+\r
+ if ((DebugHeader->Command == DEBUG_COMMAND_CONTINUE) && (DebugHeader->SequenceNo == (UINT8)(SequenceNo + 1))) {\r
//\r
// Calculate the rest data size\r
//\r
Data += CurrentDataSize;\r
RemainingDataSize -= CurrentDataSize;\r
- UpdateMailboxContent (GetMailboxPointer(), DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, DebugHeader->SequenceNo);\r
+ UpdateMailboxContent (GetMailboxPointer (), DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, DebugHeader->SequenceNo);\r
break;\r
}\r
+\r
if (DebugHeader->SequenceNo >= SequenceNo) {\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "TARGET: Received one old or new command(SequenceNo is %x, last SequenceNo is %x)\n", SequenceNo, DebugHeader->SequenceNo);\r
break;\r
**/\r
RETURN_STATUS\r
SendDataResponsePacket (\r
- IN UINT8 *Data,\r
- IN UINT16 DataSize,\r
- IN OUT DEBUG_PACKET_HEADER *DebugHeader\r
+ IN UINT8 *Data,\r
+ IN UINT16 DataSize,\r
+ IN OUT DEBUG_PACKET_HEADER *DebugHeader\r
)\r
{\r
return ReadMemoryAndSendResponsePacket (Data, DataSize, 1, DebugHeader);\r
**/\r
RETURN_STATUS\r
AttachHost (\r
- IN UINT8 BreakCause,\r
- IN UINTN Timeout,\r
- OUT BOOLEAN *BreakReceived\r
+ IN UINT8 BreakCause,\r
+ IN UINTN Timeout,\r
+ OUT BOOLEAN *BreakReceived\r
)\r
{\r
- RETURN_STATUS Status;\r
- DEBUG_PORT_HANDLE Handle;\r
- BOOLEAN IncompatibilityFlag;\r
+ RETURN_STATUS Status;\r
+ DEBUG_PORT_HANDLE Handle;\r
+ BOOLEAN IncompatibilityFlag;\r
\r
IncompatibilityFlag = FALSE;\r
- Handle = GetDebugPortHandle();\r
+ Handle = GetDebugPortHandle ();\r
\r
//\r
// Send init break and wait ack in Timeout\r
//\r
- DebugPortWriteBuffer (Handle, (UINT8 *) mErrorMsgSendInitPacket, AsciiStrLen (mErrorMsgSendInitPacket));\r
+ DebugPortWriteBuffer (Handle, (UINT8 *)mErrorMsgSendInitPacket, AsciiStrLen (mErrorMsgSendInitPacket));\r
if (BreakCause == DEBUG_DATA_BREAK_CAUSE_SYSTEM_RESET) {\r
Status = SendCommandAndWaitForAckOK (DEBUG_COMMAND_INIT_BREAK, Timeout, BreakReceived, &IncompatibilityFlag);\r
} else {\r
Status = SendCommandAndWaitForAckOK (DEBUG_COMMAND_ATTACH_BREAK, Timeout, BreakReceived, &IncompatibilityFlag);\r
}\r
+\r
if (IncompatibilityFlag) {\r
//\r
// If the incompatible Debug Packet received, the HOST should be running transfer protocol before PcdTransferProtocolRevision.\r
// It could be UDK Debugger for Windows v1.1/v1.2 or for Linux v0.8/v1.2.\r
//\r
- DebugPortWriteBuffer (Handle, (UINT8 *) mErrorMsgVersionAlert, AsciiStrLen (mErrorMsgVersionAlert));\r
+ DebugPortWriteBuffer (Handle, (UINT8 *)mErrorMsgVersionAlert, AsciiStrLen (mErrorMsgVersionAlert));\r
CpuDeadLoop ();\r
}\r
\r
if (RETURN_ERROR (Status)) {\r
- DebugPortWriteBuffer (Handle, (UINT8 *) mErrorMsgConnectFail, AsciiStrLen (mErrorMsgConnectFail));\r
+ DebugPortWriteBuffer (Handle, (UINT8 *)mErrorMsgConnectFail, AsciiStrLen (mErrorMsgConnectFail));\r
} else {\r
- DebugPortWriteBuffer (Handle, (UINT8 *) mErrorMsgConnectOK, AsciiStrLen (mErrorMsgConnectOK));\r
+ DebugPortWriteBuffer (Handle, (UINT8 *)mErrorMsgConnectOK, AsciiStrLen (mErrorMsgConnectOK));\r
//\r
// Set Attach flag\r
//\r
SetHostAttached (TRUE);\r
}\r
+\r
return Status;\r
}\r
\r
**/\r
VOID\r
SendBreakPacketToHost (\r
- IN UINT8 BreakCause,\r
- IN UINT32 ProcessorIndex,\r
- OUT BOOLEAN *BreakReceived\r
+ IN UINT8 BreakCause,\r
+ IN UINT32 ProcessorIndex,\r
+ OUT BOOLEAN *BreakReceived\r
)\r
{\r
- UINT8 InputCharacter;\r
- DEBUG_PORT_HANDLE Handle;\r
+ UINT8 InputCharacter;\r
+ DEBUG_PORT_HANDLE Handle;\r
\r
- Handle = GetDebugPortHandle();\r
+ Handle = GetDebugPortHandle ();\r
\r
if (IsHostAttached ()) {\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "processor[%x]:Send Break Packet to HOST.\n", ProcessorIndex);\r
do {\r
DebugAgentReadBuffer (Handle, &InputCharacter, 1, 0);\r
} while (InputCharacter != DEBUG_STARTING_SYMBOL_ATTACH);\r
+\r
SendAckPacket (DEBUG_COMMAND_OK);\r
\r
//\r
// Try to attach HOST\r
//\r
- while (AttachHost (BreakCause, 0, NULL) != RETURN_SUCCESS);\r
-\r
+ while (AttachHost (BreakCause, 0, NULL) != RETURN_SUCCESS) {\r
+ }\r
}\r
}\r
\r
**/\r
VOID\r
CommandCommunication (\r
- IN UINTN Vector,\r
- IN OUT DEBUG_CPU_CONTEXT *CpuContext,\r
- IN BOOLEAN BreakReceived\r
+ IN UINTN Vector,\r
+ IN OUT DEBUG_CPU_CONTEXT *CpuContext,\r
+ IN BOOLEAN BreakReceived\r
)\r
{\r
- RETURN_STATUS Status;\r
- UINT8 InputPacketBuffer[DEBUG_DATA_UPPER_LIMIT + sizeof (UINT64) - 1];\r
- DEBUG_PACKET_HEADER *DebugHeader;\r
- UINT8 Width;\r
- UINT8 Data8;\r
- UINT32 Data32;\r
- UINT64 Data64;\r
- DEBUG_DATA_READ_MEMORY *MemoryRead;\r
- DEBUG_DATA_WRITE_MEMORY *MemoryWrite;\r
- DEBUG_DATA_READ_IO *IoRead;\r
- DEBUG_DATA_WRITE_IO *IoWrite;\r
- DEBUG_DATA_READ_REGISTER *RegisterRead;\r
- DEBUG_DATA_WRITE_REGISTER *RegisterWrite;\r
- UINT8 *RegisterBuffer;\r
- DEBUG_DATA_READ_MSR *MsrRegisterRead;\r
- DEBUG_DATA_WRITE_MSR *MsrRegisterWrite;\r
- DEBUG_DATA_CPUID *Cpuid;\r
- DEBUG_DATA_RESPONSE_BREAK_CAUSE BreakCause;\r
- DEBUG_DATA_RESPONSE_CPUID CpuidResponse;\r
- DEBUG_DATA_SEARCH_SIGNATURE *SearchSignature;\r
- DEBUG_DATA_RESPONSE_GET_EXCEPTION Exception;\r
- DEBUG_DATA_RESPONSE_GET_REVISION DebugAgentRevision;\r
- DEBUG_DATA_SET_VIEWPOINT *SetViewPoint;\r
- BOOLEAN HaltDeferred;\r
- UINT32 ProcessorIndex;\r
- DEBUG_AGENT_EXCEPTION_BUFFER AgentExceptionBuffer;\r
- UINT32 IssuedViewPoint;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- UINT8 *AlignedDataPtr;\r
+ RETURN_STATUS Status;\r
+ UINT8 InputPacketBuffer[DEBUG_DATA_UPPER_LIMIT + sizeof (UINT64) - 1];\r
+ DEBUG_PACKET_HEADER *DebugHeader;\r
+ UINT8 Width;\r
+ UINT8 Data8;\r
+ UINT32 Data32;\r
+ UINT64 Data64;\r
+ DEBUG_DATA_READ_MEMORY *MemoryRead;\r
+ DEBUG_DATA_WRITE_MEMORY *MemoryWrite;\r
+ DEBUG_DATA_READ_IO *IoRead;\r
+ DEBUG_DATA_WRITE_IO *IoWrite;\r
+ DEBUG_DATA_READ_REGISTER *RegisterRead;\r
+ DEBUG_DATA_WRITE_REGISTER *RegisterWrite;\r
+ UINT8 *RegisterBuffer;\r
+ DEBUG_DATA_READ_MSR *MsrRegisterRead;\r
+ DEBUG_DATA_WRITE_MSR *MsrRegisterWrite;\r
+ DEBUG_DATA_CPUID *Cpuid;\r
+ DEBUG_DATA_RESPONSE_BREAK_CAUSE BreakCause;\r
+ DEBUG_DATA_RESPONSE_CPUID CpuidResponse;\r
+ DEBUG_DATA_SEARCH_SIGNATURE *SearchSignature;\r
+ DEBUG_DATA_RESPONSE_GET_EXCEPTION Exception;\r
+ DEBUG_DATA_RESPONSE_GET_REVISION DebugAgentRevision;\r
+ DEBUG_DATA_SET_VIEWPOINT *SetViewPoint;\r
+ BOOLEAN HaltDeferred;\r
+ UINT32 ProcessorIndex;\r
+ DEBUG_AGENT_EXCEPTION_BUFFER AgentExceptionBuffer;\r
+ UINT32 IssuedViewPoint;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ UINT8 *AlignedDataPtr;\r
\r
ProcessorIndex = 0;\r
IssuedViewPoint = 0;\r
HaltDeferred = BreakReceived;\r
\r
- if (MultiProcessorDebugSupport()) {\r
+ if (MultiProcessorDebugSupport ()) {\r
ProcessorIndex = GetProcessorIndex ();\r
SetCpuStopFlagByIndex (ProcessorIndex, TRUE);\r
if (mDebugMpContext.ViewPointIndex == ProcessorIndex) {\r
}\r
\r
while (TRUE) {\r
-\r
- if (MultiProcessorDebugSupport()) {\r
+ if (MultiProcessorDebugSupport ()) {\r
//\r
// Check if the current processor is HOST view point\r
//\r
\r
AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
\r
- DebugHeader =(DEBUG_PACKET_HEADER *) InputPacketBuffer;\r
+ DebugHeader = (DEBUG_PACKET_HEADER *)InputPacketBuffer;\r
\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "TARGET: Try to get command from HOST...\n");\r
- Status = ReceivePacket ((UINT8 *) DebugHeader, &BreakReceived, NULL, READ_PACKET_TIMEOUT, TRUE);\r
- if (Status != RETURN_SUCCESS || !IS_REQUEST (DebugHeader)) {\r
+ Status = ReceivePacket ((UINT8 *)DebugHeader, &BreakReceived, NULL, READ_PACKET_TIMEOUT, TRUE);\r
+ if ((Status != RETURN_SUCCESS) || !IS_REQUEST (DebugHeader)) {\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "TARGET: Get command[%x] sequenceno[%x] returned status is [%x] \n", DebugHeader->Command, DebugHeader->SequenceNo, Status);\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "TARGET: Get command failed or it's response packet not expected! \n");\r
ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
SendAckPacket (Mailbox->LastAck);\r
ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
continue;\r
- } else if (DebugHeader->SequenceNo == (UINT8) (Mailbox->HostSequenceNo + 1)) {\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, (UINT8) DebugHeader->SequenceNo);\r
+ } else if (DebugHeader->SequenceNo == (UINT8)(Mailbox->HostSequenceNo + 1)) {\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, (UINT8)DebugHeader->SequenceNo);\r
} else {\r
DebugAgentMsgPrint (DEBUG_AGENT_WARNING, "Receive one invalid command[%x] against command[%x]\n", DebugHeader->SequenceNo, Mailbox->HostSequenceNo);\r
ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
//\r
// Save CPU content before executing HOST command\r
//\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_EXCEPTION_BUFFER_POINTER_INDEX, (UINT64)(UINTN) &AgentExceptionBuffer.JumpBuffer);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_EXCEPTION_BUFFER_POINTER_INDEX, (UINT64)(UINTN)&AgentExceptionBuffer.JumpBuffer);\r
if (SetJump (&AgentExceptionBuffer.JumpBuffer) != 0) {\r
//\r
// If HOST command failed, continue to wait for HOST's next command\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "Processor[%x]:Received one command(%x)\n", mDebugMpContext.ViewPointIndex, DebugHeader->Command);\r
\r
switch (DebugHeader->Command) {\r
+ case DEBUG_COMMAND_HALT:\r
+ SendAckPacket (DEBUG_COMMAND_HALT_DEFERRED);\r
+ HaltDeferred = TRUE;\r
+ BreakReceived = FALSE;\r
+ Status = RETURN_SUCCESS;\r
+ break;\r
\r
- case DEBUG_COMMAND_HALT:\r
- SendAckPacket (DEBUG_COMMAND_HALT_DEFERRED);\r
- HaltDeferred = TRUE;\r
- BreakReceived = FALSE;\r
- Status = RETURN_SUCCESS;\r
- break;\r
-\r
- case DEBUG_COMMAND_RESET:\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
-\r
- ResetCold ();\r
- //\r
- // Assume system resets in 2 seconds, otherwise send TIMEOUT packet.\r
- // PCD can be used if 2 seconds isn't long enough for some platforms.\r
- //\r
- MicroSecondDelay (2000000);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, Mailbox->HostSequenceNo + 1);\r
- SendAckPacket (DEBUG_COMMAND_TIMEOUT);\r
- SendAckPacket (DEBUG_COMMAND_TIMEOUT);\r
- SendAckPacket (DEBUG_COMMAND_TIMEOUT);\r
- break;\r
+ case DEBUG_COMMAND_RESET:\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
\r
- case DEBUG_COMMAND_GO:\r
- CommandGo (CpuContext);\r
- //\r
- // Clear Dr0 to avoid to be recognized as IMAGE_LOAD/_UNLOAD again when hitting a breakpoint after GO\r
- // If HOST changed Dr0 before GO, we will not change Dr0 here\r
- //\r
- Data8 = GetBreakCause (Vector, CpuContext);\r
- if (Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD || Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD) {\r
- CpuContext->Dr0 = 0;\r
- }\r
+ ResetCold ();\r
+ //\r
+ // Assume system resets in 2 seconds, otherwise send TIMEOUT packet.\r
+ // PCD can be used if 2 seconds isn't long enough for some platforms.\r
+ //\r
+ MicroSecondDelay (2000000);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, Mailbox->HostSequenceNo + 1);\r
+ SendAckPacket (DEBUG_COMMAND_TIMEOUT);\r
+ SendAckPacket (DEBUG_COMMAND_TIMEOUT);\r
+ SendAckPacket (DEBUG_COMMAND_TIMEOUT);\r
+ break;\r
\r
- if (!HaltDeferred) {\r
+ case DEBUG_COMMAND_GO:\r
+ CommandGo (CpuContext);\r
//\r
- // If no HALT command received when being in-active mode\r
+ // Clear Dr0 to avoid to be recognized as IMAGE_LOAD/_UNLOAD again when hitting a breakpoint after GO\r
+ // If HOST changed Dr0 before GO, we will not change Dr0 here\r
//\r
- if (MultiProcessorDebugSupport()) {\r
- Data32 = FindNextPendingBreakCpu ();\r
- if (Data32 != -1) {\r
+ Data8 = GetBreakCause (Vector, CpuContext);\r
+ if ((Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD) || (Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD)) {\r
+ CpuContext->Dr0 = 0;\r
+ }\r
+\r
+ if (!HaltDeferred) {\r
+ //\r
+ // If no HALT command received when being in-active mode\r
+ //\r
+ if (MultiProcessorDebugSupport ()) {\r
+ Data32 = FindNextPendingBreakCpu ();\r
+ if (Data32 != -1) {\r
+ //\r
+ // If there are still others processors being in break state,\r
+ // send OK packet to HOST to finish this go command\r
+ //\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ CpuPause ();\r
+ //\r
+ // Set current view to the next breaking processor\r
+ //\r
+ mDebugMpContext.ViewPointIndex = Data32;\r
+ mDebugMpContext.BreakAtCpuIndex = mDebugMpContext.ViewPointIndex;\r
+ SetCpuBreakFlagByIndex (mDebugMpContext.ViewPointIndex, FALSE);\r
+ //\r
+ // Send break packet to HOST to let HOST break again\r
+ //\r
+ SendBreakPacketToHost (DEBUG_DATA_BREAK_CAUSE_UNKNOWN, mDebugMpContext.BreakAtCpuIndex, &BreakReceived);\r
+ //\r
+ // Continue to run into loop to read command packet from HOST\r
+ //\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ break;\r
+ }\r
+\r
//\r
- // If there are still others processors being in break state,\r
- // send OK packet to HOST to finish this go command\r
+ // If no else processor break, set stop bitmask,\r
+ // and set Running flag for all processors.\r
//\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
+ SetCpuStopFlagByIndex (ProcessorIndex, FALSE);\r
+ SetCpuRunningFlag (TRUE);\r
CpuPause ();\r
//\r
- // Set current view to the next breaking processor\r
+ // Wait for all processors are in running state\r
//\r
- mDebugMpContext.ViewPointIndex = Data32;\r
- mDebugMpContext.BreakAtCpuIndex = mDebugMpContext.ViewPointIndex;\r
- SetCpuBreakFlagByIndex (mDebugMpContext.ViewPointIndex, FALSE);\r
+ while (TRUE) {\r
+ if (IsAllCpuRunning ()) {\r
+ break;\r
+ }\r
+ }\r
+\r
//\r
- // Send break packet to HOST to let HOST break again\r
+ // Set BSP to be current view point.\r
//\r
- SendBreakPacketToHost (DEBUG_DATA_BREAK_CAUSE_UNKNOWN, mDebugMpContext.BreakAtCpuIndex, &BreakReceived);\r
+ SetDebugViewPoint (mDebugMpContext.BspIndex);\r
+ CpuPause ();\r
//\r
- // Continue to run into loop to read command packet from HOST\r
+ // Clear breaking processor index and running flag\r
//\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
- break;\r
+ mDebugMpContext.BreakAtCpuIndex = (UINT32)(-1);\r
+ SetCpuRunningFlag (FALSE);\r
}\r
\r
//\r
- // If no else processor break, set stop bitmask,\r
- // and set Running flag for all processors.\r
- //\r
- SetCpuStopFlagByIndex (ProcessorIndex, FALSE);\r
- SetCpuRunningFlag (TRUE);\r
- CpuPause ();\r
- //\r
- // Wait for all processors are in running state\r
+ // Send OK packet to HOST to finish this go command\r
//\r
- while (TRUE) {\r
- if (IsAllCpuRunning ()) {\r
- break;\r
- }\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+\r
+ if (!IsHostAttached ()) {\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_SEQUENCE_NO_INDEX, 0);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, 0);\r
}\r
+\r
+ return;\r
+ } else {\r
//\r
- // Set BSP to be current view point.\r
- //\r
- SetDebugViewPoint (mDebugMpContext.BspIndex);\r
- CpuPause ();\r
- //\r
- // Clear breaking processor index and running flag\r
+ // If received HALT command, need to defer the GO command\r
//\r
- mDebugMpContext.BreakAtCpuIndex = (UINT32) (-1);\r
- SetCpuRunningFlag (FALSE);\r
+ SendAckPacket (DEBUG_COMMAND_HALT_PROCESSED);\r
+ HaltDeferred = FALSE;\r
+\r
+ Vector = DEBUG_TIMER_VECTOR;\r
}\r
\r
- //\r
- // Send OK packet to HOST to finish this go command\r
- //\r
+ break;\r
+\r
+ case DEBUG_COMMAND_BREAK_CAUSE:\r
+ BreakCause.StopAddress = CpuContext->Eip;\r
+ if (MultiProcessorDebugSupport () && (ProcessorIndex != mDebugMpContext.BreakAtCpuIndex)) {\r
+ BreakCause.Cause = GetBreakCause (DEBUG_TIMER_VECTOR, CpuContext);\r
+ } else {\r
+ BreakCause.Cause = GetBreakCause (Vector, CpuContext);\r
+ }\r
+\r
+ SendDataResponsePacket ((UINT8 *)&BreakCause, (UINT16)sizeof (DEBUG_DATA_RESPONSE_BREAK_CAUSE), DebugHeader);\r
+ break;\r
+\r
+ case DEBUG_COMMAND_SET_HW_BREAKPOINT:\r
+ SetDebugRegister (CpuContext, (DEBUG_DATA_SET_HW_BREAKPOINT *)(DebugHeader + 1));\r
SendAckPacket (DEBUG_COMMAND_OK);\r
+ break;\r
\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ case DEBUG_COMMAND_CLEAR_HW_BREAKPOINT:\r
+ ClearDebugRegister (CpuContext, (DEBUG_DATA_CLEAR_HW_BREAKPOINT *)(DebugHeader + 1));\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ break;\r
\r
- if (!IsHostAttached()) {\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_SEQUENCE_NO_INDEX, 0);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_HOST_SEQUENCE_NO_INDEX, 0);\r
+ case DEBUG_COMMAND_SINGLE_STEPPING:\r
+ CommandStepping (CpuContext);\r
+ //\r
+ // Clear Dr0 to avoid to be recognized as IMAGE_LOAD/_UNLOAD again when hitting a breakpoint after GO\r
+ // If HOST changed Dr0 before GO, we will not change Dr0 here\r
+ //\r
+ Data8 = GetBreakCause (Vector, CpuContext);\r
+ if ((Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD) || (Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD)) {\r
+ CpuContext->Dr0 = 0;\r
}\r
- return;\r
\r
- } else {\r
+ mDebugMpContext.BreakAtCpuIndex = (UINT32)(-1);\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
//\r
- // If received HALT command, need to defer the GO command\r
+ // Executing stepping command directly without sending ACK packet,\r
+ // ACK packet will be sent after stepping done.\r
//\r
- SendAckPacket (DEBUG_COMMAND_HALT_PROCESSED);\r
- HaltDeferred = FALSE;\r
-\r
- Vector = DEBUG_TIMER_VECTOR;\r
- }\r
- break;\r
-\r
- case DEBUG_COMMAND_BREAK_CAUSE:\r
- BreakCause.StopAddress = CpuContext->Eip;\r
- if (MultiProcessorDebugSupport() && ProcessorIndex != mDebugMpContext.BreakAtCpuIndex) {\r
- BreakCause.Cause = GetBreakCause (DEBUG_TIMER_VECTOR, CpuContext);\r
- } else {\r
- BreakCause.Cause = GetBreakCause (Vector, CpuContext);\r
- }\r
- SendDataResponsePacket ((UINT8 *) &BreakCause, (UINT16) sizeof (DEBUG_DATA_RESPONSE_BREAK_CAUSE), DebugHeader);\r
- break;\r
+ return;\r
\r
- case DEBUG_COMMAND_SET_HW_BREAKPOINT:\r
- SetDebugRegister (CpuContext, (DEBUG_DATA_SET_HW_BREAKPOINT *) (DebugHeader + 1));\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- break;\r
+ case DEBUG_COMMAND_SET_SW_BREAKPOINT:\r
+ Data64 = (UINTN)(((DEBUG_DATA_SET_SW_BREAKPOINT *)(DebugHeader + 1))->Address);\r
+ Data8 = *(UINT8 *)(UINTN)Data64;\r
+ *(UINT8 *)(UINTN)Data64 = DEBUG_SW_BREAKPOINT_SYMBOL;\r
+ Status = SendDataResponsePacket ((UINT8 *)&Data8, (UINT16)sizeof (UINT8), DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_CLEAR_HW_BREAKPOINT:\r
- ClearDebugRegister (CpuContext, (DEBUG_DATA_CLEAR_HW_BREAKPOINT *) (DebugHeader + 1));\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- break;\r
+ case DEBUG_COMMAND_READ_MEMORY:\r
+ MemoryRead = (DEBUG_DATA_READ_MEMORY *)(DebugHeader + 1);\r
+ Status = ReadMemoryAndSendResponsePacket ((UINT8 *)(UINTN)MemoryRead->Address, MemoryRead->Count, MemoryRead->Width, DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_SINGLE_STEPPING:\r
- CommandStepping (CpuContext);\r
- //\r
- // Clear Dr0 to avoid to be recognized as IMAGE_LOAD/_UNLOAD again when hitting a breakpoint after GO\r
- // If HOST changed Dr0 before GO, we will not change Dr0 here\r
- //\r
- Data8 = GetBreakCause (Vector, CpuContext);\r
- if (Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD || Data8 == DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD) {\r
- CpuContext->Dr0 = 0;\r
- }\r
+ case DEBUG_COMMAND_WRITE_MEMORY:\r
+ MemoryWrite = (DEBUG_DATA_WRITE_MEMORY *)(DebugHeader + 1);\r
+ //\r
+ // Copy data into one memory with 8-byte alignment address\r
+ //\r
+ AlignedDataPtr = ALIGN_POINTER ((UINT8 *)&MemoryWrite->Data, sizeof (UINT64));\r
+ if (AlignedDataPtr != (UINT8 *)&MemoryWrite->Data) {\r
+ CopyMem (AlignedDataPtr, (UINT8 *)&MemoryWrite->Data, MemoryWrite->Count * MemoryWrite->Width);\r
+ }\r
\r
- mDebugMpContext.BreakAtCpuIndex = (UINT32) (-1);\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
- //\r
- // Executing stepping command directly without sending ACK packet,\r
- // ACK packet will be sent after stepping done.\r
- //\r
- return;\r
+ CopyMemByWidth ((UINT8 *)(UINTN)MemoryWrite->Address, AlignedDataPtr, MemoryWrite->Count, MemoryWrite->Width);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ break;\r
\r
- case DEBUG_COMMAND_SET_SW_BREAKPOINT:\r
- Data64 = (UINTN) (((DEBUG_DATA_SET_SW_BREAKPOINT *) (DebugHeader + 1))->Address);\r
- Data8 = *(UINT8 *) (UINTN) Data64;\r
- *(UINT8 *) (UINTN) Data64 = DEBUG_SW_BREAKPOINT_SYMBOL;\r
- Status = SendDataResponsePacket ((UINT8 *) &Data8, (UINT16) sizeof (UINT8), DebugHeader);\r
- break;\r
+ case DEBUG_COMMAND_READ_IO:\r
+ IoRead = (DEBUG_DATA_READ_IO *)(DebugHeader + 1);\r
+ switch (IoRead->Width) {\r
+ case 1:\r
+ Data64 = IoRead8 ((UINTN)IoRead->Port);\r
+ break;\r
+ case 2:\r
+ Data64 = IoRead16 ((UINTN)IoRead->Port);\r
+ break;\r
+ case 4:\r
+ Data64 = IoRead32 ((UINTN)IoRead->Port);\r
+ break;\r
+ case 8:\r
+ Data64 = IoRead64 ((UINTN)IoRead->Port);\r
+ break;\r
+ default:\r
+ Data64 = (UINT64)-1;\r
+ }\r
\r
- case DEBUG_COMMAND_READ_MEMORY:\r
- MemoryRead = (DEBUG_DATA_READ_MEMORY *) (DebugHeader + 1);\r
- Status = ReadMemoryAndSendResponsePacket ((UINT8 *) (UINTN) MemoryRead->Address, MemoryRead->Count, MemoryRead->Width, DebugHeader);\r
- break;\r
+ Status = SendDataResponsePacket ((UINT8 *)&Data64, IoRead->Width, DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_WRITE_MEMORY:\r
- MemoryWrite = (DEBUG_DATA_WRITE_MEMORY *) (DebugHeader + 1);\r
- //\r
- // Copy data into one memory with 8-byte alignment address\r
- //\r
- AlignedDataPtr = ALIGN_POINTER ((UINT8 *) &MemoryWrite->Data, sizeof (UINT64));\r
- if (AlignedDataPtr != (UINT8 *) &MemoryWrite->Data) {\r
- CopyMem (AlignedDataPtr, (UINT8 *) &MemoryWrite->Data, MemoryWrite->Count * MemoryWrite->Width);\r
- }\r
- CopyMemByWidth ((UINT8 *) (UINTN) MemoryWrite->Address, AlignedDataPtr, MemoryWrite->Count, MemoryWrite->Width);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- break;\r
+ case DEBUG_COMMAND_WRITE_IO:\r
+ IoWrite = (DEBUG_DATA_WRITE_IO *)(DebugHeader + 1);\r
+ switch (IoWrite->Width) {\r
+ case 1:\r
+ Data64 = IoWrite8 ((UINTN)IoWrite->Port, *(UINT8 *)&IoWrite->Data);\r
+ break;\r
+ case 2:\r
+ Data64 = IoWrite16 ((UINTN)IoWrite->Port, *(UINT16 *)&IoWrite->Data);\r
+ break;\r
+ case 4:\r
+ Data64 = IoWrite32 ((UINTN)IoWrite->Port, *(UINT32 *)&IoWrite->Data);\r
+ break;\r
+ case 8:\r
+ Data64 = IoWrite64 ((UINTN)IoWrite->Port, *(UINT64 *)&IoWrite->Data);\r
+ break;\r
+ default:\r
+ Data64 = (UINT64)-1;\r
+ }\r
\r
- case DEBUG_COMMAND_READ_IO:\r
- IoRead = (DEBUG_DATA_READ_IO *) (DebugHeader + 1);\r
- switch (IoRead->Width) {\r
- case 1:\r
- Data64 = IoRead8 ((UINTN) IoRead->Port);\r
- break;\r
- case 2:\r
- Data64 = IoRead16 ((UINTN) IoRead->Port);\r
- break;\r
- case 4:\r
- Data64 = IoRead32 ((UINTN) IoRead->Port);\r
- break;\r
- case 8:\r
- Data64 = IoRead64 ((UINTN) IoRead->Port);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
break;\r
- default:\r
- Data64 = (UINT64) -1;\r
- }\r
- Status = SendDataResponsePacket ((UINT8 *) &Data64, IoRead->Width, DebugHeader);\r
- break;\r
\r
- case DEBUG_COMMAND_WRITE_IO:\r
- IoWrite = (DEBUG_DATA_WRITE_IO *) (DebugHeader + 1);\r
- switch (IoWrite->Width) {\r
- case 1:\r
- Data64 = IoWrite8 ((UINTN) IoWrite->Port, *(UINT8 *) &IoWrite->Data);\r
- break;\r
- case 2:\r
- Data64 = IoWrite16 ((UINTN) IoWrite->Port, *(UINT16 *) &IoWrite->Data);\r
- break;\r
- case 4:\r
- Data64 = IoWrite32 ((UINTN) IoWrite->Port, *(UINT32 *) &IoWrite->Data);\r
- break;\r
- case 8:\r
- Data64 = IoWrite64 ((UINTN) IoWrite->Port, *(UINT64 *) &IoWrite->Data);\r
+ case DEBUG_COMMAND_READ_ALL_REGISTERS:\r
+ Status = SendDataResponsePacket ((UINT8 *)CpuContext, sizeof (*CpuContext), DebugHeader);\r
break;\r
- default:\r
- Data64 = (UINT64) -1;\r
- }\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- break;\r
\r
- case DEBUG_COMMAND_READ_ALL_REGISTERS:\r
- Status = SendDataResponsePacket ((UINT8 *) CpuContext, sizeof (*CpuContext), DebugHeader);\r
- break;\r
+ case DEBUG_COMMAND_READ_REGISTER:\r
+ RegisterRead = (DEBUG_DATA_READ_REGISTER *)(DebugHeader + 1);\r
\r
- case DEBUG_COMMAND_READ_REGISTER:\r
- RegisterRead = (DEBUG_DATA_READ_REGISTER *) (DebugHeader + 1);\r
+ if (RegisterRead->Index <= SOFT_DEBUGGER_REGISTER_MAX) {\r
+ RegisterBuffer = ArchReadRegisterBuffer (CpuContext, RegisterRead->Index, &Width);\r
+ Status = SendDataResponsePacket (RegisterBuffer, Width, DebugHeader);\r
+ } else {\r
+ Status = RETURN_UNSUPPORTED;\r
+ }\r
\r
- if (RegisterRead->Index <= SOFT_DEBUGGER_REGISTER_MAX) {\r
- RegisterBuffer = ArchReadRegisterBuffer (CpuContext, RegisterRead->Index, &Width);\r
- Status = SendDataResponsePacket (RegisterBuffer, Width, DebugHeader);\r
- } else {\r
- Status = RETURN_UNSUPPORTED;\r
- }\r
- break;\r
+ break;\r
\r
- case DEBUG_COMMAND_WRITE_REGISTER:\r
- RegisterWrite = (DEBUG_DATA_WRITE_REGISTER *) (DebugHeader + 1);\r
- if (RegisterWrite->Index <= SOFT_DEBUGGER_REGISTER_MAX) {\r
- RegisterBuffer = ArchReadRegisterBuffer (CpuContext, RegisterWrite->Index, &Width);\r
- ASSERT (Width == RegisterWrite->Length);\r
- CopyMem (RegisterBuffer, RegisterWrite->Data, Width);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- } else {\r
- Status = RETURN_UNSUPPORTED;\r
- }\r
- break;\r
+ case DEBUG_COMMAND_WRITE_REGISTER:\r
+ RegisterWrite = (DEBUG_DATA_WRITE_REGISTER *)(DebugHeader + 1);\r
+ if (RegisterWrite->Index <= SOFT_DEBUGGER_REGISTER_MAX) {\r
+ RegisterBuffer = ArchReadRegisterBuffer (CpuContext, RegisterWrite->Index, &Width);\r
+ ASSERT (Width == RegisterWrite->Length);\r
+ CopyMem (RegisterBuffer, RegisterWrite->Data, Width);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ } else {\r
+ Status = RETURN_UNSUPPORTED;\r
+ }\r
\r
- case DEBUG_COMMAND_ARCH_MODE:\r
- Data8 = DEBUG_ARCH_SYMBOL;\r
- Status = SendDataResponsePacket ((UINT8 *) &Data8, (UINT16) sizeof (UINT8), DebugHeader);\r
- break;\r
+ break;\r
\r
- case DEBUG_COMMAND_READ_MSR:\r
- MsrRegisterRead = (DEBUG_DATA_READ_MSR *) (DebugHeader + 1);\r
- Data64 = AsmReadMsr64 (MsrRegisterRead->Index);\r
- Status = SendDataResponsePacket ((UINT8 *) &Data64, (UINT16) sizeof (UINT64), DebugHeader);\r
- break;\r
+ case DEBUG_COMMAND_ARCH_MODE:\r
+ Data8 = DEBUG_ARCH_SYMBOL;\r
+ Status = SendDataResponsePacket ((UINT8 *)&Data8, (UINT16)sizeof (UINT8), DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_WRITE_MSR:\r
- MsrRegisterWrite = (DEBUG_DATA_WRITE_MSR *) (DebugHeader + 1);\r
- AsmWriteMsr64 (MsrRegisterWrite->Index, MsrRegisterWrite->Value);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- break;\r
+ case DEBUG_COMMAND_READ_MSR:\r
+ MsrRegisterRead = (DEBUG_DATA_READ_MSR *)(DebugHeader + 1);\r
+ Data64 = AsmReadMsr64 (MsrRegisterRead->Index);\r
+ Status = SendDataResponsePacket ((UINT8 *)&Data64, (UINT16)sizeof (UINT64), DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_SET_DEBUG_SETTING:\r
- Status = SetDebugSetting ((DEBUG_DATA_SET_DEBUG_SETTING *)(DebugHeader + 1));\r
- if (Status == RETURN_SUCCESS) {\r
+ case DEBUG_COMMAND_WRITE_MSR:\r
+ MsrRegisterWrite = (DEBUG_DATA_WRITE_MSR *)(DebugHeader + 1);\r
+ AsmWriteMsr64 (MsrRegisterWrite->Index, MsrRegisterWrite->Value);\r
SendAckPacket (DEBUG_COMMAND_OK);\r
- }\r
- break;\r
+ break;\r
\r
- case DEBUG_COMMAND_GET_REVISION:\r
- DebugAgentRevision.Revision = PcdGet32(PcdTransferProtocolRevision);\r
- DebugAgentRevision.Capabilities = DEBUG_AGENT_CAPABILITIES;\r
- Status = SendDataResponsePacket ((UINT8 *) &DebugAgentRevision, (UINT16) sizeof (DEBUG_DATA_RESPONSE_GET_REVISION), DebugHeader);\r
- break;\r
+ case DEBUG_COMMAND_SET_DEBUG_SETTING:\r
+ Status = SetDebugSetting ((DEBUG_DATA_SET_DEBUG_SETTING *)(DebugHeader + 1));\r
+ if (Status == RETURN_SUCCESS) {\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ }\r
\r
- case DEBUG_COMMAND_GET_EXCEPTION:\r
- Exception.ExceptionNum = (UINT8) Vector;\r
- Exception.ExceptionData = (UINT32) CpuContext->ExceptionData;\r
- Status = SendDataResponsePacket ((UINT8 *) &Exception, (UINT16) sizeof (DEBUG_DATA_RESPONSE_GET_EXCEPTION), DebugHeader);\r
- break;\r
+ break;\r
\r
- case DEBUG_COMMAND_SET_VIEWPOINT:\r
- SetViewPoint = (DEBUG_DATA_SET_VIEWPOINT *) (DebugHeader + 1);\r
- if (MultiProcessorDebugSupport()) {\r
- if (IsCpuStopped (SetViewPoint->ViewPoint)) {\r
- SetDebugViewPoint (SetViewPoint->ViewPoint);\r
+ case DEBUG_COMMAND_GET_REVISION:\r
+ DebugAgentRevision.Revision = PcdGet32 (PcdTransferProtocolRevision);\r
+ DebugAgentRevision.Capabilities = DEBUG_AGENT_CAPABILITIES;\r
+ Status = SendDataResponsePacket ((UINT8 *)&DebugAgentRevision, (UINT16)sizeof (DEBUG_DATA_RESPONSE_GET_REVISION), DebugHeader);\r
+ break;\r
+\r
+ case DEBUG_COMMAND_GET_EXCEPTION:\r
+ Exception.ExceptionNum = (UINT8)Vector;\r
+ Exception.ExceptionData = (UINT32)CpuContext->ExceptionData;\r
+ Status = SendDataResponsePacket ((UINT8 *)&Exception, (UINT16)sizeof (DEBUG_DATA_RESPONSE_GET_EXCEPTION), DebugHeader);\r
+ break;\r
+\r
+ case DEBUG_COMMAND_SET_VIEWPOINT:\r
+ SetViewPoint = (DEBUG_DATA_SET_VIEWPOINT *)(DebugHeader + 1);\r
+ if (MultiProcessorDebugSupport ()) {\r
+ if (IsCpuStopped (SetViewPoint->ViewPoint)) {\r
+ SetDebugViewPoint (SetViewPoint->ViewPoint);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ } else {\r
+ //\r
+ // If CPU is not halted\r
+ //\r
+ SendAckPacket (DEBUG_COMMAND_NOT_SUPPORTED);\r
+ }\r
+ } else if (SetViewPoint->ViewPoint == 0) {\r
SendAckPacket (DEBUG_COMMAND_OK);\r
} else {\r
- //\r
- // If CPU is not halted\r
- //\r
SendAckPacket (DEBUG_COMMAND_NOT_SUPPORTED);\r
}\r
- } else if (SetViewPoint->ViewPoint == 0) {\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
\r
- } else {\r
- SendAckPacket (DEBUG_COMMAND_NOT_SUPPORTED);\r
- }\r
+ break;\r
\r
- break;\r
+ case DEBUG_COMMAND_GET_VIEWPOINT:\r
+ Data32 = mDebugMpContext.ViewPointIndex;\r
+ SendDataResponsePacket ((UINT8 *)&Data32, (UINT16)sizeof (UINT32), DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_GET_VIEWPOINT:\r
- Data32 = mDebugMpContext.ViewPointIndex;\r
- SendDataResponsePacket((UINT8 *) &Data32, (UINT16) sizeof (UINT32), DebugHeader);\r
- break;\r
+ case DEBUG_COMMAND_MEMORY_READY:\r
+ Data8 = (UINT8)GetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY);\r
+ SendDataResponsePacket (&Data8, (UINT16)sizeof (UINT8), DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_MEMORY_READY:\r
- Data8 = (UINT8) GetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY);\r
- SendDataResponsePacket (&Data8, (UINT16) sizeof (UINT8), DebugHeader);\r
- break;\r
+ case DEBUG_COMMAND_DETACH:\r
+ SetHostAttached (FALSE);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ break;\r
\r
- case DEBUG_COMMAND_DETACH:\r
- SetHostAttached (FALSE);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- break;\r
+ case DEBUG_COMMAND_CPUID:\r
+ Cpuid = (DEBUG_DATA_CPUID *)(DebugHeader + 1);\r
+ AsmCpuidEx (\r
+ Cpuid->Eax,\r
+ Cpuid->Ecx,\r
+ &CpuidResponse.Eax,\r
+ &CpuidResponse.Ebx,\r
+ &CpuidResponse.Ecx,\r
+ &CpuidResponse.Edx\r
+ );\r
+ SendDataResponsePacket ((UINT8 *)&CpuidResponse, (UINT16)sizeof (CpuidResponse), DebugHeader);\r
+ break;\r
\r
- case DEBUG_COMMAND_CPUID:\r
- Cpuid = (DEBUG_DATA_CPUID *) (DebugHeader + 1);\r
- AsmCpuidEx (\r
- Cpuid->Eax, Cpuid->Ecx,\r
- &CpuidResponse.Eax, &CpuidResponse.Ebx,\r
- &CpuidResponse.Ecx, &CpuidResponse.Edx\r
- );\r
- SendDataResponsePacket ((UINT8 *) &CpuidResponse, (UINT16) sizeof (CpuidResponse), DebugHeader);\r
- break;\r
+ case DEBUG_COMMAND_SEARCH_SIGNATURE:\r
+ SearchSignature = (DEBUG_DATA_SEARCH_SIGNATURE *)(DebugHeader + 1);\r
+ if ((SearchSignature->Alignment != 0) &&\r
+ (SearchSignature->Alignment == GetPowerOfTwo32 (SearchSignature->Alignment))\r
+ )\r
+ {\r
+ if (SearchSignature->Positive) {\r
+ for (\r
+ Data64 = ALIGN_VALUE ((UINTN)SearchSignature->Start, SearchSignature->Alignment);\r
+ Data64 <= SearchSignature->Start + SearchSignature->Count - SearchSignature->DataLength;\r
+ Data64 += SearchSignature->Alignment\r
+ )\r
+ {\r
+ if (CompareMem ((VOID *)(UINTN)Data64, &SearchSignature->Data, SearchSignature->DataLength) == 0) {\r
+ break;\r
+ }\r
+ }\r
\r
- case DEBUG_COMMAND_SEARCH_SIGNATURE:\r
- SearchSignature = (DEBUG_DATA_SEARCH_SIGNATURE *) (DebugHeader + 1);\r
- if ((SearchSignature->Alignment != 0) &&\r
- (SearchSignature->Alignment == GetPowerOfTwo32 (SearchSignature->Alignment))\r
- ) {\r
- if (SearchSignature->Positive) {\r
- for (\r
- Data64 = ALIGN_VALUE ((UINTN) SearchSignature->Start, SearchSignature->Alignment);\r
- Data64 <= SearchSignature->Start + SearchSignature->Count - SearchSignature->DataLength;\r
- Data64 += SearchSignature->Alignment\r
- ) {\r
- if (CompareMem ((VOID *) (UINTN) Data64, &SearchSignature->Data, SearchSignature->DataLength) == 0) {\r
- break;\r
+ if (Data64 > SearchSignature->Start + SearchSignature->Count - SearchSignature->DataLength) {\r
+ Data64 = (UINT64)-1;\r
}\r
- }\r
- if (Data64 > SearchSignature->Start + SearchSignature->Count - SearchSignature->DataLength) {\r
- Data64 = (UINT64) -1;\r
- }\r
- } else {\r
- for (\r
- Data64 = ALIGN_VALUE ((UINTN) SearchSignature->Start - SearchSignature->Alignment, SearchSignature->Alignment);\r
- Data64 >= SearchSignature->Start - SearchSignature->Count;\r
- Data64 -= SearchSignature->Alignment\r
- ) {\r
- if (CompareMem ((VOID *) (UINTN) Data64, &SearchSignature->Data, SearchSignature->DataLength) == 0) {\r
- break;\r
+ } else {\r
+ for (\r
+ Data64 = ALIGN_VALUE ((UINTN)SearchSignature->Start - SearchSignature->Alignment, SearchSignature->Alignment);\r
+ Data64 >= SearchSignature->Start - SearchSignature->Count;\r
+ Data64 -= SearchSignature->Alignment\r
+ )\r
+ {\r
+ if (CompareMem ((VOID *)(UINTN)Data64, &SearchSignature->Data, SearchSignature->DataLength) == 0) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (Data64 < SearchSignature->Start - SearchSignature->Count) {\r
+ Data64 = (UINT64)-1;\r
}\r
}\r
- if (Data64 < SearchSignature->Start - SearchSignature->Count) {\r
- Data64 = (UINT64) -1;\r
- }\r
+\r
+ SendDataResponsePacket ((UINT8 *)&Data64, (UINT16)sizeof (Data64), DebugHeader);\r
+ } else {\r
+ Status = RETURN_UNSUPPORTED;\r
}\r
- SendDataResponsePacket ((UINT8 *) &Data64, (UINT16) sizeof (Data64), DebugHeader);\r
- } else {\r
- Status = RETURN_UNSUPPORTED;\r
- }\r
- break;\r
\r
- default:\r
- SendAckPacket (DEBUG_COMMAND_NOT_SUPPORTED);\r
- break;\r
+ break;\r
+\r
+ default:\r
+ SendAckPacket (DEBUG_COMMAND_NOT_SUPPORTED);\r
+ break;\r
}\r
\r
if (Status == RETURN_UNSUPPORTED) {\r
VOID\r
EFIAPI\r
InterruptProcess (\r
- IN UINT32 Vector,\r
- IN DEBUG_CPU_CONTEXT *CpuContext\r
+ IN UINT32 Vector,\r
+ IN DEBUG_CPU_CONTEXT *CpuContext\r
)\r
{\r
- UINT8 InputCharacter;\r
- UINT8 BreakCause;\r
- UINTN SavedEip;\r
- BOOLEAN BreakReceived;\r
- UINT32 ProcessorIndex;\r
- UINT32 CurrentDebugTimerInitCount;\r
- DEBUG_PORT_HANDLE Handle;\r
- UINT8 Data8;\r
- UINT8 *Al;\r
- UINT32 IssuedViewPoint;\r
- DEBUG_AGENT_EXCEPTION_BUFFER *ExceptionBuffer;\r
+ UINT8 InputCharacter;\r
+ UINT8 BreakCause;\r
+ UINTN SavedEip;\r
+ BOOLEAN BreakReceived;\r
+ UINT32 ProcessorIndex;\r
+ UINT32 CurrentDebugTimerInitCount;\r
+ DEBUG_PORT_HANDLE Handle;\r
+ UINT8 Data8;\r
+ UINT8 *Al;\r
+ UINT32 IssuedViewPoint;\r
+ DEBUG_AGENT_EXCEPTION_BUFFER *ExceptionBuffer;\r
\r
InputCharacter = 0;\r
ProcessorIndex = 0;\r
// If Skip Breakpoint flag is set, means communication is disturbed by hardware SMI, we need to ignore the break points in SMM\r
//\r
if ((Vector == DEBUG_INT1_VECTOR) || (Vector == DEBUG_INT3_VECTOR)) {\r
- DebugPortWriteBuffer (GetDebugPortHandle(), (UINT8 *) mWarningMsgIngoreBreakpoint, AsciiStrLen (mWarningMsgIngoreBreakpoint));\r
+ DebugPortWriteBuffer (GetDebugPortHandle (), (UINT8 *)mWarningMsgIngoreBreakpoint, AsciiStrLen (mWarningMsgIngoreBreakpoint));\r
return;\r
}\r
}\r
\r
- if (MultiProcessorDebugSupport()) {\r
+ if (MultiProcessorDebugSupport ()) {\r
ProcessorIndex = GetProcessorIndex ();\r
//\r
// If this processor has already halted before, need to check it later\r
}\r
}\r
\r
- if (IssuedViewPoint == ProcessorIndex && GetDebugFlag (DEBUG_AGENT_FLAG_STEPPING) != 1) {\r
+ if ((IssuedViewPoint == ProcessorIndex) && (GetDebugFlag (DEBUG_AGENT_FLAG_STEPPING) != 1)) {\r
//\r
// Check if this exception is issued by Debug Agent itself\r
// If yes, fill the debug agent exception buffer and LongJump() back to\r
Vector,\r
(UINTN)CpuContext->Eip\r
);\r
- ExceptionBuffer = (DEBUG_AGENT_EXCEPTION_BUFFER *) (UINTN) GetMailboxPointer()->ExceptionBufferPointer;\r
- ExceptionBuffer->ExceptionContent.ExceptionNum = (UINT8) Vector;\r
- ExceptionBuffer->ExceptionContent.ExceptionData = (UINT32) CpuContext->ExceptionData;\r
+ ExceptionBuffer = (DEBUG_AGENT_EXCEPTION_BUFFER *)(UINTN)GetMailboxPointer ()->ExceptionBufferPointer;\r
+ ExceptionBuffer->ExceptionContent.ExceptionNum = (UINT8)Vector;\r
+ ExceptionBuffer->ExceptionContent.ExceptionData = (UINT32)CpuContext->ExceptionData;\r
LongJump ((BASE_LIBRARY_JUMP_BUFFER *)(UINTN)(ExceptionBuffer), 1);\r
}\r
}\r
\r
- if (MultiProcessorDebugSupport()) {\r
+ if (MultiProcessorDebugSupport ()) {\r
//\r
// If RUN command is executing, wait for it done.\r
//\r
}\r
}\r
\r
- Handle = GetDebugPortHandle();\r
+ Handle = GetDebugPortHandle ();\r
BreakCause = GetBreakCause (Vector, CpuContext);\r
switch (Vector) {\r
- case DEBUG_INT1_VECTOR:\r
- case DEBUG_INT3_VECTOR:\r
- switch (BreakCause) {\r
- case DEBUG_DATA_BREAK_CAUSE_SYSTEM_RESET:\r
- if (AttachHost (BreakCause, READ_PACKET_TIMEOUT, &BreakReceived) != RETURN_SUCCESS) {\r
- //\r
- // Try to connect HOST, return if fails\r
- //\r
- break;\r
- }\r
- CommandCommunication (Vector, CpuContext, BreakReceived);\r
- break;\r
+ case DEBUG_INT1_VECTOR:\r
+ case DEBUG_INT3_VECTOR:\r
+ switch (BreakCause) {\r
+ case DEBUG_DATA_BREAK_CAUSE_SYSTEM_RESET:\r
+ if (AttachHost (BreakCause, READ_PACKET_TIMEOUT, &BreakReceived) != RETURN_SUCCESS) {\r
+ //\r
+ // Try to connect HOST, return if fails\r
+ //\r
+ break;\r
+ }\r
\r
- case DEBUG_DATA_BREAK_CAUSE_STEPPING:\r
- //\r
- // Stepping is finished, send Ack package.\r
- //\r
- if (MultiProcessorDebugSupport()) {\r
- mDebugMpContext.BreakAtCpuIndex = ProcessorIndex;\r
- }\r
- //\r
- // Clear Stepping Flag and restore EFLAGS.IF\r
- //\r
- CommandSteppingCleanup (CpuContext);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- CommandCommunication (Vector, CpuContext, BreakReceived);\r
- break;\r
+ CommandCommunication (Vector, CpuContext, BreakReceived);\r
+ break;\r
\r
- case DEBUG_DATA_BREAK_CAUSE_MEMORY_READY:\r
- //\r
- // Memory is ready\r
- //\r
- SendCommandAndWaitForAckOK (DEBUG_COMMAND_MEMORY_READY, READ_PACKET_TIMEOUT, &BreakReceived, NULL);\r
- CommandCommunication (Vector, CpuContext, BreakReceived);\r
- break;\r
+ case DEBUG_DATA_BREAK_CAUSE_STEPPING:\r
+ //\r
+ // Stepping is finished, send Ack package.\r
+ //\r
+ if (MultiProcessorDebugSupport ()) {\r
+ mDebugMpContext.BreakAtCpuIndex = ProcessorIndex;\r
+ }\r
\r
- case DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD:\r
- case DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD:\r
- //\r
- // Set AL to DEBUG_AGENT_IMAGE_CONTINUE\r
- //\r
- Al = ArchReadRegisterBuffer (CpuContext, SOFT_DEBUGGER_REGISTER_AX, &Data8);\r
- *Al = DEBUG_AGENT_IMAGE_CONTINUE;\r
+ //\r
+ // Clear Stepping Flag and restore EFLAGS.IF\r
+ //\r
+ CommandSteppingCleanup (CpuContext);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ CommandCommunication (Vector, CpuContext, BreakReceived);\r
+ break;\r
\r
- if (!IsHostAttached ()) {\r
- //\r
- // If HOST is not connected for image load/unload, return\r
- //\r
- break;\r
- }\r
- //\r
- // Continue to run the following common code\r
- //\r
+ case DEBUG_DATA_BREAK_CAUSE_MEMORY_READY:\r
+ //\r
+ // Memory is ready\r
+ //\r
+ SendCommandAndWaitForAckOK (DEBUG_COMMAND_MEMORY_READY, READ_PACKET_TIMEOUT, &BreakReceived, NULL);\r
+ CommandCommunication (Vector, CpuContext, BreakReceived);\r
+ break;\r
\r
- case DEBUG_DATA_BREAK_CAUSE_HW_BREAKPOINT:\r
- case DEBUG_DATA_BREAK_CAUSE_SW_BREAKPOINT:\r
- default:\r
- //\r
- // Send Break packet to HOST\r
- //\r
- AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
- //\r
- // Only the first breaking processor could send BREAK_POINT to HOST\r
- //\r
- if (IsFirstBreakProcessor (ProcessorIndex)) {\r
- SendBreakPacketToHost (BreakCause, ProcessorIndex, &BreakReceived);\r
- }\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ case DEBUG_DATA_BREAK_CAUSE_IMAGE_LOAD:\r
+ case DEBUG_DATA_BREAK_CAUSE_IMAGE_UNLOAD:\r
+ //\r
+ // Set AL to DEBUG_AGENT_IMAGE_CONTINUE\r
+ //\r
+ Al = ArchReadRegisterBuffer (CpuContext, SOFT_DEBUGGER_REGISTER_AX, &Data8);\r
+ *Al = DEBUG_AGENT_IMAGE_CONTINUE;\r
+\r
+ if (!IsHostAttached ()) {\r
+ //\r
+ // If HOST is not connected for image load/unload, return\r
+ //\r
+ break;\r
+ }\r
\r
- if (Vector == DEBUG_INT3_VECTOR) {\r
//\r
- // go back address located "0xCC"\r
+ // Continue to run the following common code\r
//\r
- CpuContext->Eip--;\r
- SavedEip = CpuContext->Eip;\r
- CommandCommunication (Vector, CpuContext, BreakReceived);\r
- if ((SavedEip == CpuContext->Eip) &&\r
- (*(UINT8 *) (UINTN) CpuContext->Eip == DEBUG_SW_BREAKPOINT_SYMBOL)) {\r
+\r
+ case DEBUG_DATA_BREAK_CAUSE_HW_BREAKPOINT:\r
+ case DEBUG_DATA_BREAK_CAUSE_SW_BREAKPOINT:\r
+ default:\r
//\r
- // If this is not a software breakpoint set by HOST,\r
- // restore EIP\r
+ // Send Break packet to HOST\r
//\r
- CpuContext->Eip++;\r
- }\r
- } else {\r
- CommandCommunication (Vector, CpuContext, BreakReceived);\r
+ AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ //\r
+ // Only the first breaking processor could send BREAK_POINT to HOST\r
+ //\r
+ if (IsFirstBreakProcessor (ProcessorIndex)) {\r
+ SendBreakPacketToHost (BreakCause, ProcessorIndex, &BreakReceived);\r
+ }\r
+\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+\r
+ if (Vector == DEBUG_INT3_VECTOR) {\r
+ //\r
+ // go back address located "0xCC"\r
+ //\r
+ CpuContext->Eip--;\r
+ SavedEip = CpuContext->Eip;\r
+ CommandCommunication (Vector, CpuContext, BreakReceived);\r
+ if ((SavedEip == CpuContext->Eip) &&\r
+ (*(UINT8 *)(UINTN)CpuContext->Eip == DEBUG_SW_BREAKPOINT_SYMBOL))\r
+ {\r
+ //\r
+ // If this is not a software breakpoint set by HOST,\r
+ // restore EIP\r
+ //\r
+ CpuContext->Eip++;\r
+ }\r
+ } else {\r
+ CommandCommunication (Vector, CpuContext, BreakReceived);\r
+ }\r
+\r
+ break;\r
}\r
- break;\r
- }\r
\r
- break;\r
+ break;\r
\r
- case DEBUG_TIMER_VECTOR:\r
+ case DEBUG_TIMER_VECTOR:\r
\r
- AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
\r
- if (MultiProcessorDebugSupport()) {\r
- if (DebugAgentIsBsp (ProcessorIndex)) {\r
- //\r
- // If current processor is BSP, check Apic timer's init count if changed,\r
- // it may be re-written when switching BSP.\r
- // If it changed, re-initialize debug timer\r
- //\r
- CurrentDebugTimerInitCount = GetApicTimerInitCount ();\r
- if (mDebugMpContext.DebugTimerInitCount != CurrentDebugTimerInitCount) {\r
- InitializeDebugTimer (NULL, FALSE);\r
- SaveAndSetDebugTimerInterrupt (TRUE);\r
+ if (MultiProcessorDebugSupport ()) {\r
+ if (DebugAgentIsBsp (ProcessorIndex)) {\r
+ //\r
+ // If current processor is BSP, check Apic timer's init count if changed,\r
+ // it may be re-written when switching BSP.\r
+ // If it changed, re-initialize debug timer\r
+ //\r
+ CurrentDebugTimerInitCount = GetApicTimerInitCount ();\r
+ if (mDebugMpContext.DebugTimerInitCount != CurrentDebugTimerInitCount) {\r
+ InitializeDebugTimer (NULL, FALSE);\r
+ SaveAndSetDebugTimerInterrupt (TRUE);\r
+ }\r
}\r
- }\r
\r
- if (!DebugAgentIsBsp (ProcessorIndex) || mDebugMpContext.IpiSentByAp) {\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
- //\r
- // If current processor is not BSP or this is one IPI sent by AP\r
- //\r
- if (mDebugMpContext.BreakAtCpuIndex != (UINT32) (-1)) {\r
- CommandCommunication (Vector, CpuContext, FALSE);\r
- }\r
+ if (!DebugAgentIsBsp (ProcessorIndex) || mDebugMpContext.IpiSentByAp) {\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ //\r
+ // If current processor is not BSP or this is one IPI sent by AP\r
+ //\r
+ if (mDebugMpContext.BreakAtCpuIndex != (UINT32)(-1)) {\r
+ CommandCommunication (Vector, CpuContext, FALSE);\r
+ }\r
\r
- //\r
- // Clear EOI before exiting interrupt process routine.\r
- //\r
- SendApicEoi ();\r
- break;\r
+ //\r
+ // Clear EOI before exiting interrupt process routine.\r
+ //\r
+ SendApicEoi ();\r
+ break;\r
+ }\r
}\r
- }\r
\r
- //\r
- // Only BSP could run here\r
- //\r
- while (TRUE) {\r
//\r
- // If there is data in debug port, will check whether it is break(attach/break-in) symbol,\r
- // If yes, go into communication mode with HOST.\r
- // If no, exit interrupt process.\r
+ // Only BSP could run here\r
//\r
- if (DebugReadBreakSymbol (Handle, &InputCharacter) == EFI_NOT_FOUND) {\r
- break;\r
- }\r
-\r
- if ((!IsHostAttached () && (InputCharacter == DEBUG_STARTING_SYMBOL_ATTACH)) ||\r
- (IsHostAttached () && (InputCharacter == DEBUG_COMMAND_HALT)) ||\r
- (IsHostAttached () && (InputCharacter == DEBUG_COMMAND_GO))\r
- ) {\r
- DebugAgentMsgPrint (DEBUG_AGENT_VERBOSE, "Received data [%02x]\n", InputCharacter);\r
- //\r
- // Ack OK for break-in symbol\r
- //\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
-\r
+ while (TRUE) {\r
//\r
- // If receive GO command in Debug Timer, means HOST may lost ACK packet before.\r
+ // If there is data in debug port, will check whether it is break(attach/break-in) symbol,\r
+ // If yes, go into communication mode with HOST.\r
+ // If no, exit interrupt process.\r
//\r
- if (InputCharacter == DEBUG_COMMAND_GO) {\r
+ if (DebugReadBreakSymbol (Handle, &InputCharacter) == EFI_NOT_FOUND) {\r
break;\r
}\r
\r
- if (!IsHostAttached ()) {\r
+ if ((!IsHostAttached () && (InputCharacter == DEBUG_STARTING_SYMBOL_ATTACH)) ||\r
+ (IsHostAttached () && (InputCharacter == DEBUG_COMMAND_HALT)) ||\r
+ (IsHostAttached () && (InputCharacter == DEBUG_COMMAND_GO))\r
+ )\r
+ {\r
+ DebugAgentMsgPrint (DEBUG_AGENT_VERBOSE, "Received data [%02x]\n", InputCharacter);\r
//\r
- // Try to attach HOST, if no ack received after 200ms, return\r
+ // Ack OK for break-in symbol\r
//\r
- if (AttachHost (BreakCause, READ_PACKET_TIMEOUT, &BreakReceived) != RETURN_SUCCESS) {\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+\r
+ //\r
+ // If receive GO command in Debug Timer, means HOST may lost ACK packet before.\r
+ //\r
+ if (InputCharacter == DEBUG_COMMAND_GO) {\r
break;\r
}\r
- }\r
\r
- if (MultiProcessorDebugSupport()) {\r
- if(FindNextPendingBreakCpu () != -1) {\r
- SetCpuBreakFlagByIndex (ProcessorIndex, TRUE);\r
- } else {\r
- HaltOtherProcessors (ProcessorIndex);\r
+ if (!IsHostAttached ()) {\r
+ //\r
+ // Try to attach HOST, if no ack received after 200ms, return\r
+ //\r
+ if (AttachHost (BreakCause, READ_PACKET_TIMEOUT, &BreakReceived) != RETURN_SUCCESS) {\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (MultiProcessorDebugSupport ()) {\r
+ if (FindNextPendingBreakCpu () != -1) {\r
+ SetCpuBreakFlagByIndex (ProcessorIndex, TRUE);\r
+ } else {\r
+ HaltOtherProcessors (ProcessorIndex);\r
+ }\r
}\r
+\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ CommandCommunication (Vector, CpuContext, BreakReceived);\r
+ AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ break;\r
}\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
- CommandCommunication (Vector, CpuContext, BreakReceived);\r
- AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
- break;\r
}\r
- }\r
\r
- //\r
- // Clear EOI before exiting interrupt process routine.\r
- //\r
- SendApicEoi ();\r
+ //\r
+ // Clear EOI before exiting interrupt process routine.\r
+ //\r
+ SendApicEoi ();\r
\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
\r
- break;\r
+ break;\r
\r
- default:\r
- if (Vector <= DEBUG_EXCEPT_SIMD) {\r
- DebugAgentMsgPrint (\r
- DEBUG_AGENT_ERROR,\r
- "Exception happened, ExceptionNum is %d, EIP = 0x%x.\n",\r
- Vector,\r
- (UINTN) CpuContext->Eip\r
- );\r
- if (BreakCause == DEBUG_DATA_BREAK_CAUSE_STEPPING) {\r
- //\r
- // If exception happened when executing Stepping, send Ack package.\r
- // HOST consider Stepping command was finished.\r
- //\r
- if (MultiProcessorDebugSupport()) {\r
- mDebugMpContext.BreakAtCpuIndex = ProcessorIndex;\r
- }\r
- //\r
- // Clear Stepping flag and restore EFLAGS.IF\r
- //\r
- CommandSteppingCleanup (CpuContext);\r
- SendAckPacket (DEBUG_COMMAND_OK);\r
- } else {\r
- //\r
- // Exception occurs, send Break packet to HOST\r
- //\r
- AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
- //\r
- // Only the first breaking processor could send BREAK_POINT to HOST\r
- //\r
- if (IsFirstBreakProcessor (ProcessorIndex)) {\r
- SendBreakPacketToHost (BreakCause, ProcessorIndex, &BreakReceived);\r
+ default:\r
+ if (Vector <= DEBUG_EXCEPT_SIMD) {\r
+ DebugAgentMsgPrint (\r
+ DEBUG_AGENT_ERROR,\r
+ "Exception happened, ExceptionNum is %d, EIP = 0x%x.\n",\r
+ Vector,\r
+ (UINTN)CpuContext->Eip\r
+ );\r
+ if (BreakCause == DEBUG_DATA_BREAK_CAUSE_STEPPING) {\r
+ //\r
+ // If exception happened when executing Stepping, send Ack package.\r
+ // HOST consider Stepping command was finished.\r
+ //\r
+ if (MultiProcessorDebugSupport ()) {\r
+ mDebugMpContext.BreakAtCpuIndex = ProcessorIndex;\r
+ }\r
+\r
+ //\r
+ // Clear Stepping flag and restore EFLAGS.IF\r
+ //\r
+ CommandSteppingCleanup (CpuContext);\r
+ SendAckPacket (DEBUG_COMMAND_OK);\r
+ } else {\r
+ //\r
+ // Exception occurs, send Break packet to HOST\r
+ //\r
+ AcquireMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+ //\r
+ // Only the first breaking processor could send BREAK_POINT to HOST\r
+ //\r
+ if (IsFirstBreakProcessor (ProcessorIndex)) {\r
+ SendBreakPacketToHost (BreakCause, ProcessorIndex, &BreakReceived);\r
+ }\r
+\r
+ ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
}\r
- ReleaseMpSpinLock (&mDebugMpContext.DebugPortSpinLock);\r
+\r
+ CommandCommunication (Vector, CpuContext, BreakReceived);\r
}\r
\r
- CommandCommunication (Vector, CpuContext, BreakReceived);\r
- }\r
- break;\r
+ break;\r
}\r
\r
- if (MultiProcessorDebugSupport()) {\r
+ if (MultiProcessorDebugSupport ()) {\r
//\r
// Clear flag and wait for all processors run here\r
//\r
}\r
}\r
\r
- if (IssuedViewPoint == ProcessorIndex && GetDebugFlag (DEBUG_AGENT_FLAG_STEPPING) != 1) {\r
+ if ((IssuedViewPoint == ProcessorIndex) && (GetDebugFlag (DEBUG_AGENT_FLAG_STEPPING) != 1)) {\r
//\r
// If the command is not stepping, clean up AgentInProgress flag\r
//\r