patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / arch / ppc64 / kernel / pacaData.c
1 /*
2  * c 2001 PPC 64 Team, IBM Corp
3  *
4  *      This program is free software; you can redistribute it and/or
5  *      modify it under the terms of the GNU General Public License
6  *      as published by the Free Software Foundation; either version
7  *      2 of the License, or (at your option) any later version.
8  */
9
10 #include <asm/types.h>
11 #include <asm/page.h>
12 #include <stddef.h>
13 #include <linux/config.h>
14 #include <linux/threads.h>
15 #include <asm/processor.h>
16 #include <asm/ptrace.h>
17
18 #include <asm/iSeries/ItLpPaca.h>
19 #include <asm/naca.h>
20 #include <asm/paca.h>
21
22 struct naca_struct *naca;
23 struct systemcfg *systemcfg;
24
25 /* The Paca is an array with one entry per processor.  Each contains an 
26  * ItLpPaca, which contains the information shared between the 
27  * hypervisor and Linux.  Each also contains an ItLpRegSave area which
28  * is used by the hypervisor to save registers.
29  * On systems with hardware multi-threading, there are two threads
30  * per processor.  The Paca array must contain an entry for each thread.
31  * The VPD Areas will give a max logical processors = 2 * max physical
32  * processors.  The processor VPD array needs one entry per physical
33  * processor (not thread).
34  */
35 #define PACAINITDATA(number,start,lpq,asrr,asrv)                            \
36 {                                                                           \
37         .xLpPacaPtr = &paca[number].xLpPaca,                                \
38         .xLpRegSavePtr = &paca[number].xRegSav,                             \
39         .lock_token = 0x8000,                                               \
40         .xPacaIndex = (number),         /* Paca Index */                    \
41         .default_decr = 0x00ff0000,     /* Initial Decr */                  \
42         .xStab_data = {                                                     \
43                 .real = (asrr),         /* Real pointer to segment table */ \
44                 .virt = (asrv),         /* Virt pointer to segment table */ \
45                 .next_round_robin = 1,                                      \
46         },                                                                  \
47         .lpQueuePtr = (lpq),            /* &xItLpQueue, */                  \
48         /* .xRtas = {                                                       \
49                 .lock = SPIN_LOCK_UNLOCKED                                  \
50         }, */                                                               \
51         .xProcStart = (start),          /* Processor start */               \
52         .xLpPaca = {                                                        \
53                 .xDesc = 0xd397d781,    /* "LpPa" */                        \
54                 .xSize = sizeof(struct ItLpPaca),                           \
55                 .xFPRegsInUse = 1,                                          \
56                 .xDynProcStatus = 2,                                        \
57                 .xDecrVal = 0x00ff0000,                                     \
58                 .xEndOfQuantum = 0xfffffffffffffffful,                      \
59                 .xSLBCount = 64,                                            \
60         },                                                                  \
61         .xRegSav = {                                                        \
62                 .xDesc = 0xd397d9e2,    /* "LpRS" */                        \
63                 .xSize = sizeof(struct ItLpRegSave)                         \
64         },                                                                  \
65         .exception_sp =                                                     \
66                 (&paca[number].exception_stack[0]) - EXC_FRAME_SIZE,        \
67 }
68
69 struct paca_struct paca[] __page_aligned = {
70 #ifdef CONFIG_PPC_ISERIES
71         PACAINITDATA( 0, 1, &xItLpQueue, 0, STAB0_VIRT_ADDR),
72 #else
73         PACAINITDATA( 0, 1, 0, STAB0_PHYS_ADDR, STAB0_VIRT_ADDR),
74 #endif
75         PACAINITDATA( 1, 0, 0, 0, 0),
76         PACAINITDATA( 2, 0, 0, 0, 0),
77         PACAINITDATA( 3, 0, 0, 0, 0),
78         PACAINITDATA( 4, 0, 0, 0, 0),
79         PACAINITDATA( 5, 0, 0, 0, 0),
80         PACAINITDATA( 6, 0, 0, 0, 0),
81         PACAINITDATA( 7, 0, 0, 0, 0),
82         PACAINITDATA( 8, 0, 0, 0, 0),
83         PACAINITDATA( 9, 0, 0, 0, 0),
84         PACAINITDATA(10, 0, 0, 0, 0),
85         PACAINITDATA(11, 0, 0, 0, 0),
86         PACAINITDATA(12, 0, 0, 0, 0),
87         PACAINITDATA(13, 0, 0, 0, 0),
88         PACAINITDATA(14, 0, 0, 0, 0),
89         PACAINITDATA(15, 0, 0, 0, 0),
90         PACAINITDATA(16, 0, 0, 0, 0),
91         PACAINITDATA(17, 0, 0, 0, 0),
92         PACAINITDATA(18, 0, 0, 0, 0),
93         PACAINITDATA(19, 0, 0, 0, 0),
94         PACAINITDATA(20, 0, 0, 0, 0),
95         PACAINITDATA(21, 0, 0, 0, 0),
96         PACAINITDATA(22, 0, 0, 0, 0),
97         PACAINITDATA(23, 0, 0, 0, 0),
98         PACAINITDATA(24, 0, 0, 0, 0),
99         PACAINITDATA(25, 0, 0, 0, 0),
100         PACAINITDATA(26, 0, 0, 0, 0),
101         PACAINITDATA(27, 0, 0, 0, 0),
102         PACAINITDATA(28, 0, 0, 0, 0),
103         PACAINITDATA(29, 0, 0, 0, 0),
104         PACAINITDATA(30, 0, 0, 0, 0),
105         PACAINITDATA(31, 0, 0, 0, 0),
106 #if NR_CPUS > 32
107         PACAINITDATA(32, 0, 0, 0, 0),
108         PACAINITDATA(33, 0, 0, 0, 0),
109         PACAINITDATA(34, 0, 0, 0, 0),
110         PACAINITDATA(35, 0, 0, 0, 0),
111         PACAINITDATA(36, 0, 0, 0, 0),
112         PACAINITDATA(37, 0, 0, 0, 0),
113         PACAINITDATA(38, 0, 0, 0, 0),
114         PACAINITDATA(39, 0, 0, 0, 0),
115         PACAINITDATA(40, 0, 0, 0, 0),
116         PACAINITDATA(41, 0, 0, 0, 0),
117         PACAINITDATA(42, 0, 0, 0, 0),
118         PACAINITDATA(43, 0, 0, 0, 0),
119         PACAINITDATA(44, 0, 0, 0, 0),
120         PACAINITDATA(45, 0, 0, 0, 0),
121         PACAINITDATA(46, 0, 0, 0, 0),
122         PACAINITDATA(47, 0, 0, 0, 0),
123         PACAINITDATA(48, 0, 0, 0, 0),
124         PACAINITDATA(49, 0, 0, 0, 0),
125         PACAINITDATA(50, 0, 0, 0, 0),
126         PACAINITDATA(51, 0, 0, 0, 0),
127         PACAINITDATA(52, 0, 0, 0, 0),
128         PACAINITDATA(53, 0, 0, 0, 0),
129         PACAINITDATA(54, 0, 0, 0, 0),
130         PACAINITDATA(55, 0, 0, 0, 0),
131         PACAINITDATA(56, 0, 0, 0, 0),
132         PACAINITDATA(57, 0, 0, 0, 0),
133         PACAINITDATA(58, 0, 0, 0, 0),
134         PACAINITDATA(59, 0, 0, 0, 0),
135         PACAINITDATA(60, 0, 0, 0, 0),
136         PACAINITDATA(61, 0, 0, 0, 0),
137         PACAINITDATA(62, 0, 0, 0, 0),
138         PACAINITDATA(63, 0, 0, 0, 0),
139 #if NR_CPUS > 64
140         PACAINITDATA(64, 0, 0, 0, 0),
141         PACAINITDATA(65, 0, 0, 0, 0),
142         PACAINITDATA(66, 0, 0, 0, 0),
143         PACAINITDATA(67, 0, 0, 0, 0),
144         PACAINITDATA(68, 0, 0, 0, 0),
145         PACAINITDATA(69, 0, 0, 0, 0),
146         PACAINITDATA(70, 0, 0, 0, 0),
147         PACAINITDATA(71, 0, 0, 0, 0),
148         PACAINITDATA(72, 0, 0, 0, 0),
149         PACAINITDATA(73, 0, 0, 0, 0),
150         PACAINITDATA(74, 0, 0, 0, 0),
151         PACAINITDATA(75, 0, 0, 0, 0),
152         PACAINITDATA(76, 0, 0, 0, 0),
153         PACAINITDATA(77, 0, 0, 0, 0),
154         PACAINITDATA(78, 0, 0, 0, 0),
155         PACAINITDATA(79, 0, 0, 0, 0),
156         PACAINITDATA(80, 0, 0, 0, 0),
157         PACAINITDATA(81, 0, 0, 0, 0),
158         PACAINITDATA(82, 0, 0, 0, 0),
159         PACAINITDATA(83, 0, 0, 0, 0),
160         PACAINITDATA(84, 0, 0, 0, 0),
161         PACAINITDATA(85, 0, 0, 0, 0),
162         PACAINITDATA(86, 0, 0, 0, 0),
163         PACAINITDATA(87, 0, 0, 0, 0),
164         PACAINITDATA(88, 0, 0, 0, 0),
165         PACAINITDATA(89, 0, 0, 0, 0),
166         PACAINITDATA(90, 0, 0, 0, 0),
167         PACAINITDATA(91, 0, 0, 0, 0),
168         PACAINITDATA(92, 0, 0, 0, 0),
169         PACAINITDATA(93, 0, 0, 0, 0),
170         PACAINITDATA(94, 0, 0, 0, 0),
171         PACAINITDATA(95, 0, 0, 0, 0),
172         PACAINITDATA(96, 0, 0, 0, 0),
173         PACAINITDATA(97, 0, 0, 0, 0),
174         PACAINITDATA(98, 0, 0, 0, 0),
175         PACAINITDATA(99, 0, 0, 0, 0),
176         PACAINITDATA(100, 0, 0, 0, 0),
177         PACAINITDATA(101, 0, 0, 0, 0),
178         PACAINITDATA(102, 0, 0, 0, 0),
179         PACAINITDATA(103, 0, 0, 0, 0),
180         PACAINITDATA(104, 0, 0, 0, 0),
181         PACAINITDATA(105, 0, 0, 0, 0),
182         PACAINITDATA(106, 0, 0, 0, 0),
183         PACAINITDATA(107, 0, 0, 0, 0),
184         PACAINITDATA(108, 0, 0, 0, 0),
185         PACAINITDATA(109, 0, 0, 0, 0),
186         PACAINITDATA(110, 0, 0, 0, 0),
187         PACAINITDATA(111, 0, 0, 0, 0),
188         PACAINITDATA(112, 0, 0, 0, 0),
189         PACAINITDATA(113, 0, 0, 0, 0),
190         PACAINITDATA(114, 0, 0, 0, 0),
191         PACAINITDATA(115, 0, 0, 0, 0),
192         PACAINITDATA(116, 0, 0, 0, 0),
193         PACAINITDATA(117, 0, 0, 0, 0),
194         PACAINITDATA(118, 0, 0, 0, 0),
195         PACAINITDATA(119, 0, 0, 0, 0),
196         PACAINITDATA(120, 0, 0, 0, 0),
197         PACAINITDATA(121, 0, 0, 0, 0),
198         PACAINITDATA(122, 0, 0, 0, 0),
199         PACAINITDATA(123, 0, 0, 0, 0),
200         PACAINITDATA(124, 0, 0, 0, 0),
201         PACAINITDATA(125, 0, 0, 0, 0),
202         PACAINITDATA(126, 0, 0, 0, 0),
203         PACAINITDATA(127, 0, 0, 0, 0),
204 #endif
205 #endif
206 };