ItLpPaca.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:6k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * ItLpPaca.h
  3.  * Copyright (C) 2001  Mike Corrigan IBM Corporation
  4.  * 
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  18.  */
  19. //=============================================================================
  20. //                                   
  21. // This control block contains the data that is shared between the 
  22. // hypervisor (PLIC) and the OS.
  23. //    
  24. //
  25. //----------------------------------------------------------------------------
  26. #ifndef  _PPC_TYPES_H
  27. #include <asm/types.h>
  28. #endif
  29. #ifndef _ITLPPACA_H
  30. #define _ITLPPACA_H
  31. struct ItLpPaca
  32. {
  33. //=============================================================================
  34. // CACHE_LINE_1 0x0000 - 0x007F Contains read-only data
  35. // NOTE: The xDynXyz fields are fields that will be dynamically changed by 
  36. // PLIC when preparing to bring a processor online or when dispatching a 
  37. // virtual processor!
  38. //=============================================================================
  39. u32 xDesc; // Eye catcher 0xD397D781 x00-x03
  40. u16 xSize; // Size of this struct x04-x05
  41. u16 xRsvd1_0; // Reserved x06-x07
  42. u16 xRsvd1_1:14; // Reserved x08-x09
  43. u8 xSharedProc:1; // Shared processor indicator ...
  44. u8 xSecondaryThread:1; // Secondary thread indicator ...
  45. volatile u8 xDynProcStatus:8; // Dynamic Status of this proc x0A-x0A
  46. u8 xSecondaryThreadCnt; // Secondary thread count x0B-x0B
  47. volatile u16 xDynHvPhysicalProcIndex;// Dynamic HV Physical Proc Index0C-x0D
  48. volatile u16 xDynHvLogicalProcIndex;// Dynamic HV Logical Proc Indexx0E-x0F
  49. u32 xDecrVal;    // Value for Decr programming  x10-x13
  50. u32 xPMCVal;        // Value for PMC regs          x14-x17
  51. volatile u32 xDynHwNodeId; // Dynamic Hardware Node id x18-x1B
  52. volatile u32 xDynHwProcId; // Dynamic Hardware Proc Id x1C-x1F
  53. volatile u32 xDynPIR; // Dynamic ProcIdReg value x20-x23
  54. u32 xDseiData;            // DSEI data                   x24-x27
  55. u64 xSPRG3;                // SPRG3 value                 x28-x2F
  56. u8 xRsvd1_3[80]; // Reserved x30-x7F
  57.    
  58. //=============================================================================
  59. // CACHE_LINE_2 0x0080 - 0x00FF Contains local read-write data
  60. //=============================================================================
  61. // This Dword contains a byte for each type of interrupt that can occur.  
  62. // The IPI is a count while the others are just a binary 1 or 0.
  63. union {
  64. u64 xAnyInt;
  65. struct {
  66. u16 xRsvd; // Reserved - cleared by #mpasmbl
  67. u8 xXirrInt; // Indicates xXirrValue is valid or Immed IO
  68. u8 xIpiCnt; // IPI Count
  69. u8 xDecrInt; // DECR interrupt occurred
  70. u8 xPdcInt; // PDC interrupt occurred
  71. u8 xQuantumInt; // Interrupt quantum reached
  72. u8 xOldPlicDeferredExtInt; // Old PLIC has a deferred XIRR pending
  73. } xFields;
  74. } xIntDword;
  75. // Whenever any fields in this Dword are set then PLIC will defer the 
  76. // processing of external interrupts.  Note that PLIC will store the 
  77. // XIRR directly into the xXirrValue field so that another XIRR will 
  78. // not be presented until this one clears.  The layout of the low 
  79. // 4-bytes of this Dword is upto SLIC - PLIC just checks whether the 
  80. // entire Dword is zero or not.  A non-zero value in the low order 
  81. // 2-bytes will result in SLIC being granted the highest thread 
  82. // priority upon return.  A 0 will return to SLIC as medium priority.
  83. u64 xPlicDeferIntsArea; // Entire Dword
  84. // Used to pass the real SRR0/1 from PLIC to SLIC as well as to 
  85. // pass the target SRR0/1 from SLIC to PLIC on a SetAsrAndRfid.
  86. u64     xSavedSrr0;             // Saved SRR0                   x10-x17
  87. u64     xSavedSrr1;             // Saved SRR1                   x18-x1F
  88. // Used to pass parms from the OS to PLIC for SetAsrAndRfid
  89. u64     xSavedGpr3;             // Saved GPR3                   x20-x27
  90. u64     xSavedGpr4;             // Saved GPR4                   x28-x2F
  91. u64     xSavedGpr5;             // Saved GPR5                   x30-x37
  92. u8 xRsvd2_1; // Reserved x38-x38
  93. u8      xCpuCtlsTaskAttributes; // Task attributes for cpuctls  x39-x39
  94. u8      xFPRegsInUse;           // FP regs in use               x3A-x3A
  95. u8      xPMCRegsInUse;          // PMC regs in use              x3B-x3B
  96. volatile u32  xSavedDecr; // Saved Decr Value             x3C-x3F
  97. volatile u64  xEmulatedTimeBase;// Emulated TB for this thread  x40-x47
  98. volatile u64  xCurPLICLatency; // Unaccounted PLIC latency     x48-x4F
  99. u64     xTotPLICLatency;        // Accumulated PLIC latency     x50-x57   
  100. u64     xWaitStateCycles;       // Wait cycles for this proc    x58-x5F
  101. u64     xEndOfQuantum;          // TB at end of quantum         x60-x67
  102. u64     xPDCSavedSPRG1;         // Saved SPRG1 for PMC int      x68-x6F
  103. u64     xPDCSavedSRR0;          // Saved SRR0 for PMC int       x70-x77
  104. volatile u32 xVirtualDecr; // Virtual DECR for shared procsx78-x7B
  105. u32     xRsvd2_2; // Reserved x7C-x7F
  106. //=============================================================================
  107. // CACHE_LINE_3 0x0100 - 0x007F: This line is shared with other processors
  108. //=============================================================================
  109. // This is the xYieldCount.  An "odd" value (low bit on) means that 
  110. // the processor is yielded (either because of an OS yield or a PLIC 
  111. // preempt).  An even value implies that the processor is currently 
  112. // executing.
  113. // NOTE: This value will ALWAYS be zero for dedicated processors and 
  114. // will NEVER be zero for shared processors (ie, initialized to a 1).
  115. volatile u32 xYieldCount; // PLIC increments each dispatchx00-x03
  116. u8 xRsvd3_0[124]; // Reserved                     x04-x7F         
  117. //=============================================================================
  118. // CACHE_LINE_4-5 0x0100 - 0x01FF Contains PMC interrupt data
  119. //=============================================================================
  120. u8      xPmcSaveArea[256]; // PMC interrupt Area           x00-xFF
  121. };
  122. #endif // _ITLPPACA_H