Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
powerpc
include
asm
paca.h
Go to the documentation of this file.
1
/*
2
* This control block defines the PACA which defines the processor
3
* specific data for each logical processor on the system.
4
* There are some pointers defined that are utilized by PLIC.
5
*
6
* C 2001 PPC 64 Team, IBM Corp
7
*
8
* This program is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU General Public License
10
* as published by the Free Software Foundation; either version
11
* 2 of the License, or (at your option) any later version.
12
*/
13
#ifndef _ASM_POWERPC_PACA_H
14
#define _ASM_POWERPC_PACA_H
15
#ifdef __KERNEL__
16
17
#ifdef CONFIG_PPC64
18
19
#include <
linux/init.h
>
20
#include <asm/types.h>
21
#include <
asm/lppaca.h
>
22
#include <asm/mmu.h>
23
#include <asm/page.h>
24
#include <
asm/exception-64e.h
>
25
#ifdef CONFIG_KVM_BOOK3S_64_HANDLER
26
#include <
asm/kvm_book3s_asm.h
>
27
#endif
28
29
register
struct
paca_struct *local_paca
asm
(
"r13"
);
30
31
#if defined(CONFIG_DEBUG_PREEMPT) && defined(CONFIG_SMP)
32
extern
unsigned
int
debug_smp_processor_id
(
void
);
/* from linux/smp.h */
33
/*
34
* Add standard checks that preemption cannot occur when using get_paca():
35
* otherwise the paca_struct it points to may be the wrong one just after.
36
*/
37
#define get_paca() ((void) debug_smp_processor_id(), local_paca)
38
#else
39
#define get_paca() local_paca
40
#endif
41
42
#define get_lppaca() (get_paca()->lppaca_ptr)
43
#define get_slb_shadow() (get_paca()->slb_shadow_ptr)
44
45
struct
task_struct
;
46
struct
opal_machine_check_event
;
47
48
/*
49
* Defines the layout of the paca.
50
*
51
* This structure is not directly accessed by firmware or the service
52
* processor.
53
*/
54
struct
paca_struct {
55
#ifdef CONFIG_PPC_BOOK3S
56
/*
57
* Because hw_cpu_id, unlike other paca fields, is accessed
58
* routinely from other CPUs (from the IRQ code), we stick to
59
* read-only (after boot) fields in the first cacheline to
60
* avoid cacheline bouncing.
61
*/
62
63
struct
lppaca *lppaca_ptr;
/* Pointer to LpPaca for PLIC */
64
#endif
/* CONFIG_PPC_BOOK3S */
65
/*
66
* MAGIC: the spinlock functions in arch/powerpc/lib/locks.c
67
* load lock_token and paca_index with a single lwz
68
* instruction. They must travel together and be properly
69
* aligned.
70
*/
71
u16
lock_token;
/* Constant 0x8000, used in locks */
72
u16
paca_index;
/* Logical processor number */
73
74
u64
kernel_toc;
/* Kernel TOC address */
75
u64
kernelbase;
/* Base address of kernel */
76
u64
kernel_msr;
/* MSR while running in kernel */
77
#ifdef CONFIG_PPC_STD_MMU_64
78
u64
stab_real;
/* Absolute address of segment table */
79
u64
stab_addr;
/* Virtual address of segment table */
80
#endif
/* CONFIG_PPC_STD_MMU_64 */
81
void
*emergency_sp;
/* pointer to emergency stack */
82
u64
data_offset
;
/* per cpu data offset */
83
s16
hw_cpu_id;
/* Physical processor number */
84
u8
cpu_start;
/* At startup, processor spins until */
85
/* this becomes non-zero. */
86
u8
kexec_state;
/* set when kexec down has irqs off */
87
#ifdef CONFIG_PPC_STD_MMU_64
88
struct
slb_shadow *slb_shadow_ptr;
89
struct
dtl_entry *dispatch_log;
90
struct
dtl_entry *dispatch_log_end;
91
92
/*
93
* Now, starting in cacheline 2, the exception save areas
94
*/
95
/* used for most interrupts/exceptions */
96
u64
exgen[11]
__attribute__
((
aligned
(0x80)));
97
u64
exmc[11];
/* used for machine checks */
98
u64
exslb[11];
/* used for SLB/segment table misses
99
* on the linear mapping */
100
/* SLB related definitions */
101
u16
vmalloc_sllp;
102
u16
slb_cache_ptr;
103
u32
slb_cache[
SLB_CACHE_ENTRIES
];
104
#endif
/* CONFIG_PPC_STD_MMU_64 */
105
106
#ifdef CONFIG_PPC_BOOK3E
107
u64
exgen[8]
__attribute__
((
aligned
(0x80)));
108
/* Keep pgd in the same cacheline as the start of extlb */
109
pgd_t
*pgd
__attribute__
((
aligned
(0x80)));
/* Current PGD */
110
pgd_t
*kernel_pgd;
/* Kernel PGD */
111
/* We can have up to 3 levels of reentrancy in the TLB miss handler */
112
u64
extlb[3][
EX_TLB_SIZE
/
sizeof
(
u64
)];
113
u64
exmc[8];
/* used for machine checks */
114
u64
excrit[8];
/* used for crit interrupts */
115
u64
exdbg[8];
/* used for debug interrupts */
116
117
/* Kernel stack pointers for use by special exceptions */
118
void
*mc_kstack;
119
void
*crit_kstack;
120
void
*dbg_kstack;
121
#endif
/* CONFIG_PPC_BOOK3E */
122
123
mm_context_t
context
;
124
125
/*
126
* then miscellaneous read-write fields
127
*/
128
struct
task_struct
*
__current
;
/* Pointer to current */
129
u64
kstack;
/* Saved Kernel stack addr */
130
u64
stab_rr;
/* stab/slb round-robin counter */
131
u64
saved_r1;
/* r1 save for RTAS calls or PM */
132
u64
saved_msr;
/* MSR saved here by enter_rtas */
133
u16
trap_save;
/* Used when bad stack is encountered */
134
u8
soft_enabled;
/* irq soft-enable flag */
135
u8
irq_happened;
/* irq happened while soft-disabled */
136
u8
io_sync;
/* writel() needs spin_unlock sync */
137
u8
irq_work_pending;
/* IRQ_WORK interrupt while soft-disable */
138
u8
nap_state_lost;
/* NV GPR values lost in power7_idle */
139
u64
sprg3;
/* Saved user-visible sprg */
140
141
#ifdef CONFIG_PPC_POWERNV
142
/* Pointer to OPAL machine check event structure set by the
143
* early exception handler for use by high level C handler
144
*/
145
struct
opal_machine_check_event
*opal_mc_evt;
146
#endif
147
148
/* Stuff for accurate time accounting */
149
u64
user_time;
/* accumulated usermode TB ticks */
150
u64
system_time
;
/* accumulated system TB ticks */
151
u64
user_time_scaled;
/* accumulated usermode SPURR ticks */
152
u64
starttime;
/* TB value snapshot */
153
u64
starttime_user;
/* TB value on exit to usermode */
154
u64
startspurr;
/* SPURR value snapshot */
155
u64
utime_sspurr;
/* ->user_time when ->startspurr set */
156
u64
stolen_time;
/* TB ticks taken by hypervisor */
157
u64
dtl_ridx;
/* read index in dispatch log */
158
struct
dtl_entry *dtl_curr;
/* pointer corresponding to dtl_ridx */
159
160
#ifdef CONFIG_KVM_BOOK3S_HANDLER
161
#ifdef CONFIG_KVM_BOOK3S_PR
162
/* We use this to store guest state in */
163
struct
kvmppc_book3s_shadow_vcpu
shadow_vcpu;
164
#endif
165
struct
kvmppc_host_state
kvm_hstate;
166
#endif
167
};
168
169
extern
struct
paca_struct *
paca
;
170
extern
__initdata
struct
paca_struct
boot_paca
;
171
extern
void
initialise_paca
(
struct
paca_struct *new_paca,
int
cpu
);
172
extern
void
setup_paca
(
struct
paca_struct *new_paca);
173
extern
void
allocate_pacas
(
void
);
174
extern
void
free_unused_pacas
(
void
);
175
176
#else
/* CONFIG_PPC64 */
177
178
static
inline
void
allocate_pacas
(
void
) { };
179
static
inline
void
free_unused_pacas
(
void
) { };
180
181
#endif
/* CONFIG_PPC64 */
182
183
#endif
/* __KERNEL__ */
184
#endif
/* _ASM_POWERPC_PACA_H */
Generated on Thu Jan 10 2013 13:13:23 for Linux Kernel by
1.8.2