1fe92ab29bff9548a59011249e161127f7eeafa79vanjeff/** @file
2fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  Debug Agent Library provide source-level debug capability.
3fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
46d4136f4b043f1624efa8f025488e5e23831ae6fvanjeffCopyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
54cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeffThis program and the accompanying materials are licensed and made available under
64cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeffthe terms and conditions of the BSD License that accompanies this distribution.
764a80549c8ab874c5b23b376adbb99008e6143b0myronporterThe full text of the license may be found at
84cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeffhttp://opensource.org/licenses/bsd-license.php.
9fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
104cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeffTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
1164a80549c8ab874c5b23b376adbb99008e6143b0myronporterWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
13fe92ab29bff9548a59011249e161127f7eeafa79vanjeff**/
14fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
15fe92ab29bff9548a59011249e161127f7eeafa79vanjeff#ifndef __DEBUG_AGENT_LIB_H__
16fe92ab29bff9548a59011249e161127f7eeafa79vanjeff#define __DEBUG_AGENT_LIB_H__
17fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
18933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_PREMEM_SEC              1
19933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_POSTMEM_SEC             2
20933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_DXE_CORE                3
21933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_SMM                     4
22933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_ENTER_SMI               5
23933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_EXIT_SMI                6
24933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_S3                      7
25933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_DXE_AP                  8
26933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_PEI                     9
27933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_DXE_LOAD               10
28933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_DXE_UNLOAD             11
29933d80a1496ce5e3c3de62be0340cc1473f9b85bvanjeff#define DEBUG_AGENT_INIT_THUNK_PEI_IA32TOX64    12
304cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
314cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff//
324cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff// Context for DEBUG_AGENT_INIT_POSTMEM_SEC
334cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff//
344cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjefftypedef struct {
354cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  UINTN          HeapMigrateOffset;
364cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  UINTN          StackMigrateOffset;
374cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff} DEBUG_AGENT_CONTEXT_POSTMEM_SEC;
384cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
394cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff/**
404cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  Caller provided function to be invoked at the end of InitializeDebugAgent().
414cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
424cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  Refer to the descrption for InitializeDebugAgent() for more details.
434cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
444cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  @param[in] Context    The first input parameter of InitializeDebugAgent().
454cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
464cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff**/
474cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjefftypedef
484cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeffVOID
494cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff(EFIAPI * DEBUG_AGENT_CONTINUE)(
504cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  IN VOID        *Context
514cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  );
524cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
53fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
54fe92ab29bff9548a59011249e161127f7eeafa79vanjeff/**
55fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  Initialize debug agent.
56fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
574cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  This function is used to set up debug environment to support source level debugging.
584cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  If certain Debug Agent Library instance has to save some private data in the stack,
594cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  this function must work on the mode that doesn't return to the caller, then
604cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  the caller needs to wrap up all rest of logic after InitializeDebugAgent() into one
614cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  function and pass it into InitializeDebugAgent(). InitializeDebugAgent() is
624cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  responsible to invoke the passing-in function at the end of InitializeDebugAgent().
634cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
644cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  If the parameter Function is not NULL, Debug Agent Libary instance will invoke it by
654cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  passing in the Context to be its parameter.
664cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff
674cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  If Function() is NULL, Debug Agent Library instance will return after setup debug
684cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  environment.
69fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
704cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  @param[in] InitFlag     Init flag is used to decide the initialize process.
714cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  @param[in] Context      Context needed according to InitFlag; it was optional.
724cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  @param[in] Function     Continue function called by debug agent library; it was
734cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff                          optional.
74fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
75fe92ab29bff9548a59011249e161127f7eeafa79vanjeff**/
76fe92ab29bff9548a59011249e161127f7eeafa79vanjeffVOID
77fe92ab29bff9548a59011249e161127f7eeafa79vanjeffEFIAPI
78fe92ab29bff9548a59011249e161127f7eeafa79vanjeffInitializeDebugAgent (
79fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  IN UINT32                InitFlag,
804cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  IN VOID                  *Context, OPTIONAL
814cf7e0380ebf7e07c2ddee3d2c20daaeb66203a3vanjeff  IN DEBUG_AGENT_CONTINUE  Function  OPTIONAL
82fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  );
83fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
84fe92ab29bff9548a59011249e161127f7eeafa79vanjeff/**
85e7af83aece81c891deeda826526fffa194dc0256vanjeff  Enable/Disable the interrupt of debug timer and return the interrupt state
86e7af83aece81c891deeda826526fffa194dc0256vanjeff  prior to the operation.
87fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
88fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  If EnableStatus is TRUE, enable the interrupt of debug timer.
89fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  If EnableStatus is FALSE, disable the interrupt of debug timer.
90fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
91fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  @param[in] EnableStatus    Enable/Disable.
92fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
93e7af83aece81c891deeda826526fffa194dc0256vanjeff  @retval TRUE  Debug timer interrupt were enabled on entry to this call.
94e7af83aece81c891deeda826526fffa194dc0256vanjeff  @retval FALSE Debug timer interrupt were disabled on entry to this call.
95e7af83aece81c891deeda826526fffa194dc0256vanjeff
96fe92ab29bff9548a59011249e161127f7eeafa79vanjeff**/
97e7af83aece81c891deeda826526fffa194dc0256vanjeffBOOLEAN
98fe92ab29bff9548a59011249e161127f7eeafa79vanjeffEFIAPI
99e7af83aece81c891deeda826526fffa194dc0256vanjeffSaveAndSetDebugTimerInterrupt (
100fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  IN BOOLEAN                EnableStatus
101fe92ab29bff9548a59011249e161127f7eeafa79vanjeff  );
102fe92ab29bff9548a59011249e161127f7eeafa79vanjeff
103fe92ab29bff9548a59011249e161127f7eeafa79vanjeff#endif
104