#include <Library/DebugAgentLib.h>\r
#include <Library/UefiLib.h>\r
\r
-EFI_EVENT mExitBootServiceEvent;\r
+EFI_EVENT mExitBootServiceEvent;\r
\r
/**\r
One notified function to disable Debug Timer interrupt when gBS->ExitBootServices() called.\r
VOID\r
EFIAPI\r
DisableDebugTimerExitBootService (\r
- EFI_EVENT Event,\r
- VOID *Context\r
+ EFI_EVENT Event,\r
+ VOID *Context\r
)\r
\r
{\r
**/\r
EFI_STATUS\r
EFIAPI\r
-DebugAgentDxeInitialize(\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+DebugAgentDxeInitialize (\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
if (gST->ConOut != NULL) {\r
Print (L"If the Debug Port is serial port, please make sure this serial port isn't connected by");\r
Print (L"3: Shell> disconnect EA\r\n");\r
Print (L"4: Shell> load -nc DebugAgentDxe.efi\r\n\r\n");\r
}\r
+\r
Status = EFI_UNSUPPORTED;\r
InitializeDebugAgent (DEBUG_AGENT_INIT_DXE_LOAD, &Status, NULL);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+\r
if (gST->ConOut != NULL) {\r
Print (L"Debug Agent: Initialized successfully!\r\n\r\n");\r
}\r
+\r
//\r
// Create event to disable Debug Timer interrupt when exit boot service.\r
//\r
EFI_STATUS\r
EFIAPI\r
DebugAgentDxeUnload (\r
- IN EFI_HANDLE ImageHandle\r
+ IN EFI_HANDLE ImageHandle\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Status = EFI_UNSUPPORTED;\r
InitializeDebugAgent (DEBUG_AGENT_INIT_DXE_UNLOAD, &Status, NULL);\r
switch (Status) {\r
- case EFI_ACCESS_DENIED:\r
- Print (L"Debug Agent: Host is still connected, please de-attach TARGET firstly!\r\n");\r
- break;\r
- case EFI_NOT_STARTED:\r
- Print (L"Debug Agent: It hasn't been initialized, cannot unload it!\r\n");\r
- break;\r
+ case EFI_ACCESS_DENIED:\r
+ Print (L"Debug Agent: Host is still connected, please de-attach TARGET firstly!\r\n");\r
+ break;\r
+ case EFI_NOT_STARTED:\r
+ Print (L"Debug Agent: It hasn't been initialized, cannot unload it!\r\n");\r
+ break;\r
}\r
\r
return Status;\r
IN CONST EFI_PEI_SERVICES **PeiServices\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Status = EFI_UNSUPPORTED;\r
InitializeDebugAgent (DEBUG_AGENT_INIT_PEI, &Status, NULL);\r
0x865a5a9b, 0xb85d, 0x474c, { 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2 } \\r
}\r
\r
-extern EFI_GUID gEfiDebugAgentGuid;\r
+extern EFI_GUID gEfiDebugAgentGuid;\r
\r
#endif\r
#define SOFT_DEBUGGER_REGISTER_CR3 0x17\r
#define SOFT_DEBUGGER_REGISTER_CR4 0x18\r
\r
-#define SOFT_DEBUGGER_REGISTER_DI 0x19\r
-#define SOFT_DEBUGGER_REGISTER_SI 0x1A\r
-#define SOFT_DEBUGGER_REGISTER_BP 0x1B\r
-#define SOFT_DEBUGGER_REGISTER_SP 0x1C\r
-#define SOFT_DEBUGGER_REGISTER_DX 0x1D\r
-#define SOFT_DEBUGGER_REGISTER_CX 0x1E\r
-#define SOFT_DEBUGGER_REGISTER_BX 0x1F\r
-#define SOFT_DEBUGGER_REGISTER_AX 0x20\r
+#define SOFT_DEBUGGER_REGISTER_DI 0x19\r
+#define SOFT_DEBUGGER_REGISTER_SI 0x1A\r
+#define SOFT_DEBUGGER_REGISTER_BP 0x1B\r
+#define SOFT_DEBUGGER_REGISTER_SP 0x1C\r
+#define SOFT_DEBUGGER_REGISTER_DX 0x1D\r
+#define SOFT_DEBUGGER_REGISTER_CX 0x1E\r
+#define SOFT_DEBUGGER_REGISTER_BX 0x1F\r
+#define SOFT_DEBUGGER_REGISTER_AX 0x20\r
\r
//\r
// This below registers are only available for x64 (not valid for Ia32 mode)\r
//\r
-#define SOFT_DEBUGGER_REGISTER_CR8 0x21\r
-#define SOFT_DEBUGGER_REGISTER_R8 0x22\r
-#define SOFT_DEBUGGER_REGISTER_R9 0x23\r
-#define SOFT_DEBUGGER_REGISTER_R10 0x24\r
-#define SOFT_DEBUGGER_REGISTER_R11 0x25\r
-#define SOFT_DEBUGGER_REGISTER_R12 0x26\r
-#define SOFT_DEBUGGER_REGISTER_R13 0x27\r
-#define SOFT_DEBUGGER_REGISTER_R14 0x28\r
-#define SOFT_DEBUGGER_REGISTER_R15 0x29\r
+#define SOFT_DEBUGGER_REGISTER_CR8 0x21\r
+#define SOFT_DEBUGGER_REGISTER_R8 0x22\r
+#define SOFT_DEBUGGER_REGISTER_R9 0x23\r
+#define SOFT_DEBUGGER_REGISTER_R10 0x24\r
+#define SOFT_DEBUGGER_REGISTER_R11 0x25\r
+#define SOFT_DEBUGGER_REGISTER_R12 0x26\r
+#define SOFT_DEBUGGER_REGISTER_R13 0x27\r
+#define SOFT_DEBUGGER_REGISTER_R14 0x28\r
+#define SOFT_DEBUGGER_REGISTER_R15 0x29\r
\r
//\r
// This below registers are FP / MMX / XMM registers\r
//\r
-#define SOFT_DEBUGGER_REGISTER_FP_BASE 0x30\r
+#define SOFT_DEBUGGER_REGISTER_FP_BASE 0x30\r
\r
-#define SOFT_DEBUGGER_REGISTER_FP_FCW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x00)\r
-#define SOFT_DEBUGGER_REGISTER_FP_FSW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x01)\r
-#define SOFT_DEBUGGER_REGISTER_FP_FTW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x02)\r
-#define SOFT_DEBUGGER_REGISTER_FP_OPCODE (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x03)\r
-#define SOFT_DEBUGGER_REGISTER_FP_EIP (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x04)\r
-#define SOFT_DEBUGGER_REGISTER_FP_CS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x05)\r
-#define SOFT_DEBUGGER_REGISTER_FP_DATAOFFSET (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x06)\r
-#define SOFT_DEBUGGER_REGISTER_FP_DS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x07)\r
-#define SOFT_DEBUGGER_REGISTER_FP_MXCSR (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x08)\r
-#define SOFT_DEBUGGER_REGISTER_FP_MXCSR_MASK (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x09)\r
-#define SOFT_DEBUGGER_REGISTER_ST0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0A)\r
-#define SOFT_DEBUGGER_REGISTER_ST1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0B)\r
-#define SOFT_DEBUGGER_REGISTER_ST2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0C)\r
-#define SOFT_DEBUGGER_REGISTER_ST3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0D)\r
-#define SOFT_DEBUGGER_REGISTER_ST4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0E)\r
-#define SOFT_DEBUGGER_REGISTER_ST5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0F)\r
-#define SOFT_DEBUGGER_REGISTER_ST6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x10)\r
-#define SOFT_DEBUGGER_REGISTER_ST7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x11)\r
-#define SOFT_DEBUGGER_REGISTER_XMM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x12)\r
-#define SOFT_DEBUGGER_REGISTER_XMM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x13)\r
-#define SOFT_DEBUGGER_REGISTER_XMM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x14)\r
-#define SOFT_DEBUGGER_REGISTER_XMM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x15)\r
-#define SOFT_DEBUGGER_REGISTER_XMM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x16)\r
-#define SOFT_DEBUGGER_REGISTER_XMM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x17)\r
-#define SOFT_DEBUGGER_REGISTER_XMM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x18)\r
-#define SOFT_DEBUGGER_REGISTER_XMM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x19)\r
-#define SOFT_DEBUGGER_REGISTER_XMM8 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1A)\r
-#define SOFT_DEBUGGER_REGISTER_XMM9 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1B)\r
-#define SOFT_DEBUGGER_REGISTER_XMM10 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1C)\r
-#define SOFT_DEBUGGER_REGISTER_XMM11 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1D)\r
-#define SOFT_DEBUGGER_REGISTER_XMM12 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1E)\r
-#define SOFT_DEBUGGER_REGISTER_XMM13 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1F)\r
-#define SOFT_DEBUGGER_REGISTER_XMM14 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x20)\r
-#define SOFT_DEBUGGER_REGISTER_XMM15 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x21)\r
-#define SOFT_DEBUGGER_REGISTER_MM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x22)\r
-#define SOFT_DEBUGGER_REGISTER_MM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x23)\r
-#define SOFT_DEBUGGER_REGISTER_MM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x24)\r
-#define SOFT_DEBUGGER_REGISTER_MM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x25)\r
-#define SOFT_DEBUGGER_REGISTER_MM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x26)\r
-#define SOFT_DEBUGGER_REGISTER_MM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x27)\r
-#define SOFT_DEBUGGER_REGISTER_MM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x28)\r
-#define SOFT_DEBUGGER_REGISTER_MM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x29)\r
+#define SOFT_DEBUGGER_REGISTER_FP_FCW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x00)\r
+#define SOFT_DEBUGGER_REGISTER_FP_FSW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x01)\r
+#define SOFT_DEBUGGER_REGISTER_FP_FTW (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x02)\r
+#define SOFT_DEBUGGER_REGISTER_FP_OPCODE (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x03)\r
+#define SOFT_DEBUGGER_REGISTER_FP_EIP (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x04)\r
+#define SOFT_DEBUGGER_REGISTER_FP_CS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x05)\r
+#define SOFT_DEBUGGER_REGISTER_FP_DATAOFFSET (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x06)\r
+#define SOFT_DEBUGGER_REGISTER_FP_DS (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x07)\r
+#define SOFT_DEBUGGER_REGISTER_FP_MXCSR (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x08)\r
+#define SOFT_DEBUGGER_REGISTER_FP_MXCSR_MASK (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x09)\r
+#define SOFT_DEBUGGER_REGISTER_ST0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0A)\r
+#define SOFT_DEBUGGER_REGISTER_ST1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0B)\r
+#define SOFT_DEBUGGER_REGISTER_ST2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0C)\r
+#define SOFT_DEBUGGER_REGISTER_ST3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0D)\r
+#define SOFT_DEBUGGER_REGISTER_ST4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0E)\r
+#define SOFT_DEBUGGER_REGISTER_ST5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x0F)\r
+#define SOFT_DEBUGGER_REGISTER_ST6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x10)\r
+#define SOFT_DEBUGGER_REGISTER_ST7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x11)\r
+#define SOFT_DEBUGGER_REGISTER_XMM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x12)\r
+#define SOFT_DEBUGGER_REGISTER_XMM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x13)\r
+#define SOFT_DEBUGGER_REGISTER_XMM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x14)\r
+#define SOFT_DEBUGGER_REGISTER_XMM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x15)\r
+#define SOFT_DEBUGGER_REGISTER_XMM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x16)\r
+#define SOFT_DEBUGGER_REGISTER_XMM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x17)\r
+#define SOFT_DEBUGGER_REGISTER_XMM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x18)\r
+#define SOFT_DEBUGGER_REGISTER_XMM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x19)\r
+#define SOFT_DEBUGGER_REGISTER_XMM8 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1A)\r
+#define SOFT_DEBUGGER_REGISTER_XMM9 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1B)\r
+#define SOFT_DEBUGGER_REGISTER_XMM10 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1C)\r
+#define SOFT_DEBUGGER_REGISTER_XMM11 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1D)\r
+#define SOFT_DEBUGGER_REGISTER_XMM12 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1E)\r
+#define SOFT_DEBUGGER_REGISTER_XMM13 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x1F)\r
+#define SOFT_DEBUGGER_REGISTER_XMM14 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x20)\r
+#define SOFT_DEBUGGER_REGISTER_XMM15 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x21)\r
+#define SOFT_DEBUGGER_REGISTER_MM0 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x22)\r
+#define SOFT_DEBUGGER_REGISTER_MM1 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x23)\r
+#define SOFT_DEBUGGER_REGISTER_MM2 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x24)\r
+#define SOFT_DEBUGGER_REGISTER_MM3 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x25)\r
+#define SOFT_DEBUGGER_REGISTER_MM4 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x26)\r
+#define SOFT_DEBUGGER_REGISTER_MM5 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x27)\r
+#define SOFT_DEBUGGER_REGISTER_MM6 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x28)\r
+#define SOFT_DEBUGGER_REGISTER_MM7 (SOFT_DEBUGGER_REGISTER_FP_BASE + 0x29)\r
\r
-#define SOFT_DEBUGGER_REGISTER_MAX SOFT_DEBUGGER_REGISTER_MM7\r
+#define SOFT_DEBUGGER_REGISTER_MAX SOFT_DEBUGGER_REGISTER_MM7\r
\r
-#define SOFT_DEBUGGER_MSR_EFER (0xC0000080)\r
+#define SOFT_DEBUGGER_MSR_EFER (0xC0000080)\r
\r
#pragma pack(1)\r
\r
/// FP / MMX / XMM registers (see fxrstor instruction definition)\r
///\r
typedef struct {\r
- UINT16 Fcw;\r
- UINT16 Fsw;\r
- UINT16 Ftw;\r
- UINT16 Opcode;\r
- UINT32 Eip;\r
- UINT16 Cs;\r
- UINT16 Reserved1;\r
- UINT32 DataOffset;\r
- UINT16 Ds;\r
- UINT8 Reserved2[2];\r
- UINT32 Mxcsr;\r
- UINT32 Mxcsr_Mask;\r
- UINT8 St0Mm0[10];\r
- UINT8 Reserved3[6];\r
- UINT8 St1Mm1[10];\r
- UINT8 Reserved4[6];\r
- UINT8 St2Mm2[10];\r
- UINT8 Reserved5[6];\r
- UINT8 St3Mm3[10];\r
- UINT8 Reserved6[6];\r
- UINT8 St4Mm4[10];\r
- UINT8 Reserved7[6];\r
- UINT8 St5Mm5[10];\r
- UINT8 Reserved8[6];\r
- UINT8 St6Mm6[10];\r
- UINT8 Reserved9[6];\r
- UINT8 St7Mm7[10];\r
- UINT8 Reserved10[6];\r
- UINT8 Xmm0[16];\r
- UINT8 Xmm1[16];\r
- UINT8 Xmm2[16];\r
- UINT8 Xmm3[16];\r
- UINT8 Xmm4[16];\r
- UINT8 Xmm5[16];\r
- UINT8 Xmm6[16];\r
- UINT8 Xmm7[16];\r
- UINT8 Reserved11[14 * 16];\r
+ UINT16 Fcw;\r
+ UINT16 Fsw;\r
+ UINT16 Ftw;\r
+ UINT16 Opcode;\r
+ UINT32 Eip;\r
+ UINT16 Cs;\r
+ UINT16 Reserved1;\r
+ UINT32 DataOffset;\r
+ UINT16 Ds;\r
+ UINT8 Reserved2[2];\r
+ UINT32 Mxcsr;\r
+ UINT32 Mxcsr_Mask;\r
+ UINT8 St0Mm0[10];\r
+ UINT8 Reserved3[6];\r
+ UINT8 St1Mm1[10];\r
+ UINT8 Reserved4[6];\r
+ UINT8 St2Mm2[10];\r
+ UINT8 Reserved5[6];\r
+ UINT8 St3Mm3[10];\r
+ UINT8 Reserved6[6];\r
+ UINT8 St4Mm4[10];\r
+ UINT8 Reserved7[6];\r
+ UINT8 St5Mm5[10];\r
+ UINT8 Reserved8[6];\r
+ UINT8 St6Mm6[10];\r
+ UINT8 Reserved9[6];\r
+ UINT8 St7Mm7[10];\r
+ UINT8 Reserved10[6];\r
+ UINT8 Xmm0[16];\r
+ UINT8 Xmm1[16];\r
+ UINT8 Xmm2[16];\r
+ UINT8 Xmm3[16];\r
+ UINT8 Xmm4[16];\r
+ UINT8 Xmm5[16];\r
+ UINT8 Xmm6[16];\r
+ UINT8 Xmm7[16];\r
+ UINT8 Reserved11[14 * 16];\r
} DEBUG_DATA_IA32_FX_SAVE_STATE;\r
\r
///\r
/// IA-32 processor context definition\r
///\r
typedef struct {\r
- UINT32 ExceptionData;\r
- DEBUG_DATA_IA32_FX_SAVE_STATE FxSaveState;\r
- UINT32 Dr0;\r
- UINT32 Dr1;\r
- UINT32 Dr2;\r
- UINT32 Dr3;\r
- UINT32 Dr6;\r
- UINT32 Dr7;\r
- UINT32 Eflags;\r
- UINT32 Ldtr;\r
- UINT32 Tr;\r
- UINT32 Gdtr[2];\r
- UINT32 Idtr[2];\r
- UINT32 Eip;\r
- UINT32 Gs;\r
- UINT32 Fs;\r
- UINT32 Es;\r
- UINT32 Ds;\r
- UINT32 Cs;\r
- UINT32 Ss;\r
- UINT32 Cr0;\r
- UINT32 Cr1; ///< Reserved\r
- UINT32 Cr2;\r
- UINT32 Cr3;\r
- UINT32 Cr4;\r
- UINT32 Edi;\r
- UINT32 Esi;\r
- UINT32 Ebp;\r
- UINT32 Esp;\r
- UINT32 Edx;\r
- UINT32 Ecx;\r
- UINT32 Ebx;\r
- UINT32 Eax;\r
+ UINT32 ExceptionData;\r
+ DEBUG_DATA_IA32_FX_SAVE_STATE FxSaveState;\r
+ UINT32 Dr0;\r
+ UINT32 Dr1;\r
+ UINT32 Dr2;\r
+ UINT32 Dr3;\r
+ UINT32 Dr6;\r
+ UINT32 Dr7;\r
+ UINT32 Eflags;\r
+ UINT32 Ldtr;\r
+ UINT32 Tr;\r
+ UINT32 Gdtr[2];\r
+ UINT32 Idtr[2];\r
+ UINT32 Eip;\r
+ UINT32 Gs;\r
+ UINT32 Fs;\r
+ UINT32 Es;\r
+ UINT32 Ds;\r
+ UINT32 Cs;\r
+ UINT32 Ss;\r
+ UINT32 Cr0;\r
+ UINT32 Cr1; ///< Reserved\r
+ UINT32 Cr2;\r
+ UINT32 Cr3;\r
+ UINT32 Cr4;\r
+ UINT32 Edi;\r
+ UINT32 Esi;\r
+ UINT32 Ebp;\r
+ UINT32 Esp;\r
+ UINT32 Edx;\r
+ UINT32 Ecx;\r
+ UINT32 Ebx;\r
+ UINT32 Eax;\r
} DEBUG_DATA_IA32_SYSTEM_CONTEXT;\r
\r
///\r
/// FP / MMX / XMM registers (see fxrstor instruction definition)\r
///\r
typedef struct {\r
- UINT16 Fcw;\r
- UINT16 Fsw;\r
- UINT16 Ftw;\r
- UINT16 Opcode;\r
- UINT32 Eip;\r
- UINT16 Cs;\r
- UINT16 Reserved1;\r
- UINT32 DataOffset;\r
- UINT16 Ds;\r
- UINT8 Reserved2[2];\r
- UINT32 Mxcsr;\r
- UINT32 Mxcsr_Mask;\r
- UINT8 St0Mm0[10];\r
- UINT8 Reserved3[6];\r
- UINT8 St1Mm1[10];\r
- UINT8 Reserved4[6];\r
- UINT8 St2Mm2[10];\r
- UINT8 Reserved5[6];\r
- UINT8 St3Mm3[10];\r
- UINT8 Reserved6[6];\r
- UINT8 St4Mm4[10];\r
- UINT8 Reserved7[6];\r
- UINT8 St5Mm5[10];\r
- UINT8 Reserved8[6];\r
- UINT8 St6Mm6[10];\r
- UINT8 Reserved9[6];\r
- UINT8 St7Mm7[10];\r
- UINT8 Reserved10[6];\r
- UINT8 Xmm0[16];\r
- UINT8 Xmm1[16];\r
- UINT8 Xmm2[16];\r
- UINT8 Xmm3[16];\r
- UINT8 Xmm4[16];\r
- UINT8 Xmm5[16];\r
- UINT8 Xmm6[16];\r
- UINT8 Xmm7[16];\r
- UINT8 Xmm8[16];\r
- UINT8 Xmm9[16];\r
- UINT8 Xmm10[16];\r
- UINT8 Xmm11[16];\r
- UINT8 Xmm12[16];\r
- UINT8 Xmm13[16];\r
- UINT8 Xmm14[16];\r
- UINT8 Xmm15[16];\r
- UINT8 Reserved11[6 * 16];\r
+ UINT16 Fcw;\r
+ UINT16 Fsw;\r
+ UINT16 Ftw;\r
+ UINT16 Opcode;\r
+ UINT32 Eip;\r
+ UINT16 Cs;\r
+ UINT16 Reserved1;\r
+ UINT32 DataOffset;\r
+ UINT16 Ds;\r
+ UINT8 Reserved2[2];\r
+ UINT32 Mxcsr;\r
+ UINT32 Mxcsr_Mask;\r
+ UINT8 St0Mm0[10];\r
+ UINT8 Reserved3[6];\r
+ UINT8 St1Mm1[10];\r
+ UINT8 Reserved4[6];\r
+ UINT8 St2Mm2[10];\r
+ UINT8 Reserved5[6];\r
+ UINT8 St3Mm3[10];\r
+ UINT8 Reserved6[6];\r
+ UINT8 St4Mm4[10];\r
+ UINT8 Reserved7[6];\r
+ UINT8 St5Mm5[10];\r
+ UINT8 Reserved8[6];\r
+ UINT8 St6Mm6[10];\r
+ UINT8 Reserved9[6];\r
+ UINT8 St7Mm7[10];\r
+ UINT8 Reserved10[6];\r
+ UINT8 Xmm0[16];\r
+ UINT8 Xmm1[16];\r
+ UINT8 Xmm2[16];\r
+ UINT8 Xmm3[16];\r
+ UINT8 Xmm4[16];\r
+ UINT8 Xmm5[16];\r
+ UINT8 Xmm6[16];\r
+ UINT8 Xmm7[16];\r
+ UINT8 Xmm8[16];\r
+ UINT8 Xmm9[16];\r
+ UINT8 Xmm10[16];\r
+ UINT8 Xmm11[16];\r
+ UINT8 Xmm12[16];\r
+ UINT8 Xmm13[16];\r
+ UINT8 Xmm14[16];\r
+ UINT8 Xmm15[16];\r
+ UINT8 Reserved11[6 * 16];\r
} DEBUG_DATA_X64_FX_SAVE_STATE;\r
\r
///\r
/// x64 processor context definition\r
///\r
typedef struct {\r
- UINT64 ExceptionData;\r
- DEBUG_DATA_X64_FX_SAVE_STATE FxSaveState;\r
- UINT64 Dr0;\r
- UINT64 Dr1;\r
- UINT64 Dr2;\r
- UINT64 Dr3;\r
- UINT64 Dr6;\r
- UINT64 Dr7;\r
- UINT64 Eflags;\r
- UINT64 Ldtr;\r
- UINT64 Tr;\r
- UINT64 Gdtr[2];\r
- UINT64 Idtr[2];\r
- UINT64 Eip;\r
- UINT64 Gs;\r
- UINT64 Fs;\r
- UINT64 Es;\r
- UINT64 Ds;\r
- UINT64 Cs;\r
- UINT64 Ss;\r
- UINT64 Cr0;\r
- UINT64 Cr1; ///< Reserved\r
- UINT64 Cr2;\r
- UINT64 Cr3;\r
- UINT64 Cr4;\r
- UINT64 Rdi;\r
- UINT64 Rsi;\r
- UINT64 Rbp;\r
- UINT64 Rsp;\r
- UINT64 Rdx;\r
- UINT64 Rcx;\r
- UINT64 Rbx;\r
- UINT64 Rax;\r
- UINT64 Cr8;\r
- UINT64 R8;\r
- UINT64 R9;\r
- UINT64 R10;\r
- UINT64 R11;\r
- UINT64 R12;\r
- UINT64 R13;\r
- UINT64 R14;\r
- UINT64 R15;\r
+ UINT64 ExceptionData;\r
+ DEBUG_DATA_X64_FX_SAVE_STATE FxSaveState;\r
+ UINT64 Dr0;\r
+ UINT64 Dr1;\r
+ UINT64 Dr2;\r
+ UINT64 Dr3;\r
+ UINT64 Dr6;\r
+ UINT64 Dr7;\r
+ UINT64 Eflags;\r
+ UINT64 Ldtr;\r
+ UINT64 Tr;\r
+ UINT64 Gdtr[2];\r
+ UINT64 Idtr[2];\r
+ UINT64 Eip;\r
+ UINT64 Gs;\r
+ UINT64 Fs;\r
+ UINT64 Es;\r
+ UINT64 Ds;\r
+ UINT64 Cs;\r
+ UINT64 Ss;\r
+ UINT64 Cr0;\r
+ UINT64 Cr1; ///< Reserved\r
+ UINT64 Cr2;\r
+ UINT64 Cr3;\r
+ UINT64 Cr4;\r
+ UINT64 Rdi;\r
+ UINT64 Rsi;\r
+ UINT64 Rbp;\r
+ UINT64 Rsp;\r
+ UINT64 Rdx;\r
+ UINT64 Rcx;\r
+ UINT64 Rbx;\r
+ UINT64 Rax;\r
+ UINT64 Cr8;\r
+ UINT64 R8;\r
+ UINT64 R9;\r
+ UINT64 R10;\r
+ UINT64 R11;\r
+ UINT64 R12;\r
+ UINT64 R13;\r
+ UINT64 R14;\r
+ UINT64 R15;\r
} DEBUG_DATA_X64_SYSTEM_CONTEXT;\r
\r
#pragma pack()\r
\r
#endif\r
-\r
#define DEBUG_AGENT_IMAGE_CONTINUE 0x01\r
\r
#endif\r
-\r
#ifndef __DEBUG_COMMUNICATION_LIB_H__\r
#define __DEBUG_COMMUNICATION_LIB_H__\r
\r
-typedef VOID * DEBUG_PORT_HANDLE;\r
+typedef VOID *DEBUG_PORT_HANDLE;\r
\r
/**\r
Caller provided function to be invoked at the end of DebugPortInitialize().\r
**/\r
typedef\r
VOID\r
-(EFIAPI * DEBUG_PORT_CONTINUE)(\r
+(EFIAPI *DEBUG_PORT_CONTINUE)(\r
IN VOID *Context,\r
IN DEBUG_PORT_HANDLE DebugPortHandle\r
);\r
IN DEBUG_PORT_CONTINUE Function\r
);\r
\r
-\r
/**\r
Read data from debug device and save the datas in buffer.\r
\r
UINTN\r
EFIAPI\r
DebugPortReadBuffer (\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
-\r
/**\r
Write data from buffer to debug device.\r
\r
UINTN\r
EFIAPI\r
DebugPortWriteBuffer (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
);\r
\r
/**\r
BOOLEAN\r
EFIAPI\r
DebugPortPollBuffer (\r
- IN DEBUG_PORT_HANDLE Handle\r
+ IN DEBUG_PORT_HANDLE Handle\r
);\r
\r
#endif\r
-\r
// Current revision of transfer protocol\r
// 0.4: Packet compression and decompression.\r
//\r
-#define DEBUG_AGENT_REVISION_03 ((0 << 16) | 03)\r
-#define DEBUG_AGENT_REVISION_04 ((0 << 16) | 04)\r
-#define DEBUG_AGENT_CAPABILITIES 0\r
+#define DEBUG_AGENT_REVISION_03 ((0 << 16) | 03)\r
+#define DEBUG_AGENT_REVISION_04 ((0 << 16) | 04)\r
+#define DEBUG_AGENT_CAPABILITIES 0\r
\r
//\r
// Definitions for the (A)ttach command\r
//\r
-#define DEBUG_STARTING_SYMBOL_ATTACH (0xFA)\r
+#define DEBUG_STARTING_SYMBOL_ATTACH (0xFA)\r
\r
//\r
// Definition for starting symbol of a normal debug packet. Choose a non-ASCII to avoid conflict with other serial output.\r
//\r
-#define DEBUG_STARTING_SYMBOL_NORMAL (0xFE)\r
+#define DEBUG_STARTING_SYMBOL_NORMAL (0xFE)\r
\r
//\r
// Definition for starting symbol of a (C)ompressed debug packet. Choose a non-ASCII to avoid conflict with other serial output.\r
// Definition for debug packet header for debug packets (not including attach command)\r
//\r
typedef struct {\r
- UINT8 StartSymbol;\r
- UINT8 Command;\r
- UINT8 Length; // Length of Debug Packet including header and payload in byte\r
- UINT8 SequenceNo;\r
- UINT16 Crc;\r
+ UINT8 StartSymbol;\r
+ UINT8 Command;\r
+ UINT8 Length; // Length of Debug Packet including header and payload in byte\r
+ UINT8 SequenceNo;\r
+ UINT16 Crc;\r
} DEBUG_PACKET_HEADER;\r
\r
//\r
// Definition for Command field for debug packets\r
//\r
-#define DEBUG_COMMAND_REQUEST (0 << 7)\r
-#define DEBUG_COMMAND_RESPONSE (1 << 7)\r
+#define DEBUG_COMMAND_REQUEST (0 << 7)\r
+#define DEBUG_COMMAND_RESPONSE (1 << 7)\r
\r
-#define IS_REQUEST(x) (((x)->Command & DEBUG_COMMAND_RESPONSE) == 0)\r
+#define IS_REQUEST(x) (((x)->Command & DEBUG_COMMAND_RESPONSE) == 0)\r
\r
//\r
// HOST initiated commands\r
//\r
-#define DEBUG_COMMAND_RESET (DEBUG_COMMAND_REQUEST | 0x00)\r
-#define DEBUG_COMMAND_GO (DEBUG_COMMAND_REQUEST | 0x01)\r
-#define DEBUG_COMMAND_BREAK_CAUSE (DEBUG_COMMAND_REQUEST | 0x02)\r
-#define DEBUG_COMMAND_SET_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x03)\r
-#define DEBUG_COMMAND_CLEAR_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x04)\r
-#define DEBUG_COMMAND_SINGLE_STEPPING (DEBUG_COMMAND_REQUEST | 0x05)\r
-#define DEBUG_COMMAND_SET_SW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x06)\r
-#define DEBUG_COMMAND_READ_MEMORY (DEBUG_COMMAND_REQUEST | 0x07)\r
-#define DEBUG_COMMAND_WRITE_MEMORY (DEBUG_COMMAND_REQUEST | 0x08)\r
-#define DEBUG_COMMAND_READ_IO (DEBUG_COMMAND_REQUEST | 0x09)\r
-#define DEBUG_COMMAND_WRITE_IO (DEBUG_COMMAND_REQUEST | 0x0A)\r
-#define DEBUG_COMMAND_READ_REGISTER (DEBUG_COMMAND_REQUEST | 0x0B)\r
-#define DEBUG_COMMAND_WRITE_REGISTER (DEBUG_COMMAND_REQUEST | 0x0C)\r
-#define DEBUG_COMMAND_READ_ALL_REGISTERS (DEBUG_COMMAND_REQUEST | 0x0D)\r
-#define DEBUG_COMMAND_ARCH_MODE (DEBUG_COMMAND_REQUEST | 0x0E)\r
-#define DEBUG_COMMAND_READ_MSR (DEBUG_COMMAND_REQUEST | 0x0F)\r
-#define DEBUG_COMMAND_WRITE_MSR (DEBUG_COMMAND_REQUEST | 0x10)\r
-#define DEBUG_COMMAND_SET_DEBUG_SETTING (DEBUG_COMMAND_REQUEST | 0x11)\r
-#define DEBUG_COMMAND_GET_REVISION (DEBUG_COMMAND_REQUEST | 0x12)\r
-#define DEBUG_COMMAND_GET_EXCEPTION (DEBUG_COMMAND_REQUEST | 0x13)\r
-#define DEBUG_COMMAND_SET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 0x14)\r
-#define DEBUG_COMMAND_GET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 0x15)\r
-#define DEBUG_COMMAND_DETACH (DEBUG_COMMAND_REQUEST | 0x16)\r
-#define DEBUG_COMMAND_CPUID (DEBUG_COMMAND_REQUEST | 0x17)\r
-#define DEBUG_COMMAND_SEARCH_SIGNATURE (DEBUG_COMMAND_REQUEST | 0x18)\r
-#define DEBUG_COMMAND_HALT (DEBUG_COMMAND_REQUEST | 0x19)\r
+#define DEBUG_COMMAND_RESET (DEBUG_COMMAND_REQUEST | 0x00)\r
+#define DEBUG_COMMAND_GO (DEBUG_COMMAND_REQUEST | 0x01)\r
+#define DEBUG_COMMAND_BREAK_CAUSE (DEBUG_COMMAND_REQUEST | 0x02)\r
+#define DEBUG_COMMAND_SET_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x03)\r
+#define DEBUG_COMMAND_CLEAR_HW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x04)\r
+#define DEBUG_COMMAND_SINGLE_STEPPING (DEBUG_COMMAND_REQUEST | 0x05)\r
+#define DEBUG_COMMAND_SET_SW_BREAKPOINT (DEBUG_COMMAND_REQUEST | 0x06)\r
+#define DEBUG_COMMAND_READ_MEMORY (DEBUG_COMMAND_REQUEST | 0x07)\r
+#define DEBUG_COMMAND_WRITE_MEMORY (DEBUG_COMMAND_REQUEST | 0x08)\r
+#define DEBUG_COMMAND_READ_IO (DEBUG_COMMAND_REQUEST | 0x09)\r
+#define DEBUG_COMMAND_WRITE_IO (DEBUG_COMMAND_REQUEST | 0x0A)\r
+#define DEBUG_COMMAND_READ_REGISTER (DEBUG_COMMAND_REQUEST | 0x0B)\r
+#define DEBUG_COMMAND_WRITE_REGISTER (DEBUG_COMMAND_REQUEST | 0x0C)\r
+#define DEBUG_COMMAND_READ_ALL_REGISTERS (DEBUG_COMMAND_REQUEST | 0x0D)\r
+#define DEBUG_COMMAND_ARCH_MODE (DEBUG_COMMAND_REQUEST | 0x0E)\r
+#define DEBUG_COMMAND_READ_MSR (DEBUG_COMMAND_REQUEST | 0x0F)\r
+#define DEBUG_COMMAND_WRITE_MSR (DEBUG_COMMAND_REQUEST | 0x10)\r
+#define DEBUG_COMMAND_SET_DEBUG_SETTING (DEBUG_COMMAND_REQUEST | 0x11)\r
+#define DEBUG_COMMAND_GET_REVISION (DEBUG_COMMAND_REQUEST | 0x12)\r
+#define DEBUG_COMMAND_GET_EXCEPTION (DEBUG_COMMAND_REQUEST | 0x13)\r
+#define DEBUG_COMMAND_SET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 0x14)\r
+#define DEBUG_COMMAND_GET_VIEWPOINT (DEBUG_COMMAND_REQUEST | 0x15)\r
+#define DEBUG_COMMAND_DETACH (DEBUG_COMMAND_REQUEST | 0x16)\r
+#define DEBUG_COMMAND_CPUID (DEBUG_COMMAND_REQUEST | 0x17)\r
+#define DEBUG_COMMAND_SEARCH_SIGNATURE (DEBUG_COMMAND_REQUEST | 0x18)\r
+#define DEBUG_COMMAND_HALT (DEBUG_COMMAND_REQUEST | 0x19)\r
\r
//\r
// TARGET initiated commands\r
//\r
-#define DEBUG_COMMAND_INIT_BREAK (DEBUG_COMMAND_REQUEST | 0x3F)\r
-#define DEBUG_COMMAND_BREAK_POINT (DEBUG_COMMAND_REQUEST | 0x3E)\r
-#define DEBUG_COMMAND_MEMORY_READY (DEBUG_COMMAND_REQUEST | 0x3D)\r
-#define DEBUG_COMMAND_PRINT_MESSAGE (DEBUG_COMMAND_REQUEST | 0x3C)\r
-#define DEBUG_COMMAND_ATTACH_BREAK (DEBUG_COMMAND_REQUEST | 0x3B)\r
+#define DEBUG_COMMAND_INIT_BREAK (DEBUG_COMMAND_REQUEST | 0x3F)\r
+#define DEBUG_COMMAND_BREAK_POINT (DEBUG_COMMAND_REQUEST | 0x3E)\r
+#define DEBUG_COMMAND_MEMORY_READY (DEBUG_COMMAND_REQUEST | 0x3D)\r
+#define DEBUG_COMMAND_PRINT_MESSAGE (DEBUG_COMMAND_REQUEST | 0x3C)\r
+#define DEBUG_COMMAND_ATTACH_BREAK (DEBUG_COMMAND_REQUEST | 0x3B)\r
\r
//\r
// Response commands\r
//\r
-#define DEBUG_COMMAND_OK (DEBUG_COMMAND_RESPONSE | 0x00)\r
-#define DEBUG_COMMAND_RESEND (DEBUG_COMMAND_RESPONSE | 0x01)\r
-#define DEBUG_COMMAND_ABORT (DEBUG_COMMAND_RESPONSE | 0x02)\r
+#define DEBUG_COMMAND_OK (DEBUG_COMMAND_RESPONSE | 0x00)\r
+#define DEBUG_COMMAND_RESEND (DEBUG_COMMAND_RESPONSE | 0x01)\r
+#define DEBUG_COMMAND_ABORT (DEBUG_COMMAND_RESPONSE | 0x02)\r
//\r
// The below 2 commands are used when transferring big data (like > ~250 bytes).\r
// The sequence is:\r
// <= OK with the last part of data\r
// OK (no data as ACK) =>\r
//\r
-#define DEBUG_COMMAND_IN_PROGRESS (DEBUG_COMMAND_RESPONSE | 0x03)\r
-#define DEBUG_COMMAND_CONTINUE (DEBUG_COMMAND_RESPONSE | 0x04)\r
+#define DEBUG_COMMAND_IN_PROGRESS (DEBUG_COMMAND_RESPONSE | 0x03)\r
+#define DEBUG_COMMAND_CONTINUE (DEBUG_COMMAND_RESPONSE | 0x04)\r
//\r
// The below 2 commands are used to support deferred halt:\r
// TARGET returns HALT_DEFERRED when it receives a HALT request in inter-active mode.\r
// TARGET returns HALT_PROCESSED when it receives a GO request and has a pending HALT request.\r
//\r
-#define DEBUG_COMMAND_HALT_DEFERRED (DEBUG_COMMAND_RESPONSE | 0x05)\r
-#define DEBUG_COMMAND_HALT_PROCESSED (DEBUG_COMMAND_RESPONSE | 0x06)\r
+#define DEBUG_COMMAND_HALT_DEFERRED (DEBUG_COMMAND_RESPONSE | 0x05)\r
+#define DEBUG_COMMAND_HALT_PROCESSED (DEBUG_COMMAND_RESPONSE | 0x06)\r
\r
-#define DEBUG_COMMAND_TIMEOUT (DEBUG_COMMAND_RESPONSE | 0x07)\r
-#define DEBUG_COMMAND_NOT_SUPPORTED (DEBUG_COMMAND_RESPONSE | 0x0F)\r
+#define DEBUG_COMMAND_TIMEOUT (DEBUG_COMMAND_RESPONSE | 0x07)\r
+#define DEBUG_COMMAND_NOT_SUPPORTED (DEBUG_COMMAND_RESPONSE | 0x0F)\r
\r
//\r
// Definition for data field for debug packets\r
//\r
-#define DEBUG_DATA_UPPER_LIMIT 0xff // Upper limit for the data size, by the limit of the packet header definition.\r
+#define DEBUG_DATA_UPPER_LIMIT 0xff // Upper limit for the data size, by the limit of the packet header definition.\r
\r
-#define DEBUG_DATA_MAXIMUM_REAL_DATA (DEBUG_DATA_UPPER_LIMIT - sizeof (DEBUG_PACKET_HEADER))\r
+#define DEBUG_DATA_MAXIMUM_REAL_DATA (DEBUG_DATA_UPPER_LIMIT - sizeof (DEBUG_PACKET_HEADER))\r
\r
//\r
// Response data for DEBUG_COMMAND_BREAK_CAUSE\r
//\r
typedef struct {\r
- UINT8 Cause;\r
- UINT64 StopAddress;\r
+ UINT8 Cause;\r
+ UINT64 StopAddress;\r
} DEBUG_DATA_RESPONSE_BREAK_CAUSE;\r
//\r
// Break type definitions for DEBUG_DATA_BREAK_CAUSE\r
// Response data for DEBUG_COMMAND_ARCH_MODE, defined as SOFT_DEBUGGER_PROCESSOR_...\r
//\r
typedef struct {\r
- UINT8 CpuMode;\r
+ UINT8 CpuMode;\r
} DEBUG_DATA_RESPONSE_ARCH_MODE;\r
//\r
// Cpu architecture definitions for DEBUG_DATA_RESPONSE_ARCH_MODE\r
//\r
-#define DEBUG_DATA_BREAK_CPU_ARCH_IA16 0\r
-#define DEBUG_DATA_BREAK_CPU_ARCH_IA32 1\r
-#define DEBUG_DATA_BREAK_CPU_ARCH_X64 2\r
+#define DEBUG_DATA_BREAK_CPU_ARCH_IA16 0\r
+#define DEBUG_DATA_BREAK_CPU_ARCH_IA32 1\r
+#define DEBUG_DATA_BREAK_CPU_ARCH_X64 2\r
\r
typedef struct {\r
- UINT8 Length:2; // Refer to below DEBUG_DATA_BREAKPOINT_LENGTH_XX macros\r
- UINT8 Access:2; // Refer to below DEBUG_DATA_BREAKPOINT_ACCESS_XX macros\r
- UINT8 Index:2; // Index of debug register\r
- UINT8 Reserved:2;\r
+ UINT8 Length : 2; // Refer to below DEBUG_DATA_BREAKPOINT_LENGTH_XX macros\r
+ UINT8 Access : 2; // Refer to below DEBUG_DATA_BREAKPOINT_ACCESS_XX macros\r
+ UINT8 Index : 2; // Index of debug register\r
+ UINT8 Reserved : 2;\r
} DEBUG_DATA_BREAKPOINT_TYPE;\r
-#define DEBUG_DATA_BREAKPOINT_MEMORY_ACCESS (0x3)\r
-#define DEBUG_DATA_BREAKPOINT_IO_ACCESS (0x2)\r
-#define DEBUG_DATA_BREAKPOINT_MEMORY_WRITE (0x1)\r
-#define DEBUG_DATA_BREAKPOINT_MEMORY_EXECUTE (0x0)\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_32 (0x3)\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_64 (0x2)\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_16 (0x1)\r
-#define DEBUG_DATA_BREAKPOINT_LENGTH_8 (0x0)\r
+#define DEBUG_DATA_BREAKPOINT_MEMORY_ACCESS (0x3)\r
+#define DEBUG_DATA_BREAKPOINT_IO_ACCESS (0x2)\r
+#define DEBUG_DATA_BREAKPOINT_MEMORY_WRITE (0x1)\r
+#define DEBUG_DATA_BREAKPOINT_MEMORY_EXECUTE (0x0)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_32 (0x3)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_64 (0x2)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_16 (0x1)\r
+#define DEBUG_DATA_BREAKPOINT_LENGTH_8 (0x0)\r
\r
//\r
// Request data for DEBUG_COMMAND_SET_HW_BREAKPOINT\r
//\r
typedef struct {\r
- DEBUG_DATA_BREAKPOINT_TYPE Type;\r
- UINT64 Address;\r
+ DEBUG_DATA_BREAKPOINT_TYPE Type;\r
+ UINT64 Address;\r
} DEBUG_DATA_SET_HW_BREAKPOINT;\r
\r
//\r
// Request data for DEBUG_COMMAND_CLEAR_HW_BREAKPOINT\r
//\r
typedef struct {\r
- UINT8 IndexMask; // 0x0f will clear all hw breakpoints\r
+ UINT8 IndexMask; // 0x0f will clear all hw breakpoints\r
} DEBUG_DATA_CLEAR_HW_BREAKPOINT;\r
\r
//\r
// Request and response data for DEBUG_COMMAND_SET_SW_BREAKPOINT\r
//\r
typedef struct {\r
- UINT64 Address;\r
+ UINT64 Address;\r
} DEBUG_DATA_SET_SW_BREAKPOINT;\r
\r
typedef struct {\r
- UINT8 OriginalData;\r
+ UINT8 OriginalData;\r
} DEBUG_DATA_RESPONSE_SET_SW_BREAKPOINT;\r
\r
//\r
// Request data for DEBUG_COMMAND_READ_MEMORY\r
//\r
typedef struct {\r
- UINT64 Address;\r
- UINT8 Width;\r
- UINT16 Count;\r
+ UINT64 Address;\r
+ UINT8 Width;\r
+ UINT16 Count;\r
} DEBUG_DATA_READ_MEMORY;\r
\r
//\r
// Request data for DEBUG_COMMAND_WRITE_MEMORY\r
//\r
typedef struct {\r
- UINT64 Address;\r
- UINT8 Width;\r
- UINT16 Count;\r
- UINT8 Data[1]; // The actual length is (Width * Count)\r
+ UINT64 Address;\r
+ UINT8 Width;\r
+ UINT16 Count;\r
+ UINT8 Data[1]; // The actual length is (Width * Count)\r
} DEBUG_DATA_WRITE_MEMORY;\r
\r
//\r
// Request and response data for DEBUG_COMMAND_READ_IO\r
//\r
typedef struct {\r
- UINT64 Port;\r
- UINT8 Width;\r
+ UINT64 Port;\r
+ UINT8 Width;\r
} DEBUG_DATA_READ_IO;\r
\r
typedef struct {\r
- UINT8 Data[1]; // The actual length depends on the packet header\r
+ UINT8 Data[1]; // The actual length depends on the packet header\r
} DEBUG_DATA_RESPONSE_READ_IO;\r
\r
//\r
// Request data for DEBUG_COMMAND_WRITE_IO\r
//\r
typedef struct {\r
- UINT64 Port;\r
- UINT8 Width;\r
- UINT8 Data[1]; // The actual length is Width\r
+ UINT64 Port;\r
+ UINT8 Width;\r
+ UINT8 Data[1]; // The actual length is Width\r
} DEBUG_DATA_WRITE_IO;\r
\r
//\r
// Request data for DEBUG_COMMAND_READ_REGISTER\r
//\r
typedef struct {\r
- UINT8 Index; // defined as SOFT_DEBUGGER_REGISTER_XX\r
+ UINT8 Index; // defined as SOFT_DEBUGGER_REGISTER_XX\r
} DEBUG_DATA_READ_REGISTER;\r
\r
//\r
// Request data for DEBUG_COMMAND_WRITE_REGISTER\r
//\r
typedef struct {\r
- UINT8 Index; // defined as SOFT_DEBUGGER_REGISTER_XX\r
- UINT8 Length;\r
- UINT8 Data[1]; // The actual length is Length\r
+ UINT8 Index; // defined as SOFT_DEBUGGER_REGISTER_XX\r
+ UINT8 Length;\r
+ UINT8 Data[1]; // The actual length is Length\r
} DEBUG_DATA_WRITE_REGISTER;\r
\r
//\r
// Request and response data for DEBUG_COMMAND_READ_MSR\r
//\r
typedef struct {\r
- UINT32 Index;\r
+ UINT32 Index;\r
} DEBUG_DATA_READ_MSR;\r
\r
typedef struct {\r
- UINT64 Value;\r
+ UINT64 Value;\r
} DEBUG_DATA_RESPONSE_READ_MSR;\r
\r
//\r
// Request data for DEBUG_COMMAND_WRITE_MSR\r
//\r
typedef struct {\r
- UINT32 Index;\r
- UINT64 Value;\r
+ UINT32 Index;\r
+ UINT64 Value;\r
} DEBUG_DATA_WRITE_MSR;\r
\r
//\r
// Response data for DEBUG_COMMAND_GET_REVISION\r
//\r
typedef struct {\r
- UINT32 Revision;\r
- UINT32 Capabilities;\r
+ UINT32 Revision;\r
+ UINT32 Capabilities;\r
} DEBUG_DATA_RESPONSE_GET_REVISION;\r
\r
//\r
// Response data for DEBUG_COMMAND_GET_EXCEPTION\r
//\r
typedef struct {\r
- UINT8 ExceptionNum;\r
- UINT32 ExceptionData;\r
+ UINT8 ExceptionNum;\r
+ UINT32 ExceptionData;\r
} DEBUG_DATA_RESPONSE_GET_EXCEPTION;\r
\r
//\r
// Request data for DEBUG_DATA_SET_DEBUG_SETTING\r
//\r
typedef struct {\r
- UINT8 Key;\r
- UINT8 Value;\r
+ UINT8 Key;\r
+ UINT8 Value;\r
} DEBUG_DATA_SET_DEBUG_SETTING;\r
//\r
// Supported keys\r
//\r
// Bitmask of print error level for debug message\r
//\r
-#define DEBUG_AGENT_ERROR BIT0\r
-#define DEBUG_AGENT_WARNING BIT1\r
-#define DEBUG_AGENT_INFO BIT2\r
-#define DEBUG_AGENT_VERBOSE BIT3\r
+#define DEBUG_AGENT_ERROR BIT0\r
+#define DEBUG_AGENT_WARNING BIT1\r
+#define DEBUG_AGENT_INFO BIT2\r
+#define DEBUG_AGENT_VERBOSE BIT3\r
\r
//\r
// Request data for DEBUG_COMMAND_SET_VIEWPOINT\r
//\r
typedef struct {\r
- UINT32 ViewPoint; // The index of viewpoint will be set\r
+ UINT32 ViewPoint; // The index of viewpoint will be set\r
} DEBUG_DATA_SET_VIEWPOINT;\r
\r
//\r
// Response data for DEBUG_COMMAND_GET_VIEWPOINT\r
//\r
typedef struct {\r
- UINT32 ViewPoint; // The index of viewpoint will be returned\r
+ UINT32 ViewPoint; // The index of viewpoint will be returned\r
} DEBUG_DATA_RESPONSE_GET_VIEWPOINT;\r
\r
//\r
// Request and response data for DEBUG_COMMAND_CPUID\r
//\r
typedef struct {\r
- UINT32 Eax; // The value of EAX prior to invoking the CPUID instruction\r
- UINT32 Ecx; // The value of ECX prior to invoking the CPUID instruction\r
+ UINT32 Eax; // The value of EAX prior to invoking the CPUID instruction\r
+ UINT32 Ecx; // The value of ECX prior to invoking the CPUID instruction\r
} DEBUG_DATA_CPUID;\r
\r
typedef struct {\r
- UINT32 Eax; // The value of EAX returned by the CPUID instruction\r
- UINT32 Ebx; // The value of EBX returned by the CPUID instruction\r
- UINT32 Ecx; // The value of ECX returned by the CPUID instruction\r
- UINT32 Edx; // The value of EDX returned by the CPUID instruction\r
+ UINT32 Eax; // The value of EAX returned by the CPUID instruction\r
+ UINT32 Ebx; // The value of EBX returned by the CPUID instruction\r
+ UINT32 Ecx; // The value of ECX returned by the CPUID instruction\r
+ UINT32 Edx; // The value of EDX returned by the CPUID instruction\r
} DEBUG_DATA_RESPONSE_CPUID;\r
\r
//\r
// Request and response data for DEBUG_COMMAND_SEARCH_SIGNATURE\r
//\r
typedef struct {\r
- UINT64 Start;\r
- UINT32 Count;\r
- UINT32 Alignment;\r
- BOOLEAN Positive; // TRUE to search in higher address memory\r
- UINT8 DataLength;\r
- UINT8 Data[1];\r
+ UINT64 Start;\r
+ UINT32 Count;\r
+ UINT32 Alignment;\r
+ BOOLEAN Positive; // TRUE to search in higher address memory\r
+ UINT8 DataLength;\r
+ UINT8 Data[1];\r
} DEBUG_DATA_SEARCH_SIGNATURE;\r
\r
typedef struct {\r
- UINT64 Address; // -1 indicates not found\r
+ UINT64 Address; // -1 indicates not found\r
} DEBUG_DATA_RESPONSE_SEARCH_SIGNATURE;\r
\r
#pragma pack()\r
\r
#endif\r
-\r
#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
//\r
// These macros may be already defined in DebugAgentLib.h\r
//\r
-#define DEBUG_AGENT_INIT_PEI 9\r
-#define DEBUG_AGENT_INIT_DXE_LOAD 10\r
-#define DEBUG_AGENT_INIT_DXE_UNLOAD 11\r
-#define DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64 12\r
+#define DEBUG_AGENT_INIT_PEI 9\r
+#define DEBUG_AGENT_INIT_DXE_LOAD 10\r
+#define DEBUG_AGENT_INIT_DXE_UNLOAD 11\r
+#define DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64 12\r
\r
-#define DEBUG_INT1_VECTOR DEBUG_EXCEPT_DEBUG\r
-#define DEBUG_INT3_VECTOR DEBUG_EXCEPT_BREAKPOINT\r
-#define DEBUG_TIMER_VECTOR 32\r
-#define DEBUG_MAILBOX_VECTOR 33\r
+#define DEBUG_INT1_VECTOR DEBUG_EXCEPT_DEBUG\r
+#define DEBUG_INT3_VECTOR DEBUG_EXCEPT_BREAKPOINT\r
+#define DEBUG_TIMER_VECTOR 32\r
+#define DEBUG_MAILBOX_VECTOR 33\r
\r
//\r
// Timeout value for reading packet (unit is microsecond)\r
//\r
-#define READ_PACKET_TIMEOUT (500 * 1000)\r
-#define DEBUG_TIMER_INTERVAL (100 * 1000)\r
+#define READ_PACKET_TIMEOUT (500 * 1000)\r
+#define DEBUG_TIMER_INTERVAL (100 * 1000)\r
\r
-#define SOFT_INTERRUPT_SIGNATURE SIGNATURE_32('S','O','F','T')\r
-#define SYSTEM_RESET_SIGNATURE SIGNATURE_32('S','Y','S','R')\r
-#define MEMORY_READY_SIGNATURE SIGNATURE_32('M','E','M','R')\r
+#define SOFT_INTERRUPT_SIGNATURE SIGNATURE_32('S','O','F','T')\r
+#define SYSTEM_RESET_SIGNATURE SIGNATURE_32('S','Y','S','R')\r
+#define MEMORY_READY_SIGNATURE SIGNATURE_32('M','E','M','R')\r
\r
-extern UINTN Exception0Handle;\r
-extern UINTN TimerInterruptHandle;\r
-extern UINT32 ExceptionStubHeaderSize;\r
-extern BOOLEAN mSkipBreakpoint;\r
-extern EFI_VECTOR_HANDOFF_INFO mVectorHandoffInfoDebugAgent[];\r
-extern UINTN mVectorHandoffInfoCount;\r
+extern UINTN Exception0Handle;\r
+extern UINTN TimerInterruptHandle;\r
+extern UINT32 ExceptionStubHeaderSize;\r
+extern BOOLEAN mSkipBreakpoint;\r
+extern EFI_VECTOR_HANDOFF_INFO mVectorHandoffInfoDebugAgent[];\r
+extern UINTN mVectorHandoffInfoCount;\r
\r
//\r
// CPU exception information issued by debug agent\r
//\r
// This field is used to save CPU content before executing HOST command\r
//\r
- BASE_LIBRARY_JUMP_BUFFER JumpBuffer;\r
+ BASE_LIBRARY_JUMP_BUFFER JumpBuffer;\r
//\r
// This field returns the exception information issued by the HOST command\r
//\r
- DEBUG_DATA_RESPONSE_GET_EXCEPTION ExceptionContent;\r
+ DEBUG_DATA_RESPONSE_GET_EXCEPTION ExceptionContent;\r
} DEBUG_AGENT_EXCEPTION_BUFFER;\r
\r
#define DEBUG_AGENT_FLAG_HOST_ATTACHED BIT0\r
//\r
// Lower 32 bits to store the status of DebugAgent\r
//\r
- UINT32 HostAttached : 1; // 1: HOST is attached\r
- UINT32 AgentInProgress : 1; // 1: Debug Agent is communicating with HOST\r
- UINT32 MemoryReady : 1; // 1: Memory is ready\r
- UINT32 SteppingFlag : 1; // 1: Agent is running stepping command\r
- UINT32 CheckMailboxInHob : 1; // 1: Need to check mailbox saved in HOB\r
- UINT32 InitArch : 2; // value of DEBUG_DATA_RESPONSE_ARCH_MODE\r
- UINT32 InterruptFlag : 1; // 1: EFLAGS.IF is set\r
- UINT32 Reserved1 : 24;\r
+ UINT32 HostAttached : 1; // 1: HOST is attached\r
+ UINT32 AgentInProgress : 1; // 1: Debug Agent is communicating with HOST\r
+ UINT32 MemoryReady : 1; // 1: Memory is ready\r
+ UINT32 SteppingFlag : 1; // 1: Agent is running stepping command\r
+ UINT32 CheckMailboxInHob : 1; // 1: Need to check mailbox saved in HOB\r
+ UINT32 InitArch : 2; // value of DEBUG_DATA_RESPONSE_ARCH_MODE\r
+ UINT32 InterruptFlag : 1; // 1: EFLAGS.IF is set\r
+ UINT32 Reserved1 : 24;\r
//\r
// Higher 32bits to control the behavior of DebugAgent\r
//\r
- UINT32 BreakOnNextSmi : 1; // 1: Break on next SMI\r
- UINT32 PrintErrorLevel : 4; // Bitmask of print error level for debug message\r
- UINT32 BreakOnBootScript : 1; // 1: Break before executing boot script\r
- UINT32 Reserved2 : 26;\r
+ UINT32 BreakOnNextSmi : 1; // 1: Break on next SMI\r
+ UINT32 PrintErrorLevel : 4; // Bitmask of print error level for debug message\r
+ UINT32 BreakOnBootScript : 1; // 1: Break before executing boot script\r
+ UINT32 Reserved2 : 26;\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} DEBUG_AGENT_FLAG;\r
\r
typedef struct {\r
- DEBUG_AGENT_FLAG DebugFlag;\r
- UINT64 DebugPortHandle;\r
+ DEBUG_AGENT_FLAG DebugFlag;\r
+ UINT64 DebugPortHandle;\r
//\r
// Pointer to DEBUG_AGENT_EXCEPTION_BUFFER\r
//\r
- UINT64 ExceptionBufferPointer;\r
- UINT8 LastAck; // The last ack packet type\r
- UINT8 SequenceNo;\r
- UINT8 HostSequenceNo;\r
- UINT32 DebugTimerFrequency;\r
- UINT8 CheckSum; // Mailbox checksum\r
- UINT8 ToBeCheckSum; // To be Mailbox checksum at the next\r
+ UINT64 ExceptionBufferPointer;\r
+ UINT8 LastAck; // The last ack packet type\r
+ UINT8 SequenceNo;\r
+ UINT8 HostSequenceNo;\r
+ UINT32 DebugTimerFrequency;\r
+ UINT8 CheckSum; // Mailbox checksum\r
+ UINT8 ToBeCheckSum; // To be Mailbox checksum at the next\r
} DEBUG_AGENT_MAILBOX;\r
#pragma pack()\r
\r
///\r
typedef union {\r
struct {\r
- UINT32 OffsetLow:16; ///< Offset bits 15..0.\r
- UINT32 Selector:16; ///< Selector.\r
- UINT32 Reserved_0:8; ///< Reserved.\r
- UINT32 GateType:8; ///< Gate Type. See #defines above.\r
- UINT32 OffsetHigh:16; ///< Offset bits 31..16.\r
+ UINT32 OffsetLow : 16; ///< Offset bits 15..0.\r
+ UINT32 Selector : 16; ///< Selector.\r
+ UINT32 Reserved_0 : 8; ///< Reserved.\r
+ UINT32 GateType : 8; ///< Gate Type. See #defines above.\r
+ UINT32 OffsetHigh : 16; ///< Offset bits 31..16.\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} IA32_IDT_ENTRY;\r
\r
-\r
typedef union {\r
struct {\r
- UINT32 LimitLow : 16;\r
- UINT32 BaseLow : 16;\r
- UINT32 BaseMid : 8;\r
- UINT32 Type : 4;\r
- UINT32 System : 1;\r
- UINT32 Dpl : 2;\r
- UINT32 Present : 1;\r
- UINT32 LimitHigh : 4;\r
- UINT32 Software : 1;\r
- UINT32 Reserved : 1;\r
- UINT32 DefaultSize : 1;\r
- UINT32 Granularity : 1;\r
- UINT32 BaseHigh : 8;\r
+ UINT32 LimitLow : 16;\r
+ UINT32 BaseLow : 16;\r
+ UINT32 BaseMid : 8;\r
+ UINT32 Type : 4;\r
+ UINT32 System : 1;\r
+ UINT32 Dpl : 2;\r
+ UINT32 Present : 1;\r
+ UINT32 LimitHigh : 4;\r
+ UINT32 Software : 1;\r
+ UINT32 Reserved : 1;\r
+ UINT32 DefaultSize : 1;\r
+ UINT32 Granularity : 1;\r
+ UINT32 BaseHigh : 8;\r
} Bits;\r
- UINT64 Uint64;\r
+ UINT64 Uint64;\r
} IA32_GDT;\r
\r
/**\r
**/\r
UINT8 *\r
ArchReadRegisterBuffer (\r
- IN DEBUG_CPU_CONTEXT *CpuContext,\r
- IN UINT8 Index,\r
- IN UINT8 *Width\r
+ IN DEBUG_CPU_CONTEXT *CpuContext,\r
+ IN UINT8 Index,\r
+ IN UINT8 *Width\r
);\r
\r
/**\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
/**\r
**/\r
EFI_STATUS\r
DebugReadBreakSymbol (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- OUT UINT8 *BreakSymbol\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ OUT UINT8 *BreakSymbol\r
);\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
**/\r
VOID\r
TriggerSoftInterrupt (\r
- IN UINT32 Signature\r
+ IN UINT32 Signature\r
);\r
\r
/**\r
**/\r
VOID\r
FindAndReportModuleImageInfo (\r
- IN UINTN AlignSize\r
+ IN UINTN AlignSize\r
);\r
\r
/**\r
**/\r
VOID\r
UpdateMailboxChecksum (\r
- IN DEBUG_AGENT_MAILBOX *Mailbox\r
+ IN DEBUG_AGENT_MAILBOX *Mailbox\r
);\r
\r
/**\r
**/\r
VOID\r
VerifyMailboxChecksum (\r
- IN DEBUG_AGENT_MAILBOX *Mailbox\r
+ IN DEBUG_AGENT_MAILBOX *Mailbox\r
);\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
/**\r
**/\r
UINT32\r
GetDebugFlag (\r
- IN UINT64 FlagMask\r
+ IN UINT64 FlagMask\r
);\r
\r
/**\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
/**\r
**/\r
VOID *\r
GetExceptionHandlerInIdtEntry (\r
- IN UINTN ExceptionNum\r
+ IN UINTN ExceptionNum\r
);\r
\r
/**\r
**/\r
VOID\r
SetExceptionHandlerInIdtEntry (\r
- IN UINTN ExceptionNum,\r
- IN VOID *ExceptionHandler\r
+ IN UINTN ExceptionNum,\r
+ IN VOID *ExceptionHandler\r
);\r
\r
/**\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
/**\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
/**\r
**/\r
UINTN\r
DebugAgentReadBuffer (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN OUT UINT8 *Buffer,\r
- IN UINTN NumberOfBytes,\r
- IN UINTN Timeout\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN OUT UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes,\r
+ IN UINTN Timeout\r
);\r
\r
#endif\r
-\r
\r
#include "DebugAgent.h"\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED DEBUG_MP_CONTEXT volatile mDebugMpContext = {0,0,0,{0},{0},0,0,0,0,FALSE,FALSE};\r
+GLOBAL_REMOVE_IF_UNREFERENCED DEBUG_MP_CONTEXT volatile mDebugMpContext = { 0, 0, 0, { 0 }, { 0 }, 0, 0, 0, 0, FALSE, FALSE };\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED DEBUG_CPU_DATA volatile mDebugCpuData = {0};\r
+GLOBAL_REMOVE_IF_UNREFERENCED DEBUG_CPU_DATA volatile mDebugCpuData = { 0 };\r
\r
/**\r
Acquire a spin lock when Multi-processor supported.\r
**/\r
VOID\r
AcquireMpSpinLock (\r
- IN OUT SPIN_LOCK *MpSpinLock\r
+ IN OUT SPIN_LOCK *MpSpinLock\r
)\r
{\r
- if (!MultiProcessorDebugSupport()) {\r
+ if (!MultiProcessorDebugSupport ()) {\r
return;\r
}\r
\r
if (AcquireSpinLockOrFail (MpSpinLock)) {\r
break;\r
}\r
+\r
CpuPause ();\r
continue;\r
}\r
**/\r
VOID\r
ReleaseMpSpinLock (\r
- IN OUT SPIN_LOCK *MpSpinLock\r
+ IN OUT SPIN_LOCK *MpSpinLock\r
)\r
{\r
- if (!MultiProcessorDebugSupport()) {\r
+ if (!MultiProcessorDebugSupport ()) {\r
return;\r
}\r
\r
**/\r
VOID\r
HaltOtherProcessors (\r
- IN UINT32 CurrentProcessorIndex\r
+ IN UINT32 CurrentProcessorIndex\r
)\r
{\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "processor[%x]:Try to halt other processors.\n", CurrentProcessorIndex);\r
if (!DebugAgentIsBsp (CurrentProcessorIndex)) {\r
- SetIpiSentByApFlag (TRUE);;\r
+ SetIpiSentByApFlag (TRUE);\r
}\r
\r
mDebugMpContext.BreakAtCpuIndex = CurrentProcessorIndex;\r
// Send fixed IPI to other processors.\r
//\r
SendFixedIpiAllExcludingSelf (DEBUG_TIMER_VECTOR);\r
-\r
}\r
\r
/**\r
VOID\r
)\r
{\r
- UINT32 Index;\r
- UINT16 LocalApicID;\r
+ UINT32 Index;\r
+ UINT16 LocalApicID;\r
\r
- LocalApicID = (UINT16) GetApicId ();\r
+ LocalApicID = (UINT16)GetApicId ();\r
\r
AcquireMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
\r
- for (Index = 0; Index < mDebugCpuData.CpuCount; Index ++) {\r
+ for (Index = 0; Index < mDebugCpuData.CpuCount; Index++) {\r
if (mDebugCpuData.ApicID[Index] == LocalApicID) {\r
break;\r
}\r
\r
if (Index == mDebugCpuData.CpuCount) {\r
mDebugCpuData.ApicID[Index] = LocalApicID;\r
- mDebugCpuData.CpuCount ++ ;\r
+ mDebugCpuData.CpuCount++;\r
}\r
\r
ReleaseMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
mDebugMpContext.BspIndex = ProcessorIndex;\r
ReleaseMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
}\r
+\r
return TRUE;\r
} else {\r
return FALSE;\r
**/\r
VOID\r
SetCpuStopFlagByIndex (\r
- IN UINT32 ProcessorIndex,\r
- IN BOOLEAN StopFlag\r
+ IN UINT32 ProcessorIndex,\r
+ IN BOOLEAN StopFlag\r
)\r
{\r
- UINT8 Value;\r
- UINTN Index;\r
+ UINT8 Value;\r
+ UINTN Index;\r
\r
AcquireMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
\r
} else {\r
Value = BitFieldWrite8 (Value, Index, Index, 0);\r
}\r
+\r
mDebugMpContext.CpuStopStatusMask[ProcessorIndex / 8] = Value;\r
\r
ReleaseMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
**/\r
VOID\r
SetCpuBreakFlagByIndex (\r
- IN UINT32 ProcessorIndex,\r
- IN BOOLEAN BreakFlag\r
+ IN UINT32 ProcessorIndex,\r
+ IN BOOLEAN BreakFlag\r
)\r
{\r
- UINT8 Value;\r
- UINTN Index;\r
+ UINT8 Value;\r
+ UINTN Index;\r
\r
AcquireMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
\r
} else {\r
Value = BitFieldWrite8 (Value, Index, Index, 0);\r
}\r
+\r
mDebugMpContext.CpuBreakMask[ProcessorIndex / 8] = Value;\r
\r
ReleaseMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
**/\r
BOOLEAN\r
IsCpuStopped (\r
- IN UINT32 ProcessorIndex\r
+ IN UINT32 ProcessorIndex\r
)\r
{\r
- UINT8 CpuMask;\r
+ UINT8 CpuMask;\r
\r
- CpuMask = (UINT8) (1 << (ProcessorIndex % 8));\r
+ CpuMask = (UINT8)(1 << (ProcessorIndex % 8));\r
\r
if ((mDebugMpContext.CpuStopStatusMask[ProcessorIndex / 8] & CpuMask) != 0) {\r
return TRUE;\r
**/\r
VOID\r
SetCpuRunningFlag (\r
- IN BOOLEAN RunningFlag\r
+ IN BOOLEAN RunningFlag\r
)\r
{\r
AcquireMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
**/\r
VOID\r
SetDebugViewPoint (\r
- IN UINT32 ProcessorIndex\r
+ IN UINT32 ProcessorIndex\r
)\r
{\r
AcquireMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
**/\r
VOID\r
SetIpiSentByApFlag (\r
- IN BOOLEAN IpiSentByApFlag\r
+ IN BOOLEAN IpiSentByApFlag\r
)\r
{\r
AcquireMpSpinLock (&mDebugMpContext.MpContextSpinLock);\r
VOID\r
)\r
{\r
- UINT32 Index;\r
+ UINT32 Index;\r
\r
- for (Index = 0; Index < DEBUG_CPU_MAX_COUNT / 8; Index ++) {\r
+ for (Index = 0; Index < DEBUG_CPU_MAX_COUNT / 8; Index++) {\r
if (mDebugMpContext.CpuBreakMask[Index] != 0) {\r
- return (UINT32) LowBitSet32 (mDebugMpContext.CpuBreakMask[Index]) + Index * 8;\r
+ return (UINT32)LowBitSet32 (mDebugMpContext.CpuBreakMask[Index]) + Index * 8;\r
}\r
}\r
+\r
return (UINT32)-1;\r
}\r
\r
VOID\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
- for (Index = 0; Index < DEBUG_CPU_MAX_COUNT / 8; Index ++) {\r
+ for (Index = 0; Index < DEBUG_CPU_MAX_COUNT / 8; Index++) {\r
if (mDebugMpContext.CpuStopStatusMask[Index] != 0) {\r
return FALSE;\r
}\r
}\r
+\r
return TRUE;\r
}\r
\r
**/\r
BOOLEAN\r
IsFirstBreakProcessor (\r
- IN UINT32 ProcessorIndex\r
+ IN UINT32 ProcessorIndex\r
)\r
{\r
- if (MultiProcessorDebugSupport()) {\r
- if (mDebugMpContext.BreakAtCpuIndex != (UINT32) -1) {\r
+ if (MultiProcessorDebugSupport ()) {\r
+ if (mDebugMpContext.BreakAtCpuIndex != (UINT32)-1) {\r
//\r
// The current processor is not the first breaking one.\r
//\r
return TRUE;\r
}\r
}\r
+\r
return TRUE;\r
}\r
-\r
#ifndef _DEBUG_MP_H_\r
#define _DEBUG_MP_H_\r
\r
-#define DEBUG_CPU_MAX_COUNT 256\r
+#define DEBUG_CPU_MAX_COUNT 256\r
\r
typedef struct {\r
UINT32 CpuCount; ///< Processor count\r
} DEBUG_CPU_DATA;\r
\r
typedef struct {\r
- SPIN_LOCK MpContextSpinLock; ///< Lock for writing MP context\r
- SPIN_LOCK DebugPortSpinLock; ///< Lock for access debug port\r
- SPIN_LOCK MailboxSpinLock; ///< Lock for accessing mail box\r
- UINT8 CpuBreakMask[DEBUG_CPU_MAX_COUNT/8]; ///< Bitmask of all breaking CPUs\r
- UINT8 CpuStopStatusMask[DEBUG_CPU_MAX_COUNT/8]; ///< Bitmask of CPU stop status\r
- UINT32 ViewPointIndex; ///< Current view point to be debugged\r
- UINT32 BspIndex; ///< Processor index value of BSP\r
- UINT32 BreakAtCpuIndex; ///< Processor index value of the current breaking CPU\r
- UINT32 DebugTimerInitCount; ///< Record BSP's init timer count\r
- BOOLEAN IpiSentByAp; ///< TRUE: IPI is sent by AP. FALSE: IPI is sent by BSP\r
- BOOLEAN RunCommandSet; ///< TRUE: RUN command is executing. FALSE: RUN command has been executed.\r
+ SPIN_LOCK MpContextSpinLock; ///< Lock for writing MP context\r
+ SPIN_LOCK DebugPortSpinLock; ///< Lock for access debug port\r
+ SPIN_LOCK MailboxSpinLock; ///< Lock for accessing mail box\r
+ UINT8 CpuBreakMask[DEBUG_CPU_MAX_COUNT/8]; ///< Bitmask of all breaking CPUs\r
+ UINT8 CpuStopStatusMask[DEBUG_CPU_MAX_COUNT/8]; ///< Bitmask of CPU stop status\r
+ UINT32 ViewPointIndex; ///< Current view point to be debugged\r
+ UINT32 BspIndex; ///< Processor index value of BSP\r
+ UINT32 BreakAtCpuIndex; ///< Processor index value of the current breaking CPU\r
+ UINT32 DebugTimerInitCount; ///< Record BSP's init timer count\r
+ BOOLEAN IpiSentByAp; ///< TRUE: IPI is sent by AP. FALSE: IPI is sent by BSP\r
+ BOOLEAN RunCommandSet; ///< TRUE: RUN command is executing. FALSE: RUN command has been executed.\r
} DEBUG_MP_CONTEXT;\r
\r
-extern DEBUG_MP_CONTEXT volatile mDebugMpContext;\r
-extern DEBUG_CPU_DATA volatile mDebugCpuData;\r
+extern DEBUG_MP_CONTEXT volatile mDebugMpContext;\r
+extern DEBUG_CPU_DATA volatile mDebugCpuData;\r
\r
/**\r
Break the other processor by send IPI.\r
**/\r
VOID\r
HaltOtherProcessors (\r
- IN UINT32 CurrentProcessorIndex\r
+ IN UINT32 CurrentProcessorIndex\r
);\r
\r
/**\r
**/\r
VOID\r
AcquireMpSpinLock (\r
- IN OUT SPIN_LOCK *MpSpinLock\r
+ IN OUT SPIN_LOCK *MpSpinLock\r
);\r
\r
/**\r
**/\r
VOID\r
ReleaseMpSpinLock (\r
- IN OUT SPIN_LOCK *MpSpinLock\r
+ IN OUT SPIN_LOCK *MpSpinLock\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
DebugAgentIsBsp (\r
- IN UINT32 ProcessorIndex\r
+ IN UINT32 ProcessorIndex\r
);\r
\r
/**\r
**/\r
VOID\r
SetCpuStopFlagByIndex (\r
- IN UINT32 ProcessorIndex,\r
- IN BOOLEAN StopFlag\r
+ IN UINT32 ProcessorIndex,\r
+ IN BOOLEAN StopFlag\r
);\r
\r
/**\r
**/\r
VOID\r
SetCpuBreakFlagByIndex (\r
- IN UINT32 ProcessorIndex,\r
- IN BOOLEAN BreakFlag\r
+ IN UINT32 ProcessorIndex,\r
+ IN BOOLEAN BreakFlag\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsCpuStopped (\r
- IN UINT32 ProcessorIndex\r
+ IN UINT32 ProcessorIndex\r
);\r
\r
/**\r
**/\r
VOID\r
SetCpuRunningFlag (\r
- IN BOOLEAN RunningFlag\r
+ IN BOOLEAN RunningFlag\r
);\r
\r
/**\r
**/\r
VOID\r
SetDebugViewPoint (\r
- IN UINT32 ProcessorIndex\r
+ IN UINT32 ProcessorIndex\r
);\r
\r
/**\r
**/\r
VOID\r
SetIpiSentByApFlag (\r
- IN BOOLEAN IpiSentByApFlag\r
+ IN BOOLEAN IpiSentByApFlag\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsFirstBreakProcessor (\r
- IN UINT32 ProcessorIndex\r
+ IN UINT32 ProcessorIndex\r
);\r
\r
#endif\r
-\r
**/\r
UINT32\r
InitializeDebugTimer (\r
- OUT UINT32 *TimerFrequency,\r
- IN BOOLEAN DumpFlag\r
+ OUT UINT32 *TimerFrequency,\r
+ IN BOOLEAN DumpFlag\r
)\r
{\r
- UINTN ApicTimerDivisor;\r
- UINT32 InitialCount;\r
- UINT32 ApicTimerFrequency;\r
+ UINTN ApicTimerDivisor;\r
+ UINT32 InitialCount;\r
+ UINT32 ApicTimerFrequency;\r
\r
InitializeLocalApicSoftwareEnable (TRUE);\r
GetApicTimerState (&ApicTimerDivisor, NULL, NULL);\r
- ApicTimerFrequency = PcdGet32(PcdFSBClock) / (UINT32)ApicTimerDivisor;\r
+ ApicTimerFrequency = PcdGet32 (PcdFSBClock) / (UINT32)ApicTimerDivisor;\r
//\r
// Cpu Local Apic timer interrupt frequency, it is set to 0.1s\r
//\r
InitialCount = (UINT32)DivU64x32 (\r
- MultU64x64 (\r
- ApicTimerFrequency,\r
- DEBUG_TIMER_INTERVAL\r
- ),\r
- 1000000u\r
- );\r
+ MultU64x64 (\r
+ ApicTimerFrequency,\r
+ DEBUG_TIMER_INTERVAL\r
+ ),\r
+ 1000000u\r
+ );\r
\r
InitializeApicTimer (ApicTimerDivisor, InitialCount, TRUE, DEBUG_TIMER_VECTOR);\r
//\r
DisableApicTimerInterrupt ();\r
\r
if (DumpFlag) {\r
- DEBUG ((DEBUG_INFO, "Debug Timer: FSB Clock = %d\n", PcdGet32(PcdFSBClock)));\r
+ DEBUG ((DEBUG_INFO, "Debug Timer: FSB Clock = %d\n", PcdGet32 (PcdFSBClock)));\r
DEBUG ((DEBUG_INFO, "Debug Timer: Divisor = %d\n", ApicTimerDivisor));\r
DEBUG ((DEBUG_INFO, "Debug Timer: Frequency = %d\n", ApicTimerFrequency));\r
DEBUG ((DEBUG_INFO, "Debug Timer: InitialCount = %d\n", InitialCount));\r
}\r
+\r
if (TimerFrequency != NULL) {\r
*TimerFrequency = ApicTimerFrequency;\r
}\r
+\r
return InitialCount;\r
}\r
\r
BOOLEAN\r
EFIAPI\r
SaveAndSetDebugTimerInterrupt (\r
- IN BOOLEAN EnableStatus\r
+ IN BOOLEAN EnableStatus\r
)\r
{\r
- BOOLEAN OldDebugTimerInterruptState;\r
+ BOOLEAN OldDebugTimerInterruptState;\r
\r
OldDebugTimerInterruptState = GetApicTimerInterruptState ();\r
\r
} else {\r
DisableApicTimerInterrupt ();\r
}\r
+\r
//\r
// Validate the Debug Timer interrupt state\r
// This will make additional delay after Local Apic Timer interrupt state is changed.\r
**/\r
BOOLEAN\r
IsDebugTimerTimeout (\r
- IN UINT32 TimerCycle,\r
- IN UINT32 Timer,\r
- IN UINT32 TimeoutTicker\r
+ IN UINT32 TimerCycle,\r
+ IN UINT32 Timer,\r
+ IN UINT32 TimeoutTicker\r
)\r
{\r
UINT64 CurrentTimer;\r
Delta = TimerCycle - (CurrentTimer - Timer) + 1;\r
}\r
\r
- return (BOOLEAN) (Delta >= TimeoutTicker);\r
+ return (BOOLEAN)(Delta >= TimeoutTicker);\r
}\r
**/\r
UINT32\r
InitializeDebugTimer (\r
- OUT UINT32 *TimerFrequency,\r
- IN BOOLEAN DumpFlag\r
+ OUT UINT32 *TimerFrequency,\r
+ IN BOOLEAN DumpFlag\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsDebugTimerTimeout (\r
- IN UINT32 TimerCycle,\r
- IN UINT32 Timer,\r
- IN UINT32 TimeoutTicker\r
+ IN UINT32 TimerCycle,\r
+ IN UINT32 Timer,\r
+ IN UINT32 TimeoutTicker\r
);\r
\r
#endif\r
-\r
VOID\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- UINTN InterruptHandler;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
- UINTN Index;\r
- UINT16 CodeSegment;\r
- UINT32 RegEdx;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ UINTN InterruptHandler;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
+ UINTN Index;\r
+ UINT16 CodeSegment;\r
+ UINT32 RegEdx;\r
\r
AsmReadIdtr (&IdtDescriptor);\r
\r
//\r
CodeSegment = AsmReadCs ();\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor.Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;\r
\r
- for (Index = 0; Index < 20; Index ++) {\r
+ for (Index = 0; Index < 20; Index++) {\r
if (((PcdGet32 (PcdExceptionsIgnoredByDebugger) & ~(BIT1 | BIT3)) & (1 << Index)) != 0) {\r
//\r
// If the exception is masked to be reserved except for INT1 and INT3, skip it\r
//\r
continue;\r
}\r
- InterruptHandler = (UINTN)&Exception0Handle + Index * ExceptionStubHeaderSize;\r
+\r
+ InterruptHandler = (UINTN)&Exception0Handle + Index * ExceptionStubHeaderSize;\r
IdtEntry[Index].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
IdtEntry[Index].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
IdtEntry[Index].Bits.Selector = CodeSegment;\r
IdtEntry[Index].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
}\r
\r
- InterruptHandler = (UINTN) &TimerInterruptHandle;\r
+ InterruptHandler = (UINTN)&TimerInterruptHandle;\r
IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
IdtEntry[DEBUG_TIMER_VECTOR].Bits.Selector = CodeSegment;\r
**/\r
VOID *\r
GetExceptionHandlerInIdtEntry (\r
- IN UINTN ExceptionNum\r
+ IN UINTN ExceptionNum\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
\r
AsmReadIdtr (&IdtDescriptor);\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor.Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;\r
\r
- return (VOID *) (((UINTN)IdtEntry[ExceptionNum].Bits.OffsetLow) |\r
+ return (VOID *)(((UINTN)IdtEntry[ExceptionNum].Bits.OffsetLow) |\r
(((UINTN)IdtEntry[ExceptionNum].Bits.OffsetHigh) << 16));\r
}\r
\r
**/\r
VOID\r
SetExceptionHandlerInIdtEntry (\r
- IN UINTN ExceptionNum,\r
- IN VOID *ExceptionHandler\r
+ IN UINTN ExceptionNum,\r
+ IN VOID *ExceptionHandler\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
\r
AsmReadIdtr (&IdtDescriptor);\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor.Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;\r
\r
- IdtEntry[ExceptionNum].Bits.OffsetLow = (UINT16)(UINTN)ExceptionHandler;\r
- IdtEntry[ExceptionNum].Bits.OffsetHigh = (UINT16)((UINTN)ExceptionHandler >> 16);\r
+ IdtEntry[ExceptionNum].Bits.OffsetLow = (UINT16)(UINTN)ExceptionHandler;\r
+ IdtEntry[ExceptionNum].Bits.OffsetHigh = (UINT16)((UINTN)ExceptionHandler >> 16);\r
}\r
#include "ProcessorContext.h"\r
#include "TransferProtocol.h"\r
\r
-#define DEBUG_SW_BREAKPOINT_SYMBOL 0xcc\r
-#define DEBUG_ARCH_SYMBOL DEBUG_DATA_BREAK_CPU_ARCH_IA32\r
+#define DEBUG_SW_BREAKPOINT_SYMBOL 0xcc\r
+#define DEBUG_ARCH_SYMBOL DEBUG_DATA_BREAK_CPU_ARCH_IA32\r
\r
-typedef DEBUG_DATA_IA32_FX_SAVE_STATE DEBUG_DATA_FX_SAVE_STATE;\r
-typedef DEBUG_DATA_IA32_SYSTEM_CONTEXT DEBUG_CPU_CONTEXT;\r
+typedef DEBUG_DATA_IA32_FX_SAVE_STATE DEBUG_DATA_FX_SAVE_STATE;\r
+typedef DEBUG_DATA_IA32_SYSTEM_CONTEXT DEBUG_CPU_CONTEXT;\r
\r
#endif\r
#ifndef _DEBUG_EXCEPTION_H_\r
#define _DEBUG_EXCEPTION_H_\r
\r
-#define DEBUG_EXCEPT_DIVIDE_ERROR 0\r
-#define DEBUG_EXCEPT_DEBUG 1\r
-#define DEBUG_EXCEPT_NMI 2\r
-#define DEBUG_EXCEPT_BREAKPOINT 3\r
-#define DEBUG_EXCEPT_OVERFLOW 4\r
-#define DEBUG_EXCEPT_BOUND 5\r
-#define DEBUG_EXCEPT_INVALID_OPCODE 6\r
-#define DEBUG_EXCEPT_DOUBLE_FAULT 8\r
-#define DEBUG_EXCEPT_INVALID_TSS 10\r
-#define DEBUG_EXCEPT_SEG_NOT_PRESENT 11\r
-#define DEBUG_EXCEPT_STACK_FAULT 12\r
-#define DEBUG_EXCEPT_GP_FAULT 13\r
-#define DEBUG_EXCEPT_PAGE_FAULT 14\r
-#define DEBUG_EXCEPT_FP_ERROR 16\r
-#define DEBUG_EXCEPT_ALIGNMENT_CHECK 17\r
-#define DEBUG_EXCEPT_MACHINE_CHECK 18\r
-#define DEBUG_EXCEPT_SIMD 19\r
+#define DEBUG_EXCEPT_DIVIDE_ERROR 0\r
+#define DEBUG_EXCEPT_DEBUG 1\r
+#define DEBUG_EXCEPT_NMI 2\r
+#define DEBUG_EXCEPT_BREAKPOINT 3\r
+#define DEBUG_EXCEPT_OVERFLOW 4\r
+#define DEBUG_EXCEPT_BOUND 5\r
+#define DEBUG_EXCEPT_INVALID_OPCODE 6\r
+#define DEBUG_EXCEPT_DOUBLE_FAULT 8\r
+#define DEBUG_EXCEPT_INVALID_TSS 10\r
+#define DEBUG_EXCEPT_SEG_NOT_PRESENT 11\r
+#define DEBUG_EXCEPT_STACK_FAULT 12\r
+#define DEBUG_EXCEPT_GP_FAULT 13\r
+#define DEBUG_EXCEPT_PAGE_FAULT 14\r
+#define DEBUG_EXCEPT_FP_ERROR 16\r
+#define DEBUG_EXCEPT_ALIGNMENT_CHECK 17\r
+#define DEBUG_EXCEPT_MACHINE_CHECK 18\r
+#define DEBUG_EXCEPT_SIMD 19\r
\r
#endif\r
VOID\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- UINTN InterruptHandler;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
- UINTN Index;\r
- UINT16 CodeSegment;\r
- UINT32 RegEdx;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ UINTN InterruptHandler;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
+ UINTN Index;\r
+ UINT16 CodeSegment;\r
+ UINT32 RegEdx;\r
\r
AsmReadIdtr (&IdtDescriptor);\r
\r
//\r
CodeSegment = AsmReadCs ();\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor.Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;\r
\r
- for (Index = 0; Index < 20; Index ++) {\r
+ for (Index = 0; Index < 20; Index++) {\r
if (((PcdGet32 (PcdExceptionsIgnoredByDebugger) & ~(BIT1 | BIT3)) & (1 << Index)) != 0) {\r
//\r
// If the exception is masked to be reserved except for INT1 and INT3, skip it\r
//\r
continue;\r
}\r
- InterruptHandler = (UINTN)&Exception0Handle + Index * ExceptionStubHeaderSize;\r
- IdtEntry[Index].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
- IdtEntry[Index].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
- IdtEntry[Index].Bits.OffsetUpper = (UINT32)((UINTN)InterruptHandler >> 32);\r
- IdtEntry[Index].Bits.Selector = CodeSegment;\r
- IdtEntry[Index].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
+\r
+ InterruptHandler = (UINTN)&Exception0Handle + Index * ExceptionStubHeaderSize;\r
+ IdtEntry[Index].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
+ IdtEntry[Index].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
+ IdtEntry[Index].Bits.OffsetUpper = (UINT32)((UINTN)InterruptHandler >> 32);\r
+ IdtEntry[Index].Bits.Selector = CodeSegment;\r
+ IdtEntry[Index].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
}\r
\r
- InterruptHandler = (UINTN) &TimerInterruptHandle;\r
- IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
- IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
- IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetUpper = (UINT32)((UINTN)InterruptHandler >> 32);\r
- IdtEntry[DEBUG_TIMER_VECTOR].Bits.Selector = CodeSegment;\r
- IdtEntry[DEBUG_TIMER_VECTOR].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
+ InterruptHandler = (UINTN)&TimerInterruptHandle;\r
+ IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
+ IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
+ IdtEntry[DEBUG_TIMER_VECTOR].Bits.OffsetUpper = (UINT32)((UINTN)InterruptHandler >> 32);\r
+ IdtEntry[DEBUG_TIMER_VECTOR].Bits.Selector = CodeSegment;\r
+ IdtEntry[DEBUG_TIMER_VECTOR].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
\r
//\r
// If the CPU supports Debug Extensions(CPUID:01 EDX:BIT2), then\r
**/\r
VOID *\r
GetExceptionHandlerInIdtEntry (\r
- IN UINTN ExceptionNum\r
+ IN UINTN ExceptionNum\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
\r
AsmReadIdtr (&IdtDescriptor);\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor.Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;\r
\r
- return (VOID *) (IdtEntry[ExceptionNum].Bits.OffsetLow |\r
+ return (VOID *)(IdtEntry[ExceptionNum].Bits.OffsetLow |\r
(((UINTN)IdtEntry[ExceptionNum].Bits.OffsetHigh) << 16) |\r
(((UINTN)IdtEntry[ExceptionNum].Bits.OffsetUpper) << 32));\r
}\r
**/\r
VOID\r
SetExceptionHandlerInIdtEntry (\r
- IN UINTN ExceptionNum,\r
- IN VOID *ExceptionHandler\r
+ IN UINTN ExceptionNum,\r
+ IN VOID *ExceptionHandler\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
\r
AsmReadIdtr (&IdtDescriptor);\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor.Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor.Base;\r
\r
IdtEntry[ExceptionNum].Bits.OffsetLow = (UINT16)(UINTN)ExceptionHandler;\r
IdtEntry[ExceptionNum].Bits.OffsetHigh = (UINT16)((UINTN)ExceptionHandler >> 16);\r
#include "ProcessorContext.h"\r
#include "TransferProtocol.h"\r
\r
-#define DEBUG_SW_BREAKPOINT_SYMBOL 0xcc\r
-#define DEBUG_ARCH_SYMBOL DEBUG_DATA_BREAK_CPU_ARCH_X64\r
+#define DEBUG_SW_BREAKPOINT_SYMBOL 0xcc\r
+#define DEBUG_ARCH_SYMBOL DEBUG_DATA_BREAK_CPU_ARCH_X64\r
\r
-typedef DEBUG_DATA_X64_FX_SAVE_STATE DEBUG_DATA_FX_SAVE_STATE;\r
-typedef DEBUG_DATA_X64_SYSTEM_CONTEXT DEBUG_CPU_CONTEXT;\r
+typedef DEBUG_DATA_X64_FX_SAVE_STATE DEBUG_DATA_FX_SAVE_STATE;\r
+typedef DEBUG_DATA_X64_SYSTEM_CONTEXT DEBUG_CPU_CONTEXT;\r
\r
#endif\r
#ifndef _DEBUG_EXCEPTION_H_\r
#define _DEBUG_EXCEPTION_H_\r
\r
-#define DEBUG_EXCEPT_DIVIDE_ERROR 0\r
-#define DEBUG_EXCEPT_DEBUG 1\r
-#define DEBUG_EXCEPT_NMI 2\r
-#define DEBUG_EXCEPT_BREAKPOINT 3\r
-#define DEBUG_EXCEPT_OVERFLOW 4\r
-#define DEBUG_EXCEPT_BOUND 5\r
-#define DEBUG_EXCEPT_INVALID_OPCODE 6\r
-#define DEBUG_EXCEPT_DOUBLE_FAULT 8\r
-#define DEBUG_EXCEPT_INVALID_TSS 10\r
-#define DEBUG_EXCEPT_SEG_NOT_PRESENT 11\r
-#define DEBUG_EXCEPT_STACK_FAULT 12\r
-#define DEBUG_EXCEPT_GP_FAULT 13\r
-#define DEBUG_EXCEPT_PAGE_FAULT 14\r
-#define DEBUG_EXCEPT_FP_ERROR 16\r
-#define DEBUG_EXCEPT_ALIGNMENT_CHECK 17\r
-#define DEBUG_EXCEPT_MACHINE_CHECK 18\r
-#define DEBUG_EXCEPT_SIMD 19\r
+#define DEBUG_EXCEPT_DIVIDE_ERROR 0\r
+#define DEBUG_EXCEPT_DEBUG 1\r
+#define DEBUG_EXCEPT_NMI 2\r
+#define DEBUG_EXCEPT_BREAKPOINT 3\r
+#define DEBUG_EXCEPT_OVERFLOW 4\r
+#define DEBUG_EXCEPT_BOUND 5\r
+#define DEBUG_EXCEPT_INVALID_OPCODE 6\r
+#define DEBUG_EXCEPT_DOUBLE_FAULT 8\r
+#define DEBUG_EXCEPT_INVALID_TSS 10\r
+#define DEBUG_EXCEPT_SEG_NOT_PRESENT 11\r
+#define DEBUG_EXCEPT_STACK_FAULT 12\r
+#define DEBUG_EXCEPT_GP_FAULT 13\r
+#define DEBUG_EXCEPT_PAGE_FAULT 14\r
+#define DEBUG_EXCEPT_FP_ERROR 16\r
+#define DEBUG_EXCEPT_ALIGNMENT_CHECK 17\r
+#define DEBUG_EXCEPT_MACHINE_CHECK 18\r
+#define DEBUG_EXCEPT_SIMD 19\r
\r
#endif\r
\r
#include "DxeDebugAgentLib.h"\r
\r
-DEBUG_AGENT_MAILBOX mMailbox;\r
-DEBUG_AGENT_MAILBOX *mMailboxPointer = NULL;\r
-IA32_IDT_GATE_DESCRIPTOR mIdtEntryTable[33];\r
-BOOLEAN mDxeCoreFlag = FALSE;\r
-BOOLEAN mMultiProcessorDebugSupport = FALSE;\r
-VOID *mSavedIdtTable = NULL;\r
-UINTN mSaveIdtTableSize = 0;\r
-BOOLEAN mDebugAgentInitialized = FALSE;\r
-BOOLEAN mSkipBreakpoint = FALSE;\r
+DEBUG_AGENT_MAILBOX mMailbox;\r
+DEBUG_AGENT_MAILBOX *mMailboxPointer = NULL;\r
+IA32_IDT_GATE_DESCRIPTOR mIdtEntryTable[33];\r
+BOOLEAN mDxeCoreFlag = FALSE;\r
+BOOLEAN mMultiProcessorDebugSupport = FALSE;\r
+VOID *mSavedIdtTable = NULL;\r
+UINTN mSaveIdtTableSize = 0;\r
+BOOLEAN mDebugAgentInitialized = FALSE;\r
+BOOLEAN mSkipBreakpoint = FALSE;\r
\r
/**\r
Check if debug agent support multi-processor.\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PHYSICAL_ADDRESS Address;\r
- BOOLEAN DebugTimerInterruptState;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- DEBUG_AGENT_MAILBOX *NewMailbox;\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
- EFI_VECTOR_HANDOFF_INFO *VectorHandoffInfo;\r
+ EFI_STATUS Status;\r
+ EFI_PHYSICAL_ADDRESS Address;\r
+ BOOLEAN DebugTimerInterruptState;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ DEBUG_AGENT_MAILBOX *NewMailbox;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
+ EFI_VECTOR_HANDOFF_INFO *VectorHandoffInfo;\r
\r
//\r
// Check persisted vector handoff info\r
//\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
GuidHob = GetFirstGuidHob (&gEfiVectorHandoffInfoPpiGuid);\r
- if (GuidHob != NULL && !mDxeCoreFlag) {\r
+ if ((GuidHob != NULL) && !mDxeCoreFlag) {\r
//\r
// Check if configuration table is installed or not if GUIDed HOB existed,\r
// only when Debug Agent is not linked by DXE Core\r
//\r
- Status = EfiGetSystemConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID **) &VectorHandoffInfo);\r
+ Status = EfiGetSystemConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID **)&VectorHandoffInfo);\r
}\r
- if (GuidHob == NULL || Status != EFI_SUCCESS) {\r
+\r
+ if ((GuidHob == NULL) || (Status != EFI_SUCCESS)) {\r
//\r
// Install configuration table for persisted vector handoff info if GUIDed HOB cannot be found or\r
// configuration table does not exist\r
//\r
- Status = gBS->InstallConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID *) &mVectorHandoffInfoDebugAgent[0]);\r
+ Status = gBS->InstallConfigurationTable (&gEfiVectorHandoffTableGuid, (VOID *)&mVectorHandoffInfoDebugAgent[0]);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "DebugAgent: Cannot install configuration table for persisted vector handoff info!\n"));\r
CpuDeadLoop ();\r
InstallSerialIo ();\r
\r
Address = 0;\r
- Status = gBS->AllocatePages (\r
- AllocateAnyPages,\r
- EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (sizeof(DEBUG_AGENT_MAILBOX) + PcdGet16(PcdDebugPortHandleBufferSize)),\r
- &Address\r
- );\r
+ Status = gBS->AllocatePages (\r
+ AllocateAnyPages,\r
+ EfiACPIMemoryNVS,\r
+ EFI_SIZE_TO_PAGES (sizeof (DEBUG_AGENT_MAILBOX) + PcdGet16 (PcdDebugPortHandleBufferSize)),\r
+ &Address\r
+ );\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "DebugAgent: Cannot install configuration table for mailbox!\n"));\r
CpuDeadLoop ();\r
\r
DebugTimerInterruptState = SaveAndSetDebugTimerInterrupt (FALSE);\r
\r
- NewMailbox = (DEBUG_AGENT_MAILBOX *) (UINTN) Address;\r
+ NewMailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)Address;\r
//\r
// Copy Mailbox and Debug Port Handle buffer to new location in ACPI NVS memory, because original Mailbox\r
// and Debug Port Handle buffer may be free at runtime, SMM debug agent needs to access them\r
//\r
Mailbox = GetMailboxPointer ();\r
CopyMem (NewMailbox, Mailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
- CopyMem (NewMailbox + 1, (VOID *)(UINTN)Mailbox->DebugPortHandle, PcdGet16(PcdDebugPortHandleBufferSize));\r
+ CopyMem (NewMailbox + 1, (VOID *)(UINTN)Mailbox->DebugPortHandle, PcdGet16 (PcdDebugPortHandleBufferSize));\r
//\r
// Update Debug Port Handle in new Mailbox\r
//\r
\r
DebugTimerInterruptState = SaveAndSetDebugTimerInterrupt (DebugTimerInterruptState);\r
\r
- Status = gBS->InstallConfigurationTable (&gEfiDebugAgentGuid, (VOID *) mMailboxPointer);\r
+ Status = gBS->InstallConfigurationTable (&gEfiDebugAgentGuid, (VOID *)mMailboxPointer);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to install configuration for mailbox!\n"));\r
CpuDeadLoop ();\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
+ EFI_STATUS Status;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
\r
- Status = EfiGetSystemConfigurationTable (&gEfiDebugAgentGuid, (VOID **) &Mailbox);\r
- if (Status == EFI_SUCCESS && Mailbox != NULL) {\r
+ Status = EfiGetSystemConfigurationTable (&gEfiDebugAgentGuid, (VOID **)&Mailbox);\r
+ if ((Status == EFI_SUCCESS) && (Mailbox != NULL)) {\r
VerifyMailboxChecksum (Mailbox);\r
return Mailbox;\r
} else {\r
**/\r
DEBUG_AGENT_MAILBOX *\r
GetMailboxFromHob (\r
- IN VOID *HobStart\r
+ IN VOID *HobStart\r
)\r
{\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
- UINT64 *MailboxLocation;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
+ UINT64 *MailboxLocation;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
\r
GuidHob = GetNextGuidHob (&gEfiDebugAgentGuid, HobStart);\r
if (GuidHob == NULL) {\r
return NULL;\r
}\r
- MailboxLocation = (UINT64 *) (GET_GUID_HOB_DATA(GuidHob));\r
- Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
+\r
+ MailboxLocation = (UINT64 *)(GET_GUID_HOB_DATA (GuidHob));\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
VerifyMailboxChecksum (Mailbox);\r
\r
return Mailbox;\r
VOID\r
)\r
{\r
- return (DEBUG_PORT_HANDLE) (UINTN)(GetMailboxPointer ()->DebugPortHandle);\r
+ return (DEBUG_PORT_HANDLE)(UINTN)(GetMailboxPointer ()->DebugPortHandle);\r
}\r
\r
/**\r
**/\r
VOID\r
SetupDebugAgentEnvironment (\r
- IN DEBUG_AGENT_MAILBOX *Mailbox\r
+ IN DEBUG_AGENT_MAILBOX *Mailbox\r
)\r
{\r
- IA32_DESCRIPTOR Idtr;\r
- UINT16 IdtEntryCount;\r
- UINT64 DebugPortHandle;\r
- UINT32 DebugTimerFrequency;\r
+ IA32_DESCRIPTOR Idtr;\r
+ UINT16 IdtEntryCount;\r
+ UINT64 DebugPortHandle;\r
+ UINT32 DebugTimerFrequency;\r
\r
if (mMultiProcessorDebugSupport) {\r
InitializeSpinLock (&mDebugMpContext.MpContextSpinLock);\r
//\r
// Clear Break CPU index value\r
//\r
- mDebugMpContext.BreakAtCpuIndex = (UINT32) -1;\r
+ mDebugMpContext.BreakAtCpuIndex = (UINT32)-1;\r
}\r
\r
//\r
// Get original IDT address and size.\r
//\r
- AsmReadIdtr ((IA32_DESCRIPTOR *) &Idtr);\r
- IdtEntryCount = (UINT16) ((Idtr.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
+ AsmReadIdtr ((IA32_DESCRIPTOR *)&Idtr);\r
+ IdtEntryCount = (UINT16)((Idtr.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
if (IdtEntryCount < 33) {\r
ZeroMem (&mIdtEntryTable, sizeof (IA32_IDT_GATE_DESCRIPTOR) * 33);\r
//\r
// Copy original IDT table into new one\r
//\r
- CopyMem (&mIdtEntryTable, (VOID *) Idtr.Base, Idtr.Limit + 1);\r
+ CopyMem (&mIdtEntryTable, (VOID *)Idtr.Base, Idtr.Limit + 1);\r
//\r
// Load new IDT table\r
//\r
- Idtr.Limit = (UINT16) (sizeof (IA32_IDT_GATE_DESCRIPTOR) * 33 - 1);\r
- Idtr.Base = (UINTN) &mIdtEntryTable;\r
- AsmWriteIdtr ((IA32_DESCRIPTOR *) &Idtr);\r
+ Idtr.Limit = (UINT16)(sizeof (IA32_IDT_GATE_DESCRIPTOR) * 33 - 1);\r
+ Idtr.Base = (UINTN)&mIdtEntryTable;\r
+ AsmWriteIdtr ((IA32_DESCRIPTOR *)&Idtr);\r
}\r
\r
//\r
} else {\r
ZeroMem (&mMailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
}\r
+\r
mMailboxPointer = &mMailbox;\r
}\r
\r
//\r
// Initialize debug communication port\r
//\r
- DebugPortHandle = (UINT64) (UINTN)DebugPortInitialize ((VOID *)(UINTN)mMailboxPointer->DebugPortHandle, NULL);\r
+ DebugPortHandle = (UINT64)(UINTN)DebugPortInitialize ((VOID *)(UINTN)mMailboxPointer->DebugPortHandle, NULL);\r
UpdateMailboxContent (mMailboxPointer, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
\r
if (Mailbox == NULL) {\r
}\r
}\r
\r
-\r
/**\r
Initialize debug agent.\r
\r
IN DEBUG_AGENT_CONTINUE Function OPTIONAL\r
)\r
{\r
- UINT64 *MailboxLocation;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- BOOLEAN InterruptStatus;\r
- VOID *HobList;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
- IA32_DESCRIPTOR *Ia32Idtr;\r
- IA32_IDT_ENTRY *Ia32IdtEntry;\r
- BOOLEAN PeriodicMode;\r
- UINTN TimerCycle;\r
+ UINT64 *MailboxLocation;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ BOOLEAN InterruptStatus;\r
+ VOID *HobList;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
+ IA32_DESCRIPTOR *Ia32Idtr;\r
+ IA32_IDT_ENTRY *Ia32IdtEntry;\r
+ BOOLEAN PeriodicMode;\r
+ UINTN TimerCycle;\r
\r
if (InitFlag == DEBUG_AGENT_INIT_DXE_AP) {\r
//\r
InitializeLocalApicSoftwareEnable (TRUE);\r
GetApicTimerState (NULL, &PeriodicMode, NULL);\r
TimerCycle = GetApicTimerInitCount ();\r
- if (!PeriodicMode || TimerCycle == 0) {\r
+ if (!PeriodicMode || (TimerCycle == 0)) {\r
InitializeDebugTimer (NULL, FALSE);\r
}\r
+\r
//\r
// Invoked by AP, enable interrupt to let AP could receive IPI from other processors\r
//\r
EnableInterrupts ();\r
- return ;\r
+ return;\r
}\r
\r
//\r
MailboxLocation = NULL;\r
\r
switch (InitFlag) {\r
+ case DEBUG_AGENT_INIT_DXE_LOAD:\r
+ //\r
+ // Check if Debug Agent has been initialized before\r
+ //\r
+ if (IsDebugAgentInitialzed ()) {\r
+ DEBUG ((DEBUG_INFO, "Debug Agent: The former agent will be overwritten by the new one!\n"));\r
+ }\r
\r
- case DEBUG_AGENT_INIT_DXE_LOAD:\r
- //\r
- // Check if Debug Agent has been initialized before\r
- //\r
- if (IsDebugAgentInitialzed ()) {\r
- DEBUG ((DEBUG_INFO, "Debug Agent: The former agent will be overwritten by the new one!\n"));\r
- }\r
+ mMultiProcessorDebugSupport = TRUE;\r
+ //\r
+ // Save original IDT table\r
+ //\r
+ AsmReadIdtr (&IdtDescriptor);\r
+ mSaveIdtTableSize = IdtDescriptor.Limit + 1;\r
+ mSavedIdtTable = AllocateCopyPool (mSaveIdtTableSize, (VOID *)IdtDescriptor.Base);\r
+ //\r
+ // Check if Debug Agent initialized in DXE phase\r
+ //\r
+ Mailbox = GetMailboxFromConfigurationTable ();\r
+ if (Mailbox == NULL) {\r
+ //\r
+ // Try to get mailbox from GUIDed HOB build in PEI\r
+ //\r
+ HobList = GetHobList ();\r
+ Mailbox = GetMailboxFromHob (HobList);\r
+ }\r
\r
- mMultiProcessorDebugSupport = TRUE;\r
- //\r
- // Save original IDT table\r
- //\r
- AsmReadIdtr (&IdtDescriptor);\r
- mSaveIdtTableSize = IdtDescriptor.Limit + 1;\r
- mSavedIdtTable = AllocateCopyPool (mSaveIdtTableSize, (VOID *) IdtDescriptor.Base);\r
- //\r
- // Check if Debug Agent initialized in DXE phase\r
- //\r
- Mailbox = GetMailboxFromConfigurationTable ();\r
- if (Mailbox == NULL) {\r
+ //\r
+ // Set up Debug Agent Environment and try to connect HOST if required\r
+ //\r
+ SetupDebugAgentEnvironment (Mailbox);\r
+ //\r
+ // For DEBUG_AGENT_INIT_S3, needn't to install configuration table and EFI Serial IO protocol\r
+ // For DEBUG_AGENT_INIT_DXE_CORE, InternalConstructorWorker() will invoked in Constructor()\r
+ //\r
+ InternalConstructorWorker ();\r
+ //\r
+ // Enable Debug Timer interrupt\r
+ //\r
+ SaveAndSetDebugTimerInterrupt (TRUE);\r
+ //\r
+ // Enable interrupt to receive Debug Timer interrupt\r
+ //\r
+ EnableInterrupts ();\r
+\r
+ mDebugAgentInitialized = TRUE;\r
+ FindAndReportModuleImageInfo (SIZE_4KB);\r
+\r
+ *(EFI_STATUS *)Context = EFI_SUCCESS;\r
+\r
+ break;\r
+\r
+ case DEBUG_AGENT_INIT_DXE_UNLOAD:\r
+ if (mDebugAgentInitialized) {\r
+ if (IsHostAttached ()) {\r
+ *(EFI_STATUS *)Context = EFI_ACCESS_DENIED;\r
+ //\r
+ // Enable Debug Timer interrupt again\r
+ //\r
+ SaveAndSetDebugTimerInterrupt (TRUE);\r
+ } else {\r
+ //\r
+ // Restore original IDT table\r
+ //\r
+ AsmReadIdtr (&IdtDescriptor);\r
+ IdtDescriptor.Limit = (UINT16)(mSaveIdtTableSize - 1);\r
+ CopyMem ((VOID *)IdtDescriptor.Base, mSavedIdtTable, mSaveIdtTableSize);\r
+ AsmWriteIdtr (&IdtDescriptor);\r
+ FreePool (mSavedIdtTable);\r
+ mDebugAgentInitialized = FALSE;\r
+ *(EFI_STATUS *)Context = EFI_SUCCESS;\r
+ }\r
+ } else {\r
+ *(EFI_STATUS *)Context = EFI_NOT_STARTED;\r
+ }\r
+\r
+ //\r
+ // Restore interrupt state.\r
+ //\r
+ SetInterruptState (InterruptStatus);\r
+ break;\r
+\r
+ case DEBUG_AGENT_INIT_DXE_CORE:\r
+ mDxeCoreFlag = TRUE;\r
+ mMultiProcessorDebugSupport = TRUE;\r
//\r
// Try to get mailbox from GUIDed HOB build in PEI\r
//\r
- HobList = GetHobList ();\r
+ HobList = Context;\r
Mailbox = GetMailboxFromHob (HobList);\r
- }\r
- //\r
- // Set up Debug Agent Environment and try to connect HOST if required\r
- //\r
- SetupDebugAgentEnvironment (Mailbox);\r
- //\r
- // For DEBUG_AGENT_INIT_S3, needn't to install configuration table and EFI Serial IO protocol\r
- // For DEBUG_AGENT_INIT_DXE_CORE, InternalConstructorWorker() will invoked in Constructor()\r
- //\r
- InternalConstructorWorker ();\r
- //\r
- // Enable Debug Timer interrupt\r
- //\r
- SaveAndSetDebugTimerInterrupt (TRUE);\r
- //\r
- // Enable interrupt to receive Debug Timer interrupt\r
- //\r
- EnableInterrupts ();\r
+ //\r
+ // Set up Debug Agent Environment and try to connect HOST if required\r
+ //\r
+ SetupDebugAgentEnvironment (Mailbox);\r
+ //\r
+ // Enable Debug Timer interrupt\r
+ //\r
+ SaveAndSetDebugTimerInterrupt (TRUE);\r
+ //\r
+ // Enable interrupt to receive Debug Timer interrupt\r
+ //\r
+ EnableInterrupts ();\r
\r
- mDebugAgentInitialized = TRUE;\r
- FindAndReportModuleImageInfo (SIZE_4KB);\r
+ break;\r
\r
- *(EFI_STATUS *)Context = EFI_SUCCESS;\r
+ case DEBUG_AGENT_INIT_S3:\r
\r
- break;\r
+ if (Context != NULL) {\r
+ Ia32Idtr = (IA32_DESCRIPTOR *)Context;\r
+ Ia32IdtEntry = (IA32_IDT_ENTRY *)(Ia32Idtr->Base);\r
+ MailboxLocation = (UINT64 *)((UINTN)Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetLow +\r
+ ((UINTN)Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetHigh << 16));\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
+ VerifyMailboxChecksum (Mailbox);\r
+ }\r
\r
- case DEBUG_AGENT_INIT_DXE_UNLOAD:\r
- if (mDebugAgentInitialized) {\r
- if (IsHostAttached ()) {\r
- *(EFI_STATUS *)Context = EFI_ACCESS_DENIED;\r
- //\r
- // Enable Debug Timer interrupt again\r
- //\r
- SaveAndSetDebugTimerInterrupt (TRUE);\r
- } else {\r
+ //\r
+ // Save Mailbox pointer in global variable\r
+ //\r
+ mMailboxPointer = Mailbox;\r
+ //\r
+ // Set up Debug Agent Environment and try to connect HOST if required\r
+ //\r
+ SetupDebugAgentEnvironment (Mailbox);\r
+ //\r
+ // Disable interrupt\r
+ //\r
+ DisableInterrupts ();\r
+ FindAndReportModuleImageInfo (SIZE_4KB);\r
+ if (GetDebugFlag (DEBUG_AGENT_FLAG_BREAK_BOOT_SCRIPT) == 1) {\r
//\r
- // Restore original IDT table\r
+ // If Boot Script entry break is set, code will be break at here.\r
//\r
- AsmReadIdtr (&IdtDescriptor);\r
- IdtDescriptor.Limit = (UINT16) (mSaveIdtTableSize - 1);\r
- CopyMem ((VOID *) IdtDescriptor.Base, mSavedIdtTable, mSaveIdtTableSize);\r
- AsmWriteIdtr (&IdtDescriptor);\r
- FreePool (mSavedIdtTable);\r
- mDebugAgentInitialized = FALSE;\r
- *(EFI_STATUS *)Context = EFI_SUCCESS;\r
+ CpuBreakpoint ();\r
}\r
- } else {\r
- *(EFI_STATUS *)Context = EFI_NOT_STARTED;\r
- }\r
\r
- //\r
- // Restore interrupt state.\r
- //\r
- SetInterruptState (InterruptStatus);\r
- break;\r
+ break;\r
\r
- case DEBUG_AGENT_INIT_DXE_CORE:\r
- mDxeCoreFlag = TRUE;\r
- mMultiProcessorDebugSupport = TRUE;\r
- //\r
- // Try to get mailbox from GUIDed HOB build in PEI\r
- //\r
- HobList = Context;\r
- Mailbox = GetMailboxFromHob (HobList);\r
- //\r
- // Set up Debug Agent Environment and try to connect HOST if required\r
- //\r
- SetupDebugAgentEnvironment (Mailbox);\r
- //\r
- // Enable Debug Timer interrupt\r
- //\r
- SaveAndSetDebugTimerInterrupt (TRUE);\r
- //\r
- // Enable interrupt to receive Debug Timer interrupt\r
- //\r
- EnableInterrupts ();\r
-\r
- break;\r
-\r
- case DEBUG_AGENT_INIT_S3:\r
-\r
- if (Context != NULL) {\r
- Ia32Idtr = (IA32_DESCRIPTOR *) Context;\r
- Ia32IdtEntry = (IA32_IDT_ENTRY *)(Ia32Idtr->Base);\r
- MailboxLocation = (UINT64 *) ((UINTN) Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetLow +\r
- ((UINTN) Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetHigh << 16));\r
- Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
- VerifyMailboxChecksum (Mailbox);\r
- }\r
- //\r
- // Save Mailbox pointer in global variable\r
- //\r
- mMailboxPointer = Mailbox;\r
- //\r
- // Set up Debug Agent Environment and try to connect HOST if required\r
- //\r
- SetupDebugAgentEnvironment (Mailbox);\r
- //\r
- // Disable interrupt\r
- //\r
- DisableInterrupts ();\r
- FindAndReportModuleImageInfo (SIZE_4KB);\r
- if (GetDebugFlag (DEBUG_AGENT_FLAG_BREAK_BOOT_SCRIPT) == 1) {\r
+ default:\r
//\r
- // If Boot Script entry break is set, code will be break at here.\r
+ // Only DEBUG_AGENT_INIT_PREMEM_SEC and DEBUG_AGENT_INIT_POSTMEM_SEC are allowed for this\r
+ // Debug Agent library instance.\r
//\r
- CpuBreakpoint ();\r
- }\r
- break;\r
-\r
- default:\r
- //\r
- // Only DEBUG_AGENT_INIT_PREMEM_SEC and DEBUG_AGENT_INIT_POSTMEM_SEC are allowed for this\r
- // Debug Agent library instance.\r
- //\r
- DEBUG ((DEBUG_ERROR, "Debug Agent: The InitFlag value is not allowed!\n"));\r
- CpuDeadLoop ();\r
- break;\r
+ DEBUG ((DEBUG_ERROR, "Debug Agent: The InitFlag value is not allowed!\n"));\r
+ CpuDeadLoop ();\r
+ break;\r
}\r
}\r
//\r
// EFI_SERIAL_IO_PROTOCOL instance\r
//\r
-EFI_SERIAL_IO_PROTOCOL mSerialIo = {\r
+EFI_SERIAL_IO_PROTOCOL mSerialIo = {\r
SERIAL_IO_INTERFACE_REVISION,\r
SerialReset,\r
SerialSetAttributes,\r
// Serial IO Device Path definition\r
//\r
typedef struct {\r
- VENDOR_DEVICE_PATH VendorDevicePath;\r
- UART_DEVICE_PATH UartDevicePath;\r
- EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
+ VENDOR_DEVICE_PATH VendorDevicePath;\r
+ UART_DEVICE_PATH UartDevicePath;\r
+ EFI_DEVICE_PATH_PROTOCOL EndDevicePath;\r
} SERIAL_IO_DEVICE_PATH;\r
\r
//\r
// Serial IO Device Patch instance\r
//\r
-SERIAL_IO_DEVICE_PATH mSerialIoDevicePath = {\r
+SERIAL_IO_DEVICE_PATH mSerialIoDevicePath = {\r
{\r
{\r
HARDWARE_DEVICE_PATH,\r
HW_VENDOR_DP,\r
{\r
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+ (UINT8)(sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
}\r
},\r
EFI_DEBUG_AGENT_GUID,\r
MESSAGING_DEVICE_PATH,\r
MSG_UART_DP,\r
{\r
- (UINT8) (sizeof (UART_DEVICE_PATH)),\r
- (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)\r
+ (UINT8)(sizeof (UART_DEVICE_PATH)),\r
+ (UINT8)((sizeof (UART_DEVICE_PATH)) >> 8)\r
}\r
},\r
0,\r
}\r
};\r
\r
-#define DEBGU_SERIAL_IO_FIFO_DEPTH 10\r
+#define DEBGU_SERIAL_IO_FIFO_DEPTH 10\r
//\r
// Data buffer for Terminal input character and Debug Symbols.\r
// The depth is DEBGU_SERIAL_IO_FIFO_DEPTH.\r
// Data[] UINT8: An array, which used to store data.\r
//\r
typedef struct {\r
- UINT8 First;\r
- UINT8 Last;\r
- UINT8 Surplus;\r
- UINT8 Data[DEBGU_SERIAL_IO_FIFO_DEPTH];\r
+ UINT8 First;\r
+ UINT8 Last;\r
+ UINT8 Surplus;\r
+ UINT8 Data[DEBGU_SERIAL_IO_FIFO_DEPTH];\r
} DEBUG_SERIAL_FIFO;\r
\r
//\r
// Global Variables\r
//\r
-EFI_HANDLE mSerialIoHandle = NULL;\r
-UINTN mLoopbackBuffer = 0;\r
-DEBUG_SERIAL_FIFO mSerialFifoForTerminal = {0, 0, DEBGU_SERIAL_IO_FIFO_DEPTH, { 0 }};\r
-DEBUG_SERIAL_FIFO mSerialFifoForDebug = {0, 0, DEBGU_SERIAL_IO_FIFO_DEPTH, { 0 }};\r
+EFI_HANDLE mSerialIoHandle = NULL;\r
+UINTN mLoopbackBuffer = 0;\r
+DEBUG_SERIAL_FIFO mSerialFifoForTerminal = {\r
+ 0, 0, DEBGU_SERIAL_IO_FIFO_DEPTH, { 0 }\r
+};\r
+DEBUG_SERIAL_FIFO mSerialFifoForDebug = {\r
+ 0, 0, DEBGU_SERIAL_IO_FIFO_DEPTH, { 0 }\r
+};\r
\r
/**\r
Detect whether specific FIFO is empty or not.\r
**/\r
BOOLEAN\r
IsDebugTermianlFifoEmpty (\r
- IN DEBUG_SERIAL_FIFO *Fifo\r
+ IN DEBUG_SERIAL_FIFO *Fifo\r
)\r
{\r
if (Fifo->Surplus == DEBGU_SERIAL_IO_FIFO_DEPTH) {\r
**/\r
BOOLEAN\r
IsDebugTerminalFifoFull (\r
- IN DEBUG_SERIAL_FIFO *Fifo\r
+ IN DEBUG_SERIAL_FIFO *Fifo\r
)\r
\r
{\r
**/\r
EFI_STATUS\r
DebugTerminalFifoAdd (\r
- IN DEBUG_SERIAL_FIFO *Fifo,\r
- IN UINT8 Data\r
+ IN DEBUG_SERIAL_FIFO *Fifo,\r
+ IN UINT8 Data\r
)\r
\r
{\r
if (IsDebugTerminalFifoFull (Fifo)) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
//\r
// FIFO is not full can add data\r
//\r
**/\r
EFI_STATUS\r
DebugTerminalFifoRemove (\r
- IN DEBUG_SERIAL_FIFO *Fifo,\r
- OUT UINT8 *Data\r
+ IN DEBUG_SERIAL_FIFO *Fifo,\r
+ OUT UINT8 *Data\r
)\r
{\r
//\r
if (IsDebugTermianlFifoEmpty (Fifo)) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
//\r
// FIFO is not empty, can remove data\r
//\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&mSerialIoHandle,\r
- &gEfiDevicePathProtocolGuid, &mSerialIoDevicePath,\r
- &gEfiSerialIoProtocolGuid, &mSerialIo,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mSerialIoDevicePath,\r
+ &gEfiSerialIoProtocolGuid,\r
+ &mSerialIo,\r
NULL\r
);\r
if (EFI_ERROR (Status)) {\r
)\r
{\r
mSerialIoMode.ControlMask = SERIAL_PORT_DEFAULT_CONTROL_MASK;\r
- mLoopbackBuffer = 0;\r
+ mLoopbackBuffer = 0;\r
//\r
// Not reset serial device hardware indeed.\r
//\r
// SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH. The Debug Communication Library may actually be\r
// using a larger FIFO, but there is no way to tell.\r
//\r
- if (ReceiveFifoDepth == 0 || ReceiveFifoDepth >= SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH) {\r
+ if ((ReceiveFifoDepth == 0) || (ReceiveFifoDepth >= SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH)) {\r
mSerialIoMode.ReceiveFifoDepth = SERIAL_PORT_DEFAULT_RECEIVE_FIFO_DEPTH;\r
} else {\r
return EFI_INVALID_PARAMETER;\r
if ((Control & (~EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE)) != 0) {\r
return EFI_UNSUPPORTED;\r
}\r
+\r
mSerialIoMode.ControlMask = Control;\r
return EFI_SUCCESS;\r
}\r
OUT UINT32 *Control\r
)\r
{\r
- DEBUG_PORT_HANDLE Handle;\r
- BOOLEAN DebugTimerInterruptState;\r
- EFI_TPL Tpl;\r
+ DEBUG_PORT_HANDLE Handle;\r
+ BOOLEAN DebugTimerInterruptState;\r
+ EFI_TPL Tpl;\r
\r
//\r
// Raise TPL to prevent recursion from EFI timer interrupts\r
// Save and disable Debug Timer interrupt to avoid it to access Debug Port\r
//\r
DebugTimerInterruptState = SaveAndSetDebugTimerInterrupt (FALSE);\r
- Handle = GetDebugPortHandle ();\r
+ Handle = GetDebugPortHandle ();\r
\r
//\r
// Always assume the output buffer is empty and the Debug Communication Library can process\r
IN VOID *Buffer\r
)\r
{\r
- DEBUG_PORT_HANDLE Handle;\r
- BOOLEAN DebugTimerInterruptState;\r
- EFI_TPL Tpl;\r
+ DEBUG_PORT_HANDLE Handle;\r
+ BOOLEAN DebugTimerInterruptState;\r
+ EFI_TPL Tpl;\r
\r
//\r
// Raise TPL to prevent recursion from EFI timer interrupts\r
// Save and disable Debug Timer interrupt to avoid it to access Debug Port\r
//\r
DebugTimerInterruptState = SaveAndSetDebugTimerInterrupt (FALSE);\r
- Handle = GetDebugPortHandle ();\r
+ Handle = GetDebugPortHandle ();\r
\r
- if ((mSerialIoMode.ControlMask & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) != 0) {\r
+ if ((mSerialIoMode.ControlMask & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) != 0) {\r
if (*BufferSize == 0) {\r
return EFI_SUCCESS;\r
}\r
+\r
if ((mLoopbackBuffer & SERIAL_PORT_LOOPBACK_BUFFER_FULL) != 0) {\r
*BufferSize = 0;\r
return EFI_TIMEOUT;\r
}\r
+\r
mLoopbackBuffer = SERIAL_PORT_LOOPBACK_BUFFER_FULL | *(UINT8 *)Buffer;\r
- *BufferSize = 1;\r
+ *BufferSize = 1;\r
} else {\r
*BufferSize = DebugPortWriteBuffer (Handle, Buffer, *BufferSize);\r
}\r
OUT VOID *Buffer\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN Index;\r
- UINT8 *Uint8Buffer;\r
- BOOLEAN DebugTimerInterruptState;\r
- EFI_TPL Tpl;\r
- DEBUG_PORT_HANDLE Handle;\r
- DEBUG_PACKET_HEADER DebugHeader;\r
- UINT8 *Data8;\r
+ EFI_STATUS Status;\r
+ UINTN Index;\r
+ UINT8 *Uint8Buffer;\r
+ BOOLEAN DebugTimerInterruptState;\r
+ EFI_TPL Tpl;\r
+ DEBUG_PORT_HANDLE Handle;\r
+ DEBUG_PACKET_HEADER DebugHeader;\r
+ UINT8 *Data8;\r
\r
//\r
// Raise TPL to prevent recursion from EFI timer interrupts\r
// Save and disable Debug Timer interrupt to avoid it to access Debug Port\r
//\r
DebugTimerInterruptState = SaveAndSetDebugTimerInterrupt (FALSE);\r
- Handle = GetDebugPortHandle ();\r
+ Handle = GetDebugPortHandle ();\r
\r
- Data8 = (UINT8 *) &DebugHeader;\r
+ Data8 = (UINT8 *)&DebugHeader;\r
Uint8Buffer = (UINT8 *)Buffer;\r
- if ((mSerialIoMode.ControlMask & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) != 0) {\r
+ if ((mSerialIoMode.ControlMask & EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE) != 0) {\r
if ((mLoopbackBuffer & SERIAL_PORT_LOOPBACK_BUFFER_FULL) == 0) {\r
return EFI_TIMEOUT;\r
}\r
- *Uint8Buffer = (UINT8)(mLoopbackBuffer & 0xff);\r
+\r
+ *Uint8Buffer = (UINT8)(mLoopbackBuffer & 0xff);\r
mLoopbackBuffer = 0;\r
- *BufferSize = 1;\r
+ *BufferSize = 1;\r
} else {\r
for (Index = 0; Index < *BufferSize; Index++) {\r
//\r
Status = DebugTerminalFifoRemove (&mSerialFifoForTerminal, Data8);\r
if (Status == EFI_SUCCESS) {\r
*Uint8Buffer = *Data8;\r
- Uint8Buffer ++;\r
+ Uint8Buffer++;\r
continue;\r
}\r
+\r
//\r
// Read the input character from Debug Port\r
//\r
if (!DebugPortPollBuffer (Handle)) {\r
break;\r
}\r
+\r
DebugAgentReadBuffer (Handle, Data8, 1, 0);\r
\r
if (*Data8 == DEBUG_STARTING_SYMBOL_ATTACH) {\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "Terminal Timer break symbol received %x", DebugHeader.Command);\r
DebugTerminalFifoAdd (&mSerialFifoForDebug, DebugHeader.Command);\r
}\r
+\r
if (Status == EFI_TIMEOUT) {\r
continue;\r
}\r
} else {\r
*Uint8Buffer = *Data8;\r
- Uint8Buffer ++;\r
+ Uint8Buffer++;\r
}\r
}\r
+\r
*BufferSize = (UINTN)Uint8Buffer - (UINTN)Buffer;\r
}\r
\r
**/\r
EFI_STATUS\r
DebugReadBreakFromDebugPort (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- OUT UINT8 *BreakSymbol\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ OUT UINT8 *BreakSymbol\r
)\r
{\r
- EFI_STATUS Status;\r
- DEBUG_PACKET_HEADER DebugHeader;\r
- UINT8 *Data8;\r
+ EFI_STATUS Status;\r
+ DEBUG_PACKET_HEADER DebugHeader;\r
+ UINT8 *Data8;\r
\r
*BreakSymbol = 0;\r
//\r
// If Debug Port buffer has data, read it till it was break symbol or Debug Port buffer empty.\r
//\r
- Data8 = (UINT8 *) &DebugHeader;\r
+ Data8 = (UINT8 *)&DebugHeader;\r
while (TRUE) {\r
//\r
// If start symbol is not received\r
//\r
break;\r
}\r
+\r
//\r
// Try to read the start symbol\r
//\r
*BreakSymbol = *Data8;\r
return EFI_SUCCESS;\r
}\r
+\r
if (*Data8 == DEBUG_STARTING_SYMBOL_NORMAL) {\r
Status = ReadRemainingBreakPacket (Handle, &DebugHeader);\r
if (Status == EFI_SUCCESS) {\r
*BreakSymbol = DebugHeader.Command;\r
return EFI_SUCCESS;\r
}\r
+\r
if (Status == EFI_TIMEOUT) {\r
break;\r
}\r
**/\r
EFI_STATUS\r
DebugReadBreakSymbol (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- OUT UINT8 *BreakSymbol\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ OUT UINT8 *BreakSymbol\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT8 Data8;\r
+ EFI_STATUS Status;\r
+ UINT8 Data8;\r
\r
//\r
// Read break symbol from debug FIFO firstly\r
\r
GLOBAL_REMOVE_IF_UNREFERENCED BOOLEAN mSkipBreakpoint = FALSE;\r
\r
-\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_VECTOR_HANDOFF_INFO_PPI mVectorHandoffInfoPpi = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_VECTOR_HANDOFF_INFO_PPI mVectorHandoffInfoPpi = {\r
&mVectorHandoffInfoDebugAgent[0]\r
};\r
\r
//\r
// Ppis to be installed\r
//\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR mVectorHandoffInfoPpiList[] = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_PPI_DESCRIPTOR mVectorHandoffInfoPpiList[] = {\r
{\r
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
&gEfiVectorHandoffInfoPpiGuid,\r
}\r
};\r
\r
-GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_NOTIFY_DESCRIPTOR mDebugAgentMemoryDiscoveredNotifyList[1] = {\r
+GLOBAL_REMOVE_IF_UNREFERENCED EFI_PEI_NOTIFY_DESCRIPTOR mDebugAgentMemoryDiscoveredNotifyList[1] = {\r
{\r
(EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
&gEfiPeiMemoryDiscoveredPpiGuid,\r
**/\r
EFI_STATUS\r
DebugReadBreakSymbol (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- OUT UINT8 *BreakSymbol\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ OUT UINT8 *BreakSymbol\r
)\r
{\r
- EFI_STATUS Status;\r
- DEBUG_PACKET_HEADER DebugHeader;\r
- UINT8 *Data8;\r
+ EFI_STATUS Status;\r
+ DEBUG_PACKET_HEADER DebugHeader;\r
+ UINT8 *Data8;\r
\r
*BreakSymbol = 0;\r
//\r
// If Debug Port buffer has data, read it till it was break symbol or Debug Port buffer empty.\r
//\r
- Data8 = (UINT8 *) &DebugHeader;\r
+ Data8 = (UINT8 *)&DebugHeader;\r
while (TRUE) {\r
//\r
// If start symbol is not received\r
//\r
break;\r
}\r
+\r
//\r
// Try to read the start symbol\r
//\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "Debug Timer attach symbol received %x", *BreakSymbol);\r
return EFI_SUCCESS;\r
}\r
+\r
if (*Data8 == DEBUG_STARTING_SYMBOL_NORMAL) {\r
Status = ReadRemainingBreakPacket (Handle, &DebugHeader);\r
if (Status == EFI_SUCCESS) {\r
DebugAgentMsgPrint (DEBUG_AGENT_INFO, "Debug Timer break symbol received %x", *BreakSymbol);\r
return EFI_SUCCESS;\r
}\r
+\r
if (Status == EFI_TIMEOUT) {\r
break;\r
}\r
VOID\r
)\r
{\r
- UINTN *MailboxLocation;\r
+ UINTN *MailboxLocation;\r
\r
- MailboxLocation = (UINTN *) GetExceptionHandlerInIdtEntry (DEBUG_MAILBOX_VECTOR);\r
+ MailboxLocation = (UINTN *)GetExceptionHandlerInIdtEntry (DEBUG_MAILBOX_VECTOR);\r
//\r
// *MailboxLocation is the pointer to Mailbox\r
//\r
- VerifyMailboxChecksum ((DEBUG_AGENT_MAILBOX *) (*MailboxLocation));\r
+ VerifyMailboxChecksum ((DEBUG_AGENT_MAILBOX *)(*MailboxLocation));\r
return MailboxLocation;\r
}\r
\r
**/\r
VOID\r
SetLocationSavedMailboxPointerInIdtEntry (\r
- IN VOID *MailboxLocation\r
+ IN VOID *MailboxLocation\r
)\r
{\r
SetExceptionHandlerInIdtEntry (DEBUG_MAILBOX_VECTOR, MailboxLocation);\r
VOID\r
)\r
{\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
\r
GuidHob = GetFirstGuidHob (&gEfiDebugAgentGuid);\r
if (GuidHob == NULL) {\r
return NULL;\r
}\r
- return (UINT64 *) (GET_GUID_HOB_DATA(GuidHob));\r
+\r
+ return (UINT64 *)(GET_GUID_HOB_DATA (GuidHob));\r
}\r
\r
/**\r
// Get mailbox from IDT entry firstly\r
//\r
MailboxLocationInIdt = GetLocationSavedMailboxPointerInIdtEntry ();\r
- Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocationInIdt);\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocationInIdt);\r
//\r
// Cannot used GetDebugFlag() to get Debug Flag to avoid GetMailboxPointer() nested\r
//\r
- if (Mailbox->DebugFlag.Bits.CheckMailboxInHob != 1 ||\r
- Mailbox->DebugFlag.Bits.InitArch != DEBUG_ARCH_SYMBOL) {\r
+ if ((Mailbox->DebugFlag.Bits.CheckMailboxInHob != 1) ||\r
+ (Mailbox->DebugFlag.Bits.InitArch != DEBUG_ARCH_SYMBOL))\r
+ {\r
//\r
// If mailbox was setup in SEC or the current CPU arch is different from the init arch\r
// Debug Agent initialized, return the mailbox from IDT entry directly.\r
// Compare mailbox in IDT entry with mailbox in HOB,\r
// need to fix mailbox location if HOB moved by PEI CORE\r
//\r
- if (MailboxLocationInHob != MailboxLocationInIdt && MailboxLocationInHob != NULL) {\r
+ if ((MailboxLocationInHob != MailboxLocationInIdt) && (MailboxLocationInHob != NULL)) {\r
Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocationInHob);\r
//\r
// Fix up Debug Port handler and save new mailbox in IDT entry\r
//\r
- Mailbox = (DEBUG_AGENT_MAILBOX *)((UINTN)Mailbox + ((UINTN)(MailboxLocationInHob) - (UINTN)MailboxLocationInIdt));\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)((UINTN)Mailbox + ((UINTN)(MailboxLocationInHob) - (UINTN)MailboxLocationInIdt));\r
DebugPortHandle = (UINTN)Mailbox->DebugPortHandle + ((UINTN)(MailboxLocationInHob) - (UINTN)MailboxLocationInIdt);\r
UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
*MailboxLocationInHob = (UINT64)(UINTN)Mailbox;\r
VOID\r
)\r
{\r
- DEBUG_AGENT_MAILBOX *DebugAgentMailbox;\r
+ DEBUG_AGENT_MAILBOX *DebugAgentMailbox;\r
\r
DebugAgentMailbox = GetMailboxPointer ();\r
\r
- return (DEBUG_PORT_HANDLE) (UINTN)(DebugAgentMailbox->DebugPortHandle);\r
+ return (DEBUG_PORT_HANDLE)(UINTN)(DebugAgentMailbox->DebugPortHandle);\r
}\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
DebugAgentCallbackMemoryDiscoveredPpi (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,\r
- IN VOID *Ppi\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,\r
+ IN VOID *Ppi\r
)\r
{\r
- EFI_STATUS Status;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- BOOLEAN InterruptStatus;\r
- EFI_PHYSICAL_ADDRESS Address;\r
- DEBUG_AGENT_MAILBOX *NewMailbox;\r
- UINT64 *MailboxLocationInHob;\r
+ EFI_STATUS Status;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ BOOLEAN InterruptStatus;\r
+ EFI_PHYSICAL_ADDRESS Address;\r
+ DEBUG_AGENT_MAILBOX *NewMailbox;\r
+ UINT64 *MailboxLocationInHob;\r
\r
//\r
// Save and disable original interrupt status\r
//\r
Status = PeiServicesAllocatePages (\r
EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (sizeof(DEBUG_AGENT_MAILBOX) + PcdGet16(PcdDebugPortHandleBufferSize)),\r
+ EFI_SIZE_TO_PAGES (sizeof (DEBUG_AGENT_MAILBOX) + PcdGet16 (PcdDebugPortHandleBufferSize)),\r
&Address\r
);\r
ASSERT_EFI_ERROR (Status);\r
- NewMailbox = (DEBUG_AGENT_MAILBOX *) (UINTN) Address;\r
+ NewMailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)Address;\r
//\r
// Copy Mailbox and Debug Port Handle buffer to new location in ACPI NVS memory, because original Mailbox\r
// and Debug Port Handle buffer in the allocated pool that may be marked as free by DXE Core after DXE Core\r
//\r
Mailbox = GetMailboxPointer ();\r
CopyMem (NewMailbox, Mailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
- CopyMem (NewMailbox + 1, (VOID *)(UINTN)Mailbox->DebugPortHandle, PcdGet16(PcdDebugPortHandleBufferSize));\r
+ CopyMem (NewMailbox + 1, (VOID *)(UINTN)Mailbox->DebugPortHandle, PcdGet16 (PcdDebugPortHandleBufferSize));\r
//\r
// Update Mailbox Location pointer in GUIDed HOB and IDT entry with new one\r
//\r
//\r
// Disable interrupts and save current interrupt state\r
//\r
- CpuInterruptState = SaveAndDisableInterrupts();\r
+ CpuInterruptState = SaveAndDisableInterrupts ();\r
\r
switch (InitFlag) {\r
+ case DEBUG_AGENT_INIT_PREMEM_SEC:\r
\r
- case DEBUG_AGENT_INIT_PREMEM_SEC:\r
+ InitializeDebugIdt ();\r
\r
- InitializeDebugIdt ();\r
+ MailboxLocation = (UINT64)(UINTN)&MailboxInStack;\r
+ Mailbox = &MailboxInStack;\r
+ ZeroMem ((VOID *)Mailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
+ //\r
+ // Get and save debug port handle and set the length of memory block.\r
+ //\r
+ SetLocationSavedMailboxPointerInIdtEntry (&MailboxLocation);\r
+ //\r
+ // Force error message could be printed during the first shakehand between Target/HOST.\r
+ //\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_PRINT_ERROR_LEVEL, DEBUG_AGENT_ERROR);\r
+ //\r
+ // Save init arch type when debug agent initialized\r
+ //\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_INIT_ARCH, DEBUG_ARCH_SYMBOL);\r
+ //\r
+ // Initialize Debug Timer hardware and save its frequency\r
+ //\r
+ InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
\r
- MailboxLocation = (UINT64)(UINTN)&MailboxInStack;\r
- Mailbox = &MailboxInStack;\r
- ZeroMem ((VOID *) Mailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
- //\r
- // Get and save debug port handle and set the length of memory block.\r
- //\r
- SetLocationSavedMailboxPointerInIdtEntry (&MailboxLocation);\r
- //\r
- // Force error message could be printed during the first shakehand between Target/HOST.\r
- //\r
- SetDebugFlag (DEBUG_AGENT_FLAG_PRINT_ERROR_LEVEL, DEBUG_AGENT_ERROR);\r
- //\r
- // Save init arch type when debug agent initialized\r
- //\r
- SetDebugFlag (DEBUG_AGENT_FLAG_INIT_ARCH, DEBUG_ARCH_SYMBOL);\r
- //\r
- // Initialize Debug Timer hardware and save its frequency\r
- //\r
- InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
+ Phase2Context.InitFlag = InitFlag;\r
+ Phase2Context.Context = Context;\r
+ Phase2Context.Function = Function;\r
+ DebugPortInitialize ((VOID *)&Phase2Context, InitializeDebugAgentPhase2);\r
+ //\r
+ // If reaches here, it means Debug Port initialization failed.\r
+ //\r
+ DEBUG ((DEBUG_ERROR, "Debug Agent: Debug port initialization failed.\n"));\r
\r
- Phase2Context.InitFlag = InitFlag;\r
- Phase2Context.Context = Context;\r
- Phase2Context.Function = Function;\r
- DebugPortInitialize ((VOID *) &Phase2Context, InitializeDebugAgentPhase2);\r
- //\r
- // If reaches here, it means Debug Port initialization failed.\r
- //\r
- DEBUG ((DEBUG_ERROR, "Debug Agent: Debug port initialization failed.\n"));\r
+ break;\r
\r
- break;\r
+ case DEBUG_AGENT_INIT_POSTMEM_SEC:\r
+ Mailbox = GetMailboxPointer ();\r
+ //\r
+ // Memory has been ready\r
+ //\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY, 1);\r
+ if (IsHostAttached ()) {\r
+ //\r
+ // Trigger one software interrupt to inform HOST\r
+ //\r
+ TriggerSoftInterrupt (MEMORY_READY_SIGNATURE);\r
+ }\r
\r
- case DEBUG_AGENT_INIT_POSTMEM_SEC:\r
- Mailbox = GetMailboxPointer ();\r
- //\r
- // Memory has been ready\r
- //\r
- SetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY, 1);\r
- if (IsHostAttached ()) {\r
//\r
- // Trigger one software interrupt to inform HOST\r
+ // Install Vector Handoff Info PPI to persist vectors used by Debug Agent\r
//\r
- TriggerSoftInterrupt (MEMORY_READY_SIGNATURE);\r
- }\r
- //\r
- // Install Vector Handoff Info PPI to persist vectors used by Debug Agent\r
- //\r
- Status = PeiServicesInstallPpi (&mVectorHandoffInfoPpiList[0]);\r
- if (EFI_ERROR (Status)) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to install Vector Handoff Info PPI!\n"));\r
- CpuDeadLoop ();\r
- }\r
- //\r
- // Fix up Debug Port handle address and mailbox address\r
- //\r
- DebugAgentContext = (DEBUG_AGENT_CONTEXT_POSTMEM_SEC *) Context;\r
- if (DebugAgentContext != NULL) {\r
- DebugPortHandle = (UINT64)(UINT32)(Mailbox->DebugPortHandle + DebugAgentContext->StackMigrateOffset);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
- Mailbox = (DEBUG_AGENT_MAILBOX *) ((UINTN) Mailbox + DebugAgentContext->StackMigrateOffset);\r
- MailboxLocation = (UINT64)(UINTN)Mailbox;\r
- //\r
- // Build mailbox location in HOB and fix-up its address\r
- //\r
- MailboxLocationPointer = BuildGuidDataHob (\r
- &gEfiDebugAgentGuid,\r
- &MailboxLocation,\r
- sizeof (UINT64)\r
- );\r
- MailboxLocationPointer = (UINT64 *) ((UINTN) MailboxLocationPointer + DebugAgentContext->HeapMigrateOffset);\r
- } else {\r
- //\r
- // DebugAgentContext is NULL. Then, Mailbox can directly be copied into memory.\r
- // Allocate ACPI NVS memory for new Mailbox and Debug Port Handle buffer\r
- //\r
- Status = PeiServicesAllocatePages (\r
- EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (sizeof(DEBUG_AGENT_MAILBOX) + PcdGet16(PcdDebugPortHandleBufferSize)),\r
- &Address\r
- );\r
+ Status = PeiServicesInstallPpi (&mVectorHandoffInfoPpiList[0]);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to allocate pages!\n"));\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to install Vector Handoff Info PPI!\n"));\r
CpuDeadLoop ();\r
}\r
- NewMailbox = (DEBUG_AGENT_MAILBOX *) (UINTN) Address;\r
- //\r
- // Copy Mailbox and Debug Port Handle buffer to new location in ACPI NVS memory, because original Mailbox\r
- // and Debug Port Handle buffer in the allocated pool that may be marked as free by DXE Core after DXE Core\r
- // reallocates the HOB.\r
- //\r
- CopyMem (NewMailbox, Mailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
- CopyMem (NewMailbox + 1, (VOID *)(UINTN)Mailbox->DebugPortHandle, PcdGet16(PcdDebugPortHandleBufferSize));\r
- UpdateMailboxContent (NewMailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, (UINT64)(UINTN)(NewMailbox + 1));\r
- MailboxLocation = (UINT64)(UINTN)NewMailbox;\r
- //\r
- // Build mailbox location in HOB\r
- //\r
- MailboxLocationPointer = BuildGuidDataHob (\r
- &gEfiDebugAgentGuid,\r
- &MailboxLocation,\r
- sizeof (UINT64)\r
- );\r
- }\r
- //\r
- // Update IDT entry to save the location saved mailbox pointer\r
- //\r
- SetLocationSavedMailboxPointerInIdtEntry (MailboxLocationPointer);\r
- break;\r
\r
- case DEBUG_AGENT_INIT_PEI:\r
- if (Context == NULL) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Input parameter Context cannot be NULL!\n"));\r
- CpuDeadLoop ();\r
- }\r
- //\r
- // Check if Debug Agent has initialized before\r
- //\r
- if (IsDebugAgentInitialzed()) {\r
- DEBUG ((DEBUG_WARN, "Debug Agent: It has already initialized in SEC Core!\n"));\r
- break;\r
- }\r
- //\r
- // Install Vector Handoff Info PPI to persist vectors used by Debug Agent\r
- //\r
- Status = PeiServicesInstallPpi (&mVectorHandoffInfoPpiList[0]);\r
- if (EFI_ERROR (Status)) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to install Vector Handoff Info PPI!\n"));\r
- CpuDeadLoop ();\r
- }\r
- //\r
- // Set up IDT entries\r
- //\r
- InitializeDebugIdt ();\r
- //\r
- // Build mailbox in HOB and setup Mailbox Set In Pei flag\r
- //\r
- Mailbox = AllocateZeroPool (sizeof (DEBUG_AGENT_MAILBOX));\r
- if (Mailbox == NULL) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to allocate memory!\n"));\r
- CpuDeadLoop ();\r
- } else {\r
- MailboxLocation = (UINT64)(UINTN)Mailbox;\r
- MailboxLocationPointer = BuildGuidDataHob (\r
- &gEfiDebugAgentGuid,\r
- &MailboxLocation,\r
- sizeof (UINT64)\r
- );\r
//\r
- // Initialize Debug Timer hardware and save its frequency\r
+ // Fix up Debug Port handle address and mailbox address\r
//\r
- InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
+ DebugAgentContext = (DEBUG_AGENT_CONTEXT_POSTMEM_SEC *)Context;\r
+ if (DebugAgentContext != NULL) {\r
+ DebugPortHandle = (UINT64)(UINT32)(Mailbox->DebugPortHandle + DebugAgentContext->StackMigrateOffset);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)((UINTN)Mailbox + DebugAgentContext->StackMigrateOffset);\r
+ MailboxLocation = (UINT64)(UINTN)Mailbox;\r
+ //\r
+ // Build mailbox location in HOB and fix-up its address\r
+ //\r
+ MailboxLocationPointer = BuildGuidDataHob (\r
+ &gEfiDebugAgentGuid,\r
+ &MailboxLocation,\r
+ sizeof (UINT64)\r
+ );\r
+ MailboxLocationPointer = (UINT64 *)((UINTN)MailboxLocationPointer + DebugAgentContext->HeapMigrateOffset);\r
+ } else {\r
+ //\r
+ // DebugAgentContext is NULL. Then, Mailbox can directly be copied into memory.\r
+ // Allocate ACPI NVS memory for new Mailbox and Debug Port Handle buffer\r
+ //\r
+ Status = PeiServicesAllocatePages (\r
+ EfiACPIMemoryNVS,\r
+ EFI_SIZE_TO_PAGES (sizeof (DEBUG_AGENT_MAILBOX) + PcdGet16 (PcdDebugPortHandleBufferSize)),\r
+ &Address\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to allocate pages!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
+\r
+ NewMailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)Address;\r
+ //\r
+ // Copy Mailbox and Debug Port Handle buffer to new location in ACPI NVS memory, because original Mailbox\r
+ // and Debug Port Handle buffer in the allocated pool that may be marked as free by DXE Core after DXE Core\r
+ // reallocates the HOB.\r
+ //\r
+ CopyMem (NewMailbox, Mailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
+ CopyMem (NewMailbox + 1, (VOID *)(UINTN)Mailbox->DebugPortHandle, PcdGet16 (PcdDebugPortHandleBufferSize));\r
+ UpdateMailboxContent (NewMailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, (UINT64)(UINTN)(NewMailbox + 1));\r
+ MailboxLocation = (UINT64)(UINTN)NewMailbox;\r
+ //\r
+ // Build mailbox location in HOB\r
+ //\r
+ MailboxLocationPointer = BuildGuidDataHob (\r
+ &gEfiDebugAgentGuid,\r
+ &MailboxLocation,\r
+ sizeof (UINT64)\r
+ );\r
+ }\r
+\r
//\r
- // Update IDT entry to save the location pointer saved mailbox pointer\r
+ // Update IDT entry to save the location saved mailbox pointer\r
//\r
SetLocationSavedMailboxPointerInIdtEntry (MailboxLocationPointer);\r
- }\r
- //\r
- // Save init arch type when debug agent initialized\r
- //\r
- SetDebugFlag (DEBUG_AGENT_FLAG_INIT_ARCH, DEBUG_ARCH_SYMBOL);\r
- //\r
- // Register for a callback once memory has been initialized.\r
- // If memory has been ready, the callback function will be invoked immediately\r
- //\r
- Status = PeiServicesNotifyPpi (&mDebugAgentMemoryDiscoveredNotifyList[0]);\r
- if (EFI_ERROR (Status)) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to register memory discovered callback function!\n"));\r
- CpuDeadLoop ();\r
- }\r
- //\r
- // Set HOB check flag if memory has not been ready yet\r
- //\r
- if (GetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY) == 0) {\r
- SetDebugFlag (DEBUG_AGENT_FLAG_CHECK_MAILBOX_IN_HOB, 1);\r
- }\r
-\r
- Phase2Context.InitFlag = InitFlag;\r
- Phase2Context.Context = Context;\r
- Phase2Context.Function = Function;\r
- DebugPortInitialize ((VOID *) &Phase2Context, InitializeDebugAgentPhase2);\r
+ break;\r
\r
- FindAndReportModuleImageInfo (4);\r
+ case DEBUG_AGENT_INIT_PEI:\r
+ if (Context == NULL) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Input parameter Context cannot be NULL!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
\r
- break;\r
+ //\r
+ // Check if Debug Agent has initialized before\r
+ //\r
+ if (IsDebugAgentInitialzed ()) {\r
+ DEBUG ((DEBUG_WARN, "Debug Agent: It has already initialized in SEC Core!\n"));\r
+ break;\r
+ }\r
\r
- case DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64:\r
- if (Context == NULL) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Input parameter Context cannot be NULL!\n"));\r
- CpuDeadLoop ();\r
- } else {\r
- Ia32Idtr = (IA32_DESCRIPTOR *) Context;\r
- Ia32IdtEntry = (IA32_IDT_ENTRY *)(Ia32Idtr->Base);\r
- MailboxLocationPointer = (UINT64 *) ((UINTN) Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetLow +\r
- ((UINTN) Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetHigh << 16));\r
- Mailbox = (DEBUG_AGENT_MAILBOX *) (UINTN)(*MailboxLocationPointer);\r
//\r
- // Mailbox should valid and setup before executing thunk code\r
+ // Install Vector Handoff Info PPI to persist vectors used by Debug Agent\r
//\r
- VerifyMailboxChecksum (Mailbox);\r
+ Status = PeiServicesInstallPpi (&mVectorHandoffInfoPpiList[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to install Vector Handoff Info PPI!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
\r
- DebugPortHandle = (UINT64) (UINTN)DebugPortInitialize ((VOID *)(UINTN)Mailbox->DebugPortHandle, NULL);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
//\r
// Set up IDT entries\r
//\r
InitializeDebugIdt ();\r
//\r
- // Update IDT entry to save location pointer saved the mailbox pointer\r
+ // Build mailbox in HOB and setup Mailbox Set In Pei flag\r
//\r
- SetLocationSavedMailboxPointerInIdtEntry (MailboxLocationPointer);\r
+ Mailbox = AllocateZeroPool (sizeof (DEBUG_AGENT_MAILBOX));\r
+ if (Mailbox == NULL) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to allocate memory!\n"));\r
+ CpuDeadLoop ();\r
+ } else {\r
+ MailboxLocation = (UINT64)(UINTN)Mailbox;\r
+ MailboxLocationPointer = BuildGuidDataHob (\r
+ &gEfiDebugAgentGuid,\r
+ &MailboxLocation,\r
+ sizeof (UINT64)\r
+ );\r
+ //\r
+ // Initialize Debug Timer hardware and save its frequency\r
+ //\r
+ InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
+ //\r
+ // Update IDT entry to save the location pointer saved mailbox pointer\r
+ //\r
+ SetLocationSavedMailboxPointerInIdtEntry (MailboxLocationPointer);\r
+ }\r
+\r
+ //\r
+ // Save init arch type when debug agent initialized\r
+ //\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_INIT_ARCH, DEBUG_ARCH_SYMBOL);\r
+ //\r
+ // Register for a callback once memory has been initialized.\r
+ // If memory has been ready, the callback function will be invoked immediately\r
+ //\r
+ Status = PeiServicesNotifyPpi (&mDebugAgentMemoryDiscoveredNotifyList[0]);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Failed to register memory discovered callback function!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
+\r
+ //\r
+ // Set HOB check flag if memory has not been ready yet\r
+ //\r
+ if (GetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY) == 0) {\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_CHECK_MAILBOX_IN_HOB, 1);\r
+ }\r
+\r
+ Phase2Context.InitFlag = InitFlag;\r
+ Phase2Context.Context = Context;\r
+ Phase2Context.Function = Function;\r
+ DebugPortInitialize ((VOID *)&Phase2Context, InitializeDebugAgentPhase2);\r
\r
FindAndReportModuleImageInfo (4);\r
- }\r
- break;\r
\r
- default:\r
- //\r
- // Only DEBUG_AGENT_INIT_PREMEM_SEC and DEBUG_AGENT_INIT_POSTMEM_SEC are allowed for this\r
- // Debug Agent library instance.\r
- //\r
- DEBUG ((DEBUG_ERROR, "Debug Agent: The InitFlag value is not allowed!\n"));\r
- CpuDeadLoop ();\r
- break;\r
+ break;\r
+\r
+ case DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64:\r
+ if (Context == NULL) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Input parameter Context cannot be NULL!\n"));\r
+ CpuDeadLoop ();\r
+ } else {\r
+ Ia32Idtr = (IA32_DESCRIPTOR *)Context;\r
+ Ia32IdtEntry = (IA32_IDT_ENTRY *)(Ia32Idtr->Base);\r
+ MailboxLocationPointer = (UINT64 *)((UINTN)Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetLow +\r
+ ((UINTN)Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetHigh << 16));\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocationPointer);\r
+ //\r
+ // Mailbox should valid and setup before executing thunk code\r
+ //\r
+ VerifyMailboxChecksum (Mailbox);\r
+\r
+ DebugPortHandle = (UINT64)(UINTN)DebugPortInitialize ((VOID *)(UINTN)Mailbox->DebugPortHandle, NULL);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
+ //\r
+ // Set up IDT entries\r
+ //\r
+ InitializeDebugIdt ();\r
+ //\r
+ // Update IDT entry to save location pointer saved the mailbox pointer\r
+ //\r
+ SetLocationSavedMailboxPointerInIdtEntry (MailboxLocationPointer);\r
+\r
+ FindAndReportModuleImageInfo (4);\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+ //\r
+ // Only DEBUG_AGENT_INIT_PREMEM_SEC and DEBUG_AGENT_INIT_POSTMEM_SEC are allowed for this\r
+ // Debug Agent library instance.\r
+ //\r
+ DEBUG ((DEBUG_ERROR, "Debug Agent: The InitFlag value is not allowed!\n"));\r
+ CpuDeadLoop ();\r
+ break;\r
}\r
\r
if (InitFlag == DEBUG_AGENT_INIT_POSTMEM_SEC) {\r
//\r
EnableInterrupts ();\r
}\r
+\r
//\r
// If Function is not NULL, invoke it always whatever debug agent was initialized successfully or not.\r
//\r
if (Function != NULL) {\r
Function (Context);\r
}\r
+\r
//\r
// Set return status for DEBUG_AGENT_INIT_PEI\r
//\r
- if (InitFlag == DEBUG_AGENT_INIT_PEI && Context != NULL) {\r
+ if ((InitFlag == DEBUG_AGENT_INIT_PEI) && (Context != NULL)) {\r
*(EFI_STATUS *)Context = EFI_SUCCESS;\r
}\r
}\r
VOID\r
EFIAPI\r
InitializeDebugAgentPhase2 (\r
- IN VOID *Context,\r
- IN DEBUG_PORT_HANDLE DebugPortHandle\r
+ IN VOID *Context,\r
+ IN DEBUG_PORT_HANDLE DebugPortHandle\r
)\r
{\r
- DEBUG_AGENT_PHASE2_CONTEXT *Phase2Context;\r
- UINT64 *MailboxLocation;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- EFI_SEC_PEI_HAND_OFF *SecCoreData;\r
- UINT16 BufferSize;\r
- UINT64 NewDebugPortHandle;\r
-\r
- Phase2Context = (DEBUG_AGENT_PHASE2_CONTEXT *) Context;\r
+ DEBUG_AGENT_PHASE2_CONTEXT *Phase2Context;\r
+ UINT64 *MailboxLocation;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ EFI_SEC_PEI_HAND_OFF *SecCoreData;\r
+ UINT16 BufferSize;\r
+ UINT64 NewDebugPortHandle;\r
+\r
+ Phase2Context = (DEBUG_AGENT_PHASE2_CONTEXT *)Context;\r
MailboxLocation = GetLocationSavedMailboxPointerInIdtEntry ();\r
- Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
- BufferSize = PcdGet16(PcdDebugPortHandleBufferSize);\r
- if (Phase2Context->InitFlag == DEBUG_AGENT_INIT_PEI && BufferSize != 0) {\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
+ BufferSize = PcdGet16 (PcdDebugPortHandleBufferSize);\r
+ if ((Phase2Context->InitFlag == DEBUG_AGENT_INIT_PEI) && (BufferSize != 0)) {\r
NewDebugPortHandle = (UINT64)(UINTN)AllocateCopyPool (BufferSize, DebugPortHandle);\r
} else {\r
NewDebugPortHandle = (UINT64)(UINTN)DebugPortHandle;\r
}\r
+\r
UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, NewDebugPortHandle);\r
\r
//\r
// host to disable low memory filtering.\r
//\r
SecCoreData = (EFI_SEC_PEI_HAND_OFF *)Phase2Context->Context;\r
- if ((UINTN)SecCoreData->TemporaryRamBase < BASE_128MB && IsHostAttached ()) {\r
+ if (((UINTN)SecCoreData->TemporaryRamBase < BASE_128MB) && IsHostAttached ()) {\r
SetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY, 1);\r
TriggerSoftInterrupt (MEMORY_READY_SIGNATURE);\r
}\r
+\r
//\r
// Enable Debug Timer interrupt\r
//\r
VOID\r
EFIAPI\r
InitializeDebugAgentPhase2 (\r
- IN VOID *Context,\r
- IN DEBUG_PORT_HANDLE DebugPortHandle\r
+ IN VOID *Context,\r
+ IN DEBUG_PORT_HANDLE DebugPortHandle\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
DebugAgentCallbackMemoryDiscoveredPpi (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,\r
- IN VOID *Ppi\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,\r
+ IN VOID *Ppi\r
);\r
\r
#endif\r
-\r
\r
#include "SmmDebugAgentLib.h"\r
\r
-DEBUG_AGENT_MAILBOX *mMailboxPointer = NULL;\r
-DEBUG_AGENT_MAILBOX mLocalMailbox;\r
-UINTN mSavedDebugRegisters[6];\r
-IA32_IDT_GATE_DESCRIPTOR mIdtEntryTable[33];\r
-BOOLEAN mSkipBreakpoint = FALSE;\r
-BOOLEAN mSmmDebugIdtInitFlag = FALSE;\r
-BOOLEAN mApicTimerRestore = FALSE;\r
-BOOLEAN mPeriodicMode;\r
-UINT32 mTimerCycle;\r
-UINTN mApicTimerDivisor;\r
-UINT8 mVector;\r
-\r
-CHAR8 mWarningMsgIgnoreSmmEntryBreak[] = "Ignore smmentrybreak setting for SMI issued during DXE debugging!\r\n";\r
+DEBUG_AGENT_MAILBOX *mMailboxPointer = NULL;\r
+DEBUG_AGENT_MAILBOX mLocalMailbox;\r
+UINTN mSavedDebugRegisters[6];\r
+IA32_IDT_GATE_DESCRIPTOR mIdtEntryTable[33];\r
+BOOLEAN mSkipBreakpoint = FALSE;\r
+BOOLEAN mSmmDebugIdtInitFlag = FALSE;\r
+BOOLEAN mApicTimerRestore = FALSE;\r
+BOOLEAN mPeriodicMode;\r
+UINT32 mTimerCycle;\r
+UINTN mApicTimerDivisor;\r
+UINT8 mVector;\r
+\r
+CHAR8 mWarningMsgIgnoreSmmEntryBreak[] = "Ignore smmentrybreak setting for SMI issued during DXE debugging!\r\n";\r
\r
/**\r
Check if debug agent support multi-processor.\r
**/\r
EFI_STATUS\r
DebugReadBreakSymbol (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- OUT UINT8 *BreakSymbol\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ OUT UINT8 *BreakSymbol\r
)\r
{\r
//\r
VOID\r
)\r
{\r
- EFI_HOB_GUID_TYPE *GuidHob;\r
- UINT64 *MailboxLocation;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
+ UINT64 *MailboxLocation;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
\r
GuidHob = GetFirstGuidHob (&gEfiDebugAgentGuid);\r
if (GuidHob == NULL) {\r
return NULL;\r
}\r
- MailboxLocation = (UINT64 *) (GET_GUID_HOB_DATA(GuidHob));\r
- Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
+\r
+ MailboxLocation = (UINT64 *)(GET_GUID_HOB_DATA (GuidHob));\r
+ Mailbox = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
VerifyMailboxChecksum (Mailbox);\r
\r
return Mailbox;\r
VOID\r
)\r
{\r
- return (DEBUG_PORT_HANDLE) (UINTN)(GetMailboxPointer()->DebugPortHandle);\r
+ return (DEBUG_PORT_HANDLE)(UINTN)(GetMailboxPointer ()->DebugPortHandle);\r
}\r
\r
/**\r
IN DEBUG_AGENT_CONTINUE Function OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- UINT64 DebugPortHandle;\r
- IA32_IDT_GATE_DESCRIPTOR IdtEntry[33];\r
- IA32_DESCRIPTOR IdtDescriptor;\r
- IA32_DESCRIPTOR *Ia32Idtr;\r
- IA32_IDT_ENTRY *Ia32IdtEntry;\r
- IA32_DESCRIPTOR Idtr;\r
- UINT16 IdtEntryCount;\r
- DEBUG_AGENT_MAILBOX *Mailbox;\r
- UINT64 *MailboxLocation;\r
- UINT32 DebugTimerFrequency;\r
+ EFI_STATUS Status;\r
+ UINT64 DebugPortHandle;\r
+ IA32_IDT_GATE_DESCRIPTOR IdtEntry[33];\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
+ IA32_DESCRIPTOR *Ia32Idtr;\r
+ IA32_IDT_ENTRY *Ia32IdtEntry;\r
+ IA32_DESCRIPTOR Idtr;\r
+ UINT16 IdtEntryCount;\r
+ DEBUG_AGENT_MAILBOX *Mailbox;\r
+ UINT64 *MailboxLocation;\r
+ UINT32 DebugTimerFrequency;\r
\r
switch (InitFlag) {\r
- case DEBUG_AGENT_INIT_SMM:\r
- //\r
- // Install configuration table for persisted vector handoff info\r
- //\r
- Status = gSmst->SmmInstallConfigurationTable (\r
- gSmst,\r
- &gEfiVectorHandoffTableGuid,\r
- (VOID *) &mVectorHandoffInfoDebugAgent[0],\r
- sizeof (EFI_VECTOR_HANDOFF_INFO) * mVectorHandoffInfoCount\r
- );\r
- if (EFI_ERROR (Status)) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Cannot install configuration table for persisted vector handoff info!\n"));\r
- CpuDeadLoop ();\r
- }\r
- //\r
- // Check if Debug Agent initialized in DXE phase\r
- //\r
- Status = EfiGetSystemConfigurationTable (&gEfiDebugAgentGuid, (VOID **) &Mailbox);\r
- if (Status == EFI_SUCCESS && Mailbox != NULL) {\r
- VerifyMailboxChecksum (Mailbox);\r
- mMailboxPointer = Mailbox;\r
- break;\r
- }\r
- //\r
- // Check if Debug Agent initialized in SEC/PEI phase\r
- //\r
- Mailbox = GetMailboxFromHob ();\r
- if (Mailbox != NULL) {\r
- mMailboxPointer = Mailbox;\r
- break;\r
- }\r
- //\r
- // Debug Agent was not initialized before, use the local mailbox.\r
- //\r
- ZeroMem (&mLocalMailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
- Mailbox = &mLocalMailbox;\r
- //\r
- // Save original IDT entries\r
- //\r
- AsmReadIdtr (&IdtDescriptor);\r
- CopyMem (&IdtEntry, (VOID *)IdtDescriptor.Base, 33 * sizeof(IA32_IDT_GATE_DESCRIPTOR));\r
- //\r
- // Initialized Debug Agent\r
- //\r
- InitializeDebugIdt ();\r
- //\r
- // Initialize Debug Timer hardware and save its frequency\r
- //\r
- InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
-\r
- DebugPortHandle = (UINT64) (UINTN)DebugPortInitialize ((DEBUG_PORT_HANDLE) (UINTN)Mailbox->DebugPortHandle, NULL);\r
- UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
- mMailboxPointer = Mailbox;\r
- //\r
- // Trigger one software interrupt to inform HOST\r
- //\r
- TriggerSoftInterrupt (SYSTEM_RESET_SIGNATURE);\r
-\r
- SetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY, 1);\r
- //\r
- // Memory has been ready\r
- //\r
- if (IsHostAttached ()) {\r
+ case DEBUG_AGENT_INIT_SMM:\r
//\r
- // Trigger one software interrupt to inform HOST\r
+ // Install configuration table for persisted vector handoff info\r
+ //\r
+ Status = gSmst->SmmInstallConfigurationTable (\r
+ gSmst,\r
+ &gEfiVectorHandoffTableGuid,\r
+ (VOID *)&mVectorHandoffInfoDebugAgent[0],\r
+ sizeof (EFI_VECTOR_HANDOFF_INFO) * mVectorHandoffInfoCount\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Cannot install configuration table for persisted vector handoff info!\n"));\r
+ CpuDeadLoop ();\r
+ }\r
+\r
+ //\r
+ // Check if Debug Agent initialized in DXE phase\r
+ //\r
+ Status = EfiGetSystemConfigurationTable (&gEfiDebugAgentGuid, (VOID **)&Mailbox);\r
+ if ((Status == EFI_SUCCESS) && (Mailbox != NULL)) {\r
+ VerifyMailboxChecksum (Mailbox);\r
+ mMailboxPointer = Mailbox;\r
+ break;\r
+ }\r
+\r
+ //\r
+ // Check if Debug Agent initialized in SEC/PEI phase\r
+ //\r
+ Mailbox = GetMailboxFromHob ();\r
+ if (Mailbox != NULL) {\r
+ mMailboxPointer = Mailbox;\r
+ break;\r
+ }\r
+\r
+ //\r
+ // Debug Agent was not initialized before, use the local mailbox.\r
//\r
- TriggerSoftInterrupt (MEMORY_READY_SIGNATURE);\r
- }\r
- //\r
- // Find and report PE/COFF image info to HOST\r
- //\r
- FindAndReportModuleImageInfo (SIZE_4KB);\r
- //\r
- // Restore saved IDT entries\r
- //\r
- CopyMem ((VOID *)IdtDescriptor.Base, &IdtEntry, 33 * sizeof(IA32_IDT_GATE_DESCRIPTOR));\r
-\r
- break;\r
-\r
- case DEBUG_AGENT_INIT_ENTER_SMI:\r
- SaveDebugRegister ();\r
- if (!mSmmDebugIdtInitFlag) {\r
+ ZeroMem (&mLocalMailbox, sizeof (DEBUG_AGENT_MAILBOX));\r
+ Mailbox = &mLocalMailbox;\r
//\r
- // We only need to initialize Debug IDT table at first SMI entry\r
- // after SMM relocation.\r
+ // Save original IDT entries\r
+ //\r
+ AsmReadIdtr (&IdtDescriptor);\r
+ CopyMem (&IdtEntry, (VOID *)IdtDescriptor.Base, 33 * sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
+ //\r
+ // Initialized Debug Agent\r
//\r
InitializeDebugIdt ();\r
- mSmmDebugIdtInitFlag = TRUE;\r
- }\r
- //\r
- // Check if CPU APIC Timer is working, otherwise initialize it.\r
- //\r
- InitializeLocalApicSoftwareEnable (TRUE);\r
- GetApicTimerState (&mApicTimerDivisor, &mPeriodicMode, &mVector);\r
- mTimerCycle = GetApicTimerInitCount ();\r
- if (!mPeriodicMode || mTimerCycle == 0) {\r
- mApicTimerRestore = TRUE;\r
- InitializeDebugTimer (NULL, FALSE);\r
- }\r
- Mailbox = GetMailboxPointer ();\r
- if (GetDebugFlag (DEBUG_AGENT_FLAG_AGENT_IN_PROGRESS) == 1) {\r
//\r
- // If Debug Agent has been communication state with HOST, we need skip\r
- // any break points set in SMM, set Skip Breakpoint flag\r
+ // Initialize Debug Timer hardware and save its frequency\r
+ //\r
+ InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
+\r
+ DebugPortHandle = (UINT64)(UINTN)DebugPortInitialize ((DEBUG_PORT_HANDLE)(UINTN)Mailbox->DebugPortHandle, NULL);\r
+ UpdateMailboxContent (Mailbox, DEBUG_MAILBOX_DEBUG_PORT_HANDLE_INDEX, DebugPortHandle);\r
+ mMailboxPointer = Mailbox;\r
+ //\r
+ // Trigger one software interrupt to inform HOST\r
//\r
- mSkipBreakpoint = TRUE;\r
- }\r
- if (GetDebugFlag (DEBUG_AGENT_FLAG_BREAK_ON_NEXT_SMI) == 1) {\r
- if (mSkipBreakpoint) {\r
+ TriggerSoftInterrupt (SYSTEM_RESET_SIGNATURE);\r
+\r
+ SetDebugFlag (DEBUG_AGENT_FLAG_MEMORY_READY, 1);\r
+ //\r
+ // Memory has been ready\r
+ //\r
+ if (IsHostAttached ()) {\r
//\r
- // Print warning message if ignore smm entry break\r
+ // Trigger one software interrupt to inform HOST\r
//\r
- DebugPortWriteBuffer ((DEBUG_PORT_HANDLE) (UINTN)Mailbox->DebugPortHandle,\r
- (UINT8 *)mWarningMsgIgnoreSmmEntryBreak,\r
- AsciiStrLen (mWarningMsgIgnoreSmmEntryBreak)\r
- );\r
- } else {\r
+ TriggerSoftInterrupt (MEMORY_READY_SIGNATURE);\r
+ }\r
+\r
+ //\r
+ // Find and report PE/COFF image info to HOST\r
+ //\r
+ FindAndReportModuleImageInfo (SIZE_4KB);\r
+ //\r
+ // Restore saved IDT entries\r
+ //\r
+ CopyMem ((VOID *)IdtDescriptor.Base, &IdtEntry, 33 * sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
+\r
+ break;\r
+\r
+ case DEBUG_AGENT_INIT_ENTER_SMI:\r
+ SaveDebugRegister ();\r
+ if (!mSmmDebugIdtInitFlag) {\r
//\r
- // If SMM entry break is set, SMM code will be break at here.\r
+ // We only need to initialize Debug IDT table at first SMI entry\r
+ // after SMM relocation.\r
//\r
- CpuBreakpoint ();\r
+ InitializeDebugIdt ();\r
+ mSmmDebugIdtInitFlag = TRUE;\r
}\r
- }\r
- break;\r
-\r
- case DEBUG_AGENT_INIT_EXIT_SMI:\r
- Mailbox = GetMailboxPointer ();\r
- //\r
- // Clear Skip Breakpoint flag\r
- //\r
- mSkipBreakpoint = FALSE;\r
- RestoreDebugRegister ();\r
- //\r
- // Restore APIC Timer\r
- //\r
- if (mApicTimerRestore) {\r
- InitializeApicTimer (mApicTimerDivisor, mTimerCycle, mPeriodicMode, mVector);\r
- mApicTimerRestore = FALSE;\r
- }\r
- break;\r
-\r
- case DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64:\r
- if (Context == NULL) {\r
- DEBUG ((DEBUG_ERROR, "DebugAgent: Input parameter Context cannot be NULL!\n"));\r
- CpuDeadLoop ();\r
- } else {\r
- Ia32Idtr = (IA32_DESCRIPTOR *) Context;\r
- Ia32IdtEntry = (IA32_IDT_ENTRY *)(Ia32Idtr->Base);\r
- MailboxLocation = (UINT64 *) ((UINTN) Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetLow +\r
- ((UINTN) Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetHigh << 16));\r
- mMailboxPointer = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
- VerifyMailboxChecksum (mMailboxPointer);\r
+\r
//\r
- // Get original IDT address and size.\r
+ // Check if CPU APIC Timer is working, otherwise initialize it.\r
//\r
- AsmReadIdtr ((IA32_DESCRIPTOR *) &Idtr);\r
- IdtEntryCount = (UINT16) ((Idtr.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
- if (IdtEntryCount < 33) {\r
- Idtr.Limit = (UINT16) (sizeof (IA32_IDT_GATE_DESCRIPTOR) * 33 - 1);\r
- Idtr.Base = (UINTN) &mIdtEntryTable;\r
- ZeroMem (&mIdtEntryTable, Idtr.Limit + 1);\r
- AsmWriteIdtr ((IA32_DESCRIPTOR *) &Idtr);\r
+ InitializeLocalApicSoftwareEnable (TRUE);\r
+ GetApicTimerState (&mApicTimerDivisor, &mPeriodicMode, &mVector);\r
+ mTimerCycle = GetApicTimerInitCount ();\r
+ if (!mPeriodicMode || (mTimerCycle == 0)) {\r
+ mApicTimerRestore = TRUE;\r
+ InitializeDebugTimer (NULL, FALSE);\r
}\r
\r
- InitializeDebugIdt ();\r
+ Mailbox = GetMailboxPointer ();\r
+ if (GetDebugFlag (DEBUG_AGENT_FLAG_AGENT_IN_PROGRESS) == 1) {\r
+ //\r
+ // If Debug Agent has been communication state with HOST, we need skip\r
+ // any break points set in SMM, set Skip Breakpoint flag\r
+ //\r
+ mSkipBreakpoint = TRUE;\r
+ }\r
+\r
+ if (GetDebugFlag (DEBUG_AGENT_FLAG_BREAK_ON_NEXT_SMI) == 1) {\r
+ if (mSkipBreakpoint) {\r
+ //\r
+ // Print warning message if ignore smm entry break\r
+ //\r
+ DebugPortWriteBuffer (\r
+ (DEBUG_PORT_HANDLE)(UINTN)Mailbox->DebugPortHandle,\r
+ (UINT8 *)mWarningMsgIgnoreSmmEntryBreak,\r
+ AsciiStrLen (mWarningMsgIgnoreSmmEntryBreak)\r
+ );\r
+ } else {\r
+ //\r
+ // If SMM entry break is set, SMM code will be break at here.\r
+ //\r
+ CpuBreakpoint ();\r
+ }\r
+ }\r
+\r
+ break;\r
+\r
+ case DEBUG_AGENT_INIT_EXIT_SMI:\r
+ Mailbox = GetMailboxPointer ();\r
//\r
- // Initialize Debug Timer hardware and save its frequency\r
+ // Clear Skip Breakpoint flag\r
//\r
- InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
- UpdateMailboxContent (mMailboxPointer, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
+ mSkipBreakpoint = FALSE;\r
+ RestoreDebugRegister ();\r
//\r
- // Enable Debug Timer interrupt and CPU interrupt\r
+ // Restore APIC Timer\r
//\r
- SaveAndSetDebugTimerInterrupt (TRUE);\r
- EnableInterrupts ();\r
+ if (mApicTimerRestore) {\r
+ InitializeApicTimer (mApicTimerDivisor, mTimerCycle, mPeriodicMode, mVector);\r
+ mApicTimerRestore = FALSE;\r
+ }\r
\r
- FindAndReportModuleImageInfo (SIZE_4KB);\r
- }\r
- break;\r
-\r
- default:\r
- //\r
- // Only DEBUG_AGENT_INIT_PREMEM_SEC and DEBUG_AGENT_INIT_POSTMEM_SEC are allowed for this\r
- // Debug Agent library instance.\r
- //\r
- DEBUG ((DEBUG_ERROR, "Debug Agent: The InitFlag value is not allowed!\n"));\r
- CpuDeadLoop ();\r
- break;\r
+ break;\r
+\r
+ case DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64:\r
+ if (Context == NULL) {\r
+ DEBUG ((DEBUG_ERROR, "DebugAgent: Input parameter Context cannot be NULL!\n"));\r
+ CpuDeadLoop ();\r
+ } else {\r
+ Ia32Idtr = (IA32_DESCRIPTOR *)Context;\r
+ Ia32IdtEntry = (IA32_IDT_ENTRY *)(Ia32Idtr->Base);\r
+ MailboxLocation = (UINT64 *)((UINTN)Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetLow +\r
+ ((UINTN)Ia32IdtEntry[DEBUG_MAILBOX_VECTOR].Bits.OffsetHigh << 16));\r
+ mMailboxPointer = (DEBUG_AGENT_MAILBOX *)(UINTN)(*MailboxLocation);\r
+ VerifyMailboxChecksum (mMailboxPointer);\r
+ //\r
+ // Get original IDT address and size.\r
+ //\r
+ AsmReadIdtr ((IA32_DESCRIPTOR *)&Idtr);\r
+ IdtEntryCount = (UINT16)((Idtr.Limit + 1) / sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
+ if (IdtEntryCount < 33) {\r
+ Idtr.Limit = (UINT16)(sizeof (IA32_IDT_GATE_DESCRIPTOR) * 33 - 1);\r
+ Idtr.Base = (UINTN)&mIdtEntryTable;\r
+ ZeroMem (&mIdtEntryTable, Idtr.Limit + 1);\r
+ AsmWriteIdtr ((IA32_DESCRIPTOR *)&Idtr);\r
+ }\r
+\r
+ InitializeDebugIdt ();\r
+ //\r
+ // Initialize Debug Timer hardware and save its frequency\r
+ //\r
+ InitializeDebugTimer (&DebugTimerFrequency, TRUE);\r
+ UpdateMailboxContent (mMailboxPointer, DEBUG_MAILBOX_DEBUG_TIMER_FREQUENCY, DebugTimerFrequency);\r
+ //\r
+ // Enable Debug Timer interrupt and CPU interrupt\r
+ //\r
+ SaveAndSetDebugTimerInterrupt (TRUE);\r
+ EnableInterrupts ();\r
+\r
+ FindAndReportModuleImageInfo (SIZE_4KB);\r
+ }\r
+\r
+ break;\r
+\r
+ default:\r
+ //\r
+ // Only DEBUG_AGENT_INIT_PREMEM_SEC and DEBUG_AGENT_INIT_POSTMEM_SEC are allowed for this\r
+ // Debug Agent library instance.\r
+ //\r
+ DEBUG ((DEBUG_ERROR, "Debug Agent: The InitFlag value is not allowed!\n"));\r
+ CpuDeadLoop ();\r
+ break;\r
}\r
}\r
IN DEBUG_PORT_CONTINUE Function\r
)\r
{\r
- RETURN_STATUS Status;\r
+ RETURN_STATUS Status;\r
\r
Status = SerialPortInitialize ();\r
- if (RETURN_ERROR(Status)) {\r
+ if (RETURN_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "Debug Serial Port: Initialization failed!\n"));\r
}\r
\r
UINTN\r
EFIAPI\r
DebugPortReadBuffer (\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
- if (NumberOfBytes != 1 || Buffer == NULL || Timeout != 0) {\r
+ if ((NumberOfBytes != 1) || (Buffer == NULL) || (Timeout != 0)) {\r
return 0;\r
}\r
\r
UINTN\r
EFIAPI\r
DebugPortWriteBuffer (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
)\r
{\r
return SerialPortWrite (Buffer, NumberOfBytes);\r
BOOLEAN\r
EFIAPI\r
DebugPortPollBuffer (\r
- IN DEBUG_PORT_HANDLE Handle\r
+ IN DEBUG_PORT_HANDLE Handle\r
)\r
{\r
return SerialPortPoll ();\r
#include <Library/BaseLib.h>\r
#include <Library/DebugLib.h>\r
\r
-#define SETUP_PID 0x2D\r
-#define INPUT_PID 0x69\r
-#define OUTPUT_PID 0xE1\r
-#define ERROR_PID 0x55\r
-#define DATA0_PID 0xC3\r
-#define DATA1_PID 0x4B\r
-#define DATA2_PID 0x87\r
-#define MDATA_PID 0x0F\r
-#define ACK_PID 0xD2\r
-#define NAK_PID 0x5A\r
-#define STALL_PID 0x1E\r
-#define NYET_PID 0x96\r
-\r
-#define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A\r
-#define USB_DEBUG_PORT_MAX_PACKET_SIZE 0x08\r
-\r
-#define USB_DEBUG_PORT_IN_USE BIT10\r
-#define USB_DEBUG_PORT_ENABLE BIT28\r
-#define USB_DEBUG_PORT_OWNER BIT30\r
-\r
-#define USB_PORT_LINE_STATUS_LS 0x400\r
-#define USB_PORT_LINE_STATUS_MASK 0xC00\r
+#define SETUP_PID 0x2D\r
+#define INPUT_PID 0x69\r
+#define OUTPUT_PID 0xE1\r
+#define ERROR_PID 0x55\r
+#define DATA0_PID 0xC3\r
+#define DATA1_PID 0x4B\r
+#define DATA2_PID 0x87\r
+#define MDATA_PID 0x0F\r
+#define ACK_PID 0xD2\r
+#define NAK_PID 0x5A\r
+#define STALL_PID 0x1E\r
+#define NYET_PID 0x96\r
+\r
+#define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A\r
+#define USB_DEBUG_PORT_MAX_PACKET_SIZE 0x08\r
+\r
+#define USB_DEBUG_PORT_IN_USE BIT10\r
+#define USB_DEBUG_PORT_ENABLE BIT28\r
+#define USB_DEBUG_PORT_OWNER BIT30\r
+\r
+#define USB_PORT_LINE_STATUS_LS 0x400\r
+#define USB_PORT_LINE_STATUS_MASK 0xC00\r
\r
//\r
// Usb debug device descriptor, which is defined at\r
// USB2 Debug Device Specification.\r
//\r
typedef struct _USB_DEBUG_PORT_DESCRIPTOR {\r
- UINT8 Length;\r
- UINT8 DescriptorType;\r
- UINT8 DebugInEndpoint;\r
- UINT8 DebugOutEndpoint;\r
-}USB_DEBUG_PORT_DESCRIPTOR;\r
+ UINT8 Length;\r
+ UINT8 DescriptorType;\r
+ UINT8 DebugInEndpoint;\r
+ UINT8 DebugOutEndpoint;\r
+} USB_DEBUG_PORT_DESCRIPTOR;\r
\r
-USB_DEVICE_REQUEST mDebugCommunicationLibUsbGetDebugDescriptor = {\r
+USB_DEVICE_REQUEST mDebugCommunicationLibUsbGetDebugDescriptor = {\r
0x80,\r
USB_REQ_GET_DESCRIPTOR,\r
(UINT16)(0x0A << 8),\r
0x0000,\r
- sizeof(USB_DEBUG_PORT_DESCRIPTOR)\r
- };\r
+ sizeof (USB_DEBUG_PORT_DESCRIPTOR)\r
+};\r
\r
-USB_DEVICE_REQUEST mDebugCommunicationLibUsbSetDebugFeature = {\r
+USB_DEVICE_REQUEST mDebugCommunicationLibUsbSetDebugFeature = {\r
0x0,\r
USB_REQ_SET_FEATURE,\r
(UINT16)(0x06),\r
0x0000,\r
0x0\r
- };\r
+};\r
\r
-USB_DEVICE_REQUEST mDebugCommunicationLibUsbSetDebugAddress = {\r
+USB_DEVICE_REQUEST mDebugCommunicationLibUsbSetDebugAddress = {\r
0x0,\r
USB_REQ_SET_ADDRESS,\r
(UINT16)(0x7F),\r
0x0000,\r
0x0\r
- };\r
+};\r
\r
//\r
// Usb debug port register file, which is defined at\r
// EHCI Specification.\r
//\r
typedef struct _USB_DEBUG_PORT_REGISTER {\r
- UINT32 ControlStatus;\r
- UINT8 TokenPid;\r
- UINT8 SendPid;\r
- UINT8 ReceivedPid;\r
- UINT8 Reserved1;\r
- UINT8 DataBuffer[8];\r
- UINT8 UsbEndPoint;\r
- UINT8 UsbAddress;\r
- UINT8 Reserved2;\r
- UINT8 Reserved3;\r
-}USB_DEBUG_PORT_REGISTER;\r
+ UINT32 ControlStatus;\r
+ UINT8 TokenPid;\r
+ UINT8 SendPid;\r
+ UINT8 ReceivedPid;\r
+ UINT8 Reserved1;\r
+ UINT8 DataBuffer[8];\r
+ UINT8 UsbEndPoint;\r
+ UINT8 UsbAddress;\r
+ UINT8 Reserved2;\r
+ UINT8 Reserved3;\r
+} USB_DEBUG_PORT_REGISTER;\r
\r
//\r
// The state machine of usb debug port\r
//\r
-#define USBDBG_NO_DEV 0 // No device present at debug port\r
-#define USBDBG_NO_DBG_CAB 1 // The device attached is not usb debug cable\r
-#define USBDBG_DBG_CAB 2 // The device attached is usb debug cable\r
-#define USBDBG_INIT_DONE 4 // The usb debug cable device is initialized\r
-#define USBDBG_RESET 8 // The system is reset\r
+#define USBDBG_NO_DEV 0 // No device present at debug port\r
+#define USBDBG_NO_DBG_CAB 1 // The device attached is not usb debug cable\r
+#define USBDBG_DBG_CAB 2 // The device attached is usb debug cable\r
+#define USBDBG_INIT_DONE 4 // The usb debug cable device is initialized\r
+#define USBDBG_RESET 8 // The system is reset\r
\r
#pragma pack(1)\r
//\r
// The internal data structure of DEBUG_PORT_HANDLE, which stores some\r
// important datum which are used across various phases.\r
//\r
-typedef struct _USB_DEBUG_PORT_HANDLE{\r
+typedef struct _USB_DEBUG_PORT_HANDLE {\r
//\r
// The usb debug port memory BAR number in EHCI configuration space.\r
//\r
- UINT8 DebugPortBarNumber;\r
- UINT8 Initialized;\r
+ UINT8 DebugPortBarNumber;\r
+ UINT8 Initialized;\r
//\r
// The offset of usb debug port registers in EHCI memory range.\r
//\r
- UINT16 DebugPortOffset;\r
+ UINT16 DebugPortOffset;\r
//\r
// The usb debug port memory BAR address.\r
//\r
- UINT32 UsbDebugPortMemoryBase;\r
+ UINT32 UsbDebugPortMemoryBase;\r
//\r
// The EHCI memory BAR address.\r
//\r
- UINT32 EhciMemoryBase;\r
+ UINT32 EhciMemoryBase;\r
//\r
// The usb debug device In endpoint.\r
//\r
- UINT8 InEndpoint;\r
+ UINT8 InEndpoint;\r
//\r
// The usb debug device Out endpoint.\r
//\r
- UINT8 OutEndpoint;\r
+ UINT8 OutEndpoint;\r
//\r
// The Bulk In endpoint toggle bit.\r
//\r
- UINT8 BulkInToggle;\r
+ UINT8 BulkInToggle;\r
//\r
// The Bulk Out endpoint toggle bit.\r
//\r
- UINT8 BulkOutToggle;\r
+ UINT8 BulkOutToggle;\r
//\r
// The available data length in the following data buffer.\r
//\r
- UINT8 DataCount;\r
+ UINT8 DataCount;\r
//\r
// The data buffer. Maximum length is 8 bytes.\r
//\r
- UINT8 Data[8];\r
+ UINT8 Data[8];\r
} USB_DEBUG_PORT_HANDLE;\r
#pragma pack()\r
\r
//\r
// The global variable which can be used after memory is ready.\r
//\r
-USB_DEBUG_PORT_HANDLE mDebugCommunicationLibUsbDebugPortHandle;\r
+USB_DEBUG_PORT_HANDLE mDebugCommunicationLibUsbDebugPortHandle;\r
\r
/**\r
Calculate the usb debug port bar address.\r
RETURN_STATUS\r
EFIAPI\r
CalculateUsbDebugPortBar (\r
- OUT UINT16 *DebugPortOffset,\r
- OUT UINT8 *DebugPortBarNumbar\r
- )\r
+ OUT UINT16 *DebugPortOffset,\r
+ OUT UINT8 *DebugPortBarNumbar\r
+ )\r
{\r
- UINT16 PciStatus;\r
- UINT16 VendorId;\r
- UINT16 DeviceId;\r
- UINT8 ProgInterface;\r
- UINT8 SubClassCode;\r
- UINT8 BaseCode;\r
- UINT8 CapabilityPtr;\r
- UINT8 CapabilityId;\r
-\r
- VendorId = PciRead16 (PcdGet32(PcdUsbEhciPciAddress) + PCI_VENDOR_ID_OFFSET);\r
- DeviceId = PciRead16 (PcdGet32(PcdUsbEhciPciAddress) + PCI_DEVICE_ID_OFFSET);\r
+ UINT16 PciStatus;\r
+ UINT16 VendorId;\r
+ UINT16 DeviceId;\r
+ UINT8 ProgInterface;\r
+ UINT8 SubClassCode;\r
+ UINT8 BaseCode;\r
+ UINT8 CapabilityPtr;\r
+ UINT8 CapabilityId;\r
+\r
+ VendorId = PciRead16 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_VENDOR_ID_OFFSET);\r
+ DeviceId = PciRead16 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_DEVICE_ID_OFFSET);\r
\r
if ((VendorId == 0xFFFF) || (DeviceId == 0xFFFF)) {\r
return RETURN_UNSUPPORTED;\r
}\r
\r
- ProgInterface = PciRead8 (PcdGet32(PcdUsbEhciPciAddress) + PCI_CLASSCODE_OFFSET);\r
- SubClassCode = PciRead8 (PcdGet32(PcdUsbEhciPciAddress) + PCI_CLASSCODE_OFFSET + 1);\r
- BaseCode = PciRead8 (PcdGet32(PcdUsbEhciPciAddress) + PCI_CLASSCODE_OFFSET + 2);\r
+ ProgInterface = PciRead8 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_CLASSCODE_OFFSET);\r
+ SubClassCode = PciRead8 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_CLASSCODE_OFFSET + 1);\r
+ BaseCode = PciRead8 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_CLASSCODE_OFFSET + 2);\r
\r
if ((ProgInterface != PCI_IF_EHCI) || (SubClassCode != PCI_CLASS_SERIAL_USB) || (BaseCode != PCI_CLASS_SERIAL)) {\r
return RETURN_UNSUPPORTED;\r
//\r
// Enable Ehci Host Controller MMIO Space.\r
//\r
- PciStatus = PciRead16 (PcdGet32(PcdUsbEhciPciAddress) + PCI_PRIMARY_STATUS_OFFSET);\r
+ PciStatus = PciRead16 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_PRIMARY_STATUS_OFFSET);\r
\r
if ((PciStatus & EFI_PCI_STATUS_CAPABILITY) == 0) {\r
//\r
//\r
// Get Pointer To Capability List\r
//\r
- CapabilityPtr = PciRead8(PcdGet32(PcdUsbEhciPciAddress) + PCI_CAPBILITY_POINTER_OFFSET);\r
+ CapabilityPtr = PciRead8 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_CAPBILITY_POINTER_OFFSET);\r
\r
//\r
// Find Capability ID 0xA, Which Is For Debug Port\r
//\r
while (CapabilityPtr != 0) {\r
- CapabilityId = PciRead8(PcdGet32(PcdUsbEhciPciAddress) + CapabilityPtr);\r
+ CapabilityId = PciRead8 (PcdGet32 (PcdUsbEhciPciAddress) + CapabilityPtr);\r
if (CapabilityId == PCI_CAPABILITY_ID_DEBUG_PORT) {\r
break;\r
}\r
- CapabilityPtr = PciRead8(PcdGet32(PcdUsbEhciPciAddress) + CapabilityPtr + 1);\r
+\r
+ CapabilityPtr = PciRead8 (PcdGet32 (PcdUsbEhciPciAddress) + CapabilityPtr + 1);\r
}\r
\r
//\r
//\r
// Get The Base Address Of Debug Port Register In Debug Port Capability Register\r
//\r
- *DebugPortOffset = (UINT16)(PciRead16(PcdGet32(PcdUsbEhciPciAddress) + CapabilityPtr + 2) & 0x1FFF);\r
- *DebugPortBarNumbar = (UINT8)((PciRead16(PcdGet32(PcdUsbEhciPciAddress) + CapabilityPtr + 2) >> 13) - 1);\r
+ *DebugPortOffset = (UINT16)(PciRead16 (PcdGet32 (PcdUsbEhciPciAddress) + CapabilityPtr + 2) & 0x1FFF);\r
+ *DebugPortBarNumbar = (UINT8)((PciRead16 (PcdGet32 (PcdUsbEhciPciAddress) + CapabilityPtr + 2) >> 13) - 1);\r
\r
return RETURN_SUCCESS;\r
}\r
RETURN_STATUS\r
EFIAPI\r
UsbDebugPortIn (\r
- IN USB_DEBUG_PORT_REGISTER *DebugPortRegister,\r
- IN OUT UINT8 *Buffer,\r
- OUT UINT8 *Length,\r
- IN UINT8 Token,\r
- IN UINT8 Addr,\r
- IN UINT8 Ep,\r
- IN UINT8 DataToggle\r
+ IN USB_DEBUG_PORT_REGISTER *DebugPortRegister,\r
+ IN OUT UINT8 *Buffer,\r
+ OUT UINT8 *Length,\r
+ IN UINT8 Token,\r
+ IN UINT8 Addr,\r
+ IN UINT8 Ep,\r
+ IN UINT8 DataToggle\r
)\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
\r
if (Length == NULL) {\r
return RETURN_INVALID_PARAMETER;\r
}\r
+\r
*Length = 0;\r
\r
DebugPortRegister->TokenPid = Token;\r
//\r
// Clearing W/R bit to indicate it's a READ operation\r
//\r
- MmioAnd32((UINTN)&DebugPortRegister->ControlStatus, (UINT32)~BIT4);\r
+ MmioAnd32 ((UINTN)&DebugPortRegister->ControlStatus, (UINT32) ~BIT4);\r
\r
//\r
// Setting GO bit as well as clearing DONE bit\r
//\r
- MmioOr32((UINTN)&DebugPortRegister->ControlStatus, (UINT32)BIT5);\r
+ MmioOr32 ((UINTN)&DebugPortRegister->ControlStatus, (UINT32)BIT5);\r
\r
//\r
// Wait for completing the request\r
//\r
- while ((MmioRead32((UINTN)&DebugPortRegister->ControlStatus) & (UINT32)BIT16) == 0) {\r
- if ((MmioRead32((UINTN)&DebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
- != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE)) {\r
+ while ((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus) & (UINT32)BIT16) == 0) {\r
+ if ((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
+ != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
+ {\r
return RETURN_DEVICE_ERROR;\r
}\r
}\r
//\r
// Clearing DONE bit by writing 1\r
//\r
- MmioOr32((UINTN)&DebugPortRegister->ControlStatus, BIT16);\r
+ MmioOr32 ((UINTN)&DebugPortRegister->ControlStatus, BIT16);\r
\r
//\r
// Check if the request is executed successfully or not.\r
//\r
- if ((MmioRead32((UINTN)&DebugPortRegister->ControlStatus)) & BIT6) {\r
+ if ((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus)) & BIT6) {\r
return RETURN_DEVICE_ERROR;\r
}\r
\r
//\r
// Make sure the received data are not beyond the allowable maximum length - 8 byte\r
//\r
- if (((MmioRead32((UINTN)&DebugPortRegister->ControlStatus)) & 0xF) > USB_DEBUG_PORT_MAX_PACKET_SIZE) {\r
+ if (((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus)) & 0xF) > USB_DEBUG_PORT_MAX_PACKET_SIZE) {\r
return RETURN_DEVICE_ERROR;\r
}\r
\r
- *Length = (UINT8)(MmioRead32((UINTN)&DebugPortRegister->ControlStatus) & 0xF);\r
+ *Length = (UINT8)(MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus) & 0xF);\r
if (*Length > 8) {\r
return RETURN_DEVICE_ERROR;\r
}\r
for (Index = 0; Index < *Length; Index++) {\r
Buffer[Index] = DebugPortRegister->DataBuffer[Index];\r
}\r
+\r
return RETURN_SUCCESS;\r
}\r
\r
RETURN_STATUS\r
EFIAPI\r
UsbDebugPortOut (\r
- IN USB_DEBUG_PORT_REGISTER *DebugPortRegister,\r
- IN UINT8 *Buffer,\r
- IN UINT8 Length,\r
- IN UINT8 Token,\r
- IN UINT8 Addr,\r
- IN UINT8 Ep,\r
- IN UINT8 DataToggle\r
+ IN USB_DEBUG_PORT_REGISTER *DebugPortRegister,\r
+ IN UINT8 *Buffer,\r
+ IN UINT8 Length,\r
+ IN UINT8 Token,\r
+ IN UINT8 Addr,\r
+ IN UINT8 Ep,\r
+ IN UINT8 DataToggle\r
)\r
{\r
- UINT8 Index;\r
+ UINT8 Index;\r
\r
if (Length > 8) {\r
return RETURN_INVALID_PARAMETER;\r
} else {\r
DebugPortRegister->SendPid = DATA0_PID;\r
}\r
+\r
DebugPortRegister->UsbAddress = (UINT8)(Addr & 0x7F);\r
DebugPortRegister->UsbEndPoint = (UINT8)(Ep & 0xF);\r
\r
//\r
// Fill in the data length and corresponding data.\r
//\r
- MmioAnd32((UINTN)&DebugPortRegister->ControlStatus, (UINT32)~0xF);\r
- MmioOr32((UINTN)&DebugPortRegister->ControlStatus, Length & 0xF);\r
+ MmioAnd32 ((UINTN)&DebugPortRegister->ControlStatus, (UINT32) ~0xF);\r
+ MmioOr32 ((UINTN)&DebugPortRegister->ControlStatus, Length & 0xF);\r
for (Index = 0; Index < Length; Index++) {\r
DebugPortRegister->DataBuffer[Index] = Buffer[Index];\r
}\r
//\r
// Setting W/R bit to indicate it's a WRITE operation\r
//\r
- MmioOr32((UINTN)&DebugPortRegister->ControlStatus, BIT4);\r
+ MmioOr32 ((UINTN)&DebugPortRegister->ControlStatus, BIT4);\r
//\r
// Setting GO bit as well as clearing DONE bit\r
//\r
- MmioOr32((UINTN)&DebugPortRegister->ControlStatus, BIT5);\r
+ MmioOr32 ((UINTN)&DebugPortRegister->ControlStatus, BIT5);\r
\r
//\r
// Wait for completing the request\r
//\r
- while ((MmioRead32((UINTN)&DebugPortRegister->ControlStatus) & BIT16) == 0) {\r
- if ((MmioRead32((UINTN)&DebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
- != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE)) {\r
+ while ((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus) & BIT16) == 0) {\r
+ if ((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
+ != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
+ {\r
return RETURN_DEVICE_ERROR;\r
}\r
}\r
//\r
// Clearing DONE bit by writing 1\r
//\r
- MmioOr32((UINTN)&DebugPortRegister->ControlStatus, BIT16);\r
+ MmioOr32 ((UINTN)&DebugPortRegister->ControlStatus, BIT16);\r
\r
//\r
// Check if the request is executed successfully or not.\r
//\r
- if ((MmioRead32((UINTN)&DebugPortRegister->ControlStatus)) & BIT6) {\r
+ if ((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus)) & BIT6) {\r
return RETURN_DEVICE_ERROR;\r
}\r
\r
//\r
// Make sure the sent data are not beyond the allowable maximum length - 8 byte\r
//\r
- if (((MmioRead32((UINTN)&DebugPortRegister->ControlStatus)) & 0xF) > USB_DEBUG_PORT_MAX_PACKET_SIZE) {\r
+ if (((MmioRead32 ((UINTN)&DebugPortRegister->ControlStatus)) & 0xF) > USB_DEBUG_PORT_MAX_PACKET_SIZE) {\r
return RETURN_DEVICE_ERROR;\r
}\r
\r
RETURN_STATUS\r
EFIAPI\r
UsbDebugPortControlTransfer (\r
- IN USB_DEBUG_PORT_REGISTER *DebugPortRegister,\r
- IN USB_DEVICE_REQUEST *SetupPacket,\r
- IN UINT8 Addr,\r
- IN UINT8 Ep,\r
- OUT UINT8 *Data,\r
- IN OUT UINT8 *DataLength\r
+ IN USB_DEBUG_PORT_REGISTER *DebugPortRegister,\r
+ IN USB_DEVICE_REQUEST *SetupPacket,\r
+ IN UINT8 Addr,\r
+ IN UINT8 Ep,\r
+ OUT UINT8 *Data,\r
+ IN OUT UINT8 *DataLength\r
)\r
{\r
- RETURN_STATUS Status;\r
- UINT8 Temp;\r
- UINT8 ReturnStatus[8];\r
+ RETURN_STATUS Status;\r
+ UINT8 Temp;\r
+ UINT8 ReturnStatus[8];\r
\r
//\r
// Setup Phase\r
//\r
- Status = UsbDebugPortOut(DebugPortRegister, (UINT8 *)SetupPacket, (UINT8)sizeof(USB_DEVICE_REQUEST), SETUP_PID, Addr, Ep, 0);\r
- if (RETURN_ERROR(Status)) {\r
+ Status = UsbDebugPortOut (DebugPortRegister, (UINT8 *)SetupPacket, (UINT8)sizeof (USB_DEVICE_REQUEST), SETUP_PID, Addr, Ep, 0);\r
+ if (RETURN_ERROR (Status)) {\r
return Status;\r
}\r
\r
//\r
// Get Data From Device\r
//\r
- Status = UsbDebugPortIn(DebugPortRegister, Data, DataLength, INPUT_PID, Addr, Ep, 1);\r
- if (RETURN_ERROR(Status)) {\r
+ Status = UsbDebugPortIn (DebugPortRegister, Data, DataLength, INPUT_PID, Addr, Ep, 1);\r
+ if (RETURN_ERROR (Status)) {\r
return Status;\r
}\r
} else {\r
//\r
// Send Data To Device\r
//\r
- Status = UsbDebugPortOut(DebugPortRegister, Data, *DataLength, OUTPUT_PID, Addr, Ep, 1);\r
- if (RETURN_ERROR(Status)) {\r
+ Status = UsbDebugPortOut (DebugPortRegister, Data, *DataLength, OUTPUT_PID, Addr, Ep, 1);\r
+ if (RETURN_ERROR (Status)) {\r
return Status;\r
}\r
}\r
//\r
// For READ operation, Data Toggle in Status Phase Should be 1.\r
//\r
- Status = UsbDebugPortOut(DebugPortRegister, NULL, 0, OUTPUT_PID, Addr, Ep, 1);\r
+ Status = UsbDebugPortOut (DebugPortRegister, NULL, 0, OUTPUT_PID, Addr, Ep, 1);\r
} else {\r
//\r
// For WRITE operation, Data Toggle in Status Phase Should be 1.\r
//\r
- Status = UsbDebugPortIn(DebugPortRegister, ReturnStatus, &Temp, INPUT_PID, Addr, Ep, 1);\r
+ Status = UsbDebugPortIn (DebugPortRegister, ReturnStatus, &Temp, INPUT_PID, Addr, Ep, 1);\r
}\r
\r
return Status;\r
**/\r
BOOLEAN\r
EFIAPI\r
-NeedReinitializeHardware(\r
- IN USB_DEBUG_PORT_HANDLE *Handle\r
+NeedReinitializeHardware (\r
+ IN USB_DEBUG_PORT_HANDLE *Handle\r
)\r
{\r
- UINT16 PciCmd;\r
- UINT32 UsbDebugPortMemoryBase;\r
- UINT32 EhciMemoryBase;\r
- BOOLEAN Status;\r
- USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
+ UINT16 PciCmd;\r
+ UINT32 UsbDebugPortMemoryBase;\r
+ UINT32 EhciMemoryBase;\r
+ BOOLEAN Status;\r
+ USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
\r
Status = FALSE;\r
\r
- EhciMemoryBase = 0xFFFFFC00 & PciRead32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
+ EhciMemoryBase = 0xFFFFFC00 & PciRead32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
if (EhciMemoryBase != Handle->EhciMemoryBase) {\r
Handle->EhciMemoryBase = EhciMemoryBase;\r
- Status = TRUE;\r
+ Status = TRUE;\r
}\r
\r
- UsbDebugPortMemoryBase = 0xFFFFFC00 & PciRead32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle->DebugPortBarNumber * 4);\r
+ UsbDebugPortMemoryBase = 0xFFFFFC00 & PciRead32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle->DebugPortBarNumber * 4);\r
if (UsbDebugPortMemoryBase != Handle->UsbDebugPortMemoryBase) {\r
Handle->UsbDebugPortMemoryBase = UsbDebugPortMemoryBase;\r
- Status = TRUE;\r
+ Status = TRUE;\r
}\r
\r
//\r
// Enable Ehci Memory Space Access\r
//\r
- PciCmd = PciRead16 (PcdGet32(PcdUsbEhciPciAddress) + PCI_COMMAND_OFFSET);\r
+ PciCmd = PciRead16 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_COMMAND_OFFSET);\r
if (((PciCmd & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) || ((PciCmd & EFI_PCI_COMMAND_BUS_MASTER) == 0)) {\r
PciCmd |= EFI_PCI_COMMAND_MEMORY_SPACE | EFI_PCI_COMMAND_BUS_MASTER;\r
- PciWrite16(PcdGet32(PcdUsbEhciPciAddress) + PCI_COMMAND_OFFSET, PciCmd);\r
+ PciWrite16 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_COMMAND_OFFSET, PciCmd);\r
Status = TRUE;\r
}\r
\r
// If the owner and in_use bit is not set, it means system is doing cold/warm boot or EHCI host controller is reset by system software.\r
//\r
UsbDebugPortRegister = (USB_DEBUG_PORT_REGISTER *)((UINTN)Handle->UsbDebugPortMemoryBase + Handle->DebugPortOffset);\r
- if ((MmioRead32((UINTN)&UsbDebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_ENABLE | USB_DEBUG_PORT_IN_USE))\r
- != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_ENABLE | USB_DEBUG_PORT_IN_USE)) {\r
+ if ((MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_ENABLE | USB_DEBUG_PORT_IN_USE))\r
+ != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_ENABLE | USB_DEBUG_PORT_IN_USE))\r
+ {\r
Status = TRUE;\r
}\r
\r
} else if (Handle->Initialized != USBDBG_INIT_DONE) {\r
Status = TRUE;\r
}\r
+\r
return Status;\r
}\r
\r
RETURN_STATUS\r
EFIAPI\r
InitializeUsbDebugHardware (\r
- IN USB_DEBUG_PORT_HANDLE *Handle\r
-)\r
+ IN USB_DEBUG_PORT_HANDLE *Handle\r
+ )\r
{\r
- RETURN_STATUS Status;\r
- USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
- USB_DEBUG_PORT_DESCRIPTOR UsbDebugPortDescriptor;\r
- UINT32 *PortStatus;\r
- UINT32 *UsbCmd;\r
- UINT32 *UsbStatus;\r
- UINT32 *UsbHCSParam;\r
- UINT8 DebugPortNumber;\r
- UINT8 Length;\r
+ RETURN_STATUS Status;\r
+ USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
+ USB_DEBUG_PORT_DESCRIPTOR UsbDebugPortDescriptor;\r
+ UINT32 *PortStatus;\r
+ UINT32 *UsbCmd;\r
+ UINT32 *UsbStatus;\r
+ UINT32 *UsbHCSParam;\r
+ UINT8 DebugPortNumber;\r
+ UINT8 Length;\r
\r
UsbDebugPortRegister = (USB_DEBUG_PORT_REGISTER *)((UINTN)Handle->UsbDebugPortMemoryBase + Handle->DebugPortOffset);\r
- UsbHCSParam = (UINT32 *)((UINTN)Handle->EhciMemoryBase + 0x04);\r
- UsbCmd = (UINT32 *)((UINTN)Handle->EhciMemoryBase + 0x20);\r
- UsbStatus = (UINT32 *)((UINTN)Handle->EhciMemoryBase + 0x24);\r
+ UsbHCSParam = (UINT32 *)((UINTN)Handle->EhciMemoryBase + 0x04);\r
+ UsbCmd = (UINT32 *)((UINTN)Handle->EhciMemoryBase + 0x20);\r
+ UsbStatus = (UINT32 *)((UINTN)Handle->EhciMemoryBase + 0x24);\r
\r
//\r
// Check if the debug port is enabled and owned by myself.\r
//\r
- if (((MmioRead32((UINTN)&UsbDebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE))\r
- != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE)) || (Handle->Initialized == USBDBG_RESET)) {\r
+ if (((MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE))\r
+ != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE)) || (Handle->Initialized == USBDBG_RESET))\r
+ {\r
DEBUG ((\r
DEBUG_INFO,\r
"UsbDbg: Need to reset the host controller. ControlStatus = %08x\n",\r
- MmioRead32((UINTN)&UsbDebugPortRegister->ControlStatus)\r
+ MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus)\r
));\r
//\r
// If the host controller is halted, then reset and restart it.\r
//\r
- if ((MmioRead32((UINTN)UsbStatus) & BIT12) != 0) {\r
+ if ((MmioRead32 ((UINTN)UsbStatus) & BIT12) != 0) {\r
DEBUG ((DEBUG_INFO, "UsbDbg: Reset the host controller.\n"));\r
//\r
// reset the host controller.\r
//\r
- MmioOr32((UINTN)UsbCmd, BIT1);\r
+ MmioOr32 ((UINTN)UsbCmd, BIT1);\r
//\r
// ensure that the host controller is reset.\r
//\r
- while ((MmioRead32((UINTN)UsbCmd) & BIT1) != 0);\r
+ while ((MmioRead32 ((UINTN)UsbCmd) & BIT1) != 0) {\r
+ }\r
\r
- MmioOr32((UINTN)UsbCmd, BIT0);\r
+ MmioOr32 ((UINTN)UsbCmd, BIT0);\r
// ensure that the host controller is started (HALTED bit must be cleared)\r
- while ((MmioRead32((UINTN)UsbStatus) & BIT12) != 0);\r
+ while ((MmioRead32 ((UINTN)UsbStatus) & BIT12) != 0) {\r
+ }\r
}\r
\r
//\r
// First get the ownership of port 0.\r
//\r
- MmioOr32((UINTN)&UsbDebugPortRegister->ControlStatus, USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE);\r
+ MmioOr32 ((UINTN)&UsbDebugPortRegister->ControlStatus, USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE);\r
\r
MicroSecondDelay (200000);\r
}\r
+\r
//\r
// Find out which port is used as debug port.\r
//\r
- DebugPortNumber = (UINT8)((MmioRead32((UINTN)UsbHCSParam) & 0x00F00000) >> 20);\r
+ DebugPortNumber = (UINT8)((MmioRead32 ((UINTN)UsbHCSParam) & 0x00F00000) >> 20);\r
//\r
// Should find a device is connected at debug port\r
//\r
PortStatus = (UINT32 *)((UINTN)Handle->EhciMemoryBase + 0x64 + (DebugPortNumber - 1) * 4);\r
- if (!(MmioRead32((UINTN)PortStatus) & BIT0)) {\r
+ if (!(MmioRead32 ((UINTN)PortStatus) & BIT0)) {\r
Handle->Initialized = USBDBG_NO_DEV;\r
return RETURN_NOT_FOUND;\r
}\r
\r
- if (Handle->Initialized != USBDBG_INIT_DONE ||\r
- (MmioRead32 ((UINTN) &UsbDebugPortRegister->ControlStatus) & USB_DEBUG_PORT_ENABLE) == 0) {\r
+ if ((Handle->Initialized != USBDBG_INIT_DONE) ||\r
+ ((MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus) & USB_DEBUG_PORT_ENABLE) == 0))\r
+ {\r
DEBUG ((DEBUG_INFO, "UsbDbg: Reset the debug port.\n"));\r
//\r
// Reset the debug port\r
//\r
- MmioOr32((UINTN)PortStatus, BIT8);\r
+ MmioOr32 ((UINTN)PortStatus, BIT8);\r
MicroSecondDelay (500000);\r
- MmioAnd32((UINTN)PortStatus, (UINT32)~BIT8);\r
- while (MmioRead32((UINTN)PortStatus) & BIT8);\r
+ MmioAnd32 ((UINTN)PortStatus, (UINT32) ~BIT8);\r
+ while (MmioRead32 ((UINTN)PortStatus) & BIT8) {\r
+ }\r
\r
//\r
// The port enabled bit should be set by HW.\r
//\r
- if ((MmioRead32((UINTN)PortStatus) & BIT2) == 0) {\r
+ if ((MmioRead32 ((UINTN)PortStatus) & BIT2) == 0) {\r
Handle->Initialized = USBDBG_NO_DBG_CAB;\r
return RETURN_DEVICE_ERROR;\r
}\r
//\r
// Enable Usb Debug Port Capability\r
//\r
- MmioOr32((UINTN)&UsbDebugPortRegister->ControlStatus, USB_DEBUG_PORT_ENABLE);\r
+ MmioOr32 ((UINTN)&UsbDebugPortRegister->ControlStatus, USB_DEBUG_PORT_ENABLE);\r
\r
//\r
// initialize the data toggle used by bulk in/out endpoint.\r
// set usb debug device address as 0x7F.\r
//\r
Status = UsbDebugPortControlTransfer (UsbDebugPortRegister, &mDebugCommunicationLibUsbSetDebugAddress, 0x0, 0x0, NULL, NULL);\r
- if (RETURN_ERROR(Status)) {\r
+ if (RETURN_ERROR (Status)) {\r
//\r
// The device can not work well.\r
//\r
//\r
// Get debug descriptor.\r
//\r
- Status = UsbDebugPortControlTransfer (UsbDebugPortRegister, &mDebugCommunicationLibUsbGetDebugDescriptor, 0x7F, 0x0, (UINT8*)&UsbDebugPortDescriptor, &Length);\r
- if (RETURN_ERROR(Status)) {\r
+ Status = UsbDebugPortControlTransfer (UsbDebugPortRegister, &mDebugCommunicationLibUsbGetDebugDescriptor, 0x7F, 0x0, (UINT8 *)&UsbDebugPortDescriptor, &Length);\r
+ if (RETURN_ERROR (Status)) {\r
//\r
// The device is not a usb debug device.\r
//\r
return Status;\r
}\r
\r
- if (Length != sizeof(USB_DEBUG_PORT_DESCRIPTOR)) {\r
+ if (Length != sizeof (USB_DEBUG_PORT_DESCRIPTOR)) {\r
Handle->Initialized = USBDBG_NO_DBG_CAB;\r
return RETURN_DEVICE_ERROR;\r
}\r
// enable the usb debug feature.\r
//\r
Status = UsbDebugPortControlTransfer (UsbDebugPortRegister, &mDebugCommunicationLibUsbSetDebugFeature, 0x7F, 0x0, NULL, NULL);\r
- if (RETURN_ERROR(Status)) {\r
+ if (RETURN_ERROR (Status)) {\r
//\r
// The device can not work well.\r
//\r
UINTN\r
EFIAPI\r
DebugPortReadBuffer (\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
- USB_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
- RETURN_STATUS Status;\r
- UINT8 Index;\r
+ USB_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
+ RETURN_STATUS Status;\r
+ UINT8 Index;\r
\r
- if (NumberOfBytes != 1 || Buffer == NULL || Timeout != 0) {\r
+ if ((NumberOfBytes != 1) || (Buffer == NULL) || (Timeout != 0)) {\r
return 0;\r
}\r
\r
UsbDebugPortHandle = (USB_DEBUG_PORT_HANDLE *)Handle;\r
}\r
\r
- if (NeedReinitializeHardware(UsbDebugPortHandle)) {\r
+ if (NeedReinitializeHardware (UsbDebugPortHandle)) {\r
Status = InitializeUsbDebugHardware (UsbDebugPortHandle);\r
- if (RETURN_ERROR(Status)) {\r
+ if (RETURN_ERROR (Status)) {\r
return 0;\r
}\r
}\r
if ((Index + 1) >= USB_DEBUG_PORT_MAX_PACKET_SIZE) {\r
return 0;\r
}\r
+\r
UsbDebugPortHandle->Data[Index] = UsbDebugPortHandle->Data[Index + 1];\r
}\r
+\r
UsbDebugPortHandle->DataCount = (UINT8)(UsbDebugPortHandle->DataCount - 1);\r
return 1;\r
}\r
UINTN\r
EFIAPI\r
DebugPortWriteBuffer (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
)\r
{\r
- USB_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
- USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
- RETURN_STATUS Status;\r
- UINT8 Sent;\r
- UINTN Total;\r
- UINT8 ReceivedPid;\r
-\r
- if (NumberOfBytes == 0 || Buffer == NULL) {\r
+ USB_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
+ USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
+ RETURN_STATUS Status;\r
+ UINT8 Sent;\r
+ UINTN Total;\r
+ UINT8 ReceivedPid;\r
+\r
+ if ((NumberOfBytes == 0) || (Buffer == NULL)) {\r
return 0;\r
}\r
\r
UsbDebugPortHandle = (USB_DEBUG_PORT_HANDLE *)Handle;\r
}\r
\r
- if (NeedReinitializeHardware(UsbDebugPortHandle)) {\r
+ if (NeedReinitializeHardware (UsbDebugPortHandle)) {\r
Status = InitializeUsbDebugHardware (UsbDebugPortHandle);\r
- if (RETURN_ERROR(Status)) {\r
+ if (RETURN_ERROR (Status)) {\r
return 0;\r
}\r
}\r
Sent = (UINT8)(NumberOfBytes - Total);\r
}\r
\r
- Status = UsbDebugPortOut(UsbDebugPortRegister, Buffer + Total, Sent, OUTPUT_PID, 0x7F, UsbDebugPortHandle->OutEndpoint, UsbDebugPortHandle->BulkOutToggle);\r
+ Status = UsbDebugPortOut (UsbDebugPortRegister, Buffer + Total, Sent, OUTPUT_PID, 0x7F, UsbDebugPortHandle->OutEndpoint, UsbDebugPortHandle->BulkOutToggle);\r
\r
- if (RETURN_ERROR(Status)) {\r
+ if (RETURN_ERROR (Status)) {\r
return Total;\r
}\r
\r
- ReceivedPid = (MmioRead8((UINTN)&UsbDebugPortRegister->ReceivedPid));\r
+ ReceivedPid = (MmioRead8 ((UINTN)&UsbDebugPortRegister->ReceivedPid));\r
//\r
// If received a NAK_PID on write transaction, it means the usb debug device is busy and can not handle this transaction.\r
// should send the packet again.\r
} else {\r
UsbDebugPortHandle->BulkOutToggle ^= 1;\r
}\r
+\r
Total += Sent;\r
}\r
+\r
return Total;\r
}\r
\r
BOOLEAN\r
EFIAPI\r
DebugPortPollBuffer (\r
- IN DEBUG_PORT_HANDLE Handle\r
+ IN DEBUG_PORT_HANDLE Handle\r
)\r
{\r
- USB_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
- USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
- UINT8 Length;\r
- UINT8 Index;\r
- RETURN_STATUS Status;\r
+ USB_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
+ USB_DEBUG_PORT_REGISTER *UsbDebugPortRegister;\r
+ UINT8 Length;\r
+ UINT8 Index;\r
+ RETURN_STATUS Status;\r
\r
//\r
// If Handle is NULL, it means memory is ready for use.\r
UsbDebugPortHandle = (USB_DEBUG_PORT_HANDLE *)Handle;\r
}\r
\r
- if (NeedReinitializeHardware(UsbDebugPortHandle)) {\r
- Status = InitializeUsbDebugHardware(UsbDebugPortHandle);\r
- if (RETURN_ERROR(Status)) {\r
+ if (NeedReinitializeHardware (UsbDebugPortHandle)) {\r
+ Status = InitializeUsbDebugHardware (UsbDebugPortHandle);\r
+ if (RETURN_ERROR (Status)) {\r
return FALSE;\r
}\r
}\r
\r
UsbDebugPortRegister->TokenPid = INPUT_PID;\r
if (UsbDebugPortHandle->BulkInToggle == 0) {\r
- UsbDebugPortRegister->SendPid = DATA0_PID;\r
+ UsbDebugPortRegister->SendPid = DATA0_PID;\r
} else {\r
- UsbDebugPortRegister->SendPid = DATA1_PID;\r
+ UsbDebugPortRegister->SendPid = DATA1_PID;\r
}\r
+\r
UsbDebugPortRegister->UsbAddress = 0x7F;\r
UsbDebugPortRegister->UsbEndPoint = UsbDebugPortHandle->InEndpoint & 0x0F;\r
\r
//\r
// Clearing W/R bit to indicate it's a READ operation\r
//\r
- MmioAnd32((UINTN)&UsbDebugPortRegister->ControlStatus, (UINT32)~BIT4);\r
+ MmioAnd32 ((UINTN)&UsbDebugPortRegister->ControlStatus, (UINT32) ~BIT4);\r
//\r
// Setting GO bit as well as clearing DONE bit\r
//\r
- MmioOr32((UINTN)&UsbDebugPortRegister->ControlStatus, (UINT32)BIT5);\r
+ MmioOr32 ((UINTN)&UsbDebugPortRegister->ControlStatus, (UINT32)BIT5);\r
\r
//\r
// Wait for completing the request\r
//\r
- while ((MmioRead32((UINTN)&UsbDebugPortRegister->ControlStatus) & (UINT32)BIT16) == 0) {\r
- if ((MmioRead32((UINTN)&UsbDebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
- != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE)) {\r
+ while ((MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus) & (UINT32)BIT16) == 0) {\r
+ if ((MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus) & (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
+ != (USB_DEBUG_PORT_OWNER | USB_DEBUG_PORT_IN_USE | USB_DEBUG_PORT_ENABLE))\r
+ {\r
return FALSE;\r
}\r
}\r
\r
- if ((MmioRead32((UINTN)&UsbDebugPortRegister->ControlStatus)) & BIT6) {\r
+ if ((MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus)) & BIT6) {\r
return FALSE;\r
}\r
\r
- Length = (UINT8)(MmioRead32((UINTN)&UsbDebugPortRegister->ControlStatus) & 0xF);\r
+ Length = (UINT8)(MmioRead32 ((UINTN)&UsbDebugPortRegister->ControlStatus) & 0xF);\r
\r
if (Length > 8) {\r
return FALSE;\r
for (Index = 0; Index < Length; Index++) {\r
UsbDebugPortHandle->Data[Index] = UsbDebugPortRegister->DataBuffer[Index];\r
}\r
+\r
UsbDebugPortHandle->DataCount = Length;\r
\r
return TRUE;\r
IN DEBUG_PORT_CONTINUE Function\r
)\r
{\r
- RETURN_STATUS Status;\r
- USB_DEBUG_PORT_HANDLE Handle;\r
+ RETURN_STATUS Status;\r
+ USB_DEBUG_PORT_HANDLE Handle;\r
\r
//\r
// Validate the PCD PcdDebugPortHandleBufferSize value\r
//\r
ASSERT (PcdGet16 (PcdDebugPortHandleBufferSize) == sizeof (USB_DEBUG_PORT_HANDLE));\r
\r
- if (Function == NULL && Context != NULL) {\r
- return (DEBUG_PORT_HANDLE *) Context;\r
+ if ((Function == NULL) && (Context != NULL)) {\r
+ return (DEBUG_PORT_HANDLE *)Context;\r
}\r
- ZeroMem(&Handle, sizeof (USB_DEBUG_PORT_HANDLE));\r
\r
- Status = CalculateUsbDebugPortBar(&Handle.DebugPortOffset, &Handle.DebugPortBarNumber);\r
+ ZeroMem (&Handle, sizeof (USB_DEBUG_PORT_HANDLE));\r
+\r
+ Status = CalculateUsbDebugPortBar (&Handle.DebugPortOffset, &Handle.DebugPortBarNumber);\r
if (RETURN_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "UsbDbg: the pci device pointed by PcdUsbEhciPciAddress is not EHCI host controller or does not support debug port capability!\n"));\r
goto Exit;\r
}\r
\r
- Handle.EhciMemoryBase = 0xFFFFFC00 & PciRead32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
+ Handle.EhciMemoryBase = 0xFFFFFC00 & PciRead32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
\r
if (Handle.EhciMemoryBase == 0) {\r
//\r
// Usb Debug Port MMIO Space Is Not Enabled. Assumption here that DebugPortBase is zero\r
//\r
- PciWrite32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET, PcdGet32(PcdUsbEhciMemorySpaceBase));\r
- Handle.EhciMemoryBase = 0xFFFFFC00 & PciRead32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
+ PciWrite32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET, PcdGet32 (PcdUsbEhciMemorySpaceBase));\r
+ Handle.EhciMemoryBase = 0xFFFFFC00 & PciRead32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
}\r
\r
- Handle.UsbDebugPortMemoryBase = 0xFFFFFC00 & PciRead32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle.DebugPortBarNumber * 4);\r
+ Handle.UsbDebugPortMemoryBase = 0xFFFFFC00 & PciRead32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle.DebugPortBarNumber * 4);\r
\r
if (Handle.UsbDebugPortMemoryBase == 0) {\r
//\r
// Usb Debug Port MMIO Space Is Not Enabled. Assumption here that DebugPortBase is zero\r
//\r
- PciWrite32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle.DebugPortBarNumber * 4, PcdGet32(PcdUsbDebugPortMemorySpaceBase));\r
- Handle.UsbDebugPortMemoryBase = 0xFFFFFC00 & PciRead32(PcdGet32(PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle.DebugPortBarNumber * 4);\r
+ PciWrite32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle.DebugPortBarNumber * 4, PcdGet32 (PcdUsbDebugPortMemorySpaceBase));\r
+ Handle.UsbDebugPortMemoryBase = 0xFFFFFC00 & PciRead32 (PcdGet32 (PcdUsbEhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + Handle.DebugPortBarNumber * 4);\r
}\r
\r
Handle.Initialized = USBDBG_RESET;\r
\r
- if (NeedReinitializeHardware(&Handle)) {\r
+ if (NeedReinitializeHardware (&Handle)) {\r
DEBUG ((DEBUG_ERROR, "UsbDbg: Start EHCI debug port initialization!\n"));\r
Status = InitializeUsbDebugHardware (&Handle);\r
- if (RETURN_ERROR(Status)) {\r
+ if (RETURN_ERROR (Status)) {\r
DEBUG ((DEBUG_ERROR, "UsbDbg: Failed, please check if USB debug cable is plugged into EHCI debug port correctly!\n"));\r
goto Exit;\r
}\r
if (Function != NULL) {\r
Function (Context, &Handle);\r
} else {\r
- CopyMem(&mDebugCommunicationLibUsbDebugPortHandle, &Handle, sizeof (USB_DEBUG_PORT_HANDLE));\r
+ CopyMem (&mDebugCommunicationLibUsbDebugPortHandle, &Handle, sizeof (USB_DEBUG_PORT_HANDLE));\r
}\r
\r
return (DEBUG_PORT_HANDLE)(UINTN)&mDebugCommunicationLibUsbDebugPortHandle;\r
\r
#include "DebugCommunicationLibUsb3Internal.h"\r
\r
-UINT16 mString0Desc[] = {\r
+UINT16 mString0Desc[] = {\r
// String Descriptor Type + Length\r
- ( USB_DESC_TYPE_STRING << 8 ) + STRING0_DESC_LEN,\r
+ (USB_DESC_TYPE_STRING << 8) + STRING0_DESC_LEN,\r
0x0409\r
};\r
\r
-UINT16 mManufacturerStrDesc[] = {\r
+UINT16 mManufacturerStrDesc[] = {\r
// String Descriptor Type + Length\r
- ( USB_DESC_TYPE_STRING << 8 ) + MANU_DESC_LEN,\r
- 'I', 'n', 't', 'e', 'l'\r
+ (USB_DESC_TYPE_STRING << 8) + MANU_DESC_LEN,\r
+ 'I', 'n','t', 'e', 'l'\r
};\r
\r
-UINT16 mProductStrDesc[] = {\r
+UINT16 mProductStrDesc[] = {\r
// String Descriptor Type + Length\r
- ( USB_DESC_TYPE_STRING << 8 ) + PRODUCT_DESC_LEN,\r
- 'U', 'S', 'B', ' ', '3', '.', '0', ' ', 'D', 'e', 'b', 'u', 'g', ' ', 'C', 'a', 'b', 'l', 'e'\r
+ (USB_DESC_TYPE_STRING << 8) + PRODUCT_DESC_LEN,\r
+ 'U', 'S','B', ' ', '3', '.', '0', ' ', 'D', 'e', 'b', 'u', 'g', ' ', 'C', 'a', 'b', 'l', 'e'\r
};\r
\r
-UINT16 mSerialNumberStrDesc[] = {\r
+UINT16 mSerialNumberStrDesc[] = {\r
// String Descriptor Type + Length\r
- ( USB_DESC_TYPE_STRING << 8 ) + SERIAL_DESC_LEN,\r
+ (USB_DESC_TYPE_STRING << 8) + SERIAL_DESC_LEN,\r
'1'\r
};\r
\r
@param[in] BitMask 32-bit mask\r
**/\r
VOID\r
-XhcSetR32Bit(\r
- IN OUT UINTN Register,\r
- IN UINT32 BitMask\r
+XhcSetR32Bit (\r
+ IN OUT UINTN Register,\r
+ IN UINT32 BitMask\r
)\r
{\r
- UINT32 RegisterValue;\r
+ UINT32 RegisterValue;\r
\r
- RegisterValue = MmioRead32 (Register);\r
+ RegisterValue = MmioRead32 (Register);\r
RegisterValue |= (UINT32)(BitMask);\r
MmioWrite32 (Register, RegisterValue);\r
}\r
@param[in] BitMask 32-bit mask\r
**/\r
VOID\r
-XhcClearR32Bit(\r
- IN OUT UINTN Register,\r
- IN UINT32 BitMask\r
+XhcClearR32Bit (\r
+ IN OUT UINTN Register,\r
+ IN UINT32 BitMask\r
)\r
{\r
- UINT32 RegisterValue;\r
+ UINT32 RegisterValue;\r
\r
- RegisterValue = MmioRead32 (Register);\r
+ RegisterValue = MmioRead32 (Register);\r
RegisterValue &= ~BitMask;\r
MmioWrite32 (Register, RegisterValue);\r
}\r
**/\r
UINT32\r
XhcReadDebugReg (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN UINT32 Offset\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN UINT32 Offset\r
)\r
{\r
- UINT32 Data;\r
- EFI_PHYSICAL_ADDRESS DebugCapabilityBase;\r
+ UINT32 Data;\r
+ EFI_PHYSICAL_ADDRESS DebugCapabilityBase;\r
\r
DebugCapabilityBase = Handle->DebugCapabilityBase;\r
- Data = MmioRead32 ((UINTN)(DebugCapabilityBase + Offset));\r
+ Data = MmioRead32 ((UINTN)(DebugCapabilityBase + Offset));\r
\r
return Data;\r
}\r
**/\r
VOID\r
XhcSetDebugRegBit (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN UINT32 Offset,\r
- IN UINT32 Bit\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN UINT32 Offset,\r
+ IN UINT32 Bit\r
)\r
{\r
- UINT32 Data;\r
+ UINT32 Data;\r
\r
Data = XhcReadDebugReg (Handle, Offset);\r
Data |= Bit;\r
**/\r
VOID\r
XhcClearDebugRegBit (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN UINT32 Offset,\r
- IN UINT32 Bit\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN UINT32 Offset,\r
+ IN UINT32 Bit\r
)\r
{\r
- UINT32 Data;\r
+ UINT32 Data;\r
\r
Data = XhcReadDebugReg (Handle, Offset);\r
- Data &= ~Bit;\r
+ Data &= ~Bit;\r
XhcWriteDebugReg (Handle, Offset, Data);\r
}\r
\r
VOID\r
)\r
{\r
- UINT16 PciCmd;\r
- UINT32 Low;\r
- UINT32 High;\r
- EFI_PHYSICAL_ADDRESS XhciMmioBase;\r
-\r
- Low = PciRead32 (PcdGet32(PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
- High = PciRead32 (PcdGet32(PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + 4);\r
- XhciMmioBase = (EFI_PHYSICAL_ADDRESS) (LShiftU64 ((UINT64) High, 32) | Low);\r
+ UINT16 PciCmd;\r
+ UINT32 Low;\r
+ UINT32 High;\r
+ EFI_PHYSICAL_ADDRESS XhciMmioBase;\r
+\r
+ Low = PciRead32 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET);\r
+ High = PciRead32 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + 4);\r
+ XhciMmioBase = (EFI_PHYSICAL_ADDRESS)(LShiftU64 ((UINT64)High, 32) | Low);\r
XhciMmioBase &= XHCI_BASE_ADDRESS_64_BIT_MASK;\r
\r
if ((XhciMmioBase == 0) || (XhciMmioBase == XHCI_BASE_ADDRESS_64_BIT_MASK)) {\r
- XhciMmioBase = PcdGet64(PcdUsbXhciMemorySpaceBase);\r
- PciWrite32(PcdGet32(PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET, XhciMmioBase & 0xFFFFFFFF);\r
- PciWrite32(PcdGet32(PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + 4, (RShiftU64 (XhciMmioBase, 32) & 0xFFFFFFFF));\r
+ XhciMmioBase = PcdGet64 (PcdUsbXhciMemorySpaceBase);\r
+ PciWrite32 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET, XhciMmioBase & 0xFFFFFFFF);\r
+ PciWrite32 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_BASE_ADDRESSREG_OFFSET + 4, (RShiftU64 (XhciMmioBase, 32) & 0xFFFFFFFF));\r
}\r
\r
- PciCmd = PciRead16 (PcdGet32(PcdUsbXhciPciAddress) + PCI_COMMAND_OFFSET);\r
+ PciCmd = PciRead16 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_COMMAND_OFFSET);\r
if (((PciCmd & EFI_PCI_COMMAND_MEMORY_SPACE) == 0) || ((PciCmd & EFI_PCI_COMMAND_BUS_MASTER) == 0)) {\r
PciCmd |= EFI_PCI_COMMAND_MEMORY_SPACE | EFI_PCI_COMMAND_BUS_MASTER;\r
- PciWrite16(PcdGet32(PcdUsbXhciPciAddress) + PCI_COMMAND_OFFSET, PciCmd);\r
+ PciWrite16 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_COMMAND_OFFSET, PciCmd);\r
}\r
\r
return XhciMmioBase;\r
**/\r
VOID\r
UpdateXhcResource (\r
- IN OUT USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN EFI_PHYSICAL_ADDRESS XhciMmioBase\r
+ IN OUT USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN EFI_PHYSICAL_ADDRESS XhciMmioBase\r
)\r
{\r
if (Handle == NULL) {\r
RETURN_STATUS\r
EFIAPI\r
CalculateUsbDebugPortMmioBase (\r
- USB3_DEBUG_PORT_HANDLE *Handle\r
- )\r
+ USB3_DEBUG_PORT_HANDLE *Handle\r
+ )\r
{\r
- UINT16 VendorId;\r
- UINT16 DeviceId;\r
- UINT8 ProgInterface;\r
- UINT8 SubClassCode;\r
- UINT8 BaseCode;\r
- BOOLEAN Flag;\r
- UINT32 Capability;\r
- EFI_PHYSICAL_ADDRESS CapabilityPointer;\r
- UINT8 CapLength;\r
+ UINT16 VendorId;\r
+ UINT16 DeviceId;\r
+ UINT8 ProgInterface;\r
+ UINT8 SubClassCode;\r
+ UINT8 BaseCode;\r
+ BOOLEAN Flag;\r
+ UINT32 Capability;\r
+ EFI_PHYSICAL_ADDRESS CapabilityPointer;\r
+ UINT8 CapLength;\r
\r
if (Handle->Initialized != USB3DBG_UNINITIALIZED) {\r
if (Handle->Initialized == USB3DBG_NO_DBG_CAB) {\r
}\r
}\r
\r
- VendorId = PciRead16 (PcdGet32(PcdUsbXhciPciAddress) + PCI_VENDOR_ID_OFFSET);\r
- DeviceId = PciRead16 (PcdGet32(PcdUsbXhciPciAddress) + PCI_DEVICE_ID_OFFSET);\r
+ VendorId = PciRead16 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_VENDOR_ID_OFFSET);\r
+ DeviceId = PciRead16 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_DEVICE_ID_OFFSET);\r
\r
if ((VendorId == 0xFFFF) || (DeviceId == 0xFFFF)) {\r
goto Done;\r
}\r
\r
- ProgInterface = PciRead8 (PcdGet32(PcdUsbXhciPciAddress) + PCI_CLASSCODE_OFFSET);\r
- SubClassCode = PciRead8 (PcdGet32(PcdUsbXhciPciAddress) + PCI_CLASSCODE_OFFSET + 1);\r
- BaseCode = PciRead8 (PcdGet32(PcdUsbXhciPciAddress) + PCI_CLASSCODE_OFFSET + 2);\r
+ ProgInterface = PciRead8 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_CLASSCODE_OFFSET);\r
+ SubClassCode = PciRead8 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_CLASSCODE_OFFSET + 1);\r
+ BaseCode = PciRead8 (PcdGet32 (PcdUsbXhciPciAddress) + PCI_CLASSCODE_OFFSET + 2);\r
\r
if ((ProgInterface != PCI_IF_XHCI) || (SubClassCode != PCI_CLASS_SERIAL_USB) || (BaseCode != PCI_CLASS_SERIAL)) {\r
goto Done;\r
}\r
\r
- CapLength = MmioRead8 ((UINTN) Handle->XhciMmioBase);\r
+ CapLength = MmioRead8 ((UINTN)Handle->XhciMmioBase);\r
\r
//\r
// Get capability pointer from HCCPARAMS at offset 0x10\r
//\r
// Search XHCI debug capability\r
//\r
- Flag = FALSE;\r
+ Flag = FALSE;\r
Capability = MmioRead32 ((UINTN)CapabilityPointer);\r
while (TRUE) {\r
if ((Capability & XHC_CAPABILITY_ID_MASK) == PCI_CAPABILITY_ID_DEBUG_PORT) {\r
Flag = TRUE;\r
break;\r
}\r
+\r
if ((((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) & XHC_CAPABILITY_ID_MASK) == 0) {\r
//\r
// Reach the end of capability list, quit\r
//\r
break;\r
}\r
+\r
CapabilityPointer += ((Capability & XHC_NEXT_CAPABILITY_MASK) >> 8) * 4;\r
- Capability = MmioRead32 ((UINTN)CapabilityPointer);\r
+ Capability = MmioRead32 ((UINTN)CapabilityPointer);\r
}\r
\r
if (!Flag) {\r
Handle->DebugCapabilityBase = CapabilityPointer;\r
Handle->DebugCapabilityOffset = CapabilityPointer - Handle->XhciMmioBase;\r
Handle->XhciOpRegister = Handle->XhciMmioBase + CapLength;\r
- Handle->DebugSupport = TRUE;\r
- Handle->Initialized = USB3DBG_DBG_CAB;\r
+ Handle->DebugSupport = TRUE;\r
+ Handle->Initialized = USB3DBG_DBG_CAB;\r
return RETURN_SUCCESS;\r
\r
Done:\r
**/\r
BOOLEAN\r
EFIAPI\r
-NeedReinitializeHardware(\r
- IN USB3_DEBUG_PORT_HANDLE *Handle\r
+NeedReinitializeHardware (\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle\r
)\r
{\r
- BOOLEAN Result;\r
- volatile UINT32 Dcctrl;\r
+ BOOLEAN Result;\r
+ volatile UINT32 Dcctrl;\r
\r
Result = FALSE;\r
\r
if ((Dcctrl & BIT0) == 0) {\r
Result = TRUE;\r
} else if (!Handle->Ready) {\r
- Handle->Ready = TRUE;\r
+ Handle->Ready = TRUE;\r
Handle->Initialized = USB3DBG_ENABLED;\r
}\r
\r
**/\r
EFI_STATUS\r
CreateEventRing (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- OUT EVENT_RING *EventRing\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ OUT EVENT_RING *EventRing\r
)\r
{\r
VOID *Buf;\r
//\r
Buf = AllocateAlignBuffer (sizeof (TRB_TEMPLATE) * EVENT_RING_TRB_NUMBER);\r
ASSERT (Buf != NULL);\r
- ASSERT (((UINTN) Buf & 0x3F) == 0);\r
+ ASSERT (((UINTN)Buf & 0x3F) == 0);\r
ZeroMem (Buf, sizeof (TRB_TEMPLATE) * EVENT_RING_TRB_NUMBER);\r
\r
- EventRing->EventRingSeg0 = (EFI_PHYSICAL_ADDRESS)(UINTN) Buf;\r
+ EventRing->EventRingSeg0 = (EFI_PHYSICAL_ADDRESS)(UINTN)Buf;\r
EventRing->TrbNumber = EVENT_RING_TRB_NUMBER;\r
- EventRing->EventRingDequeue = (EFI_PHYSICAL_ADDRESS)(UINTN) EventRing->EventRingSeg0;\r
- EventRing->EventRingEnqueue = (EFI_PHYSICAL_ADDRESS)(UINTN) EventRing->EventRingSeg0;\r
+ EventRing->EventRingDequeue = (EFI_PHYSICAL_ADDRESS)(UINTN)EventRing->EventRingSeg0;\r
+ EventRing->EventRingEnqueue = (EFI_PHYSICAL_ADDRESS)(UINTN)EventRing->EventRingSeg0;\r
\r
//\r
// Software maintains an Event Ring Consumer Cycle State (CCS) bit, initializing it to '1'\r
//\r
Buf = AllocateAlignBuffer (sizeof (EVENT_RING_SEG_TABLE_ENTRY) * ERST_NUMBER);\r
ASSERT (Buf != NULL);\r
- ASSERT (((UINTN) Buf & 0x3F) == 0);\r
+ ASSERT (((UINTN)Buf & 0x3F) == 0);\r
ZeroMem (Buf, sizeof (EVENT_RING_SEG_TABLE_ENTRY) * ERST_NUMBER);\r
\r
- ERSTBase = (EVENT_RING_SEG_TABLE_ENTRY *) Buf;\r
- EventRing->ERSTBase = (EFI_PHYSICAL_ADDRESS)(UINTN) ERSTBase;\r
+ ERSTBase = (EVENT_RING_SEG_TABLE_ENTRY *)Buf;\r
+ EventRing->ERSTBase = (EFI_PHYSICAL_ADDRESS)(UINTN)ERSTBase;\r
\r
//\r
// Fill Event Segment address\r
XhcWriteDebugReg (\r
Handle,\r
XHC_DC_DCERDP,\r
- XHC_LOW_32BIT((UINT64)(UINTN)EventRing->EventRingDequeue)\r
+ XHC_LOW_32BIT ((UINT64)(UINTN)EventRing->EventRingDequeue)\r
);\r
\r
XhcWriteDebugReg (\r
Handle,\r
XHC_DC_DCERDP + 4,\r
- XHC_HIGH_32BIT((UINT64)(UINTN)EventRing->EventRingDequeue)\r
+ XHC_HIGH_32BIT ((UINT64)(UINTN)EventRing->EventRingDequeue)\r
);\r
\r
//\r
XhcWriteDebugReg (\r
Handle,\r
XHC_DC_DCERSTBA,\r
- XHC_LOW_32BIT((UINT64)(UINTN)ERSTBase)\r
+ XHC_LOW_32BIT ((UINT64)(UINTN)ERSTBase)\r
);\r
\r
XhcWriteDebugReg (\r
Handle,\r
XHC_DC_DCERSTBA + 4,\r
- XHC_HIGH_32BIT((UINT64)(UINTN)ERSTBase)\r
+ XHC_HIGH_32BIT ((UINT64)(UINTN)ERSTBase)\r
);\r
\r
//\r
**/\r
VOID\r
CreateTransferRing (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN UINT32 TrbNum,\r
- OUT TRANSFER_RING *TransferRing\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN UINT32 TrbNum,\r
+ OUT TRANSFER_RING *TransferRing\r
)\r
{\r
- VOID *Buf;\r
- LINK_TRB *EndTrb;\r
+ VOID *Buf;\r
+ LINK_TRB *EndTrb;\r
\r
Buf = AllocateAlignBuffer (sizeof (TRB_TEMPLATE) * TrbNum);\r
ASSERT (Buf != NULL);\r
- ASSERT (((UINTN) Buf & 0xF) == 0);\r
+ ASSERT (((UINTN)Buf & 0xF) == 0);\r
ZeroMem (Buf, sizeof (TRB_TEMPLATE) * TrbNum);\r
\r
- TransferRing->RingSeg0 = (EFI_PHYSICAL_ADDRESS)(UINTN) Buf;\r
- TransferRing->TrbNumber = TrbNum;\r
- TransferRing->RingEnqueue = TransferRing->RingSeg0;\r
- TransferRing->RingDequeue = TransferRing->RingSeg0;\r
- TransferRing->RingPCS = 1;\r
+ TransferRing->RingSeg0 = (EFI_PHYSICAL_ADDRESS)(UINTN)Buf;\r
+ TransferRing->TrbNumber = TrbNum;\r
+ TransferRing->RingEnqueue = TransferRing->RingSeg0;\r
+ TransferRing->RingDequeue = TransferRing->RingSeg0;\r
+ TransferRing->RingPCS = 1;\r
//\r
// 4.9.2 Transfer Ring Management\r
// To form a ring (or circular queue) a Link TRB may be inserted at the end of a ring to\r
// point to the first TRB in the ring.\r
//\r
- EndTrb = (LINK_TRB *) ((UINTN)Buf + sizeof (TRB_TEMPLATE) * (TrbNum - 1));\r
+ EndTrb = (LINK_TRB *)((UINTN)Buf + sizeof (TRB_TEMPLATE) * (TrbNum - 1));\r
EndTrb->Type = TRB_TYPE_LINK;\r
EndTrb->PtrLo = XHC_LOW_32BIT (Buf);\r
EndTrb->PtrHi = XHC_HIGH_32BIT (Buf);\r
//\r
// Toggle Cycle (TC). When set to '1', the xHC shall toggle its interpretation of the Cycle bit.\r
//\r
- EndTrb->TC = 1;\r
+ EndTrb->TC = 1;\r
//\r
// Set Cycle bit as other TRB PCS init value\r
//\r
**/\r
EFI_STATUS\r
CreateDebugCapabilityContext (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle\r
)\r
{\r
- VOID *Buf;\r
- XHC_DC_CONTEXT *DebugCapabilityContext;\r
- UINT8 *String0Desc;\r
- UINT8 *ManufacturerStrDesc;\r
- UINT8 *ProductStrDesc;\r
- UINT8 *SerialNumberStrDesc;\r
+ VOID *Buf;\r
+ XHC_DC_CONTEXT *DebugCapabilityContext;\r
+ UINT8 *String0Desc;\r
+ UINT8 *ManufacturerStrDesc;\r
+ UINT8 *ProductStrDesc;\r
+ UINT8 *SerialNumberStrDesc;\r
\r
//\r
// Allocate debug device context\r
//\r
Buf = AllocateAlignBuffer (sizeof (XHC_DC_CONTEXT));\r
ASSERT (Buf != NULL);\r
- ASSERT (((UINTN) Buf & 0xF) == 0);\r
+ ASSERT (((UINTN)Buf & 0xF) == 0);\r
ZeroMem (Buf, sizeof (XHC_DC_CONTEXT));\r
\r
- DebugCapabilityContext = (XHC_DC_CONTEXT *)(UINTN) Buf;\r
- Handle->DebugCapabilityContext = (EFI_PHYSICAL_ADDRESS)(UINTN) DebugCapabilityContext;\r
+ DebugCapabilityContext = (XHC_DC_CONTEXT *)(UINTN)Buf;\r
+ Handle->DebugCapabilityContext = (EFI_PHYSICAL_ADDRESS)(UINTN)DebugCapabilityContext;\r
\r
//\r
// Initialize DbcInfoContext.\r
//\r
// Update string descriptor address\r
//\r
- String0Desc = (UINT8 *) AllocateAlignBuffer (STRING0_DESC_LEN + MANU_DESC_LEN + PRODUCT_DESC_LEN + SERIAL_DESC_LEN);\r
+ String0Desc = (UINT8 *)AllocateAlignBuffer (STRING0_DESC_LEN + MANU_DESC_LEN + PRODUCT_DESC_LEN + SERIAL_DESC_LEN);\r
ASSERT (String0Desc != NULL);\r
ZeroMem (String0Desc, STRING0_DESC_LEN + MANU_DESC_LEN + PRODUCT_DESC_LEN + SERIAL_DESC_LEN);\r
CopyMem (String0Desc, mString0Desc, STRING0_DESC_LEN);\r
XhcWriteDebugReg (\r
Handle,\r
XHC_DC_DCCP,\r
- XHC_LOW_32BIT((UINT64)(UINTN)DebugCapabilityContext)\r
+ XHC_LOW_32BIT ((UINT64)(UINTN)DebugCapabilityContext)\r
);\r
XhcWriteDebugReg (\r
Handle,\r
XHC_DC_DCCP + 4,\r
- XHC_HIGH_32BIT((UINT64)(UINTN)DebugCapabilityContext)\r
+ XHC_HIGH_32BIT ((UINT64)(UINTN)DebugCapabilityContext)\r
);\r
return EFI_SUCCESS;\r
}\r
**/\r
VOID\r
XhcDetectDebugCapabilityReady (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle\r
)\r
{\r
- UINT64 TimeOut;\r
- volatile UINT32 Dcctrl;\r
+ UINT64 TimeOut;\r
+ volatile UINT32 Dcctrl;\r
\r
TimeOut = 1;\r
if (Handle->Initialized == USB3DBG_DBG_CAB) {\r
Handle->Ready = TRUE;\r
break;\r
}\r
+\r
MicroSecondDelay (XHC_POLL_DELAY);\r
TimeOut--;\r
} while (TimeOut != 0);\r
RETURN_STATUS\r
EFIAPI\r
InitializeUsbDebugHardware (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle\r
)\r
{\r
- RETURN_STATUS Status;\r
- UINT8 *Buffer;\r
- UINTN Index;\r
- UINT8 TotalUsb3Port;\r
- EFI_PHYSICAL_ADDRESS XhciOpRegister;\r
- UINT32 Dcddi1;\r
+ RETURN_STATUS Status;\r
+ UINT8 *Buffer;\r
+ UINTN Index;\r
+ UINT8 TotalUsb3Port;\r
+ EFI_PHYSICAL_ADDRESS XhciOpRegister;\r
+ UINT32 Dcddi1;\r
\r
XhciOpRegister = Handle->XhciOpRegister;\r
- TotalUsb3Port = MmioRead32 (((UINTN) Handle->XhciMmioBase + XHC_HCSPARAMS1_OFFSET)) >> 24;\r
+ TotalUsb3Port = MmioRead32 (((UINTN)Handle->XhciMmioBase + XHC_HCSPARAMS1_OFFSET)) >> 24;\r
\r
if (Handle->Initialized == USB3DBG_NOT_ENABLED) {\r
- Dcddi1 = XhcReadDebugReg (Handle,XHC_DC_DCDDI1);\r
+ Dcddi1 = XhcReadDebugReg (Handle, XHC_DC_DCDDI1);\r
if (Dcddi1 != (UINT32)((XHCI_DEBUG_DEVICE_VENDOR_ID << 16) | XHCI_DEBUG_DEVICE_PROTOCOL)) {\r
//\r
// The debug capability has been reset by other code, return device error.\r
//\r
return EFI_DEVICE_ERROR;\r
}\r
+\r
//\r
// If XHCI supports debug capability, hardware resource has been allocated,\r
// but it has not been enabled, try to enable again.\r
//\r
// Construct the buffer for read, poll and write.\r
//\r
- Handle->UrbIn.Data = (EFI_PHYSICAL_ADDRESS)(UINTN) Buffer;\r
- Handle->Data = (EFI_PHYSICAL_ADDRESS)(UINTN) Buffer + XHCI_DEBUG_DEVICE_MAX_PACKET_SIZE;\r
+ Handle->UrbIn.Data = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer;\r
+ Handle->Data = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer + XHCI_DEBUG_DEVICE_MAX_PACKET_SIZE;\r
Handle->UrbOut.Data = Handle->UrbIn.Data + XHCI_DEBUG_DEVICE_MAX_PACKET_SIZE * 2;\r
\r
//\r
// Init DCDDI1 and DCDDI2\r
//\r
XhcWriteDebugReg (\r
- Handle,\r
- XHC_DC_DCDDI1,\r
- (UINT32)((XHCI_DEBUG_DEVICE_VENDOR_ID << 16) | XHCI_DEBUG_DEVICE_PROTOCOL)\r
- );\r
+ Handle,\r
+ XHC_DC_DCDDI1,\r
+ (UINT32)((XHCI_DEBUG_DEVICE_VENDOR_ID << 16) | XHCI_DEBUG_DEVICE_PROTOCOL)\r
+ );\r
\r
XhcWriteDebugReg (\r
- Handle,\r
- XHC_DC_DCDDI2,\r
- (UINT32)((XHCI_DEBUG_DEVICE_REVISION << 16) | XHCI_DEBUG_DEVICE_PRODUCT_ID)\r
- );\r
+ Handle,\r
+ XHC_DC_DCDDI2,\r
+ (UINT32)((XHCI_DEBUG_DEVICE_REVISION << 16) | XHCI_DEBUG_DEVICE_PRODUCT_ID)\r
+ );\r
\r
Enable:\r
if ((Handle->Initialized == USB3DBG_NOT_ENABLED) && (!Handle->ChangePortPower)) {\r
Status = RETURN_SUCCESS;\r
if (!Handle->Ready) {\r
Handle->Initialized = USB3DBG_NOT_ENABLED;\r
- Status = RETURN_NOT_READY;\r
+ Status = RETURN_NOT_READY;\r
} else {\r
Handle->Initialized = USB3DBG_ENABLED;\r
}\r
**/\r
VOID\r
DiscoverInitializeUsbDebugPort (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_PHYSICAL_ADDRESS XhciMmioBase;\r
+ EFI_STATUS Status;\r
+ EFI_PHYSICAL_ADDRESS XhciMmioBase;\r
\r
//\r
// Read 64-bit MMIO base address\r
//\r
- XhciMmioBase = ProgramXhciBaseAddress ();\r
+ XhciMmioBase = ProgramXhciBaseAddress ();\r
Handle->XhciMmioBase = XhciMmioBase;\r
\r
Status = CalculateUsbDebugPortMmioBase (Handle);\r
**/\r
VOID\r
SetUsb3DebugPortInstance (\r
- IN USB3_DEBUG_PORT_HANDLE *Instance\r
+ IN USB3_DEBUG_PORT_HANDLE *Instance\r
)\r
{\r
- EFI_PHYSICAL_ADDRESS *AddrPtr;\r
+ EFI_PHYSICAL_ADDRESS *AddrPtr;\r
\r
AddrPtr = GetUsb3DebugPortInstanceAddrPtr ();\r
ASSERT (AddrPtr != NULL);\r
- *AddrPtr = (EFI_PHYSICAL_ADDRESS) (UINTN) Instance;\r
+ *AddrPtr = (EFI_PHYSICAL_ADDRESS)(UINTN)Instance;\r
}\r
\r
/**\r
VOID\r
)\r
{\r
- EFI_PHYSICAL_ADDRESS *AddrPtr;\r
- USB3_DEBUG_PORT_HANDLE *Instance;\r
+ EFI_PHYSICAL_ADDRESS *AddrPtr;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
\r
AddrPtr = GetUsb3DebugPortInstanceAddrPtr ();\r
ASSERT (AddrPtr != NULL);\r
\r
- Instance = (USB3_DEBUG_PORT_HANDLE *) (UINTN) *AddrPtr;\r
+ Instance = (USB3_DEBUG_PORT_HANDLE *)(UINTN)*AddrPtr;\r
\r
return Instance;\r
}\r
UINTN\r
EFIAPI\r
DebugPortReadBuffer (\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
- USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
- UINT8 Index;\r
- UINT8 *Data;\r
+ USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
+ UINT8 Index;\r
+ UINT8 *Data;\r
\r
- if (NumberOfBytes != 1 || Buffer == NULL || Timeout != 0) {\r
+ if ((NumberOfBytes != 1) || (Buffer == NULL) || (Timeout != 0)) {\r
return 0;\r
}\r
\r
// If Handle is not NULL, use it and set the instance.\r
//\r
if (Handle != NULL) {\r
- UsbDebugPortHandle = (USB3_DEBUG_PORT_HANDLE *) Handle;\r
+ UsbDebugPortHandle = (USB3_DEBUG_PORT_HANDLE *)Handle;\r
SetUsb3DebugPortInstance (UsbDebugPortHandle);\r
} else {\r
UsbDebugPortHandle = GetUsb3DebugPortInstance ();\r
}\r
+\r
if (UsbDebugPortHandle == NULL) {\r
return 0;\r
}\r
if ((Index + 1) >= XHCI_DEBUG_DEVICE_MAX_PACKET_SIZE) {\r
return 0;\r
}\r
+\r
Data[Index] = Data[Index + 1];\r
}\r
+\r
UsbDebugPortHandle->DataCount = (UINT8)(UsbDebugPortHandle->DataCount - 1);\r
return 1;\r
}\r
UINTN\r
EFIAPI\r
DebugPortWriteBuffer (\r
- IN DEBUG_PORT_HANDLE Handle,\r
- IN UINT8 *Buffer,\r
- IN UINTN NumberOfBytes\r
+ IN DEBUG_PORT_HANDLE Handle,\r
+ IN UINT8 *Buffer,\r
+ IN UINTN NumberOfBytes\r
)\r
{\r
- USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
- UINTN Sent;\r
- UINTN Total;\r
+ USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
+ UINTN Sent;\r
+ UINTN Total;\r
\r
- if (NumberOfBytes == 0 || Buffer == NULL) {\r
+ if ((NumberOfBytes == 0) || (Buffer == NULL)) {\r
return 0;\r
}\r
\r
// If Handle is not NULL, use it and set the instance.\r
//\r
if (Handle != NULL) {\r
- UsbDebugPortHandle = (USB3_DEBUG_PORT_HANDLE *) Handle;\r
+ UsbDebugPortHandle = (USB3_DEBUG_PORT_HANDLE *)Handle;\r
SetUsb3DebugPortInstance (UsbDebugPortHandle);\r
} else {\r
UsbDebugPortHandle = GetUsb3DebugPortInstance ();\r
}\r
+\r
if (UsbDebugPortHandle == NULL) {\r
return 0;\r
}\r
} else {\r
Sent = (UINT8)(NumberOfBytes - Total);\r
}\r
+\r
XhcDataTransfer (UsbDebugPortHandle, EfiUsbDataOut, Buffer + Total, &Sent, DATA_TRANSFER_WRITE_TIMEOUT);\r
Total += Sent;\r
}\r
BOOLEAN\r
EFIAPI\r
DebugPortPollBuffer (\r
- IN DEBUG_PORT_HANDLE Handle\r
+ IN DEBUG_PORT_HANDLE Handle\r
)\r
{\r
- USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
- UINTN Length;\r
+ USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
+ UINTN Length;\r
\r
//\r
// If Handle is NULL, get own instance.\r
// If Handle is not NULL, use it and set the instance.\r
//\r
if (Handle != NULL) {\r
- UsbDebugPortHandle = (USB3_DEBUG_PORT_HANDLE *) Handle;\r
+ UsbDebugPortHandle = (USB3_DEBUG_PORT_HANDLE *)Handle;\r
SetUsb3DebugPortInstance (UsbDebugPortHandle);\r
} else {\r
UsbDebugPortHandle = GetUsb3DebugPortInstance ();\r
}\r
+\r
if (UsbDebugPortHandle == NULL) {\r
return FALSE;\r
}\r
//\r
// Store data into internal buffer for use later\r
//\r
- UsbDebugPortHandle->DataCount = (UINT8) Length;\r
+ UsbDebugPortHandle->DataCount = (UINT8)Length;\r
return TRUE;\r
}\r
\r
IN DEBUG_PORT_CONTINUE Function\r
)\r
{\r
- USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
+ USB3_DEBUG_PORT_HANDLE *UsbDebugPortHandle;\r
\r
//\r
// Validate the PCD PcdDebugPortHandleBufferSize value\r
//\r
ASSERT (PcdGet16 (PcdDebugPortHandleBufferSize) == sizeof (USB3_DEBUG_PORT_HANDLE));\r
\r
- if (Function == NULL && Context != NULL) {\r
- SetUsb3DebugPortInstance ((USB3_DEBUG_PORT_HANDLE *) Context);\r
- return (DEBUG_PORT_HANDLE) Context;\r
+ if ((Function == NULL) && (Context != NULL)) {\r
+ SetUsb3DebugPortInstance ((USB3_DEBUG_PORT_HANDLE *)Context);\r
+ return (DEBUG_PORT_HANDLE)Context;\r
}\r
+\r
UsbDebugPortHandle = GetUsb3DebugPortInstance ();\r
if (UsbDebugPortHandle == NULL) {\r
return NULL;\r
DiscoverInitializeUsbDebugPort (UsbDebugPortHandle);\r
\r
if (Function != NULL) {\r
- Function (Context, (DEBUG_PORT_HANDLE) UsbDebugPortHandle);\r
+ Function (Context, (DEBUG_PORT_HANDLE)UsbDebugPortHandle);\r
}\r
\r
- return (DEBUG_PORT_HANDLE) UsbDebugPortHandle;\r
+ return (DEBUG_PORT_HANDLE)UsbDebugPortHandle;\r
}\r
#include <Protocol/DxeSmmReadyToLock.h>\r
#include "DebugCommunicationLibUsb3Internal.h"\r
\r
-GUID gUsb3DbgGuid = USB3_DBG_GUID;\r
+GUID gUsb3DbgGuid = USB3_DBG_GUID;\r
\r
-USB3_DEBUG_PORT_HANDLE mUsb3Instance = {USB3DBG_UNINITIALIZED};\r
-EFI_PHYSICAL_ADDRESS mUsb3InstanceAddr = 0;\r
-EFI_PHYSICAL_ADDRESS *mUsb3InstanceAddrPtr = NULL;\r
-EFI_PCI_IO_PROTOCOL *mUsb3PciIo = NULL;\r
+USB3_DEBUG_PORT_HANDLE mUsb3Instance = { USB3DBG_UNINITIALIZED };\r
+EFI_PHYSICAL_ADDRESS mUsb3InstanceAddr = 0;\r
+EFI_PHYSICAL_ADDRESS *mUsb3InstanceAddrPtr = NULL;\r
+EFI_PCI_IO_PROTOCOL *mUsb3PciIo = NULL;\r
\r
/**\r
Creates a named event that can be signaled.\r
// Register for an installation of protocol interface\r
//\r
Status = gBS->RegisterProtocolNotify (\r
- (EFI_GUID *) Name,\r
+ (EFI_GUID *)Name,\r
*Event,\r
&RegistrationLocal\r
);\r
**/\r
VOID\r
Usb3MapOneDmaBuffer (\r
- IN EFI_PCI_IO_PROTOCOL *PciIo,\r
- IN EFI_PHYSICAL_ADDRESS Address,\r
- IN UINTN NumberOfBytes\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo,\r
+ IN EFI_PHYSICAL_ADDRESS Address,\r
+ IN UINTN NumberOfBytes\r
)\r
{\r
- EFI_STATUS Status;\r
- VOID *HostAddress;\r
- EFI_PHYSICAL_ADDRESS DeviceAddress;\r
- VOID *Mapping;\r
-\r
- HostAddress = (VOID *) (UINTN) Address;\r
- Status = PciIo->Map (\r
- PciIo,\r
- EfiPciIoOperationBusMasterCommonBuffer,\r
- HostAddress,\r
- &NumberOfBytes,\r
- &DeviceAddress,\r
- &Mapping\r
- );\r
+ EFI_STATUS Status;\r
+ VOID *HostAddress;\r
+ EFI_PHYSICAL_ADDRESS DeviceAddress;\r
+ VOID *Mapping;\r
+\r
+ HostAddress = (VOID *)(UINTN)Address;\r
+ Status = PciIo->Map (\r
+ PciIo,\r
+ EfiPciIoOperationBusMasterCommonBuffer,\r
+ HostAddress,\r
+ &NumberOfBytes,\r
+ &DeviceAddress,\r
+ &Mapping\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
- ASSERT (DeviceAddress == ((EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress));\r
+ ASSERT (DeviceAddress == ((EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress));\r
}\r
\r
/**\r
**/\r
VOID\r
Usb3MapDmaBuffers (\r
- IN USB3_DEBUG_PORT_HANDLE *Instance,\r
- IN EFI_PCI_IO_PROTOCOL *PciIo\r
+ IN USB3_DEBUG_PORT_HANDLE *Instance,\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo\r
)\r
{\r
Usb3MapOneDmaBuffer (\r
\r
Usb3MapOneDmaBuffer (\r
PciIo,\r
- ((XHC_DC_CONTEXT *) (UINTN) Instance->DebugCapabilityContext)->DbcInfoContext.String0DescAddress,\r
+ ((XHC_DC_CONTEXT *)(UINTN)Instance->DebugCapabilityContext)->DbcInfoContext.String0DescAddress,\r
STRING0_DESC_LEN + MANU_DESC_LEN + PRODUCT_DESC_LEN + SERIAL_DESC_LEN\r
);\r
}\r
VOID\r
EFIAPI\r
Usb3DxeSmmReadyToLockNotify (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- USB3_DEBUG_PORT_HANDLE *Instance;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
\r
DEBUG ((DEBUG_INFO, "%a()\n", __FUNCTION__));\r
\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- EDKII_IOMMU_PROTOCOL *IoMmu;\r
+ EFI_STATUS Status;\r
+ EDKII_IOMMU_PROTOCOL *IoMmu;\r
\r
- IoMmu = NULL;\r
+ IoMmu = NULL;\r
Status = gBS->LocateProtocol (\r
- &gEdkiiIoMmuProtocolGuid,\r
- NULL,\r
- (VOID **) &IoMmu\r
- );\r
+ &gEdkiiIoMmuProtocolGuid,\r
+ NULL,\r
+ (VOID **)&IoMmu\r
+ );\r
if (!EFI_ERROR (Status) && (IoMmu != NULL)) {\r
return IoMmu;\r
}\r
VOID\r
EFIAPI\r
Usb3PciIoNotify (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN PciIoHandleCount;\r
- EFI_HANDLE *PciIoHandleBuffer;\r
- UINTN Index;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
- UINTN PciSegment;\r
- UINTN PciBusNumber;\r
- UINTN PciDeviceNumber;\r
- UINTN PciFunctionNumber;\r
- UINT32 PciAddress;\r
- USB3_DEBUG_PORT_HANDLE *Instance;\r
- EFI_EVENT SmmReadyToLockEvent;\r
+ EFI_STATUS Status;\r
+ UINTN PciIoHandleCount;\r
+ EFI_HANDLE *PciIoHandleBuffer;\r
+ UINTN Index;\r
+ EFI_PCI_IO_PROTOCOL *PciIo;\r
+ UINTN PciSegment;\r
+ UINTN PciBusNumber;\r
+ UINTN PciDeviceNumber;\r
+ UINTN PciFunctionNumber;\r
+ UINT32 PciAddress;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
+ EFI_EVENT SmmReadyToLockEvent;\r
\r
Status = gBS->LocateHandleBuffer (\r
ByProtocol,\r
);\r
if (!EFI_ERROR (Status) &&\r
(PciIoHandleBuffer != NULL) &&\r
- (PciIoHandleCount != 0)) {\r
+ (PciIoHandleCount != 0))\r
+ {\r
for (Index = 0; Index < PciIoHandleCount; Index++) {\r
Status = gBS->HandleProtocol (\r
PciIoHandleBuffer[Index],\r
&gEfiPciIoProtocolGuid,\r
- (VOID **) &PciIo\r
+ (VOID **)&PciIo\r
);\r
ASSERT_EFI_ERROR (Status);\r
Status = PciIo->GetLocation (PciIo, &PciSegment, &PciBusNumber, &PciDeviceNumber, &PciFunctionNumber);\r
ASSERT_EFI_ERROR (Status);\r
- PciAddress = (UINT32) ((PciBusNumber << 20) | (PciDeviceNumber << 15) | (PciFunctionNumber << 12));\r
- if (PciAddress == PcdGet32(PcdUsbXhciPciAddress)) {\r
+ PciAddress = (UINT32)((PciBusNumber << 20) | (PciDeviceNumber << 15) | (PciFunctionNumber << 12));\r
+ if (PciAddress == PcdGet32 (PcdUsbXhciPciAddress)) {\r
//\r
// Found the PciIo for USB3 debug port.\r
//\r
}\r
}\r
}\r
+\r
gBS->CloseEvent (Event);\r
break;\r
}\r
//\r
// Use the local variables temporarily.\r
//\r
- mUsb3InstanceAddr = (EFI_PHYSICAL_ADDRESS) (UINTN) &mUsb3Instance;\r
+ mUsb3InstanceAddr = (EFI_PHYSICAL_ADDRESS)(UINTN)&mUsb3Instance;\r
mUsb3InstanceAddrPtr = &mUsb3InstanceAddr;\r
}\r
+\r
return mUsb3InstanceAddrPtr;\r
}\r
\r
**/\r
EFI_STATUS\r
Usb3AllocateDmaBuffer (\r
- IN EFI_PCI_IO_PROTOCOL *PciIo,\r
- IN UINTN Pages,\r
- OUT VOID **Address\r
+ IN EFI_PCI_IO_PROTOCOL *PciIo,\r
+ IN UINTN Pages,\r
+ OUT VOID **Address\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
*Address = NULL;\r
- Status = PciIo->AllocateBuffer (\r
- PciIo,\r
- AllocateAnyPages,\r
- EfiRuntimeServicesData,\r
- Pages,\r
- Address,\r
- 0\r
- );\r
+ Status = PciIo->AllocateBuffer (\r
+ PciIo,\r
+ AllocateAnyPages,\r
+ EfiRuntimeServicesData,\r
+ Pages,\r
+ Address,\r
+ 0\r
+ );\r
if (!EFI_ERROR (Status)) {\r
Usb3MapOneDmaBuffer (\r
PciIo,\r
- (EFI_PHYSICAL_ADDRESS) (UINTN) *Address,\r
+ (EFI_PHYSICAL_ADDRESS)(UINTN)*Address,\r
EFI_PAGES_TO_SIZE (Pages)\r
);\r
}\r
+\r
return Status;\r
}\r
\r
@return A pointer to the allocated buffer or NULL if allocation fails.\r
\r
**/\r
-VOID*\r
+VOID *\r
AllocateAlignBuffer (\r
- IN UINTN BufferSize\r
+ IN UINTN BufferSize\r
)\r
{\r
- EFI_PHYSICAL_ADDRESS TmpAddr;\r
- EFI_STATUS Status;\r
- VOID *Buf;\r
+ EFI_PHYSICAL_ADDRESS TmpAddr;\r
+ EFI_STATUS Status;\r
+ VOID *Buf;\r
\r
Buf = NULL;\r
\r
);\r
} else {\r
TmpAddr = 0xFFFFFFFF;\r
- Status = gBS->AllocatePages (\r
- AllocateMaxAddress,\r
- EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (BufferSize),\r
- &TmpAddr\r
- );\r
+ Status = gBS->AllocatePages (\r
+ AllocateMaxAddress,\r
+ EfiACPIMemoryNVS,\r
+ EFI_SIZE_TO_PAGES (BufferSize),\r
+ &TmpAddr\r
+ );\r
if (!EFI_ERROR (Status)) {\r
- Buf = (VOID *) (UINTN) TmpAddr;\r
+ Buf = (VOID *)(UINTN)TmpAddr;\r
}\r
}\r
}\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_PHYSICAL_ADDRESS *AddrPtr;\r
- USB3_DEBUG_PORT_HANDLE *Instance;\r
- EFI_PHYSICAL_ADDRESS Address;\r
- EFI_STATUS Status;\r
- EFI_EVENT Event;\r
+ EFI_PHYSICAL_ADDRESS *AddrPtr;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
+ EFI_PHYSICAL_ADDRESS Address;\r
+ EFI_STATUS Status;\r
+ EFI_EVENT Event;\r
\r
- Status = EfiGetSystemConfigurationTable (&gUsb3DbgGuid, (VOID **) &AddrPtr);\r
+ Status = EfiGetSystemConfigurationTable (&gUsb3DbgGuid, (VOID **)&AddrPtr);\r
if (EFI_ERROR (Status) || (AddrPtr == NULL)) {\r
//\r
// Instead of using local variables, install system configuration table for\r
// the local instance and the buffer to save instance address pointer.\r
//\r
Address = SIZE_4GB;\r
- Status = gBS->AllocatePages (\r
- AllocateMaxAddress,\r
- EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (sizeof (EFI_PHYSICAL_ADDRESS) + sizeof (USB3_DEBUG_PORT_HANDLE)),\r
- &Address\r
- );\r
+ Status = gBS->AllocatePages (\r
+ AllocateMaxAddress,\r
+ EfiACPIMemoryNVS,\r
+ EFI_SIZE_TO_PAGES (sizeof (EFI_PHYSICAL_ADDRESS) + sizeof (USB3_DEBUG_PORT_HANDLE)),\r
+ &Address\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- AddrPtr = (EFI_PHYSICAL_ADDRESS *) (UINTN) Address;\r
+ AddrPtr = (EFI_PHYSICAL_ADDRESS *)(UINTN)Address;\r
ZeroMem (AddrPtr, sizeof (EFI_PHYSICAL_ADDRESS) + sizeof (USB3_DEBUG_PORT_HANDLE));\r
- Instance = (USB3_DEBUG_PORT_HANDLE *) (AddrPtr + 1);\r
+ Instance = (USB3_DEBUG_PORT_HANDLE *)(AddrPtr + 1);\r
CopyMem (Instance, &mUsb3Instance, sizeof (USB3_DEBUG_PORT_HANDLE));\r
- *AddrPtr = (EFI_PHYSICAL_ADDRESS) (UINTN) Instance;\r
+ *AddrPtr = (EFI_PHYSICAL_ADDRESS)(UINTN)Instance;\r
\r
Status = gBS->InstallConfigurationTable (&gUsb3DbgGuid, AddrPtr);\r
if (EFI_ERROR (Status)) {\r
if (mUsb3InstanceAddrPtr != NULL) {\r
*AddrPtr = *mUsb3InstanceAddrPtr;\r
}\r
+\r
mUsb3InstanceAddrPtr = AddrPtr;\r
\r
Instance = GetUsb3DebugPortInstance ();\r
&Event\r
);\r
if (!EFI_ERROR (Status)) {\r
- Instance->PciIoEvent = (EFI_PHYSICAL_ADDRESS) (UINTN) Event;\r
+ Instance->PciIoEvent = (EFI_PHYSICAL_ADDRESS)(UINTN)Event;\r
}\r
}\r
\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- USB3_DEBUG_PORT_HANDLE *Instance;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
\r
Instance = GetUsb3DebugPortInstance ();\r
ASSERT (Instance != NULL);\r
//\r
// Close the event created.\r
//\r
- gBS->CloseEvent ((EFI_EVENT) (UINTN) Instance->PciIoEvent);\r
+ gBS->CloseEvent ((EFI_EVENT)(UINTN)Instance->PciIoEvent);\r
Instance->PciIoEvent = 0;\r
}\r
+\r
return EFI_SUCCESS;\r
}\r
-\r
//\r
// The state machine of usb debug port\r
//\r
-#define USB3DBG_NO_DBG_CAB 0 // The XHCI host controller does not support debug capability\r
-#define USB3DBG_DBG_CAB 1 // The XHCI host controller supports debug capability\r
-#define USB3DBG_ENABLED 2 // The XHCI debug device is enabled\r
-#define USB3DBG_NOT_ENABLED 4 // The XHCI debug device is not enabled\r
-#define USB3DBG_UNINITIALIZED 255 // The XHCI debug device is uninitialized\r
+#define USB3DBG_NO_DBG_CAB 0 // The XHCI host controller does not support debug capability\r
+#define USB3DBG_DBG_CAB 1 // The XHCI host controller supports debug capability\r
+#define USB3DBG_ENABLED 2 // The XHCI debug device is enabled\r
+#define USB3DBG_NOT_ENABLED 4 // The XHCI debug device is not enabled\r
+#define USB3DBG_UNINITIALIZED 255 // The XHCI debug device is uninitialized\r
\r
-#define USB3_DEBUG_PORT_WRITE_MAX_PACKET_SIZE 0x08\r
+#define USB3_DEBUG_PORT_WRITE_MAX_PACKET_SIZE 0x08\r
\r
//\r
// MaxPacketSize for DbC Endpoint Descriptor IN and OUT\r
//\r
-#define XHCI_DEBUG_DEVICE_MAX_PACKET_SIZE 0x400\r
+#define XHCI_DEBUG_DEVICE_MAX_PACKET_SIZE 0x400\r
\r
#define XHCI_DEBUG_DEVICE_VENDOR_ID 0x0525\r
#define XHCI_DEBUG_DEVICE_PRODUCT_ID 0x127A\r
#define XHCI_DEBUG_DEVICE_PROTOCOL 0xFF\r
#define XHCI_DEBUG_DEVICE_REVISION 0x00\r
\r
-#define XHCI_BASE_ADDRESS_64_BIT_MASK 0xFFFFFFFFFFFF0000ULL\r
-#define XHCI_BASE_ADDRESS_32_BIT_MASK 0xFFFF0000\r
+#define XHCI_BASE_ADDRESS_64_BIT_MASK 0xFFFFFFFFFFFF0000ULL\r
+#define XHCI_BASE_ADDRESS_32_BIT_MASK 0xFFFF0000\r
\r
#define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A\r
#define XHC_HCCPARAMS_OFFSET 0x10\r
#define XHC_CAPABILITY_ID_MASK 0xFF\r
#define XHC_NEXT_CAPABILITY_MASK 0xFF00\r
\r
-#define XHC_HCSPARAMS1_OFFSET 0x4 // Structural Parameters 1\r
-#define XHC_USBCMD_OFFSET 0x0 // USB Command Register Offset\r
-#define XHC_USBSTS_OFFSET 0x4 // USB Status Register Offset\r
-#define XHC_PORTSC_OFFSET 0x400 // Port Status and Control Register Offset\r
+#define XHC_HCSPARAMS1_OFFSET 0x4 // Structural Parameters 1\r
+#define XHC_USBCMD_OFFSET 0x0 // USB Command Register Offset\r
+#define XHC_USBSTS_OFFSET 0x4 // USB Status Register Offset\r
+#define XHC_PORTSC_OFFSET 0x400 // Port Status and Control Register Offset\r
\r
-#define XHC_USBCMD_RUN BIT0 // Run/Stop\r
-#define XHC_USBCMD_RESET BIT1 // Host Controller Reset\r
+#define XHC_USBCMD_RUN BIT0 // Run/Stop\r
+#define XHC_USBCMD_RESET BIT1 // Host Controller Reset\r
\r
-#define XHC_USBSTS_HALT BIT0\r
+#define XHC_USBSTS_HALT BIT0\r
\r
//\r
// Indicate the timeout when data is transferred in microsecond. 0 means infinite timeout.\r
//\r
-#define DATA_TRANSFER_WRITE_TIMEOUT 0\r
-#define DATA_TRANSFER_READ_TIMEOUT 50000\r
-#define DATA_TRANSFER_POLL_TIMEOUT 1000\r
-#define XHC_DEBUG_PORT_1_MILLISECOND 1000\r
+#define DATA_TRANSFER_WRITE_TIMEOUT 0\r
+#define DATA_TRANSFER_READ_TIMEOUT 50000\r
+#define DATA_TRANSFER_POLL_TIMEOUT 1000\r
+#define XHC_DEBUG_PORT_1_MILLISECOND 1000\r
//\r
// XHCI port power off/on delay\r
//\r
-#define XHC_DEBUG_PORT_ON_OFF_DELAY 100000\r
+#define XHC_DEBUG_PORT_ON_OFF_DELAY 100000\r
\r
//\r
// USB debug device string descriptor (header size + unicode string length)\r
//\r
-#define STRING0_DESC_LEN 4\r
-#define MANU_DESC_LEN 12\r
-#define PRODUCT_DESC_LEN 40\r
-#define SERIAL_DESC_LEN 4\r
+#define STRING0_DESC_LEN 4\r
+#define MANU_DESC_LEN 12\r
+#define PRODUCT_DESC_LEN 40\r
+#define SERIAL_DESC_LEN 4\r
\r
//\r
// Debug Capability Register Offset\r
//\r
-#define XHC_DC_DCID 0x0\r
-#define XHC_DC_DCDB 0x4\r
-#define XHC_DC_DCERSTSZ 0x8\r
-#define XHC_DC_DCERSTBA 0x10\r
-#define XHC_DC_DCERDP 0x18\r
-#define XHC_DC_DCCTRL 0x20\r
-#define XHC_DC_DCST 0x24\r
-#define XHC_DC_DCPORTSC 0x28\r
-#define XHC_DC_DCCP 0x30\r
-#define XHC_DC_DCDDI1 0x38\r
-#define XHC_DC_DCDDI2 0x3C\r
+#define XHC_DC_DCID 0x0\r
+#define XHC_DC_DCDB 0x4\r
+#define XHC_DC_DCERSTSZ 0x8\r
+#define XHC_DC_DCERSTBA 0x10\r
+#define XHC_DC_DCERDP 0x18\r
+#define XHC_DC_DCCTRL 0x20\r
+#define XHC_DC_DCST 0x24\r
+#define XHC_DC_DCPORTSC 0x28\r
+#define XHC_DC_DCCP 0x30\r
+#define XHC_DC_DCDDI1 0x38\r
+#define XHC_DC_DCDDI2 0x3C\r
\r
-#define TRB_TYPE_LINK 6\r
+#define TRB_TYPE_LINK 6\r
\r
-#define ERST_NUMBER 0x01\r
-#define TR_RING_TRB_NUMBER 0x100\r
-#define EVENT_RING_TRB_NUMBER 0x200\r
+#define ERST_NUMBER 0x01\r
+#define TR_RING_TRB_NUMBER 0x100\r
+#define EVENT_RING_TRB_NUMBER 0x200\r
\r
-#define ED_BULK_OUT 2\r
-#define ED_BULK_IN 6\r
+#define ED_BULK_OUT 2\r
+#define ED_BULK_IN 6\r
\r
-#define XHC_LOW_32BIT(Addr64) ((UINT32)(((UINTN)(Addr64)) & 0xFFFFFFFF))\r
-#define XHC_HIGH_32BIT(Addr64) ((UINT32)(RShiftU64((UINT64)(UINTN)(Addr64), 32) & 0xFFFFFFFF))\r
-#define XHC_BIT_IS_SET(Data, Bit) ((BOOLEAN)(((Data) & (Bit)) == (Bit)))\r
+#define XHC_LOW_32BIT(Addr64) ((UINT32)(((UINTN)(Addr64)) & 0xFFFFFFFF))\r
+#define XHC_HIGH_32BIT(Addr64) ((UINT32)(RShiftU64((UINT64)(UINTN)(Addr64), 32) & 0xFFFFFFFF))\r
+#define XHC_BIT_IS_SET(Data, Bit) ((BOOLEAN)(((Data) & (Bit)) == (Bit)))\r
\r
//\r
// Endpoint Type (EP Type).\r
//\r
-#define ED_NOT_VALID 0\r
-#define ED_ISOCH_OUT 1\r
-#define ED_BULK_OUT 2\r
-#define ED_INTERRUPT_OUT 3\r
-#define ED_CONTROL_BIDIR 4\r
-#define ED_ISOCH_IN 5\r
-#define ED_BULK_IN 6\r
-#define ED_INTERRUPT_IN 7\r
+#define ED_NOT_VALID 0\r
+#define ED_ISOCH_OUT 1\r
+#define ED_BULK_OUT 2\r
+#define ED_INTERRUPT_OUT 3\r
+#define ED_CONTROL_BIDIR 4\r
+#define ED_ISOCH_IN 5\r
+#define ED_BULK_IN 6\r
+#define ED_INTERRUPT_IN 7\r
\r
//\r
// 6.4.5 TRB Completion Codes\r
//\r
// 6.4.6 TRB Types\r
//\r
-#define TRB_TYPE_NORMAL 1\r
-#define TRB_TYPE_SETUP_STAGE 2\r
-#define TRB_TYPE_DATA_STAGE 3\r
-#define TRB_TYPE_STATUS_STAGE 4\r
-#define TRB_TYPE_ISOCH 5\r
-#define TRB_TYPE_LINK 6\r
-#define TRB_TYPE_EVENT_DATA 7\r
-#define TRB_TYPE_NO_OP 8\r
-#define TRB_TYPE_EN_SLOT 9\r
-#define TRB_TYPE_DIS_SLOT 10\r
-#define TRB_TYPE_ADDRESS_DEV 11\r
-#define TRB_TYPE_CON_ENDPOINT 12\r
-#define TRB_TYPE_EVALU_CONTXT 13\r
-#define TRB_TYPE_RESET_ENDPOINT 14\r
-#define TRB_TYPE_STOP_ENDPOINT 15\r
-#define TRB_TYPE_SET_TR_DEQUE 16\r
-#define TRB_TYPE_RESET_DEV 17\r
-#define TRB_TYPE_GET_PORT_BANW 21\r
-#define TRB_TYPE_FORCE_HEADER 22\r
-#define TRB_TYPE_NO_OP_COMMAND 23\r
-#define TRB_TYPE_TRANS_EVENT 32\r
-#define TRB_TYPE_COMMAND_COMPLT_EVENT 33\r
-#define TRB_TYPE_PORT_STATUS_CHANGE_EVENT 34\r
-#define TRB_TYPE_HOST_CONTROLLER_EVENT 37\r
-#define TRB_TYPE_DEVICE_NOTIFI_EVENT 38\r
-#define TRB_TYPE_MFINDEX_WRAP_EVENT 39\r
+#define TRB_TYPE_NORMAL 1\r
+#define TRB_TYPE_SETUP_STAGE 2\r
+#define TRB_TYPE_DATA_STAGE 3\r
+#define TRB_TYPE_STATUS_STAGE 4\r
+#define TRB_TYPE_ISOCH 5\r
+#define TRB_TYPE_LINK 6\r
+#define TRB_TYPE_EVENT_DATA 7\r
+#define TRB_TYPE_NO_OP 8\r
+#define TRB_TYPE_EN_SLOT 9\r
+#define TRB_TYPE_DIS_SLOT 10\r
+#define TRB_TYPE_ADDRESS_DEV 11\r
+#define TRB_TYPE_CON_ENDPOINT 12\r
+#define TRB_TYPE_EVALU_CONTXT 13\r
+#define TRB_TYPE_RESET_ENDPOINT 14\r
+#define TRB_TYPE_STOP_ENDPOINT 15\r
+#define TRB_TYPE_SET_TR_DEQUE 16\r
+#define TRB_TYPE_RESET_DEV 17\r
+#define TRB_TYPE_GET_PORT_BANW 21\r
+#define TRB_TYPE_FORCE_HEADER 22\r
+#define TRB_TYPE_NO_OP_COMMAND 23\r
+#define TRB_TYPE_TRANS_EVENT 32\r
+#define TRB_TYPE_COMMAND_COMPLT_EVENT 33\r
+#define TRB_TYPE_PORT_STATUS_CHANGE_EVENT 34\r
+#define TRB_TYPE_HOST_CONTROLLER_EVENT 37\r
+#define TRB_TYPE_DEVICE_NOTIFI_EVENT 38\r
+#define TRB_TYPE_MFINDEX_WRAP_EVENT 39\r
\r
//\r
// Convert millisecond to microsecond.\r
//\r
-#define XHC_1_MILLISECOND (1000)\r
-#define XHC_POLL_DELAY (1000)\r
-#define XHC_GENERIC_TIMEOUT (10 * 1000)\r
+#define XHC_1_MILLISECOND (1000)\r
+#define XHC_POLL_DELAY (1000)\r
+#define XHC_GENERIC_TIMEOUT (10 * 1000)\r
\r
-#define EFI_USB_SPEED_FULL 0x0000 ///< 12 Mb/s, USB 1.1 OHCI and UHCI HC.\r
-#define EFI_USB_SPEED_LOW 0x0001 ///< 1 Mb/s, USB 1.1 OHCI and UHCI HC.\r
-#define EFI_USB_SPEED_HIGH 0x0002 ///< 480 Mb/s, USB 2.0 EHCI HC.\r
-#define EFI_USB_SPEED_SUPER 0x0003 ///< 4.8 Gb/s, USB 3.0 XHCI HC.\r
+#define EFI_USB_SPEED_FULL 0x0000 ///< 12 Mb/s, USB 1.1 OHCI and UHCI HC.\r
+#define EFI_USB_SPEED_LOW 0x0001 ///< 1 Mb/s, USB 1.1 OHCI and UHCI HC.\r
+#define EFI_USB_SPEED_HIGH 0x0002 ///< 480 Mb/s, USB 2.0 EHCI HC.\r
+#define EFI_USB_SPEED_SUPER 0x0003 ///< 4.8 Gb/s, USB 3.0 XHCI HC.\r
\r
//\r
// Transfer types, used in URB to identify the transfer type\r
//\r
-#define XHC_CTRL_TRANSFER 0x01\r
-#define XHC_BULK_TRANSFER 0x02\r
-#define XHC_INT_TRANSFER_SYNC 0x04\r
-#define XHC_INT_TRANSFER_ASYNC 0x08\r
-#define XHC_INT_ONLY_TRANSFER_ASYNC 0x10\r
+#define XHC_CTRL_TRANSFER 0x01\r
+#define XHC_BULK_TRANSFER 0x02\r
+#define XHC_INT_TRANSFER_SYNC 0x04\r
+#define XHC_INT_TRANSFER_ASYNC 0x08\r
+#define XHC_INT_ONLY_TRANSFER_ASYNC 0x10\r
\r
//\r
// USB Transfer Results\r
//\r
-#define EFI_USB_NOERROR 0x00\r
-#define EFI_USB_ERR_NOTEXECUTE 0x01\r
-#define EFI_USB_ERR_STALL 0x02\r
-#define EFI_USB_ERR_BUFFER 0x04\r
-#define EFI_USB_ERR_BABBLE 0x08\r
-#define EFI_USB_ERR_NAK 0x10\r
-#define EFI_USB_ERR_CRC 0x20\r
-#define EFI_USB_ERR_TIMEOUT 0x40\r
-#define EFI_USB_ERR_BITSTUFF 0x80\r
-#define EFI_USB_ERR_SYSTEM 0x100\r
+#define EFI_USB_NOERROR 0x00\r
+#define EFI_USB_ERR_NOTEXECUTE 0x01\r
+#define EFI_USB_ERR_STALL 0x02\r
+#define EFI_USB_ERR_BUFFER 0x04\r
+#define EFI_USB_ERR_BABBLE 0x08\r
+#define EFI_USB_ERR_NAK 0x10\r
+#define EFI_USB_ERR_CRC 0x20\r
+#define EFI_USB_ERR_TIMEOUT 0x40\r
+#define EFI_USB_ERR_BITSTUFF 0x80\r
+#define EFI_USB_ERR_SYSTEM 0x100\r
\r
#pragma pack(1)\r
\r
// 7.6.9.2 When used by the DbC it is always a 64 byte data structure\r
//\r
typedef struct _ENDPOINT_CONTEXT_64 {\r
- UINT32 EPState:3;\r
- UINT32 RsvdZ1:5;\r
- UINT32 Mult:2; // set to 0\r
- UINT32 MaxPStreams:5; // set to 0\r
- UINT32 LSA:1; // set to 0\r
- UINT32 Interval:8; // set to 0\r
- UINT32 RsvdZ2:8;\r
-\r
- UINT32 RsvdZ3:1;\r
- UINT32 CErr:2;\r
- UINT32 EPType:3;\r
- UINT32 RsvdZ4:1;\r
- UINT32 HID:1; // set to 0\r
- UINT32 MaxBurstSize:8;\r
- UINT32 MaxPacketSize:16;\r
-\r
- UINT32 PtrLo;\r
-\r
- UINT32 PtrHi;\r
-\r
- UINT32 AverageTRBLength:16;\r
- UINT32 MaxESITPayload:16; // set to 0\r
-\r
- UINT32 RsvdZ5; // Reserved\r
- UINT32 RsvdZ6;\r
- UINT32 RsvdZ7;\r
-\r
- UINT32 RsvdZ8;\r
- UINT32 RsvdZ9;\r
- UINT32 RsvdZ10;\r
- UINT32 RsvdZ11;\r
-\r
- UINT32 RsvdZ12;\r
- UINT32 RsvdZ13;\r
- UINT32 RsvdZ14;\r
- UINT32 RsvdZ15;\r
+ UINT32 EPState : 3;\r
+ UINT32 RsvdZ1 : 5;\r
+ UINT32 Mult : 2; // set to 0\r
+ UINT32 MaxPStreams : 5; // set to 0\r
+ UINT32 LSA : 1; // set to 0\r
+ UINT32 Interval : 8; // set to 0\r
+ UINT32 RsvdZ2 : 8;\r
+\r
+ UINT32 RsvdZ3 : 1;\r
+ UINT32 CErr : 2;\r
+ UINT32 EPType : 3;\r
+ UINT32 RsvdZ4 : 1;\r
+ UINT32 HID : 1; // set to 0\r
+ UINT32 MaxBurstSize : 8;\r
+ UINT32 MaxPacketSize : 16;\r
+\r
+ UINT32 PtrLo;\r
+\r
+ UINT32 PtrHi;\r
+\r
+ UINT32 AverageTRBLength : 16;\r
+ UINT32 MaxESITPayload : 16; // set to 0\r
+\r
+ UINT32 RsvdZ5; // Reserved\r
+ UINT32 RsvdZ6;\r
+ UINT32 RsvdZ7;\r
+\r
+ UINT32 RsvdZ8;\r
+ UINT32 RsvdZ9;\r
+ UINT32 RsvdZ10;\r
+ UINT32 RsvdZ11;\r
+\r
+ UINT32 RsvdZ12;\r
+ UINT32 RsvdZ13;\r
+ UINT32 RsvdZ14;\r
+ UINT32 RsvdZ15;\r
} ENDPOINT_CONTEXT_64;\r
\r
//\r
// Rings, and to define the Data stage information for Control Transfer Rings.\r
//\r
typedef struct _TRANSFER_TRB_NORMAL {\r
- UINT32 TRBPtrLo;\r
-\r
- UINT32 TRBPtrHi;\r
-\r
- UINT32 Length:17;\r
- UINT32 TDSize:5;\r
- UINT32 IntTarget:10;\r
-\r
- UINT32 CycleBit:1;\r
- UINT32 ENT:1;\r
- UINT32 ISP:1;\r
- UINT32 NS:1;\r
- UINT32 CH:1;\r
- UINT32 IOC:1;\r
- UINT32 IDT:1;\r
- UINT32 RsvdZ1:2;\r
- UINT32 BEI:1;\r
- UINT32 Type:6;\r
- UINT32 RsvdZ2:16;\r
+ UINT32 TRBPtrLo;\r
+\r
+ UINT32 TRBPtrHi;\r
+\r
+ UINT32 Length : 17;\r
+ UINT32 TDSize : 5;\r
+ UINT32 IntTarget : 10;\r
+\r
+ UINT32 CycleBit : 1;\r
+ UINT32 ENT : 1;\r
+ UINT32 ISP : 1;\r
+ UINT32 NS : 1;\r
+ UINT32 CH : 1;\r
+ UINT32 IOC : 1;\r
+ UINT32 IDT : 1;\r
+ UINT32 RsvdZ1 : 2;\r
+ UINT32 BEI : 1;\r
+ UINT32 Type : 6;\r
+ UINT32 RsvdZ2 : 16;\r
} TRANSFER_TRB_NORMAL;\r
\r
//\r
// for more information on the use and operation of Transfer Events.\r
//\r
typedef struct _EVT_TRB_TRANSFER {\r
- UINT32 TRBPtrLo;\r
+ UINT32 TRBPtrLo;\r
\r
- UINT32 TRBPtrHi;\r
+ UINT32 TRBPtrHi;\r
\r
- UINT32 Length:24;\r
- UINT32 Completecode:8;\r
+ UINT32 Length : 24;\r
+ UINT32 Completecode : 8;\r
\r
- UINT32 CycleBit:1;\r
- UINT32 RsvdZ1:1;\r
- UINT32 ED:1;\r
- UINT32 RsvdZ2:7;\r
- UINT32 Type:6;\r
- UINT32 EndpointId:5;\r
- UINT32 RsvdZ3:3;\r
- UINT32 SlotId:8;\r
+ UINT32 CycleBit : 1;\r
+ UINT32 RsvdZ1 : 1;\r
+ UINT32 ED : 1;\r
+ UINT32 RsvdZ2 : 7;\r
+ UINT32 Type : 6;\r
+ UINT32 EndpointId : 5;\r
+ UINT32 RsvdZ3 : 3;\r
+ UINT32 SlotId : 8;\r
} EVT_TRB_TRANSFER;\r
\r
//\r
// A Link TRB provides support for non-contiguous TRB Rings.\r
//\r
typedef struct _LINK_TRB {\r
- UINT32 PtrLo;\r
+ UINT32 PtrLo;\r
\r
- UINT32 PtrHi;\r
+ UINT32 PtrHi;\r
\r
- UINT32 RsvdZ1:22;\r
- UINT32 InterTarget:10;\r
+ UINT32 RsvdZ1 : 22;\r
+ UINT32 InterTarget : 10;\r
\r
- UINT32 CycleBit:1;\r
- UINT32 TC:1;\r
- UINT32 RsvdZ2:2;\r
- UINT32 CH:1;\r
- UINT32 IOC:1;\r
- UINT32 RsvdZ3:4;\r
- UINT32 Type:6;\r
- UINT32 RsvdZ4:16;\r
+ UINT32 CycleBit : 1;\r
+ UINT32 TC : 1;\r
+ UINT32 RsvdZ2 : 2;\r
+ UINT32 CH : 1;\r
+ UINT32 IOC : 1;\r
+ UINT32 RsvdZ3 : 4;\r
+ UINT32 Type : 6;\r
+ UINT32 RsvdZ4 : 16;\r
} LINK_TRB;\r
\r
//\r
// TRB Template: 16 bytes\r
//\r
typedef struct _TRB_TEMPLATE {\r
- UINT32 Parameter1;\r
+ UINT32 Parameter1;\r
\r
- UINT32 Parameter2;\r
+ UINT32 Parameter2;\r
\r
- UINT32 Status;\r
+ UINT32 Status;\r
\r
- UINT32 CycleBit:1;\r
- UINT32 RsvdZ1:9;\r
- UINT32 Type:6;\r
- UINT32 Control:16;\r
+ UINT32 CycleBit : 1;\r
+ UINT32 RsvdZ1 : 9;\r
+ UINT32 Type : 6;\r
+ UINT32 Control : 16;\r
} TRB_TEMPLATE;\r
\r
//\r
// Refer to XHCI 6.5 Event Ring Segment Table: 16 bytes\r
//\r
typedef struct _EVENT_RING_SEG_TABLE_ENTRY {\r
- UINT32 PtrLo;\r
- UINT32 PtrHi;\r
- UINT32 RingTrbSize:16;\r
- UINT32 RsvdZ1:16;\r
- UINT32 RsvdZ2;\r
+ UINT32 PtrLo;\r
+ UINT32 PtrHi;\r
+ UINT32 RingTrbSize : 16;\r
+ UINT32 RsvdZ1 : 16;\r
+ UINT32 RsvdZ2;\r
} EVENT_RING_SEG_TABLE_ENTRY;\r
\r
//\r
// Size: 40 bytes\r
//\r
typedef struct _EVENT_RING {\r
- EFI_PHYSICAL_ADDRESS ERSTBase;\r
- EFI_PHYSICAL_ADDRESS EventRingSeg0;\r
- UINT32 TrbNumber;\r
- EFI_PHYSICAL_ADDRESS EventRingEnqueue;\r
- EFI_PHYSICAL_ADDRESS EventRingDequeue;\r
- UINT32 EventRingCCS;\r
+ EFI_PHYSICAL_ADDRESS ERSTBase;\r
+ EFI_PHYSICAL_ADDRESS EventRingSeg0;\r
+ UINT32 TrbNumber;\r
+ EFI_PHYSICAL_ADDRESS EventRingEnqueue;\r
+ EFI_PHYSICAL_ADDRESS EventRingDequeue;\r
+ UINT32 EventRingCCS;\r
} EVENT_RING;\r
\r
// Size: 32 bytes\r
typedef struct _TRANSFER_RING {\r
- EFI_PHYSICAL_ADDRESS RingSeg0;\r
- UINT32 TrbNumber;\r
- EFI_PHYSICAL_ADDRESS RingEnqueue;\r
- EFI_PHYSICAL_ADDRESS RingDequeue;\r
- UINT32 RingPCS;\r
+ EFI_PHYSICAL_ADDRESS RingSeg0;\r
+ UINT32 TrbNumber;\r
+ EFI_PHYSICAL_ADDRESS RingEnqueue;\r
+ EFI_PHYSICAL_ADDRESS RingDequeue;\r
+ UINT32 RingPCS;\r
} TRANSFER_RING;\r
\r
//\r
// Size: 64 bytes\r
//\r
typedef struct _DBC_INFO_CONTEXT {\r
- UINT64 String0DescAddress;\r
- UINT64 ManufacturerStrDescAddress;\r
- UINT64 ProductStrDescAddress;\r
- UINT64 SerialNumberStrDescAddress;\r
- UINT64 String0Length:8;\r
- UINT64 ManufacturerStrLength:8;\r
- UINT64 ProductStrLength:8;\r
- UINT64 SerialNumberStrLength:8;\r
- UINT64 RsvdZ1:32;\r
- UINT64 RsvdZ2;\r
- UINT64 RsvdZ3;\r
- UINT64 RsvdZ4;\r
+ UINT64 String0DescAddress;\r
+ UINT64 ManufacturerStrDescAddress;\r
+ UINT64 ProductStrDescAddress;\r
+ UINT64 SerialNumberStrDescAddress;\r
+ UINT64 String0Length : 8;\r
+ UINT64 ManufacturerStrLength : 8;\r
+ UINT64 ProductStrLength : 8;\r
+ UINT64 SerialNumberStrLength : 8;\r
+ UINT64 RsvdZ1 : 32;\r
+ UINT64 RsvdZ2;\r
+ UINT64 RsvdZ3;\r
+ UINT64 RsvdZ4;\r
} DBC_INFO_CONTEXT;\r
\r
//\r
// Debug Capability Context Data Structure: 192 bytes\r
//\r
typedef struct _XHC_DC_CONTEXT {\r
- DBC_INFO_CONTEXT DbcInfoContext;\r
- ENDPOINT_CONTEXT_64 EpOutContext;\r
- ENDPOINT_CONTEXT_64 EpInContext;\r
+ DBC_INFO_CONTEXT DbcInfoContext;\r
+ ENDPOINT_CONTEXT_64 EpOutContext;\r
+ ENDPOINT_CONTEXT_64 EpInContext;\r
} XHC_DC_CONTEXT;\r
\r
//\r
// Size: 16 bytes\r
//\r
typedef union _TRB {\r
- TRB_TEMPLATE TrbTemplate;\r
- TRANSFER_TRB_NORMAL TrbNormal;\r
+ TRB_TEMPLATE TrbTemplate;\r
+ TRANSFER_TRB_NORMAL TrbNormal;\r
} TRB;\r
\r
///\r
//\r
// Transfer data buffer\r
//\r
- EFI_PHYSICAL_ADDRESS Data;\r
- UINT32 DataLen;\r
+ EFI_PHYSICAL_ADDRESS Data;\r
+ UINT32 DataLen;\r
\r
//\r
// Execute result\r
//\r
- UINT32 Result;\r
+ UINT32 Result;\r
//\r
// Completed data length\r
//\r
- UINT32 Completed;\r
+ UINT32 Completed;\r
//\r
// Tranfer Ring info\r
//\r
- EFI_PHYSICAL_ADDRESS Ring;\r
- EFI_PHYSICAL_ADDRESS Trb;\r
- BOOLEAN Finished;\r
- EFI_USB_DATA_DIRECTION Direction;\r
+ EFI_PHYSICAL_ADDRESS Ring;\r
+ EFI_PHYSICAL_ADDRESS Trb;\r
+ BOOLEAN Finished;\r
+ EFI_USB_DATA_DIRECTION Direction;\r
} URB;\r
\r
typedef struct _USB3_DEBUG_PORT_INSTANCE {\r
- UINT8 Initialized;\r
+ UINT8 Initialized;\r
\r
//\r
// The flag indicates debug capability is supported\r
//\r
- BOOLEAN DebugSupport;\r
+ BOOLEAN DebugSupport;\r
\r
//\r
// The flag indicates debug device is ready\r
//\r
- BOOLEAN Ready;\r
+ BOOLEAN Ready;\r
\r
//\r
// The flag indicates the instance is from HOB\r
//\r
- BOOLEAN FromHob;\r
+ BOOLEAN FromHob;\r
\r
//\r
// Prevent notification being interrupted by debug timer\r
//\r
- BOOLEAN InNotify;\r
+ BOOLEAN InNotify;\r
\r
//\r
// PciIo protocol event\r
//\r
- EFI_PHYSICAL_ADDRESS PciIoEvent;\r
+ EFI_PHYSICAL_ADDRESS PciIoEvent;\r
\r
//\r
// The flag indicates if USB 3.0 ports has been turn off/on power\r
//\r
- BOOLEAN ChangePortPower;\r
+ BOOLEAN ChangePortPower;\r
\r
//\r
// XHCI MMIO Base address\r
//\r
- EFI_PHYSICAL_ADDRESS XhciMmioBase;\r
+ EFI_PHYSICAL_ADDRESS XhciMmioBase;\r
\r
//\r
// XHCI OP RegisterBase address\r
//\r
- EFI_PHYSICAL_ADDRESS XhciOpRegister;\r
+ EFI_PHYSICAL_ADDRESS XhciOpRegister;\r
\r
//\r
// XHCI Debug Register Base Address\r
//\r
- EFI_PHYSICAL_ADDRESS DebugCapabilityBase;\r
+ EFI_PHYSICAL_ADDRESS DebugCapabilityBase;\r
\r
//\r
// XHCI Debug Capability offset\r
//\r
- UINT64 DebugCapabilityOffset;\r
+ UINT64 DebugCapabilityOffset;\r
\r
//\r
// XHCI Debug Context Address\r
//\r
- EFI_PHYSICAL_ADDRESS DebugCapabilityContext;\r
+ EFI_PHYSICAL_ADDRESS DebugCapabilityContext;\r
\r
//\r
// Transfer Ring\r
//\r
- TRANSFER_RING TransferRingOut;\r
- TRANSFER_RING TransferRingIn;\r
+ TRANSFER_RING TransferRingOut;\r
+ TRANSFER_RING TransferRingIn;\r
\r
//\r
// EventRing\r
//\r
- EVENT_RING EventRing;\r
+ EVENT_RING EventRing;\r
\r
//\r
// URB - Read\r
//\r
- URB UrbOut;\r
+ URB UrbOut;\r
\r
//\r
// URB - Write\r
//\r
- URB UrbIn;\r
+ URB UrbIn;\r
\r
//\r
// The available data length in the following data buffer.\r
//\r
- UINT8 DataCount;\r
+ UINT8 DataCount;\r
//\r
// The data buffer address for data read and poll.\r
//\r
- EFI_PHYSICAL_ADDRESS Data;\r
+ EFI_PHYSICAL_ADDRESS Data;\r
} USB3_DEBUG_PORT_HANDLE;\r
\r
#pragma pack()\r
**/\r
UINT32\r
XhcReadDebugReg (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN UINT32 Offset\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN UINT32 Offset\r
);\r
\r
/**\r
**/\r
VOID\r
XhcWriteDebugReg (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN UINT32 Offset,\r
- IN UINT32 Data\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN UINT32 Offset,\r
+ IN UINT32 Data\r
);\r
\r
/**\r
is not enabled.\r
**/\r
BOOLEAN\r
-XhcIsBitSet(\r
+XhcIsBitSet (\r
UINTN Register,\r
UINT32 BitMask\r
);\r
@param[in] BitMask 32-bit mask\r
**/\r
VOID\r
-XhcSetR32Bit(\r
+XhcSetR32Bit (\r
UINTN Register,\r
UINT32 BitMask\r
);\r
@param[in] BitMask 32-bit mask\r
**/\r
VOID\r
-XhcClearR32Bit(\r
- IN OUT UINTN Register,\r
- IN UINT32 BitMask\r
+XhcClearR32Bit (\r
+ IN OUT UINTN Register,\r
+ IN UINT32 BitMask\r
);\r
\r
/**\r
@return A pointer to the allocated buffer or NULL if allocation fails.\r
\r
**/\r
-VOID*\r
+VOID *\r
AllocateAlignBuffer (\r
- IN UINTN BufferSize\r
+ IN UINTN BufferSize\r
);\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
XhcDataTransfer (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN EFI_USB_DATA_DIRECTION Direction,\r
- IN OUT VOID *Data,\r
- IN OUT UINTN *DataLength,\r
- IN UINTN Timeout\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN EFI_USB_DATA_DIRECTION Direction,\r
+ IN OUT VOID *Data,\r
+ IN OUT UINTN *DataLength,\r
+ IN UINTN Timeout\r
);\r
\r
/**\r
RETURN_STATUS\r
EFIAPI\r
InitializeUsbDebugHardware (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle\r
);\r
\r
/**\r
#include <Ppi/IoMmu.h>\r
#include "DebugCommunicationLibUsb3Internal.h"\r
\r
-GUID gUsb3DbgGuid = USB3_DBG_GUID;\r
+GUID gUsb3DbgGuid = USB3_DBG_GUID;\r
\r
/**\r
USB3 IOMMU PPI notify.\r
IN VOID *Ppi\r
)\r
{\r
- USB3_DEBUG_PORT_HANDLE *Instance;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
\r
DEBUG ((DEBUG_INFO, "%a()\n", __FUNCTION__));\r
\r
return EFI_SUCCESS;\r
}\r
\r
-EFI_PEI_NOTIFY_DESCRIPTOR mUsb3IoMmuPpiNotifyDesc = {\r
+EFI_PEI_NOTIFY_DESCRIPTOR mUsb3IoMmuPpiNotifyDesc = {\r
(EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
&gEdkiiIoMmuPpiGuid,\r
Usb3IoMmuPpiNotify\r
OUT VOID **Mapping\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN NumberOfBytes;\r
+ EFI_STATUS Status;\r
+ UINTN NumberOfBytes;\r
\r
- *HostAddress = NULL;\r
+ *HostAddress = NULL;\r
*DeviceAddress = 0;\r
- *Mapping = NULL;\r
+ *Mapping = NULL;\r
\r
Status = IoMmu->AllocateBuffer (\r
IoMmu,\r
}\r
\r
NumberOfBytes = EFI_PAGES_TO_SIZE (Pages);\r
- Status = IoMmu->Map (\r
- IoMmu,\r
- EdkiiIoMmuOperationBusMasterCommonBuffer,\r
- *HostAddress,\r
- &NumberOfBytes,\r
- DeviceAddress,\r
- Mapping\r
- );\r
+ Status = IoMmu->Map (\r
+ IoMmu,\r
+ EdkiiIoMmuOperationBusMasterCommonBuffer,\r
+ *HostAddress,\r
+ &NumberOfBytes,\r
+ DeviceAddress,\r
+ Mapping\r
+ );\r
if (EFI_ERROR (Status)) {\r
IoMmu->FreeBuffer (IoMmu, Pages, *HostAddress);\r
*HostAddress = NULL;\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
Status = IoMmu->SetAttribute (\r
IoMmu,\r
*Mapping,\r
if (EFI_ERROR (Status)) {\r
IoMmu->Unmap (IoMmu, *Mapping);\r
IoMmu->FreeBuffer (IoMmu, Pages, *HostAddress);\r
- *Mapping = NULL;\r
+ *Mapping = NULL;\r
*HostAddress = NULL;\r
return Status;\r
}\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- EDKII_IOMMU_PPI *IoMmu;\r
+ EFI_STATUS Status;\r
+ EDKII_IOMMU_PPI *IoMmu;\r
\r
- IoMmu = NULL;\r
+ IoMmu = NULL;\r
Status = PeiServicesLocatePpi (\r
&gEdkiiIoMmuPpiGuid,\r
0,\r
NULL,\r
- (VOID **) &IoMmu\r
+ (VOID **)&IoMmu\r
);\r
if (!EFI_ERROR (Status) && (IoMmu != NULL)) {\r
return IoMmu;\r
VOID\r
)\r
{\r
- USB3_DEBUG_PORT_HANDLE *Instance;\r
- EFI_PHYSICAL_ADDRESS *AddrPtr;\r
- EFI_PEI_HOB_POINTERS Hob;\r
- EFI_STATUS Status;\r
+ USB3_DEBUG_PORT_HANDLE *Instance;\r
+ EFI_PHYSICAL_ADDRESS *AddrPtr;\r
+ EFI_PEI_HOB_POINTERS Hob;\r
+ EFI_STATUS Status;\r
\r
Hob.Raw = GetFirstGuidHob (&gUsb3DbgGuid);\r
if (Hob.Raw == NULL) {\r
);\r
ASSERT (AddrPtr != NULL);\r
ZeroMem (AddrPtr, sizeof (EFI_PHYSICAL_ADDRESS) + sizeof (USB3_DEBUG_PORT_HANDLE));\r
- Instance = (USB3_DEBUG_PORT_HANDLE *) (AddrPtr + 1);\r
- *AddrPtr = (EFI_PHYSICAL_ADDRESS) (UINTN) Instance;\r
- Instance->FromHob = TRUE;\r
+ Instance = (USB3_DEBUG_PORT_HANDLE *)(AddrPtr + 1);\r
+ *AddrPtr = (EFI_PHYSICAL_ADDRESS)(UINTN)Instance;\r
+ Instance->FromHob = TRUE;\r
Instance->Initialized = USB3DBG_UNINITIALIZED;\r
if (Usb3GetIoMmu () == NULL) {\r
Status = PeiServicesNotifyPpi (&mUsb3IoMmuPpiNotifyDesc);\r
@return A pointer to the allocated buffer or NULL if allocation fails.\r
\r
**/\r
-VOID*\r
+VOID *\r
AllocateAlignBuffer (\r
- IN UINTN BufferSize\r
+ IN UINTN BufferSize\r
)\r
{\r
- VOID *Buf;\r
- EFI_PHYSICAL_ADDRESS Address;\r
- EFI_STATUS Status;\r
- VOID *MemoryDiscoveredPpi;\r
- EDKII_IOMMU_PPI *IoMmu;\r
- VOID *HostAddress;\r
- VOID *Mapping;\r
+ VOID *Buf;\r
+ EFI_PHYSICAL_ADDRESS Address;\r
+ EFI_STATUS Status;\r
+ VOID *MemoryDiscoveredPpi;\r
+ EDKII_IOMMU_PPI *IoMmu;\r
+ VOID *HostAddress;\r
+ VOID *Mapping;\r
\r
Buf = NULL;\r
\r
&gEfiPeiMemoryDiscoveredPpiGuid,\r
0,\r
NULL,\r
- (VOID **) &MemoryDiscoveredPpi\r
+ (VOID **)&MemoryDiscoveredPpi\r
);\r
if (!EFI_ERROR (Status)) {\r
IoMmu = Usb3GetIoMmu ();\r
&Mapping\r
);\r
if (!EFI_ERROR (Status)) {\r
- ASSERT (Address == ((EFI_PHYSICAL_ADDRESS) (UINTN) HostAddress));\r
- Buf = (VOID *)(UINTN) Address;\r
+ ASSERT (Address == ((EFI_PHYSICAL_ADDRESS)(UINTN)HostAddress));\r
+ Buf = (VOID *)(UINTN)Address;\r
}\r
} else {\r
Status = PeiServicesAllocatePages (\r
&Address\r
);\r
if (!EFI_ERROR (Status)) {\r
- Buf = (VOID *)(UINTN) Address;\r
+ Buf = (VOID *)(UINTN)Address;\r
}\r
}\r
}\r
+\r
return Buf;\r
}\r
-\r
EFI_STATUS\r
EFIAPI\r
XhcSyncTrsRing (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN TRANSFER_RING *TrsRing\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN TRANSFER_RING *TrsRing\r
)\r
{\r
- UINTN Index;\r
- TRB_TEMPLATE *TrsTrb;\r
- UINT32 CycleBit;\r
+ UINTN Index;\r
+ TRB_TEMPLATE *TrsTrb;\r
+ UINT32 CycleBit;\r
\r
ASSERT (TrsRing != NULL);\r
\r
//\r
// Calculate the latest RingEnqueue and RingPCS\r
//\r
- TrsTrb = (TRB_TEMPLATE *)(UINTN) TrsRing->RingEnqueue;\r
+ TrsTrb = (TRB_TEMPLATE *)(UINTN)TrsRing->RingEnqueue;\r
\r
ASSERT (TrsTrb != NULL);\r
\r
if (TrsTrb->CycleBit != (TrsRing->RingPCS & BIT0)) {\r
break;\r
}\r
+\r
TrsTrb++;\r
- if ((UINT8) TrsTrb->Type == TRB_TYPE_LINK) {\r
- ASSERT (((LINK_TRB*)TrsTrb)->TC != 0);\r
+ if ((UINT8)TrsTrb->Type == TRB_TYPE_LINK) {\r
+ ASSERT (((LINK_TRB *)TrsTrb)->TC != 0);\r
//\r
// set cycle bit in Link TRB as normal\r
//\r
- ((LINK_TRB*)TrsTrb)->CycleBit = TrsRing->RingPCS & BIT0;\r
+ ((LINK_TRB *)TrsTrb)->CycleBit = TrsRing->RingPCS & BIT0;\r
//\r
// Toggle PCS maintained by software\r
//\r
TrsTrb = (TRB_TEMPLATE *)(UINTN)((TrsTrb->Parameter1 | LShiftU64 ((UINT64)TrsTrb->Parameter2, 32)) & ~0x0F);\r
}\r
}\r
+\r
ASSERT (Index != TrsRing->TrbNumber);\r
\r
- if ((EFI_PHYSICAL_ADDRESS)(UINTN) TrsTrb != TrsRing->RingEnqueue) {\r
- TrsRing->RingEnqueue = (EFI_PHYSICAL_ADDRESS)(UINTN) TrsTrb;\r
+ if ((EFI_PHYSICAL_ADDRESS)(UINTN)TrsTrb != TrsRing->RingEnqueue) {\r
+ TrsRing->RingEnqueue = (EFI_PHYSICAL_ADDRESS)(UINTN)TrsTrb;\r
}\r
\r
//\r
EFIAPI\r
XhcSyncEventRing (\r
IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN EVENT_RING *EvtRing\r
+ IN EVENT_RING *EvtRing\r
)\r
{\r
- UINTN Index;\r
- TRB_TEMPLATE *EvtTrb1;\r
+ UINTN Index;\r
+ TRB_TEMPLATE *EvtTrb1;\r
\r
ASSERT (EvtRing != NULL);\r
\r
// Calculate the EventRingEnqueue and EventRingCCS.\r
// Note: only support single Segment\r
//\r
- EvtTrb1 = (TRB_TEMPLATE *)(UINTN) EvtRing->EventRingDequeue;\r
+ EvtTrb1 = (TRB_TEMPLATE *)(UINTN)EvtRing->EventRingDequeue;\r
\r
for (Index = 0; Index < EvtRing->TrbNumber; Index++) {\r
if (EvtTrb1->CycleBit != EvtRing->EventRingCCS) {\r
\r
EvtTrb1++;\r
\r
- if ((UINTN)EvtTrb1 >= ((UINTN) EvtRing->EventRingSeg0 + sizeof (TRB_TEMPLATE) * EvtRing->TrbNumber)) {\r
- EvtTrb1 = (TRB_TEMPLATE *)(UINTN) EvtRing->EventRingSeg0;\r
+ if ((UINTN)EvtTrb1 >= ((UINTN)EvtRing->EventRingSeg0 + sizeof (TRB_TEMPLATE) * EvtRing->TrbNumber)) {\r
+ EvtTrb1 = (TRB_TEMPLATE *)(UINTN)EvtRing->EventRingSeg0;\r
EvtRing->EventRingCCS = (EvtRing->EventRingCCS) ? 0 : 1;\r
}\r
}\r
EFI_STATUS\r
EFIAPI\r
XhcCheckNewEvent (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN EVENT_RING *EvtRing,\r
- OUT TRB_TEMPLATE **NewEvtTrb\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN EVENT_RING *EvtRing,\r
+ OUT TRB_TEMPLATE **NewEvtTrb\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
\r
ASSERT (EvtRing != NULL);\r
\r
- *NewEvtTrb = (TRB_TEMPLATE *)(UINTN) EvtRing->EventRingDequeue;\r
+ *NewEvtTrb = (TRB_TEMPLATE *)(UINTN)EvtRing->EventRingDequeue;\r
\r
if (EvtRing->EventRingDequeue == EvtRing->EventRingEnqueue) {\r
return EFI_NOT_READY;\r
//\r
// If the dequeue pointer is beyond the ring, then roll-back it to the beginning of the ring.\r
//\r
- if ((UINTN)EvtRing->EventRingDequeue >= ((UINTN) EvtRing->EventRingSeg0 + sizeof (TRB_TEMPLATE) * EvtRing->TrbNumber)) {\r
+ if ((UINTN)EvtRing->EventRingDequeue >= ((UINTN)EvtRing->EventRingSeg0 + sizeof (TRB_TEMPLATE) * EvtRing->TrbNumber)) {\r
EvtRing->EventRingDequeue = EvtRing->EventRingSeg0;\r
}\r
\r
**/\r
BOOLEAN\r
IsTrbInTrsRing (\r
- IN TRANSFER_RING *Ring,\r
- IN TRB_TEMPLATE *Trb\r
+ IN TRANSFER_RING *Ring,\r
+ IN TRB_TEMPLATE *Trb\r
)\r
{\r
TRB_TEMPLATE *CheckedTrb;\r
UINTN Index;\r
\r
- CheckedTrb = (TRB_TEMPLATE *)(UINTN) Ring->RingSeg0;\r
+ CheckedTrb = (TRB_TEMPLATE *)(UINTN)Ring->RingSeg0;\r
\r
ASSERT (Ring->TrbNumber == TR_RING_TRB_NUMBER);\r
\r
if (Trb == CheckedTrb) {\r
return TRUE;\r
}\r
+\r
CheckedTrb++;\r
}\r
\r
**/\r
VOID\r
XhcCheckUrbResult (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN URB *Urb\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN URB *Urb\r
)\r
{\r
- EVT_TRB_TRANSFER *EvtTrb;\r
- TRB_TEMPLATE *TRBPtr;\r
- UINTN Index;\r
- EFI_STATUS Status;\r
- URB *CheckedUrb;\r
- UINT64 XhcDequeue;\r
- UINT32 High;\r
- UINT32 Low;\r
+ EVT_TRB_TRANSFER *EvtTrb;\r
+ TRB_TEMPLATE *TRBPtr;\r
+ UINTN Index;\r
+ EFI_STATUS Status;\r
+ URB *CheckedUrb;\r
+ UINT64 XhcDequeue;\r
+ UINT32 High;\r
+ UINT32 Low;\r
\r
ASSERT ((Handle != NULL) && (Urb != NULL));\r
\r
XhcSyncEventRing (Handle, &Handle->EventRing);\r
\r
for (Index = 0; Index < Handle->EventRing.TrbNumber; Index++) {\r
-\r
Status = XhcCheckNewEvent (Handle, &Handle->EventRing, ((TRB_TEMPLATE **)&EvtTrb));\r
if (Status == EFI_NOT_READY) {\r
//\r
continue;\r
}\r
\r
- TRBPtr = (TRB_TEMPLATE *)(UINTN)(EvtTrb->TRBPtrLo | LShiftU64 ((UINT64) EvtTrb->TRBPtrHi, 32));\r
+ TRBPtr = (TRB_TEMPLATE *)(UINTN)(EvtTrb->TRBPtrLo | LShiftU64 ((UINT64)EvtTrb->TRBPtrHi, 32));\r
\r
if (IsTrbInTrsRing ((TRANSFER_RING *)(UINTN)(Urb->Ring), TRBPtr)) {\r
CheckedUrb = Urb;\r
// If it is read event and it should be generated by poll, and current operation is write, we need save data into internal buffer.\r
// Internal buffer is used by next read.\r
//\r
- Handle->DataCount = (UINT8) (Handle->UrbIn.DataLen - EvtTrb->Length);\r
+ Handle->DataCount = (UINT8)(Handle->UrbIn.DataLen - EvtTrb->Length);\r
CopyMem ((VOID *)(UINTN)Handle->Data, (VOID *)(UINTN)Handle->UrbIn.Data, Handle->DataCount);\r
//\r
// Fill this TRB complete with CycleBit, otherwise next read will fail with old TRB.\r
}\r
\r
if ((EvtTrb->Completecode == TRB_COMPLETION_SHORT_PACKET) ||\r
- (EvtTrb->Completecode == TRB_COMPLETION_SUCCESS)) {\r
+ (EvtTrb->Completecode == TRB_COMPLETION_SUCCESS))\r
+ {\r
//\r
// The length of data which were transferred.\r
//\r
- CheckedUrb->Completed += (((TRANSFER_TRB_NORMAL*)TRBPtr)->Length - EvtTrb->Length);\r
+ CheckedUrb->Completed += (((TRANSFER_TRB_NORMAL *)TRBPtr)->Length - EvtTrb->Length);\r
} else {\r
- CheckedUrb->Result |= EFI_USB_ERR_TIMEOUT;\r
+ CheckedUrb->Result |= EFI_USB_ERR_TIMEOUT;\r
}\r
+\r
//\r
// This Urb has been processed\r
//\r
// Some 3rd party XHCI external cards don't support single 64-bytes width register access,\r
// So divide it to two 32-bytes width register access.\r
//\r
- Low = XhcReadDebugReg (Handle, XHC_DC_DCERDP);\r
- High = XhcReadDebugReg (Handle, XHC_DC_DCERDP + 4);\r
- XhcDequeue = (UINT64)(LShiftU64((UINT64)High, 32) | Low);\r
+ Low = XhcReadDebugReg (Handle, XHC_DC_DCERDP);\r
+ High = XhcReadDebugReg (Handle, XHC_DC_DCERDP + 4);\r
+ XhcDequeue = (UINT64)(LShiftU64 ((UINT64)High, 32) | Low);\r
\r
if ((XhcDequeue & (~0x0F)) != ((UINT64)(UINTN)Handle->EventRing.EventRingDequeue & (~0x0F))) {\r
//\r
EFI_STATUS\r
EFIAPI\r
XhcRingDoorBell (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN URB *Urb\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN URB *Urb\r
)\r
{\r
- UINT32 Dcdb;\r
+ UINT32 Dcdb;\r
\r
//\r
// 7.6.8.2 DCDB Register\r
**/\r
VOID\r
XhcExecTransfer (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN URB *Urb,\r
- IN UINTN Timeout\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN URB *Urb,\r
+ IN UINTN Timeout\r
)\r
{\r
- TRANSFER_RING *Ring;\r
- TRB_TEMPLATE *Trb;\r
- UINTN Loop;\r
- UINTN Index;\r
+ TRANSFER_RING *Ring;\r
+ TRB_TEMPLATE *Trb;\r
+ UINTN Loop;\r
+ UINTN Index;\r
\r
Loop = Timeout / XHC_DEBUG_PORT_1_MILLISECOND;\r
if (Timeout == 0) {\r
Loop = 0xFFFFFFFF;\r
}\r
+\r
XhcRingDoorBell (Handle, Urb);\r
//\r
// Event Ring Not Empty bit can only be set to 1 by XHC after ringing door bell with some delay.\r
if (Urb->Finished) {\r
break;\r
}\r
+\r
MicroSecondDelay (XHC_DEBUG_PORT_1_MILLISECOND);\r
}\r
+\r
if (Index == Loop) {\r
//\r
// If time out occurs.\r
//\r
Urb->Result |= EFI_USB_ERR_TIMEOUT;\r
}\r
+\r
//\r
// If URB transfer is error, restore transfer ring to original value before URB transfer\r
// This will make the current transfer TRB is always at the latest unused one in transfer ring.\r
//\r
- Ring = (TRANSFER_RING *)(UINTN) Urb->Ring;\r
+ Ring = (TRANSFER_RING *)(UINTN)Urb->Ring;\r
if ((Urb->Result != EFI_USB_NOERROR) && (Urb->Direction == EfiUsbDataIn)) {\r
//\r
// Adjust Enqueue pointer\r
//\r
// Clear CCS flag for next use\r
//\r
- Trb = (TRB_TEMPLATE *)(UINTN) Urb->Trb;\r
+ Trb = (TRB_TEMPLATE *)(UINTN)Urb->Trb;\r
Trb->CycleBit = ((~Ring->RingPCS) & BIT0);\r
} else {\r
//\r
**/\r
EFI_STATUS\r
XhcCreateTransferTrb (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN URB *Urb\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN URB *Urb\r
)\r
{\r
- TRANSFER_RING *EPRing;\r
- TRB *Trb;\r
+ TRANSFER_RING *EPRing;\r
+ TRB *Trb;\r
\r
if (Urb->Direction == EfiUsbDataIn) {\r
EPRing = &Handle->TransferRingIn;\r
EPRing = &Handle->TransferRingOut;\r
}\r
\r
- Urb->Ring = (EFI_PHYSICAL_ADDRESS)(UINTN) EPRing;\r
+ Urb->Ring = (EFI_PHYSICAL_ADDRESS)(UINTN)EPRing;\r
XhcSyncTrsRing (Handle, EPRing);\r
\r
- Urb->Trb = EPRing->RingEnqueue;\r
- Trb = (TRB *)(UINTN)EPRing->RingEnqueue;\r
+ Urb->Trb = EPRing->RingEnqueue;\r
+ Trb = (TRB *)(UINTN)EPRing->RingEnqueue;\r
Trb->TrbNormal.TRBPtrLo = XHC_LOW_32BIT (Urb->Data);\r
Trb->TrbNormal.TRBPtrHi = XHC_HIGH_32BIT (Urb->Data);\r
Trb->TrbNormal.Length = Urb->DataLen;\r
@return Created URB or NULL\r
\r
**/\r
-URB*\r
+URB *\r
XhcCreateUrb (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN EFI_USB_DATA_DIRECTION Direction,\r
- IN VOID *Data,\r
- IN UINTN DataLen\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN EFI_USB_DATA_DIRECTION Direction,\r
+ IN VOID *Data,\r
+ IN UINTN DataLen\r
)\r
{\r
- EFI_STATUS Status;\r
- URB *Urb;\r
- EFI_PHYSICAL_ADDRESS UrbData;\r
+ EFI_STATUS Status;\r
+ URB *Urb;\r
+ EFI_PHYSICAL_ADDRESS UrbData;\r
\r
if (Direction == EfiUsbDataIn) {\r
Urb = &Handle->UrbIn;\r
Urb = &Handle->UrbOut;\r
}\r
\r
- UrbData = Urb->Data;\r
+ UrbData = Urb->Data;\r
\r
ZeroMem (Urb, sizeof (URB));\r
Urb->Direction = Direction;\r
// to make XHCI DMA successfully\r
// re-use the pre-allocate buffer in PEI to avoid DXE memory service or gBS are not ready\r
//\r
- Urb->Data = UrbData;\r
+ Urb->Data = UrbData;\r
\r
if (Direction == EfiUsbDataIn) {\r
//\r
// Do not break URB data in buffer as it may contain the data which were just put in via DMA by XHC\r
//\r
- Urb->DataLen = (UINT32) DataLen;\r
+ Urb->DataLen = (UINT32)DataLen;\r
} else {\r
//\r
// Put data into URB data out buffer which will create TRBs\r
//\r
- ZeroMem ((VOID*)(UINTN) Urb->Data, DataLen);\r
- CopyMem ((VOID*)(UINTN) Urb->Data, Data, DataLen);\r
- Urb->DataLen = (UINT32) DataLen;\r
+ ZeroMem ((VOID *)(UINTN)Urb->Data, DataLen);\r
+ CopyMem ((VOID *)(UINTN)Urb->Data, Data, DataLen);\r
+ Urb->DataLen = (UINT32)DataLen;\r
}\r
\r
Status = XhcCreateTransferTrb (Handle, Urb);\r
EFI_STATUS\r
EFIAPI\r
XhcDataTransfer (\r
- IN USB3_DEBUG_PORT_HANDLE *Handle,\r
- IN EFI_USB_DATA_DIRECTION Direction,\r
- IN OUT VOID *Data,\r
- IN OUT UINTN *DataLength,\r
- IN UINTN Timeout\r
+ IN USB3_DEBUG_PORT_HANDLE *Handle,\r
+ IN EFI_USB_DATA_DIRECTION Direction,\r
+ IN OUT VOID *Data,\r
+ IN OUT UINTN *DataLength,\r
+ IN UINTN Timeout\r
)\r
{\r
- URB *Urb;\r
- EFI_STATUS Status;\r
+ URB *Urb;\r
+ EFI_STATUS Status;\r
\r
//\r
// Validate the parameters\r
return EFI_DEVICE_ERROR;\r
}\r
\r
- *DataLength = Urb->Completed;\r
+ *DataLength = Urb->Completed;\r
\r
Status = EFI_TIMEOUT;\r
if (Urb->Result == EFI_USB_NOERROR) {\r
\r
return Status;\r
}\r
-\r
**/\r
BOOLEAN\r
CheckDebugAgentHandler (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- IN UINTN InterruptType\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ IN UINTN InterruptType\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- UINTN InterruptHandler;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ UINTN InterruptHandler;\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor->Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor->Base;\r
if (IdtEntry == NULL) {\r
return FALSE;\r
}\r
\r
InterruptHandler = IdtEntry[InterruptType].Bits.OffsetLow +\r
- (IdtEntry[InterruptType].Bits.OffsetHigh << 16);\r
- if (InterruptHandler >= sizeof (UINT32) && *(UINT32 *)(InterruptHandler - sizeof (UINT32)) == AGENT_HANDLER_SIGNATURE) {\r
+ (IdtEntry[InterruptType].Bits.OffsetHigh << 16);\r
+ if ((InterruptHandler >= sizeof (UINT32)) && (*(UINT32 *)(InterruptHandler - sizeof (UINT32)) == AGENT_HANDLER_SIGNATURE)) {\r
return TRUE;\r
} else {\r
return FALSE;\r
**/\r
VOID\r
SaveAndUpdateIdtEntry1 (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- OUT IA32_IDT_GATE_DESCRIPTOR *SavedIdtEntry\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ OUT IA32_IDT_GATE_DESCRIPTOR *SavedIdtEntry\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- UINT16 CodeSegment;\r
- UINTN InterruptHandler;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ UINT16 CodeSegment;\r
+ UINTN InterruptHandler;\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor->Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor->Base;\r
CopyMem (SavedIdtEntry, &IdtEntry[1], sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
\r
- //\r
+ //\r
// Use current CS as the segment selector of interrupt gate in IDT\r
//\r
CodeSegment = AsmReadCs ();\r
\r
- InterruptHandler = (UINTN) &AsmInterruptHandle;\r
+ InterruptHandler = (UINTN)&AsmInterruptHandle;\r
IdtEntry[1].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
IdtEntry[1].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
IdtEntry[1].Bits.Selector = CodeSegment;\r
**/\r
VOID\r
RestoreIdtEntry1 (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- IN IA32_IDT_GATE_DESCRIPTOR *RestoredIdtEntry\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ IN IA32_IDT_GATE_DESCRIPTOR *RestoredIdtEntry\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor->Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor->Base;\r
CopyMem (&IdtEntry[1], RestoredIdtEntry, sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
}\r
IN UINTN Dr7\r
)\r
{\r
- return (BOOLEAN) (((Dr7 >> (RegisterIndex * 2)) & (BIT0 | BIT1)) == (BIT0 | BIT1));\r
+ return (BOOLEAN)(((Dr7 >> (RegisterIndex * 2)) & (BIT0 | BIT1)) == (BIT0 | BIT1));\r
}\r
\r
/**\r
IN UINTN Signature\r
)\r
{\r
- BOOLEAN InterruptState;\r
- UINTN Dr0;\r
- UINTN Dr1;\r
- UINTN Dr2;\r
- UINTN Dr3;\r
- UINTN Dr7;\r
- UINTN Cr4;\r
- UINTN NewDr7;\r
- UINT8 LoadImageMethod;\r
- UINT8 DebugAgentStatus;\r
- IA32_DESCRIPTOR IdtDescriptor;\r
- IA32_IDT_GATE_DESCRIPTOR OriginalIdtEntry;\r
- BOOLEAN IdtEntryHooked;\r
- UINT32 RegEdx;\r
+ BOOLEAN InterruptState;\r
+ UINTN Dr0;\r
+ UINTN Dr1;\r
+ UINTN Dr2;\r
+ UINTN Dr3;\r
+ UINTN Dr7;\r
+ UINTN Cr4;\r
+ UINTN NewDr7;\r
+ UINT8 LoadImageMethod;\r
+ UINT8 DebugAgentStatus;\r
+ IA32_DESCRIPTOR IdtDescriptor;\r
+ IA32_IDT_GATE_DESCRIPTOR OriginalIdtEntry;\r
+ BOOLEAN IdtEntryHooked;\r
+ UINT32 RegEdx;\r
\r
ASSERT (ImageContext != NULL);\r
\r
if (ImageContext->PdbPointer != NULL) {\r
- DEBUG((DEBUG_ERROR, " PDB = %a\n", ImageContext->PdbPointer));\r
+ DEBUG ((DEBUG_ERROR, " PDB = %a\n", ImageContext->PdbPointer));\r
}\r
\r
//\r
LoadImageMethod = DEBUG_LOAD_IMAGE_METHOD_SOFT_INT3;\r
}\r
}\r
+\r
AsmReadIdtr (&IdtDescriptor);\r
if (LoadImageMethod == DEBUG_LOAD_IMAGE_METHOD_SOFT_INT3) {\r
if (!CheckDebugAgentHandler (&IdtDescriptor, SOFT_INT_VECTOR_NUM)) {\r
//\r
AsmWriteDr7 (BIT10);\r
AsmWriteDr0 (Signature);\r
- AsmWriteDr1 ((UINTN) ImageContext->PdbPointer);\r
- AsmWriteDr2 ((UINTN) ImageContext);\r
+ AsmWriteDr1 ((UINTN)ImageContext->PdbPointer);\r
+ AsmWriteDr2 ((UINTN)ImageContext);\r
AsmWriteDr3 (IO_PORT_BREAKPOINT_ADDRESS);\r
\r
if (LoadImageMethod == DEBUG_LOAD_IMAGE_METHOD_IO_HW_BREAKPOINT) {\r
do {\r
DebugAgentStatus = IoRead8 (IO_PORT_BREAKPOINT_ADDRESS);\r
} while (DebugAgentStatus == DEBUG_AGENT_IMAGE_WAIT);\r
-\r
} else if (LoadImageMethod == DEBUG_LOAD_IMAGE_METHOD_SOFT_INT3) {\r
//\r
// Generate a software break point.\r
// in the above exception handler\r
//\r
NewDr7 = AsmReadDr7 () | BIT10; // H/w sets bit 10, some simulators don't\r
- if (!IsDrxEnabled (0, NewDr7) && (AsmReadDr0 () == 0 || AsmReadDr0 () == Signature)) {\r
+ if (!IsDrxEnabled (0, NewDr7) && ((AsmReadDr0 () == 0) || (AsmReadDr0 () == Signature))) {\r
//\r
// If user changed Dr3 (by setting HW bp in the above exception handler,\r
// we will not set Dr0 to 0 in GO/STEP handler because the break cause is not IMAGE_LOAD/_UNLOAD.\r
//\r
AsmWriteDr0 (Dr0);\r
}\r
- if (!IsDrxEnabled (1, NewDr7) && (AsmReadDr1 () == (UINTN) ImageContext->PdbPointer)) {\r
+\r
+ if (!IsDrxEnabled (1, NewDr7) && (AsmReadDr1 () == (UINTN)ImageContext->PdbPointer)) {\r
AsmWriteDr1 (Dr1);\r
}\r
- if (!IsDrxEnabled (2, NewDr7) && (AsmReadDr2 () == (UINTN) ImageContext)) {\r
+\r
+ if (!IsDrxEnabled (2, NewDr7) && (AsmReadDr2 () == (UINTN)ImageContext)) {\r
AsmWriteDr2 (Dr2);\r
}\r
+\r
if (!IsDrxEnabled (3, NewDr7) && (AsmReadDr3 () == IO_PORT_BREAKPOINT_ADDRESS)) {\r
AsmWriteDr3 (Dr3);\r
}\r
+\r
if (LoadImageMethod == DEBUG_LOAD_IMAGE_METHOD_IO_HW_BREAKPOINT) {\r
if (AsmReadCr4 () == (Cr4 | BIT3)) {\r
AsmWriteCr4 (Cr4);\r
}\r
+\r
if (NewDr7 == 0x20000480) {\r
AsmWriteDr7 (Dr7);\r
}\r
AsmWriteDr7 (Dr7);\r
}\r
}\r
+\r
//\r
// Restore original IDT entry for INT1 if it was hooked.\r
//\r
if (IdtEntryHooked) {\r
RestoreIdtEntry1 (&IdtDescriptor, &OriginalIdtEntry);\r
}\r
+\r
//\r
// Restore the interrupt state\r
//\r
\r
#include <ImageDebugSupport.h>\r
\r
-#define DEBUG_LOAD_IMAGE_METHOD_IO_HW_BREAKPOINT 1\r
-#define DEBUG_LOAD_IMAGE_METHOD_SOFT_INT3 2\r
+#define DEBUG_LOAD_IMAGE_METHOD_IO_HW_BREAKPOINT 1\r
+#define DEBUG_LOAD_IMAGE_METHOD_SOFT_INT3 2\r
\r
-#define IO_HW_BREAKPOINT_VECTOR_NUM 1\r
-#define SOFT_INT_VECTOR_NUM 3\r
+#define IO_HW_BREAKPOINT_VECTOR_NUM 1\r
+#define SOFT_INT_VECTOR_NUM 3\r
\r
extern UINTN AsmInterruptHandle;\r
\r
**/\r
BOOLEAN\r
CheckDebugAgentHandler (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- IN UINTN InterruptType\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ IN UINTN InterruptType\r
);\r
\r
/**\r
**/\r
VOID\r
SaveAndUpdateIdtEntry1 (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- OUT IA32_IDT_GATE_DESCRIPTOR *SavedIdtEntry\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ OUT IA32_IDT_GATE_DESCRIPTOR *SavedIdtEntry\r
);\r
\r
/**\r
**/\r
VOID\r
RestoreIdtEntry1 (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- IN IA32_IDT_GATE_DESCRIPTOR *RestoredIdtEntry\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ IN IA32_IDT_GATE_DESCRIPTOR *RestoredIdtEntry\r
);\r
\r
#endif\r
-\r
**/\r
BOOLEAN\r
CheckDebugAgentHandler (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- IN UINTN InterruptType\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ IN UINTN InterruptType\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- UINTN InterruptHandler;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ UINTN InterruptHandler;\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor->Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor->Base;\r
if (IdtEntry == NULL) {\r
return FALSE;\r
}\r
\r
InterruptHandler = IdtEntry[InterruptType].Bits.OffsetLow +\r
- (((UINTN)IdtEntry[InterruptType].Bits.OffsetHigh) << 16) +\r
- (((UINTN)IdtEntry[InterruptType].Bits.OffsetUpper) << 32);\r
- if (InterruptHandler >= sizeof (UINT32) && *(UINT32 *)(InterruptHandler - sizeof (UINT32)) == AGENT_HANDLER_SIGNATURE) {\r
+ (((UINTN)IdtEntry[InterruptType].Bits.OffsetHigh) << 16) +\r
+ (((UINTN)IdtEntry[InterruptType].Bits.OffsetUpper) << 32);\r
+ if ((InterruptHandler >= sizeof (UINT32)) && (*(UINT32 *)(InterruptHandler - sizeof (UINT32)) == AGENT_HANDLER_SIGNATURE)) {\r
return TRUE;\r
} else {\r
return FALSE;\r
**/\r
VOID\r
SaveAndUpdateIdtEntry1 (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- OUT IA32_IDT_GATE_DESCRIPTOR *SavedIdtEntry\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ OUT IA32_IDT_GATE_DESCRIPTOR *SavedIdtEntry\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
- UINT16 CodeSegment;\r
- UINTN InterruptHandler;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ UINT16 CodeSegment;\r
+ UINTN InterruptHandler;\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor->Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor->Base;\r
CopyMem (SavedIdtEntry, &IdtEntry[1], sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
\r
- //\r
+ //\r
// Use current CS as the segment selector of interrupt gate in IDT\r
//\r
CodeSegment = AsmReadCs ();\r
\r
- InterruptHandler = (UINTN) &AsmInterruptHandle;\r
- IdtEntry[1].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
- IdtEntry[1].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
- IdtEntry[1].Bits.OffsetUpper = (UINT32)((UINTN)InterruptHandler >> 32);\r
- IdtEntry[1].Bits.Selector = CodeSegment;\r
- IdtEntry[1].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
+ InterruptHandler = (UINTN)&AsmInterruptHandle;\r
+ IdtEntry[1].Bits.OffsetLow = (UINT16)(UINTN)InterruptHandler;\r
+ IdtEntry[1].Bits.OffsetHigh = (UINT16)((UINTN)InterruptHandler >> 16);\r
+ IdtEntry[1].Bits.OffsetUpper = (UINT32)((UINTN)InterruptHandler >> 32);\r
+ IdtEntry[1].Bits.Selector = CodeSegment;\r
+ IdtEntry[1].Bits.GateType = IA32_IDT_GATE_TYPE_INTERRUPT_32;\r
}\r
\r
/**\r
**/\r
VOID\r
RestoreIdtEntry1 (\r
- IN IA32_DESCRIPTOR *IdtDescriptor,\r
- IN IA32_IDT_GATE_DESCRIPTOR *RestoredIdtEntry\r
+ IN IA32_DESCRIPTOR *IdtDescriptor,\r
+ IN IA32_IDT_GATE_DESCRIPTOR *RestoredIdtEntry\r
)\r
{\r
- IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
+ IA32_IDT_GATE_DESCRIPTOR *IdtEntry;\r
\r
- IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *) IdtDescriptor->Base;\r
+ IdtEntry = (IA32_IDT_GATE_DESCRIPTOR *)IdtDescriptor->Base;\r
CopyMem (&IdtEntry[1], RestoredIdtEntry, sizeof (IA32_IDT_GATE_DESCRIPTOR));\r
}\r