⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysdbgstr.c

📁 For WorkBench2.31 的pentium4 BSP
💻 C
字号:
/* sysDbgStr.c - Debug Store mechanism BSP library *//* Copyright 2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01a,08aug02,hdn  written*//*DESCRIPTIONThis library contains routines to manipulate the Debug Store mechanism.SEE ALSO: src/arch/i86/dbgStrLib.c*/#include "vxWorks.h"#include "sysLib.h"#include "arch/i86/dbgStrLib.h"/* externals */IMPORT DS_CONFIG dbgStrCfg;		/* system DS config */IMPORT DS_CONFIG * dbgStrCurrent;	/* current DS config *//* globals */UINT32	sysPmcIntCnt		= 0;	/* PMC int count */UINT32	sysBtsIntCnt		= 0;	/* BTS int count */UINT32	sysPebsIntCnt		= 0;	/* PEBS int count *//* locals */LOCAL FUNCPTR sysBtsRoutine	= NULL;	/* rtn to call on BTS interrupt */LOCAL INT32   sysBtsArg		= 0;	/* its argument */LOCAL BOOL    sysBtsConnected	= FALSE;LOCAL FUNCPTR sysPebsRoutine	= NULL;	/* rtn to call on PEBS interrupt */LOCAL INT32   sysPebsArg	= 0;	/* its argument */LOCAL BOOL    sysPebsConnected	= FALSE;/* forward declarations */void sysPmcInt (void);		/* BTS/PEBS/PMC interrupt handler *//********************************************************************************* sysDbgStrInit - initialize the BTS, PEBS and PMC in the BSP** This routine initializes the BTS/PEBS/PMC in the BSP.  It is attached to the* BTS/PEBS/PMC interrupt vector by the routine sysBtsConnect(), * sysPebsConnect() and sysPmcConnect() respectively.*/void sysDbgStrInit (void)    {    LL_INT resetValue = PEBS_RESET;    /* set up the BTS/PEBS/PMC interrupt handler */    (void)intConnect (INUM_TO_IVEC (INT_NUM_LOAPIC_PMC), sysPmcInt, 0);    *(int *)(loApicBase + LOAPIC_PMC) = LOAPIC_EDGE | LOAPIC_FIXED | 					INT_NUM_LOAPIC_PMC;    /* set up the system BTS/PEBS buffer : 16KB, 16KB, task mode */    if (dbgStrLibInit (0, 0, DS_SYS_MODE) != OK)	return;    /* set the system BTS/PEBS configuration parameters */    dbgStrConfig ((WIND_TCB *)NONE, BTS_ENABLED, PEBS_ENABLED,		  BTS_INT_MODE, BTS_BUF_MODE,		  PEBS_EVENT, PEBS_METRIC, PEBS_OS, &resetValue);    /* start/stop (enable/disable) the BTS/PEBS with the above parameters */    dbgStrStart ((WIND_TCB *)NONE);    /* link in the show routine */#ifdef INCLUDE_SHOW_ROUTINES    dbgStrShowInit ();#endif /* INCLUDE_SHOW_ROUTINES */    }/********************************************************************************* sysPmcInt - interrupt level processing for BTS, PEBS and PMC ** This routine handles the BTS/PEBS/PMC interrupt.  It is attached to the* BTS/PEBS/PMC interrupt vector by the routine sysBtsConnect(), * sysPebsConnect() and sysPmcConnect() respectively.*/void sysPmcInt (void)    {    INT32 oldEnable;		/* old lock value */    DS_BUF_HEADER * pH;		/* DS header */    /* acknowledge PMC interrupt */    {    sysPmcIntCnt++;		/* XXX */    }    /* get the Debug Store Buffer Header */    if ((dbgStrCurrent == NULL) || (dbgStrCurrent->pH == NULL))	{        /* clear the MASK bit in the PMC entry in LVT */        *(int *)(loApicBase + LOAPIC_PMC) &= ~LOAPIC_MASK;	return;	}    pH = dbgStrCurrent->pH;    /* acknowledge BTS interrupt */    if ((dbgStrCurrent->btsIntMode) &&	((UINT32)pH->btsIndex >= pH->btsThreshold))	{	oldEnable = dbgStrBtsEnable (FALSE);	/* disable BTS */	sysBtsIntCnt++;        if (sysBtsRoutine != NULL)	    (* sysBtsRoutine) (sysBtsArg);	pH->btsIndex = pH->btsBase;		/* reset */	if (oldEnable || dbgStrCurrent->btsEnabled)	    dbgStrBtsEnable (TRUE);		/* enable BTS if it was */	}        /* acknowledge PEBS interrupt */    if ((UINT32)pH->pebsIndex >= pH->pebsThreshold)	{	oldEnable = dbgStrPebsEnable (FALSE);	/* disable PEBS */	sysPebsIntCnt++;        if (sysPebsRoutine != NULL)	    (* sysPebsRoutine) (sysPebsArg);	pH->pebsIndex = pH->pebsBase;		/* reset */	if (oldEnable || dbgStrCurrent->pebsEnabled)	    dbgStrPebsEnable (TRUE);		/* enable PEBS if it was */	}    /* clear the MASK bit in the PMC entry in LVT */    *(int *)(loApicBase + LOAPIC_PMC) &= ~LOAPIC_MASK;    }/********************************************************************************* sysBtsConnect - connect a routine to the BTS interrupt** This routine specifies the interrupt service routine to be called at each* BTS interrupt.  Normally, it is called from sysHwInit2() in sysLib.c to * connect usrBts() to the BTS interrupt.** RETURN: OK, or ERROR if the routine cannot be connected to the interrupt.** SEE ALSO: usrBts(), sysBtsInt()*/STATUS sysBtsConnect    (    FUNCPTR routine,	/* routine to be called at each BTS interrupt */    int arg		/* argument with which to call routine */    )    {    sysBtsRoutine   = routine;    sysBtsArg	    = arg;    sysBtsConnected = TRUE;    return (OK);    }/********************************************************************************* sysPebsConnect - connect a routine to the PEBS interrupt** This routine specifies the interrupt service routine to be called at each* PEBS interrupt.  Normally, it is called from sysHwInit2() in sysLib.c to * connect usrPebs() to the PEBS interrupt.** RETURN: OK, or ERROR if the routine cannot be connected to the interrupt.** SEE ALSO: usrPebs(), sysPebsInt()*/STATUS sysPebsConnect    (    FUNCPTR routine,	/* routine to be called at each PEBS interrupt */    int arg		/* argument with which to call routine */    )    {    sysPebsRoutine   = routine;    sysPebsArg	     = arg;    sysPebsConnected = TRUE;    return (OK);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -