261 lines
5.8 KiB
C
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//////////////////////////////////////////////////////////////////////
|
||
|
|