loApicIntrShow.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* loApicIntrShow.c - Intel Local APIC/xAPIC driver show routines */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01b,08mar02,hdn  added the description
  8. 01a,25jun01,hdn  extracted from 01c version of loApicIntr.c
  9. */
  10. /*
  11. DESCRIPTION
  12. This module is a show routine for the Local APIC/xAPIC (Advanced 
  13. Programmable Interrupt Controller) for P6 (PentiumPro, II, III) 
  14. family processors and P7 (Pentium4) family processors.  
  15. loApicShow() shows content of the Local APIC registers.
  16. loApicMpShow() shows the MP configuration table.
  17. INCLUDE FILES: loApic.h
  18. */
  19. /* includes */
  20. #include "drv/intrCtl/loApic.h"
  21. /* externs */
  22. /* globals */
  23. /* locals */
  24. /* forward declarations */
  25. /*******************************************************************************
  26. *
  27. * loApicStatusShow - show Local APIC TMR, IRR, ISR registers
  28. *
  29. * This routine shows Local APIC TMR, IRR, ISR registers
  30. *
  31. * RETURNS: N/A
  32. */
  33. LOCAL void loApicStatusShow (void)
  34.     {
  35.     int ix;
  36.     for (ix = 0; ix < 8; ix++)
  37. {
  38.         printf ("LOAPIC_TMR%02d = 0x%08x ", ix,
  39.         *(UINT32 *)(loApicBase + LOAPIC_TMR + (ix * 0x10)));
  40.         printf ("LOAPIC_IRR%02d = 0x%08x ", ix,
  41.         *(UINT32 *)(loApicBase + LOAPIC_IRR + (ix * 0x10)));
  42.         printf ("LOAPIC_ISR%02d = 0x%08xn", ix,
  43.         *(UINT32 *)(loApicBase + LOAPIC_ISR + (ix * 0x10)));
  44. }
  45.     }
  46. /*******************************************************************************
  47. *
  48. * loApicShow - show Local APIC registers
  49. *
  50. * This routine shows Local APIC registers
  51. *
  52. * RETURNS: N/A
  53. */
  54. void loApicShow (void)
  55.     {
  56.     UINT32 localApicReg;
  57.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_ID);
  58.     printf ("local Apic ID              = 0x%08xn", localApicReg);
  59.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_VER);
  60.     printf ("local Apic Version         = 0x%08xn", localApicReg);
  61.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_TPR);
  62.     printf ("Task Priority              = 0x%08xn", localApicReg);
  63.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_APR);
  64.     printf ("Arbitration Priority       = 0x%08xn", localApicReg);
  65.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_PPR);
  66.     printf ("Processor Priority         = 0x%08xn", localApicReg);
  67.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_LDR);
  68.     printf ("Logical Destination        = 0x%08xn", localApicReg);
  69.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_DFR);
  70.     printf ("Destination Format         = 0x%08xn", localApicReg);
  71.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_SVR);
  72.     printf ("Spurious Interrupt Vector  = 0x%08xn", localApicReg);
  73.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_ESR);
  74.     printf ("Error Status               = 0x%08xn", localApicReg);
  75.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_ICRLO);
  76.     printf ("Interrupt Command 00-31    = 0x%08xn", localApicReg);
  77.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_ICRHI);
  78.     printf ("Interrupt Command 32-63    = 0x%08xn", localApicReg);
  79.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_TIMER);
  80.     printf ("Local Vector Table (Timer) = 0x%08xn", localApicReg);
  81.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_LINT0);
  82.     printf ("Local Vector Table (LINT0) = 0x%08xn", localApicReg);
  83.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_LINT1);
  84.     printf ("Local Vector Table (LINT1) = 0x%08xn", localApicReg);
  85.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_ERROR);
  86.     printf ("Local Vector Table (Error) = 0x%08xn", localApicReg);
  87.     if (loApicMaxLvt >= LOAPIC_LVT_P6)
  88. {
  89.         localApicReg = *(UINT32 *)(loApicBase + LOAPIC_PMC);
  90.         printf ("Local Vector Table (PMC)   = 0x%08xn", localApicReg);
  91. }
  92.     if (loApicMaxLvt >= LOAPIC_LVT_PENTIUM4)
  93. {
  94.         localApicReg = *(UINT32 *)(loApicBase + LOAPIC_THERMAL);
  95.         printf ("Local Vector Table (Therm) = 0x%08xn", localApicReg);
  96. }
  97.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_TIMER_ICR);
  98.     printf ("Timer Initial Count        = 0x%08xn", localApicReg);
  99.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_TIMER_CCR);
  100.     printf ("Timer Current Count        = 0x%08xn", localApicReg);
  101.     localApicReg = *(UINT32 *)(loApicBase + LOAPIC_TIMER_CONFIG);
  102.     printf ("Timer Divide Configuration = 0x%08xn", localApicReg);
  103.     loApicStatusShow ();
  104.     }
  105. /*******************************************************************************
  106. *
  107. * loApicMpShow - show MP configuration table
  108. *
  109. * This routine shows MP configuration table.
  110. *
  111. * RETURNS: N/A
  112. */
  113. void loApicMpShow (void)
  114.     {
  115.     MP_FPS * pFps = NULL;
  116.     MP_HEADER * pTbl;
  117.     MP_CPU * pCpu;
  118.     MP_IOAPIC * pIoApic;
  119.     char * p;
  120.     int ix;
  121.     /* MP Floating Point Structure */
  122.     pFps = (MP_FPS *)loApicMpScan ((char *)EBDA_START, (char *)EBDA_END);
  123.     if (pFps == NULL)
  124.         pFps = (MP_FPS *)loApicMpScan ((char *)BIOS_ROM_START, 
  125.        (char *)BIOS_ROM_END);
  126.     if (pFps == NULL)
  127. {
  128. printf ("Not MP Compliantn");
  129. return;
  130. }
  131.     
  132.     printf ("MP Floating Point Structuren");
  133.     printf ("  Address Pointer       = 0x%08xn", pFps->configTableAddr);
  134.     printf ("  Spec Version          = 0x%02xn", pFps->specRev);
  135.     printf ("  Feature byte-1        = 0x%02xn", pFps->featureByte[0]);
  136.     printf ("  Feature byte-2        = 0x%02xn", pFps->featureByte[1]);
  137.     printf ("  Feature byte-3        = 0x%02xn", pFps->featureByte[2]);
  138.     printf ("  Feature byte-4        = 0x%02xn", pFps->featureByte[3]);
  139.     printf ("  Feature byte-5        = 0x%02xn", pFps->featureByte[4]);
  140.     if ((pFps->featureByte[0] != 0) || (pFps->configTableAddr == 0))
  141. {
  142. printf ("MP Configuration Table does not exist");
  143. return;
  144. }
  145.     /* show MP Configuration Table Header */
  146.     pTbl = (MP_HEADER *)pFps->configTableAddr;
  147.     printf ("MP Configuration Tablen");
  148.     printf ("  Base Table Length     = 0x%04xn", pTbl->tableLength);
  149.     printf ("  OEM ID String         = ");
  150.     for (ix = 0; ix < sizeof (pTbl->oemId); ix++)
  151. printf ("%c", pTbl->oemId[ix]);
  152.     printf ("n");
  153.     printf ("  Product ID String     = ");
  154.     for (ix = 0; ix < sizeof (pTbl->prodId); ix++)
  155. printf ("%c", pTbl->prodId[ix]);
  156.     printf ("n");
  157.     printf ("  OEM Table Pointer     = 0x%08xn", pTbl->oemTablePtr);
  158.     printf ("  OEM Table Size        = 0x%04xn", pTbl->oemTableSize);
  159.     printf ("  Entry Count           = 0x%04xn", pTbl->entryCount);
  160.     printf ("  Address of local APIC = 0x%08xn", pTbl->localApicBaseAddr);
  161.     printf ("  Extended Table Length = 0x%04xn", pTbl->extendedTableLength);
  162.     /* show MP Configuration Table Entry */
  163.     p = (char *)pTbl + sizeof(MP_HEADER);
  164.     for (ix = 0; ix < pTbl->entryCount; ix++)
  165. switch (*p)
  166.     {
  167.     case MP_ENTRY_CPU: /* Processor Entry */
  168. pCpu = (MP_CPU *)p;
  169. printf ("Processor Entryn");
  170. printf ("  Local Apic ID         = 0x%02xn", 
  171. pCpu->localApicId);
  172. printf ("  Local Apic Ver        = 0x%02xn", 
  173. pCpu->localApicVersion);
  174. printf ("  CPU Flags             = 0x%02xn", pCpu->cpuFlags);
  175. printf ("  CPU Signature         = 0x%08xn", pCpu->cpuSig);
  176. printf ("  Feature Flags         = 0x%08xn", 
  177. pCpu->featureFlags);
  178. p += sizeof (MP_CPU);
  179. break;
  180.     case MP_ENTRY_BUS: /* Bus Entry */
  181. printf ("Bus Entryn");
  182. printf ("  Bus ID                = 0x%02xn", *(p + 1));
  183. printf ("  Bus Type String       = ");
  184. for (ix = 0; ix < 6; ix++)
  185.     printf ("%c", *(p + 2 + ix));
  186. printf ("n");
  187. p += 8;
  188. break;
  189.     case MP_ENTRY_IOAPIC: /* IO APIC Entry */
  190. pIoApic = (MP_IOAPIC *)p;
  191. printf ("IO Apic Entryn");
  192. printf ("  IO Apic ID            = 0x%02xn", 
  193. pIoApic->ioApicId);
  194. printf ("  IO Apic Ver           = 0x%02xn", 
  195. pIoApic->ioApicVersion);
  196. printf ("  IO Apic Flags         = 0x%02xn", 
  197. pIoApic->ioApicFlags);
  198. printf ("  IO Apic Address       = 0x%08xn", 
  199. pIoApic->ioApicBaseAddress);
  200. p += sizeof (MP_IOAPIC);
  201. break;
  202.     case MP_ENTRY_IOINTERRUPT: /* IO Interrupt Entry */
  203. printf ("IO Interrupt Entryn");
  204. printf ("  Interrupt Type        = 0x%02xn", *(p + 1));
  205. printf ("  IO Interrupt Flag     = 0x%04xn", 
  206. *(UINT16 *)(p + 2));
  207. printf ("  Source Bus ID         = 0x%02xn", *(p + 4));
  208. printf ("  Source Bus IRQ        = 0x%02xn", *(p + 5));
  209. printf ("  Dest IO Apic ID       = 0x%02xn", *(p + 6));
  210. printf ("  Dest IO Apic INTIN    = 0x%02xn", *(p + 7));
  211. p += 8;
  212. break;
  213.     case MP_ENTRY_LOINTERRUPT: /* Local Interrupt Entry */
  214. printf ("Local Interrupt Entryn");
  215. printf ("  Interrupt Type        = 0x%02xn", *(p + 1));
  216. printf ("  IO Interrupt Flag     = 0x%04xn", 
  217. *(UINT16 *)(p + 2));
  218. printf ("  Source Bus ID         = 0x%02xn", *(p + 4));
  219. printf ("  Source Bus IRQ        = 0x%02xn", *(p + 5));
  220. printf ("  Dest Local Apic ID    = 0x%02xn", *(p + 6));
  221. printf ("  Dest Local Apic INTIN = 0x%02xn", *(p + 7));
  222. p += 8;
  223. break;
  224.     default: /* Unknown Entry */
  225. p += 8; /* wild guess */
  226.     }
  227.     }