OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-ppc64/] [paca.h] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.