/** @file\r
Debug Agent Library provide source-level debug capability.\r
\r
-Copyright (c) 2010, Intel Corporation. All rights reserved<BR>\r
-This program and the accompanying materials are licensed and made available under \r
-the terms and conditions of the BSD License that accompanies this distribution. \r
+Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under\r
+the terms and conditions of the BSD License that accompanies this distribution.\r
The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php. \r
+http://opensource.org/licenses/bsd-license.php.\r
\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
#ifndef __DEBUG_AGENT_LIB_H__\r
#define __DEBUG_AGENT_LIB_H__\r
\r
-#define DEBUG_AGENT_INIT_PREMEM_SEC 1\r
-#define DEBUG_AGENT_INIT_POSTMEM_SEC 2\r
-#define DEBUG_AGENT_INIT_DXE_CORE 3\r
-#define DEBUG_AGENT_INIT_SMM 4\r
-#define DEBUG_AGENT_INIT_ENTER_SMI 5\r
-#define DEBUG_AGENT_INIT_EXIT_SMI 6\r
-#define DEBUG_AGENT_INIT_S3 7\r
+#define DEBUG_AGENT_INIT_PREMEM_SEC 1\r
+#define DEBUG_AGENT_INIT_POSTMEM_SEC 2\r
+#define DEBUG_AGENT_INIT_DXE_CORE 3\r
+#define DEBUG_AGENT_INIT_SMM 4\r
+#define DEBUG_AGENT_INIT_ENTER_SMI 5\r
+#define DEBUG_AGENT_INIT_EXIT_SMI 6\r
+#define DEBUG_AGENT_INIT_S3 7\r
+#define DEBUG_AGENT_INIT_DXE_AP 8\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
+//\r
+// Context for DEBUG_AGENT_INIT_POSTMEM_SEC\r
+//\r
+typedef struct {\r
+ UINTN HeapMigrateOffset;\r
+ UINTN StackMigrateOffset;\r
+} DEBUG_AGENT_CONTEXT_POSTMEM_SEC;\r
+\r
+/**\r
+ Caller provided function to be invoked at the end of InitializeDebugAgent().\r
+\r
+ Refer to the descrption for InitializeDebugAgent() for more details.\r
+\r
+ @param[in] Context The first input parameter of InitializeDebugAgent().\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI * DEBUG_AGENT_CONTINUE)(\r
+ IN VOID *Context\r
+ );\r
+\r
\r
/**\r
Initialize debug agent.\r
\r
- This function is used to set up debug enviroment.\r
+ This function is used to set up debug environment to support source level debugging.\r
+ If certain Debug Agent Library instance has to save some private data in the stack,\r
+ this function must work on the mode that doesn't return to the caller, then\r
+ the caller needs to wrap up all rest of logic after InitializeDebugAgent() into one\r
+ function and pass it into InitializeDebugAgent(). InitializeDebugAgent() is\r
+ responsible to invoke the passing-in function at the end of InitializeDebugAgent().\r
+\r
+ If the parameter Function is not NULL, Debug Agent Libary instance will invoke it by\r
+ passing in the Context to be its parameter.\r
+\r
+ If Function() is NULL, Debug Agent Library instance will return after setup debug\r
+ environment.\r
\r
- @param[in] InitFlag Init flag is used to decide the initialize process.\r
- @param[in] Context Context needed according to InitFlag; it was optional.\r
+ @param[in] InitFlag Init flag is used to decide the initialize process.\r
+ @param[in] Context Context needed according to InitFlag; it was optional.\r
+ @param[in] Function Continue function called by debug agent library; it was\r
+ optional.\r
\r
**/\r
VOID\r
EFIAPI\r
InitializeDebugAgent (\r
IN UINT32 InitFlag,\r
- IN VOID *Context OPTIONAL\r
+ IN VOID *Context, OPTIONAL\r
+ IN DEBUG_AGENT_CONTINUE Function OPTIONAL\r
);\r
\r
/**\r