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

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _PPC64_PACA_H
  2. #define _PPC64_PACA_H
  3. /*============================================================================
  4.  *                                                         Header File Id
  5.  * Name______________: paca.h
  6.  *
  7.  * Description_______:
  8.  *
  9.  * This control block defines the PACA which defines the processor 
  10.  * specific data for each logical processor on the system.  
  11.  * There are some pointers defined that are utilized by PLIC.
  12.  *
  13.  * C 2001 PPC 64 Team, IBM Corp
  14.  *
  15.  * This program is free software; you can redistribute it and/or
  16.  * modify it under the terms of the GNU General Public License
  17.  * as published by the Free Software Foundation; either version
  18.  * 2 of the License, or (at your option) any later version.
  19.  */    
  20. #include <asm/types.h>
  21. #define N_EXC_STACK    2
  22. /*-----------------------------------------------------------------------------
  23.  * Other Includes
  24.  *-----------------------------------------------------------------------------
  25.  */
  26. #include <asm/iSeries/ItLpPaca.h>
  27. #include <asm/iSeries/ItLpRegSave.h>
  28. #include <asm/iSeries/ItLpQueue.h>
  29. #include <asm/rtas.h>
  30. #include <asm/mmu.h>
  31. #include <asm/processor.h>
  32. /* A paca entry is required for each logical processor.  On systems
  33.  * that support hardware multi-threading, this is equal to twice the
  34.  * number of physical processors.  On LPAR systems, we are required
  35.  * to have space for the maximum number of logical processors we
  36.  * could ever possibly have.  Currently, we are limited to allocating
  37.  * 24 processors to a partition which gives 48 logical processors on
  38.  * an HMT box.  Therefore, we reserve this many paca entries.
  39.  */
  40. #define MAX_PROCESSORS 24
  41. #define MAX_PACAS MAX_PROCESSORS * 2
  42. extern struct paca_struct paca[];
  43. #define get_paca() ((struct paca_struct *)mfspr(SPRG3))
  44. /*============================================================================
  45.  * Name_______: paca
  46.  *
  47.  * Description:
  48.  *
  49.  * Defines the layout of the paca.  
  50.  *
  51.  * This structure is not directly accessed by PLIC or the SP except
  52.  * for the first two pointers that point to the ItLpPaca area and the
  53.  * ItLpRegSave area for this processor.  Both the ItLpPaca and
  54.  * ItLpRegSave objects are currently contained within the
  55.  * PACA but they do not need to be.
  56.  *
  57.  *============================================================================
  58.  */
  59. struct paca_struct {
  60. /*=====================================================================================
  61.  * CACHE_LINE_1 0x0000 - 0x007F
  62.  *=====================================================================================
  63.  */
  64. struct ItLpPaca *xLpPacaPtr; /* Pointer to LpPaca for PLIC 0x00 */
  65. struct ItLpRegSave *xLpRegSavePtr; /* Pointer to LpRegSave for PLIC 0x08 */
  66. u64 xCurrent;           /* Pointer to current 0x10 */
  67. u16 xPacaIndex; /* Logical processor number 0x18 */
  68. u16 xHwProcNum; /* Actual Hardware Processor Number 0x1a */
  69. u32 default_decr; /* Default decrementer value 0x1c */
  70. u64 xHrdIntStack; /* Stack for hardware interrupts 0x20 */
  71. u64 xKsave; /* Saved Kernel stack addr or zero 0x28 */
  72. u64 pvr; /* Processor version register 0x30 */
  73. u8 *exception_sp; /* 0x38 */
  74. struct ItLpQueue *lpQueuePtr; /* LpQueue handled by this processor    0x40 */
  75. u64  xTOC; /* Kernel TOC address 0x48 */
  76. STAB xStab_data; /* Segment table information 0x50,0x58,0x60 */
  77. u8 xSegments[STAB_CACHE_SIZE]; /* Cache of used stab entries 0x68,0x70 */
  78. u8 xProcEnabled; /* 1=soft enabled 0x78 */
  79. u8 xHrdIntCount; /* Count of active hardware interrupts  0x79  */
  80. u8 resv1[6]; /* 0x7B-0x7F */
  81. /*=====================================================================================
  82.  * CACHE_LINE_2 0x0080 - 0x00FF
  83.  *=====================================================================================
  84.  */
  85. u64 *pgd_cache; /* 0x00 */
  86. u64 *pmd_cache; /* 0x08 */
  87. u64 *pte_cache; /* 0x10 */
  88. u64 pgtable_cache_sz; /* 0x18 */
  89. u64 next_jiffy_update_tb; /* TB value for next jiffy update 0x20 */
  90. u32 lpEvent_count; /* lpEvents processed 0x28 */
  91. u8  rsvd2[128-5*8-1*4]; /* 0x68 */
  92. /*=====================================================================================
  93.  * CACHE_LINE_3 0x0100 - 0x017F
  94.  *=====================================================================================
  95.  */
  96. u8 xProcStart; /* At startup, processor spins until 0x100 */
  97.    /* xProcStart becomes non-zero. */
  98. u8 rsvd3[127];
  99. /*=====================================================================================
  100.  * CACHE_LINE_4-8  0x0180 - 0x03FF Contains ItLpPaca
  101.  *=====================================================================================
  102.  */
  103. struct ItLpPaca xLpPaca; /* Space for ItLpPaca */
  104. /*=====================================================================================
  105.  * CACHE_LINE_9-16 0x0400 - 0x07FF Contains ItLpRegSave
  106.  *=====================================================================================
  107.  */
  108. struct ItLpRegSave xRegSav; /* Register save for proc */
  109. /*=====================================================================================
  110.  * CACHE_LINE_17-18 0x0800 - 0x0EFF Reserved
  111.  *=====================================================================================
  112.  */
  113. struct rtas_args xRtas; /* Per processor RTAS struct */
  114. u64 xR1; /* r1 save for RTAS calls */
  115. u64 xSavedMsr; /* Old msr saved here by HvCall */
  116. u8 rsvd5[256-16-sizeof(struct rtas_args)];
  117. /*=====================================================================================
  118.  * CACHE_LINE_19 - 20 Profile Data
  119.  *=====================================================================================
  120.  */
  121. u32 pmc[12];                    /* Default pmc value */
  122. u64 pmcc[8];                    /* Cumulative pmc counts        */
  123. u64 rsvd5a[2];
  124. u32 prof_multiplier; /*  */
  125. u32 prof_shift; /* iSeries shift for profile bucket size */
  126. u32 *prof_buffer; /* iSeries profiling buffer  */
  127. u32 *prof_stext; /* iSeries start of kernel text  */
  128. u32 *prof_etext; /* iSeries start of kernel text  */
  129. u32 prof_len; /* iSeries length of profile buffer -1  */
  130. u8  prof_mode;                  /* */
  131. u8  rsvv5b[3];
  132. u64 prof_counter; /*  */
  133. u8  rsvd5c[128-8*6];
  134. /*=====================================================================================
  135.  * CACHE_LINE_20-30
  136.  *=====================================================================================
  137.  */
  138. u8 rsvd6[0x500];
  139. /*=====================================================================================
  140.  * CACHE_LINE_31 0x0F00 - 0x0F7F Exception stack
  141.  *=====================================================================================
  142.  */
  143. u8 exception_stack[N_EXC_STACK*EXC_FRAME_SIZE];
  144. /*=====================================================================================
  145.  * CACHE_LINE_32 0x0F80 - 0x0FFF Reserved
  146.  *=====================================================================================
  147.  */
  148. u8 rsvd7[0x80];                  /* Give the stack some rope ... */
  149. /*=====================================================================================
  150.  * Page 2 Reserved for guard page.  Also used as a stack early in SMP boots before
  151.  *        relocation is enabled.
  152.  *=====================================================================================
  153.  */
  154. u8 guard[0x1000];               /* ... and then hang 'em         */ 
  155. };
  156. #endif /* _PPC64_PACA_H */