windows-nt/Source/XPSP1/NT/base/hals/halia64/ia64/oemmca.c
2020-09-26 16:20:57 +08:00

261 lines
5.8 KiB
C

//###########################################################################
//**
//** Copyright (C) 1996-98 Intel Corporation. All rights reserved.
//**
//** The information and source code contained herein is the exclusive
//** property of Intel Corporation and may not be disclosed, examined
//** or reproduced in whole or in part without explicit written authorization
//** from the company.
//**
//###########################################################################
//-----------------------------------------------------------------------------
// Version control information follows.
//
// $Header: I:/DEVPVCS/OSMCA/oemmca.c_v 2.1 09 Mar 1999 10:30:24 smariset $
// $Log: I:/DEVPVCS/OSMCA/oemmca.c_v $
//
// Rev 2.1 09 Mar 1999 10:30:24 smariset
// *.h consolidation
//
// Rev 2.0 Dec 11 1998 11:42:18 khaw
// Post FW 0.5 release sync-up
//
// Rev 1.5 29 Oct 1998 14:25:00 smariset
//Consolidated Sources
//
// Rev 1.4 07 Aug 1998 13:47:50 smariset
//
//
// Rev 1.3 10 Jul 1998 11:04:22 smariset
//just checking in
//
// Rev 1.2 08 Jul 1998 14:23:14 smariset
//
//
// Rev 1.1 02 Jul 1998 15:36:32 smariset
//
//
// Rev 1.0 02 Jul 1998 09:20:56 smariset
//
//
///////////////////////////////////////////////////////////////////////////////
//
// Module Name: OEMMCA.C - Merced OS Machine Check Handler
//
// Description:
// This module has OEM machine check handler
//
// Contents: OemMcaHndlr()
// PlatMcaHndlr()
//
//
// Target Platform: Merced
//
// Reuse: None
//
////////////////////////////////////////////////////////////////////////////M//
#include "halp.h"
#include "arc.h"
#include "i64fw.h"
#include "check.h"
#include "osmca.h"
#include "oemmca.h"
fptr pOsGetErrLog=0; // global pointer for OEM MCA entry point
//++
// Name: OemMcaInit()
//
// Routine Description:
//
// This routine registers OEM MCA handler initialization
//
// Arguments On Entry:
// arg0 = Function ID
//
// Success/Failure (0/!0)
//--
SAL_PAL_RETURN_VALUES
OemMcaInit(void)
{
SAL_PAL_RETURN_VALUES rv={0};
// register the OS_MCA call back handler
rv=HalpOemToOsMcaRegisterProc((fptr)OemMcaDispatch);
return(rv);
}
//EndProc//////////////////////////////////////////////////////////////////////
//++
// Name: OemMcaDispatch()
//
// Routine Description:
//
// This is the OEM call back handler, which is only exported
// to the OS_MCA for call back during MCA/CMC errors. This
// handler will dispatch to the appripriate CMC/MCA proc.
//
// Arguments On Entry:
// arg0 = Error Event (MchkEvent/CmcEvent)
//
// Success/Failure (0/!0)
//--
SAL_PAL_RETURN_VALUES
OemMcaDispatch(ULONGLONG eFlag)
{
SAL_PAL_RETURN_VALUES rv={0};
if(eFlag==MchkEvent)
rv=OemMcaHndlr();
else
rv=OemCmcHndlr();
return(rv);
}
//EndProc//////////////////////////////////////////////////////////////////////
//++
// Name: OemCmcHndlr()
//
// Routine Description:
//
// This is the OsMca CMC Handler, which is called by
// the CMC interrupt handler in virtual mode
//
// Arguments On Entry:
// arg0 = Function ID
//
// Success/Failure (0/!0)
//--
SAL_PAL_RETURN_VALUES
OemCmcHndlr(void)
{
SAL_PAL_RETURN_VALUES rv={0};
PsiLog myPsiLog;
if(pOsGetErrLog >0)
{
rv=HalpOsGetErrLog(0, CmcEvent, PROC_LOG, (ULONGLONG*)&myPsiLog, sizeof(PsiLog));
rv=HalpOsGetErrLog(0, CmcEvent, PLAT_LOG, (ULONGLONG*)&myPsiLog, sizeof(PsiLog));
}
return(rv);
}
//EndProc//////////////////////////////////////////////////////////////////////
//++
// Name: OemMcaHndlr()
//
// Routine Description:
//
// This is the OsMca handler for firmware uncorrected errors
//
// Arguments On Entry:
// arg0 = Function ID
//
// Success/Failure:
// Error Corrected/Not Corrected (0/!0)
//--
SAL_PAL_RETURN_VALUES
OemMcaHndlr(void)
{
SAL_PAL_RETURN_VALUES rv={0};
rv=OemProcErrHndlr();
rv=OemPlatErrHndlr();
return(rv);
}
//EndProc//////////////////////////////////////////////////////////////////////
//++
// Name: OemProcErrHndlr()
//
// Routine Description:
//
// This routine reads or writes data to NVM space
//
// Arguments On Entry:
// arg0 = Function ID
//
// Success/Failure (0/!0)
//--
SAL_PAL_RETURN_VALUES
OemProcErrHndlr(void)
{
SAL_PAL_RETURN_VALUES rv={0};
PsiLog myPsiLog;
// first let us get the error log
if(pOsGetErrLog >0)
{
rv=HalpOsGetErrLog(0, MchkEvent, PROC_LOG, (ULONGLONG*)&myPsiLog, sizeof(PsiLog));
}
return(rv);
}
//EndProc//////////////////////////////////////////////////////////////////////
//++
// Name: OemPlatErrHndlr()
//
// Routine Description:
//
// This routine reads or writes data to NVM space
//
// Arguments On Entry:
// arg0 = Function ID
//
// Success/Failure (0/!0)
//--
SAL_PAL_RETURN_VALUES
OemPlatErrHndlr(void)
{
SAL_PAL_RETURN_VALUES rv={0};
PsiLog myPsiLog;
// first let us get the error log
if(pOsGetErrLog >0)
{
rv=HalpOsGetErrLog(0, MchkEvent, PLAT_LOG, (ULONGLONG*)&myPsiLog, sizeof(PsiLog));
}
return(rv);
}
//EndProc//////////////////////////////////////////////////////////////////////
//++
// Name: OemMcaCb()
//
// Routine Description:
//
// The entry point to this procedure is registered with OsMca
// fw interface for call back to return the call back address of OS proc.
//
// Arguments On Entry:
// arg0 = OS MCA call back handler entry point
//
// Success/Failure (0/!0)
//--
SAL_PAL_RETURN_VALUES
OemMcaCb(fptr pOsHndlr)
{
SAL_PAL_RETURN_VALUES rv={0};
pOsGetErrLog=pOsHndlr;
return(rv);
}
//EndProc//////////////////////////////////////////////////////////////////////