pentiumShow.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:5k
- /* pentiumShow.c - Pentium and Pentium[234] specific show routines */
- /* Copyright 1984-2001 Wind River Systems, Inc. */
- #include "copyright_wrs.h"
- /*
- modification history
- --------------------
- 01g,01nov01,hdn added pentiumMsrShow()
- 01f,21aug01,hdn updated CPUID structure for PENTIUM4
- 01e,05oct98,jmp doc: cleanup.
- 01d,20may98,hdn changed sysCpuid to sysCpuId.
- 01c,17apr98,hdn fixed typo.
- 01b,17apr98,hdn added documentation.
- 01a,09jul97,hdn written.
- */
- /*
- DESCRIPTION
- This library provides Pentium and Pentium[234] specific show routines.
- pentiumMcaShow() shows Machine Check Global Control Registers and
- Error Reporting Register Banks. pentiumPmcShow() shows PMC0 and
- PMC1, and reset them if the parameter zap is TRUE.
- SEE ALSO:
- .pG "Configuration"
- */
- /* includes */
- #include "vxWorks.h"
- #include "regs.h"
- #include "arch/i86/pentiumLib.h"
- #include "stdio.h"
- #include "fioLib.h"
- /* defines */
- /* externals */
- IMPORT CPUID sysCpuId;
- IMPORT int sysProcessor;
- IMPORT PENTIUM_MSR pentiumMsrP5[];
- IMPORT INT32 pentiumMsrP5NumEnt;
- IMPORT PENTIUM_MSR pentiumMsrP6[];
- IMPORT INT32 pentiumMsrP6NumEnt;
- IMPORT PENTIUM_MSR pentiumMsrP7[];
- IMPORT INT32 pentiumMsrP7NumEnt;
- /* locals */
- /*******************************************************************************
- *
- * pentiumMcaShow - show MCA (Machine Check Architecture) registers
- *
- * This routine shows Machine-Check global control registers and Error-Reporting
- * register banks. Number of the Error-Reporting register banks is kept in a
- * variable mcaBanks. MCi_ADDR and MCi_MISC registers in the Error-Reporting
- * register bank are showed if MCi_STATUS indicates that these registers are
- * valid.
- *
- * RETURNS: N/A
- */
- void pentiumMcaShow (void)
- {
- UINT32 zero[2] = {0,0};
- UINT32 cap[2]; /* MCG_CAP */
- UINT32 stat[2]; /* MCG_STATUS, MCI_STATUS */
- UINT32 addr[2]; /* MCI_ADDR, P5_MC_ADDR */
- UINT32 misc[2]; /* MCI_MISC, P5_MC_TYPE */
- int mcaBanks; /* MCA Error-Reporting Bank Registers */
- int ix;
- if ((sysCpuId.featuresEdx & CPUID_MCE) == CPUID_MCE)
- {
- if ((sysCpuId.featuresEdx & CPUID_MCA) == CPUID_MCA)
- {
- pentiumMsrGet (MSR_MCG_CAP, (LL_INT *)&cap);
- mcaBanks = cap[0] & MCG_COUNT; /* get number of banks */
- pentiumMsrGet (MSR_MCG_STATUS, (LL_INT *)&stat);
- printExc ("MCG_STATUS: 0x%.8x%.8xn", stat[1], stat[0], 0, 0, 0);
- for (ix = 0; ix < mcaBanks; ix++)
- {
- pentiumMsrGet (MSR_MC0_STATUS + (ix * 4), (LL_INT *)&stat);
- if (stat[1] & MCI_VAL)
- {
- if (stat[1] & MCI_ADDRV)
- pentiumMsrGet (MSR_MC0_ADDR + (ix * 4),
- (LL_INT *)&addr);
- if (stat[1] & MCI_MISCV)
- pentiumMsrGet (MSR_MC0_MISC + (ix * 4),
- (LL_INT *)&misc);
- }
- pentiumMsrSet (MSR_MC0_STATUS + (ix * 4), (LL_INT *)&zero);
- pentiumSerialize ();
- printExc ("MC%d_STATUS: 0x%.8x%.8xn", ix, stat[1], stat[0],
- 0, 0);
- if (stat[1] & MCI_ADDRV)
- printExc ("MC%d_ADDR: 0x%.8x%.8xn", ix, addr[1], addr[0],
- 0, 0);
- if (stat[1] & MCI_MISCV)
- printExc ("MC%d_MISC: 0x%.8x%.8xn", ix, misc[1], misc[0],
- 0, 0);
- }
- }
- else
- {
- pentiumMsrGet (MSR_P5_MC_ADDR, (LL_INT *)&addr);
- pentiumMsrGet (MSR_P5_MC_TYPE, (LL_INT *)&misc);
- printExc ("P5_MC_ADDR: 0x%.8x%.8xn", addr[1], addr[0], 0, 0, 0);
- printExc ("P5_MC_TYPE: 0x%.8x%.8xn", misc[1], misc[0], 0, 0, 0);
- }
- pentiumMsrGet (MSR_MCG_STATUS, (LL_INT *)&stat);
- stat[0] &= ~MCG_MCIP;
- pentiumMsrSet (MSR_MCG_STATUS, (LL_INT *)&stat);
- }
- }
- /*******************************************************************************
- *
- * pentiumPmcShow - show PMCs (Performance Monitoring Counters)
- *
- * This routine shows Performance Monitoring Counter 0 and 1.
- * Monitored events are selected by Performance Event Select Registers in
- * in pentiumPmcStart (). These counters are cleared to 0 if the parameter "zap"
- * is TRUE.
- *
- * RETURNS: N/A
- */
- void pentiumPmcShow
- (
- BOOL zap /* 1: reset PMC0 and PMC1 */
- )
- {
- LL_INT pmcCtr0; /* PMC0 */
- LL_INT pmcCtr1; /* PMC1 */
- pentiumPmcGet (&pmcCtr0, &pmcCtr1);
- printf ("PMC0=%d, PMC1=%dn", (int)pmcCtr0, (int)pmcCtr1);
- if (zap)
- pentiumPmcReset ();
- }
- /*******************************************************************************
- *
- * pentiumMsrShow - show all the MSR (Model Specific Register)
- *
- * This routine shows all the MSRs in the Pentium and Pentium[234].
- *
- * RETURNS: N/A
- */
- void pentiumMsrShow (void)
- {
- PENTIUM_MSR * pMsr; /* pointer to the MSR table */
- INT32 msrNumEnt; /* number of entries */
- UINT32 value[2];
- int ix;
- if ((sysCpuId.featuresEdx & CPUID_MSR) == 0)
- {
- printf ("This CPU does not support RDMSR and WRMSRn");
- return;
- }
- switch (sysProcessor)
- {
- case X86CPU_PENTIUM:
- pMsr = pentiumMsrP5;
- msrNumEnt = pentiumMsrP5NumEnt;
- break;
- case X86CPU_PENTIUMPRO:
- pMsr = pentiumMsrP6;
- msrNumEnt = pentiumMsrP6NumEnt;
- break;
- case X86CPU_PENTIUM4:
- pMsr = pentiumMsrP7;
- msrNumEnt = pentiumMsrP7NumEnt;
- break;
- default:
- printf ("This CPU(sysProcessor=%d) doesn't have MSRsn", sysProcessor);
- return;
- }
- for (ix = 0; ix < msrNumEnt; ix++, pMsr++)
- {
- pentiumMsrGet (pMsr->addr, (LL_INT *)&value);
- printf ("addr=0x%04x [31:0]=0x%08x [63:32]=0x%08x name=%sn",
- (UINT16)pMsr->addr, value[0], value[1], pMsr->name);
- }
- }