aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc/kernel/entry.h
diff options
context:
space:
mode:
authorSam Ravnborg <sam@ravnborg.org>2008-12-03 06:11:52 -0500
committerDavid S. Miller <davem@davemloft.net>2008-12-04 12:17:21 -0500
commita88b5ba8bd8ac18aad65ee6c6a254e2e74876db3 (patch)
treeeb3d0ffaf53c3f7ec6083752c2097cecd1cb892a /arch/sparc/kernel/entry.h
parentd670bd4f803c8b646acd20f3ba21e65458293faf (diff)
sparc,sparc64: unify kernel/
o Move all files from sparc64/kernel/ to sparc/kernel - rename as appropriate o Update sparc/Makefile to the changes o Update sparc/kernel/Makefile to include the sparc64 files NOTE: This commit changes link order on sparc64! Link order had to change for either of sparc32 and sparc64. And assuming sparc64 see more testing than sparc32 change link order on sparc64 where issues will be caught faster. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/entry.h')
-rw-r--r--arch/sparc/kernel/entry.h195
1 files changed, 195 insertions, 0 deletions
diff --git a/arch/sparc/kernel/entry.h b/arch/sparc/kernel/entry.h
new file mode 100644
index 00000000000..34d7ab5e10d
--- /dev/null
+++ b/arch/sparc/kernel/entry.h
@@ -0,0 +1,195 @@
1#ifndef _ENTRY_H
2#define _ENTRY_H
3
4#include <linux/kernel.h>
5#include <linux/types.h>
6#include <linux/init.h>
7
8extern const char *sparc_cpu_type;
9extern const char *sparc_fpu_type;
10
11extern void __init per_cpu_patch(void);
12extern void __init sun4v_patch(void);
13extern void __init boot_cpu_id_too_large(int cpu);
14extern unsigned int dcache_parity_tl1_occurred;
15extern unsigned int icache_parity_tl1_occurred;
16
17extern asmlinkage void update_perfctrs(void);
18extern asmlinkage void sparc_breakpoint(struct pt_regs *regs);
19extern void timer_interrupt(int irq, struct pt_regs *regs);
20
21extern void do_notify_resume(struct pt_regs *regs,
22 unsigned long orig_i0,
23 unsigned long thread_info_flags);
24
25extern asmlinkage int syscall_trace_enter(struct pt_regs *regs);
26extern asmlinkage void syscall_trace_leave(struct pt_regs *regs);
27
28extern void bad_trap_tl1(struct pt_regs *regs, long lvl);
29
30extern void do_fpe_common(struct pt_regs *regs);
31extern void do_fpieee(struct pt_regs *regs);
32extern void do_fpother(struct pt_regs *regs);
33extern void do_tof(struct pt_regs *regs);
34extern void do_div0(struct pt_regs *regs);
35extern void do_illegal_instruction(struct pt_regs *regs);
36extern void mem_address_unaligned(struct pt_regs *regs,
37 unsigned long sfar,
38 unsigned long sfsr);
39extern void sun4v_do_mna(struct pt_regs *regs,
40 unsigned long addr,
41 unsigned long type_ctx);
42extern void do_privop(struct pt_regs *regs);
43extern void do_privact(struct pt_regs *regs);
44extern void do_cee(struct pt_regs *regs);
45extern void do_cee_tl1(struct pt_regs *regs);
46extern void do_dae_tl1(struct pt_regs *regs);
47extern void do_iae_tl1(struct pt_regs *regs);
48extern void do_div0_tl1(struct pt_regs *regs);
49extern void do_fpdis_tl1(struct pt_regs *regs);
50extern void do_fpieee_tl1(struct pt_regs *regs);
51extern void do_fpother_tl1(struct pt_regs *regs);
52extern void do_ill_tl1(struct pt_regs *regs);
53extern void do_irq_tl1(struct pt_regs *regs);
54extern void do_lddfmna_tl1(struct pt_regs *regs);
55extern void do_stdfmna_tl1(struct pt_regs *regs);
56extern void do_paw(struct pt_regs *regs);
57extern void do_paw_tl1(struct pt_regs *regs);
58extern void do_vaw(struct pt_regs *regs);
59extern void do_vaw_tl1(struct pt_regs *regs);
60extern void do_tof_tl1(struct pt_regs *regs);
61extern void do_getpsr(struct pt_regs *regs);
62
63extern void spitfire_insn_access_exception(struct pt_regs *regs,
64 unsigned long sfsr,
65 unsigned long sfar);
66extern void spitfire_insn_access_exception_tl1(struct pt_regs *regs,
67 unsigned long sfsr,
68 unsigned long sfar);
69extern void spitfire_data_access_exception(struct pt_regs *regs,
70 unsigned long sfsr,
71 unsigned long sfar);
72extern void spitfire_data_access_exception_tl1(struct pt_regs *regs,
73 unsigned long sfsr,
74 unsigned long sfar);
75extern void spitfire_access_error(struct pt_regs *regs,
76 unsigned long status_encoded,
77 unsigned long afar);
78
79extern void cheetah_fecc_handler(struct pt_regs *regs,
80 unsigned long afsr,
81 unsigned long afar);
82extern void cheetah_cee_handler(struct pt_regs *regs,
83 unsigned long afsr,
84 unsigned long afar);
85extern void cheetah_deferred_handler(struct pt_regs *regs,
86 unsigned long afsr,
87 unsigned long afar);
88extern void cheetah_plus_parity_error(int type, struct pt_regs *regs);
89
90extern void sun4v_insn_access_exception(struct pt_regs *regs,
91 unsigned long addr,
92 unsigned long type_ctx);
93extern void sun4v_insn_access_exception_tl1(struct pt_regs *regs,
94 unsigned long addr,
95 unsigned long type_ctx);
96extern void sun4v_data_access_exception(struct pt_regs *regs,
97 unsigned long addr,
98 unsigned long type_ctx);
99extern void sun4v_data_access_exception_tl1(struct pt_regs *regs,
100 unsigned long addr,
101 unsigned long type_ctx);
102extern void sun4v_resum_error(struct pt_regs *regs,
103 unsigned long offset);
104extern void sun4v_resum_overflow(struct pt_regs *regs);
105extern void sun4v_nonresum_error(struct pt_regs *regs,
106 unsigned long offset);
107extern void sun4v_nonresum_overflow(struct pt_regs *regs);
108
109extern unsigned long sun4v_err_itlb_vaddr;
110extern unsigned long sun4v_err_itlb_ctx;
111extern unsigned long sun4v_err_itlb_pte;
112extern unsigned long sun4v_err_itlb_error;
113
114extern void sun4v_itlb_error_report(struct pt_regs *regs, int tl);
115
116extern unsigned long sun4v_err_dtlb_vaddr;
117extern unsigned long sun4v_err_dtlb_ctx;
118extern unsigned long sun4v_err_dtlb_pte;
119extern unsigned long sun4v_err_dtlb_error;
120
121extern void sun4v_dtlb_error_report(struct pt_regs *regs, int tl);
122extern void hypervisor_tlbop_error(unsigned long err,
123 unsigned long op);
124extern void hypervisor_tlbop_error_xcall(unsigned long err,
125 unsigned long op);
126
127/* WARNING: The error trap handlers in assembly know the precise
128 * layout of the following structure.
129 *
130 * C-level handlers in traps.c use this information to log the
131 * error and then determine how to recover (if possible).
132 */
133struct cheetah_err_info {
134/*0x00*/u64 afsr;
135/*0x08*/u64 afar;
136
137 /* D-cache state */
138/*0x10*/u64 dcache_data[4]; /* The actual data */
139/*0x30*/u64 dcache_index; /* D-cache index */
140/*0x38*/u64 dcache_tag; /* D-cache tag/valid */
141/*0x40*/u64 dcache_utag; /* D-cache microtag */
142/*0x48*/u64 dcache_stag; /* D-cache snooptag */
143
144 /* I-cache state */
145/*0x50*/u64 icache_data[8]; /* The actual insns + predecode */
146/*0x90*/u64 icache_index; /* I-cache index */
147/*0x98*/u64 icache_tag; /* I-cache phys tag */
148/*0xa0*/u64 icache_utag; /* I-cache microtag */
149/*0xa8*/u64 icache_stag; /* I-cache snooptag */
150/*0xb0*/u64 icache_upper; /* I-cache upper-tag */
151/*0xb8*/u64 icache_lower; /* I-cache lower-tag */
152
153 /* E-cache state */
154/*0xc0*/u64 ecache_data[4]; /* 32 bytes from staging registers */
155/*0xe0*/u64 ecache_index; /* E-cache index */
156/*0xe8*/u64 ecache_tag; /* E-cache tag/state */
157
158/*0xf0*/u64 __pad[32 - 30];
159};
160#define CHAFSR_INVALID ((u64)-1L)
161
162/* This is allocated at boot time based upon the largest hardware
163 * cpu ID in the system. We allocate two entries per cpu, one for
164 * TL==0 logging and one for TL >= 1 logging.
165 */
166extern struct cheetah_err_info *cheetah_error_log;
167
168/* UPA nodes send interrupt packet to UltraSparc with first data reg
169 * value low 5 (7 on Starfire) bits holding the IRQ identifier being
170 * delivered. We must translate this into a non-vector IRQ so we can
171 * set the softint on this cpu.
172 *
173 * To make processing these packets efficient and race free we use
174 * an array of irq buckets below. The interrupt vector handler in
175 * entry.S feeds incoming packets into per-cpu pil-indexed lists.
176 *
177 * If you make changes to ino_bucket, please update hand coded assembler
178 * of the vectored interrupt trap handler(s) in entry.S and sun4v_ivec.S
179 */
180struct ino_bucket {
181/*0x00*/unsigned long __irq_chain_pa;
182
183 /* Virtual interrupt number assigned to this INO. */
184/*0x08*/unsigned int __virt_irq;
185/*0x0c*/unsigned int __pad;
186};
187
188extern struct ino_bucket *ivector_table;
189extern unsigned long ivector_table_pa;
190
191extern void handler_irq(int irq, struct pt_regs *regs);
192extern void init_irqwork_curcpu(void);
193extern void __cpuinit sun4v_register_mondo_queues(int this_cpu);
194
195#endif /* _ENTRY_H */