vxworks操作系统的源代码 供研究学习

源代码在线查看: pentiumshow.c

软件大小: 4226 K
上传用户: jxsflq
关键词: vxworks 操作系统 源代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				/* 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%.8x\n", 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%.8x\n", ix, stat[1], stat[0],							  0, 0);						if (stat[1] & MCI_ADDRV)						    printExc ("MC%d_ADDR: 0x%.8x%.8x\n", ix, addr[1], addr[0],							      0, 0);						if (stat[1] & MCI_MISCV)						    printExc ("MC%d_MISC: 0x%.8x%.8x\n", 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%.8x\n", addr[1], addr[0], 0, 0, 0);					    printExc ("P5_MC_TYPE: 0x%.8x%.8x\n", 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=%d\n", (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 WRMSR\n");					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 MSRs\n", 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=%s\n",					        (UINT16)pMsr->addr, value[0], value[1], pMsr->name);					}				    }											

相关资源