4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync/* $Id$ */
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync/** @file
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * VBox implementation of DebugAgentLib that reports EFI state transitions
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * to DevEFI for debugging purposes.
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync */
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync/*
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * Copyright (C) 2013 Oracle Corporation
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync *
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * available from http://www.virtualbox.org. This file is free software;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * General Public License (GPL) as published by the Free Software
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync *
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * The contents of this file may alternatively be used under the terms
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * of the Common Development and Distribution License Version 1.0
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * VirtualBox OSE distribution, in which case the provisions of the
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * CDDL are applicable instead of those of the GPL.
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync *
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * You may elect to license modified versions of this file under the
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * terms and conditions of either the GPL or the CDDL or both.
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync */
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync/*******************************************************************************
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync* Header Files *
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync*******************************************************************************/
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync#include <Base.h>
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync#include <Library/DebugAgentLib.h>
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync#include <Library/DebugLib.h>
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync#include "VBoxPkg.h"
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync#include "../../../../DevEFI.h"
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsyncVOID
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsyncEFIAPI
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsyncInitializeDebugAgent(
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync IN UINT32 InitFlag,
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync IN VOID *Context OPTIONAL,
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync IN DEBUG_AGENT_CONTINUE Function OPTIONAL
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync )
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync{
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync /*
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * Do the reporting.
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync */
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync EFIDBGPOINT enmDbgPoint;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync switch (InitFlag)
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync {
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_PREMEM_SEC: enmDbgPoint = EFIDBGPOINT_SEC_PREMEM; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_POSTMEM_SEC: enmDbgPoint = EFIDBGPOINT_SEC_POSTMEM; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_DXE_CORE: enmDbgPoint = EFIDBGPOINT_DXE_CORE; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_SMM: enmDbgPoint = EFIDBGPOINT_SMM; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_ENTER_SMI: enmDbgPoint = EFIDBGPOINT_SMI_ENTER; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_EXIT_SMI: enmDbgPoint = EFIDBGPOINT_SMI_EXIT; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_S3: enmDbgPoint = EFIDBGPOINT_GRAPHICS; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync case DEBUG_AGENT_INIT_DXE_AP: enmDbgPoint = EFIDBGPOINT_DXE_AP; break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync default:
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync ASSERT(false);
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync enmDbgPoint = EFIDBGPOINT_INVALID;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync break;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync }
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync if (enmDbgPoint != EFIDBGPOINT_INVALID)
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync ASMOutU32(EFI_PORT_DEBUG_POINT, enmDbgPoint);
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync /*
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync * Call resume function if supplied.
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync */
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync if (Function)
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync Function(Context);
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync}
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsyncBOOLEAN
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsyncEFIAPI
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsyncSaveAndSetDebugTimerInterrupt(
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync IN BOOLEAN EnableStatus
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync )
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync{
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync NOREF(EnableStatus);
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync return FALSE;
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync}
4136ffde6159b375ef0fe72f862f8b84bf9b2e8bvboxsync