PageRenderTime 43ms CodeModel.GetById 9ms app.highlight 30ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/ppc64/kernel/pacaData.c

https://bitbucket.org/evzijst/gittest
C | 224 lines | 195 code | 9 blank | 20 comment | 0 complexity | ac9b7c4615f683f20db6a280b51a5839 MD5 | raw file
  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 <linux/config.h>
 11#include <linux/types.h>
 12#include <linux/threads.h>
 13#include <linux/module.h>
 14
 15#include <asm/processor.h>
 16#include <asm/ptrace.h>
 17#include <asm/page.h>
 18
 19#include <asm/lppaca.h>
 20#include <asm/iSeries/ItLpQueue.h>
 21#include <asm/paca.h>
 22
 23static union {
 24	struct systemcfg	data;
 25	u8			page[PAGE_SIZE];
 26} systemcfg_store __page_aligned;
 27struct systemcfg *systemcfg = &systemcfg_store.data;
 28EXPORT_SYMBOL(systemcfg);
 29
 30
 31/* This symbol is provided by the linker - let it fill in the paca
 32 * field correctly */
 33extern unsigned long __toc_start;
 34
 35/* The Paca is an array with one entry per processor.  Each contains an 
 36 * lppaca, which contains the information shared between the
 37 * hypervisor and Linux.  Each also contains an ItLpRegSave area which
 38 * is used by the hypervisor to save registers.
 39 * On systems with hardware multi-threading, there are two threads
 40 * per processor.  The Paca array must contain an entry for each thread.
 41 * The VPD Areas will give a max logical processors = 2 * max physical
 42 * processors.  The processor VPD array needs one entry per physical
 43 * processor (not thread).
 44 */
 45#ifdef CONFIG_PPC_ISERIES
 46#define EXTRA_INITS(number, lpq)					    \
 47	.lppaca_ptr = &paca[number].lppaca,				    \
 48	.lpqueue_ptr = (lpq),		/* &xItLpQueue, */		    \
 49	.reg_save_ptr = &paca[number].reg_save,				    \
 50	.reg_save = {							    \
 51		.xDesc = 0xd397d9e2,	/* "LpRS" */			    \
 52		.xSize = sizeof(struct ItLpRegSave)			    \
 53	},
 54#else
 55#define EXTRA_INITS(number, lpq)
 56#endif
 57
 58#define PACAINITDATA(number,start,lpq,asrr,asrv)			    \
 59{									    \
 60	.lock_token = 0x8000,						    \
 61	.paca_index = (number),		/* Paca Index */		    \
 62	.default_decr = 0x00ff0000,	/* Initial Decr */		    \
 63	.kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL,		    \
 64	.stab_real = (asrr), 		/* Real pointer to segment table */ \
 65	.stab_addr = (asrv),		/* Virt pointer to segment table */ \
 66	.cpu_start = (start),		/* Processor start */		    \
 67	.hw_cpu_id = 0xffff,						    \
 68	.lppaca = {							    \
 69		.desc = 0xd397d781,	/* "LpPa" */			    \
 70		.size = sizeof(struct lppaca),				    \
 71		.dyn_proc_status = 2,					    \
 72		.decr_val = 0x00ff0000,					    \
 73		.fpregs_in_use = 1,					    \
 74		.end_of_quantum = 0xfffffffffffffffful,			    \
 75		.slb_count = 64,					    \
 76	},								    \
 77	EXTRA_INITS((number), (lpq))					    \
 78}
 79
 80struct paca_struct paca[] = {
 81#ifdef CONFIG_PPC_ISERIES
 82	PACAINITDATA( 0, 1, &xItLpQueue, 0, STAB0_VIRT_ADDR),
 83#else
 84	PACAINITDATA( 0, 1, NULL, STAB0_PHYS_ADDR, STAB0_VIRT_ADDR),
 85#endif
 86#if NR_CPUS > 1
 87	PACAINITDATA( 1, 0, NULL, 0, 0),
 88	PACAINITDATA( 2, 0, NULL, 0, 0),
 89	PACAINITDATA( 3, 0, NULL, 0, 0),
 90#if NR_CPUS > 4
 91	PACAINITDATA( 4, 0, NULL, 0, 0),
 92	PACAINITDATA( 5, 0, NULL, 0, 0),
 93	PACAINITDATA( 6, 0, NULL, 0, 0),
 94	PACAINITDATA( 7, 0, NULL, 0, 0),
 95#if NR_CPUS > 8
 96	PACAINITDATA( 8, 0, NULL, 0, 0),
 97	PACAINITDATA( 9, 0, NULL, 0, 0),
 98	PACAINITDATA(10, 0, NULL, 0, 0),
 99	PACAINITDATA(11, 0, NULL, 0, 0),
100	PACAINITDATA(12, 0, NULL, 0, 0),
101	PACAINITDATA(13, 0, NULL, 0, 0),
102	PACAINITDATA(14, 0, NULL, 0, 0),
103	PACAINITDATA(15, 0, NULL, 0, 0),
104	PACAINITDATA(16, 0, NULL, 0, 0),
105	PACAINITDATA(17, 0, NULL, 0, 0),
106	PACAINITDATA(18, 0, NULL, 0, 0),
107	PACAINITDATA(19, 0, NULL, 0, 0),
108	PACAINITDATA(20, 0, NULL, 0, 0),
109	PACAINITDATA(21, 0, NULL, 0, 0),
110	PACAINITDATA(22, 0, NULL, 0, 0),
111	PACAINITDATA(23, 0, NULL, 0, 0),
112	PACAINITDATA(24, 0, NULL, 0, 0),
113	PACAINITDATA(25, 0, NULL, 0, 0),
114	PACAINITDATA(26, 0, NULL, 0, 0),
115	PACAINITDATA(27, 0, NULL, 0, 0),
116	PACAINITDATA(28, 0, NULL, 0, 0),
117	PACAINITDATA(29, 0, NULL, 0, 0),
118	PACAINITDATA(30, 0, NULL, 0, 0),
119	PACAINITDATA(31, 0, NULL, 0, 0),
120#if NR_CPUS > 32
121	PACAINITDATA(32, 0, NULL, 0, 0),
122	PACAINITDATA(33, 0, NULL, 0, 0),
123	PACAINITDATA(34, 0, NULL, 0, 0),
124	PACAINITDATA(35, 0, NULL, 0, 0),
125	PACAINITDATA(36, 0, NULL, 0, 0),
126	PACAINITDATA(37, 0, NULL, 0, 0),
127	PACAINITDATA(38, 0, NULL, 0, 0),
128	PACAINITDATA(39, 0, NULL, 0, 0),
129	PACAINITDATA(40, 0, NULL, 0, 0),
130	PACAINITDATA(41, 0, NULL, 0, 0),
131	PACAINITDATA(42, 0, NULL, 0, 0),
132	PACAINITDATA(43, 0, NULL, 0, 0),
133	PACAINITDATA(44, 0, NULL, 0, 0),
134	PACAINITDATA(45, 0, NULL, 0, 0),
135	PACAINITDATA(46, 0, NULL, 0, 0),
136	PACAINITDATA(47, 0, NULL, 0, 0),
137	PACAINITDATA(48, 0, NULL, 0, 0),
138	PACAINITDATA(49, 0, NULL, 0, 0),
139	PACAINITDATA(50, 0, NULL, 0, 0),
140	PACAINITDATA(51, 0, NULL, 0, 0),
141	PACAINITDATA(52, 0, NULL, 0, 0),
142	PACAINITDATA(53, 0, NULL, 0, 0),
143	PACAINITDATA(54, 0, NULL, 0, 0),
144	PACAINITDATA(55, 0, NULL, 0, 0),
145	PACAINITDATA(56, 0, NULL, 0, 0),
146	PACAINITDATA(57, 0, NULL, 0, 0),
147	PACAINITDATA(58, 0, NULL, 0, 0),
148	PACAINITDATA(59, 0, NULL, 0, 0),
149	PACAINITDATA(60, 0, NULL, 0, 0),
150	PACAINITDATA(61, 0, NULL, 0, 0),
151	PACAINITDATA(62, 0, NULL, 0, 0),
152	PACAINITDATA(63, 0, NULL, 0, 0),
153#if NR_CPUS > 64
154	PACAINITDATA(64, 0, NULL, 0, 0),
155	PACAINITDATA(65, 0, NULL, 0, 0),
156	PACAINITDATA(66, 0, NULL, 0, 0),
157	PACAINITDATA(67, 0, NULL, 0, 0),
158	PACAINITDATA(68, 0, NULL, 0, 0),
159	PACAINITDATA(69, 0, NULL, 0, 0),
160	PACAINITDATA(70, 0, NULL, 0, 0),
161	PACAINITDATA(71, 0, NULL, 0, 0),
162	PACAINITDATA(72, 0, NULL, 0, 0),
163	PACAINITDATA(73, 0, NULL, 0, 0),
164	PACAINITDATA(74, 0, NULL, 0, 0),
165	PACAINITDATA(75, 0, NULL, 0, 0),
166	PACAINITDATA(76, 0, NULL, 0, 0),
167	PACAINITDATA(77, 0, NULL, 0, 0),
168	PACAINITDATA(78, 0, NULL, 0, 0),
169	PACAINITDATA(79, 0, NULL, 0, 0),
170	PACAINITDATA(80, 0, NULL, 0, 0),
171	PACAINITDATA(81, 0, NULL, 0, 0),
172	PACAINITDATA(82, 0, NULL, 0, 0),
173	PACAINITDATA(83, 0, NULL, 0, 0),
174	PACAINITDATA(84, 0, NULL, 0, 0),
175	PACAINITDATA(85, 0, NULL, 0, 0),
176	PACAINITDATA(86, 0, NULL, 0, 0),
177	PACAINITDATA(87, 0, NULL, 0, 0),
178	PACAINITDATA(88, 0, NULL, 0, 0),
179	PACAINITDATA(89, 0, NULL, 0, 0),
180	PACAINITDATA(90, 0, NULL, 0, 0),
181	PACAINITDATA(91, 0, NULL, 0, 0),
182	PACAINITDATA(92, 0, NULL, 0, 0),
183	PACAINITDATA(93, 0, NULL, 0, 0),
184	PACAINITDATA(94, 0, NULL, 0, 0),
185	PACAINITDATA(95, 0, NULL, 0, 0),
186	PACAINITDATA(96, 0, NULL, 0, 0),
187	PACAINITDATA(97, 0, NULL, 0, 0),
188	PACAINITDATA(98, 0, NULL, 0, 0),
189	PACAINITDATA(99, 0, NULL, 0, 0),
190	PACAINITDATA(100, 0, NULL, 0, 0),
191	PACAINITDATA(101, 0, NULL, 0, 0),
192	PACAINITDATA(102, 0, NULL, 0, 0),
193	PACAINITDATA(103, 0, NULL, 0, 0),
194	PACAINITDATA(104, 0, NULL, 0, 0),
195	PACAINITDATA(105, 0, NULL, 0, 0),
196	PACAINITDATA(106, 0, NULL, 0, 0),
197	PACAINITDATA(107, 0, NULL, 0, 0),
198	PACAINITDATA(108, 0, NULL, 0, 0),
199	PACAINITDATA(109, 0, NULL, 0, 0),
200	PACAINITDATA(110, 0, NULL, 0, 0),
201	PACAINITDATA(111, 0, NULL, 0, 0),
202	PACAINITDATA(112, 0, NULL, 0, 0),
203	PACAINITDATA(113, 0, NULL, 0, 0),
204	PACAINITDATA(114, 0, NULL, 0, 0),
205	PACAINITDATA(115, 0, NULL, 0, 0),
206	PACAINITDATA(116, 0, NULL, 0, 0),
207	PACAINITDATA(117, 0, NULL, 0, 0),
208	PACAINITDATA(118, 0, NULL, 0, 0),
209	PACAINITDATA(119, 0, NULL, 0, 0),
210	PACAINITDATA(120, 0, NULL, 0, 0),
211	PACAINITDATA(121, 0, NULL, 0, 0),
212	PACAINITDATA(122, 0, NULL, 0, 0),
213	PACAINITDATA(123, 0, NULL, 0, 0),
214	PACAINITDATA(124, 0, NULL, 0, 0),
215	PACAINITDATA(125, 0, NULL, 0, 0),
216	PACAINITDATA(126, 0, NULL, 0, 0),
217	PACAINITDATA(127, 0, NULL, 0, 0),
218#endif
219#endif
220#endif
221#endif
222#endif
223};
224EXPORT_SYMBOL(paca);