17105de84f1cb5ef640bfe4b8b137837c346caab5Sam Ravnborg#ifndef __SPARC_KERNEL_H
27105de84f1cb5ef640bfe4b8b137837c346caab5Sam Ravnborg#define __SPARC_KERNEL_H
381265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborg
481265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborg#include <linux/interrupt.h>
5a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborg#include <linux/ftrace.h>
681265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborg
7a2a211cb55f0f3d13d791f3d2adccc96032e6846Sam Ravnborg#include <asm/traps.h>
8ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller#include <asm/head.h>
9ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller#include <asm/io.h>
10a2a211cb55f0f3d13d791f3d2adccc96032e6846Sam Ravnborg
1153ae341926b1238af3170f2f306f52a22430776cSam Ravnborg/* cpu.c */
12c3cf5e8cc56d272f828a66610bb78bbb727b2ce1David S. Millerextern const char *sparc_pmu_type;
1353ae341926b1238af3170f2f306f52a22430776cSam Ravnborgextern unsigned int fsr_storage;
14cb1b8209815594613650772eeb889c170107dad4Sam Ravnborgextern int ncpus_probed;
1553ae341926b1238af3170f2f306f52a22430776cSam Ravnborg
16ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#ifdef CONFIG_SPARC64
17ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller/* setup_64.c */
18ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Millerstruct seq_file;
192e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid cpucap_info(struct seq_file *);
20ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller
21a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborgstatic inline unsigned long kimage_addr_to_ra(const void *p)
22ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller{
23ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller	unsigned long val = (unsigned long) p;
24ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller
25ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller	return kern_base + (val - KERNBASE);
26ea5e7447ea9d555558e0f13798f5143dd51a915aDavid S. Miller}
278df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborg
288df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborg/* sys_sparc_64.c */
298df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborgasmlinkage long sys_kern_features(void);
308df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborg
318df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborg/* unaligned_64.c */
328df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborgasmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn);
338df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborgint handle_popc(u32 insn, struct pt_regs *regs);
348df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborgvoid handle_lddfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr);
358df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborgvoid handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr);
368df52620e69884d165065a6be6691fe691f3ad39Sam Ravnborg
37a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborg/* smp_64.c */
38a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborgvoid __irq_entry smp_call_function_client(int irq, struct pt_regs *regs);
39a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborgvoid __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs);
40a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborgvoid __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs);
41a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborgvoid __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs);
42a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborgvoid __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs);
43a0c54a21ddc187f60fb6befa95269ec416634004Sam Ravnborg
4448c7eca5f27c9a8a23fd30eee2edb417bda18aeaSam Ravnborg/* kgdb_64.c */
4548c7eca5f27c9a8a23fd30eee2edb417bda18aeaSam Ravnborgvoid __irq_entry smp_kgdb_capture_client(int irq, struct pt_regs *regs);
4648c7eca5f27c9a8a23fd30eee2edb417bda18aeaSam Ravnborg
474ac7b8268ebbb0aea4dba0dd4c60d74bd8935aa6Sam Ravnborg/* pci.c */
484ac7b8268ebbb0aea4dba0dd4c60d74bd8935aa6Sam Ravnborgint pci64_dma_supported(struct pci_dev *pdev, u64 device_mask);
494ac7b8268ebbb0aea4dba0dd4c60d74bd8935aa6Sam Ravnborg
50abaff455f750594984030ec878537b7c1e39ffc6Sam Ravnborg/* signal32.c */
51abaff455f750594984030ec878537b7c1e39ffc6Sam Ravnborgvoid do_sigreturn32(struct pt_regs *regs);
52abaff455f750594984030ec878537b7c1e39ffc6Sam Ravnborgasmlinkage void do_rt_sigreturn32(struct pt_regs *regs);
53abaff455f750594984030ec878537b7c1e39ffc6Sam Ravnborgvoid do_signal32(struct pt_regs * regs);
54abaff455f750594984030ec878537b7c1e39ffc6Sam Ravnborgasmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp);
55abaff455f750594984030ec878537b7c1e39ffc6Sam Ravnborg
56a1ca187e7dd73b7aa8fffe70b6d04d38361df208Sam Ravnborg/* compat_audit.c */
57a1ca187e7dd73b7aa8fffe70b6d04d38361df208Sam Ravnborgextern unsigned sparc32_dir_class[];
58a1ca187e7dd73b7aa8fffe70b6d04d38361df208Sam Ravnborgextern unsigned sparc32_chattr_class[];
59a1ca187e7dd73b7aa8fffe70b6d04d38361df208Sam Ravnborgextern unsigned sparc32_write_class[];
60a1ca187e7dd73b7aa8fffe70b6d04d38361df208Sam Ravnborgextern unsigned sparc32_read_class[];
61a1ca187e7dd73b7aa8fffe70b6d04d38361df208Sam Ravnborgextern unsigned sparc32_signal_class[];
62a1ca187e7dd73b7aa8fffe70b6d04d38361df208Sam Ravnborgint sparc32_classify_syscall(unsigned syscall);
63ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller#endif
64ac85fe8b21248054851e05bfaa352562e5b06dd3David S. Miller
658d74e32a537e8dbb22a1d5e9005d11111dab979aSam Ravnborg#ifdef CONFIG_SPARC32
664efb55e6916628fde549b0ef1c2830593ccf19c4Sam Ravnborg/* setup_32.c */
67178f0ffa63475cd2fb69280900a71339292363bcSam Ravnborgstruct linux_romvec;
684efb55e6916628fde549b0ef1c2830593ccf19c4Sam Ravnborgvoid sparc32_start_kernel(struct linux_romvec *rp);
694efb55e6916628fde549b0ef1c2830593ccf19c4Sam Ravnborg
708d74e32a537e8dbb22a1d5e9005d11111dab979aSam Ravnborg/* cpu.c */
712e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid cpu_probe(void);
7253ae341926b1238af3170f2f306f52a22430776cSam Ravnborg
738d74e32a537e8dbb22a1d5e9005d11111dab979aSam Ravnborg/* traps_32.c */
742e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid handle_hw_divzero(struct pt_regs *regs, unsigned long pc,
752e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborg                       unsigned long npc, unsigned long psr);
7681265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborg/* irq_32.c */
7781265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborgextern struct irqaction static_irqaction[];
7881265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborgextern int static_irq_count;
7981265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborgextern spinlock_t irq_action_lock;
8081265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborg
812e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid unexpected_irq(int irq, void *dev_id, struct pt_regs * regs);
822e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid init_IRQ(void);
83b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
84b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg/* sun4m_irq.c */
852e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid sun4m_init_IRQ(void);
862e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid sun4m_unmask_profile_irq(void);
872e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid sun4m_clear_profile_irq(int cpu);
88b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
89f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborg/* sun4m_smp.c */
90f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborgvoid sun4m_cpu_pre_starting(void *arg);
91f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborgvoid sun4m_cpu_pre_online(void *arg);
92b8417de3a7ecb4ff6e5cd50f8e2d67c7f2ace175Sam Ravnborgvoid __init smp4m_boot_cpus(void);
93b8417de3a7ecb4ff6e5cd50f8e2d67c7f2ace175Sam Ravnborgint smp4m_boot_one_cpu(int i, struct task_struct *idle);
94b8417de3a7ecb4ff6e5cd50f8e2d67c7f2ace175Sam Ravnborgvoid __init smp4m_smp_done(void);
95b8417de3a7ecb4ff6e5cd50f8e2d67c7f2ace175Sam Ravnborgvoid smp4m_cross_call_irq(void);
96b8417de3a7ecb4ff6e5cd50f8e2d67c7f2ace175Sam Ravnborgvoid smp4m_percpu_timer_interrupt(struct pt_regs *regs);
97f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborg
98b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg/* sun4d_irq.c */
99b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern spinlock_t sun4d_imsk_lock;
100b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
1012e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid sun4d_init_IRQ(void);
1022e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgint sun4d_request_irq(unsigned int irq,
1032e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborg                      irq_handler_t handler,
1042e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborg                      unsigned long irqflags,
1052e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborg                      const char *devname, void *dev_id);
1062e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgint show_sun4d_interrupts(struct seq_file *, void *);
1072e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid sun4d_distribute_irqs(void);
1082e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid sun4d_free_irq(unsigned int irq, void *dev_id);
109b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
110f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborg/* sun4d_smp.c */
111f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborgvoid sun4d_cpu_pre_starting(void *arg);
112f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborgvoid sun4d_cpu_pre_online(void *arg);
11365199b0a8c73641ecfdbeb947ec9df0115e4b55cSam Ravnborgvoid __init smp4d_boot_cpus(void);
11465199b0a8c73641ecfdbeb947ec9df0115e4b55cSam Ravnborgint smp4d_boot_one_cpu(int i, struct task_struct *idle);
11565199b0a8c73641ecfdbeb947ec9df0115e4b55cSam Ravnborgvoid __init smp4d_smp_done(void);
11665199b0a8c73641ecfdbeb947ec9df0115e4b55cSam Ravnborgvoid smp4d_cross_call_irq(void);
11765199b0a8c73641ecfdbeb947ec9df0115e4b55cSam Ravnborgvoid smp4d_percpu_timer_interrupt(struct pt_regs *regs);
118f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborg
119f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborg/* leon_smp.c */
120f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborgvoid leon_cpu_pre_starting(void *arg);
121f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborgvoid leon_cpu_pre_online(void *arg);
1221bbc90607762de736f58d48714710735c0c34848Sam Ravnborgvoid leonsmp_ipi_interrupt(void);
1231bbc90607762de736f58d48714710735c0c34848Sam Ravnborgvoid leon_cross_call_irq(void);
124f9fd3488f6a3c2c5cc8613e4fd7fbbaa57f6bf8fSam Ravnborg
125b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg/* head_32.S */
126b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned int t_nmi[];
127b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned int linux_trap_ipi15_sun4d[];
128b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned int linux_trap_ipi15_sun4m[];
129b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
130a2a211cb55f0f3d13d791f3d2adccc96032e6846Sam Ravnborgextern struct tt_entry trapbase_cpu1;
131a2a211cb55f0f3d13d791f3d2adccc96032e6846Sam Ravnborgextern struct tt_entry trapbase_cpu2;
132a2a211cb55f0f3d13d791f3d2adccc96032e6846Sam Ravnborgextern struct tt_entry trapbase_cpu3;
133b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
134b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern char cputypval[];
135b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
136b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg/* entry.S */
137b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned long lvl14_save[4];
138b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned int real_irq_entry[];
139b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned int smp4d_ticker[];
140b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned int patchme_maybe_smp_msg[];
141b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
1422e74a74f271f4d3fc768b6f06bd72eb57eac36acSam Ravnborgvoid floppy_hardint(void);
143b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg
144b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborg/* trampoline_32.S */
145b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned long sun4m_cpu_startup;
146b7afdb7e85d97294efa24fbfef7b1fa196ca808cSam Ravnborgextern unsigned long sun4d_cpu_startup;
14781265fd93bc40c7c43fd36796571786ae3df00e0Sam Ravnborg
1488bdd5a1bdbf83577733c93c6aba9d65e1bc5158bSam Ravnborg/* process_32.c */
1498bdd5a1bdbf83577733c93c6aba9d65e1bc5158bSam Ravnborgasmlinkage int sparc_do_fork(unsigned long clone_flags,
1508bdd5a1bdbf83577733c93c6aba9d65e1bc5158bSam Ravnborg                             unsigned long stack_start,
1518bdd5a1bdbf83577733c93c6aba9d65e1bc5158bSam Ravnborg                             struct pt_regs *regs,
1528bdd5a1bdbf83577733c93c6aba9d65e1bc5158bSam Ravnborg                             unsigned long stack_size);
1538bdd5a1bdbf83577733c93c6aba9d65e1bc5158bSam Ravnborg
154529b17a9d3346b6e9063681e71748261342accbcSam Ravnborg/* signal_32.c */
155529b17a9d3346b6e9063681e71748261342accbcSam Ravnborgasmlinkage void do_sigreturn(struct pt_regs *regs);
156529b17a9d3346b6e9063681e71748261342accbcSam Ravnborgasmlinkage void do_rt_sigreturn(struct pt_regs *regs);
157529b17a9d3346b6e9063681e71748261342accbcSam Ravnborgvoid do_notify_resume(struct pt_regs *regs, unsigned long orig_i0,
158529b17a9d3346b6e9063681e71748261342accbcSam Ravnborg                      unsigned long thread_info_flags);
159529b17a9d3346b6e9063681e71748261342accbcSam Ravnborgasmlinkage int do_sys_sigstack(struct sigstack __user *ssptr,
160529b17a9d3346b6e9063681e71748261342accbcSam Ravnborg                               struct sigstack __user *ossptr,
161529b17a9d3346b6e9063681e71748261342accbcSam Ravnborg                               unsigned long sp);
1627c8ee361aea9d95cc652490a347bb68072579dc9Sam Ravnborg
163c8c8782d8993a7a340515384c00a8ab4b6bd880aSam Ravnborg/* ptrace_32.c */
164c8c8782d8993a7a340515384c00a8ab4b6bd880aSam Ravnborgasmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p);
165c8c8782d8993a7a340515384c00a8ab4b6bd880aSam Ravnborg
1669edfae3f69273c75905b24a445568f9e05ab0b2dSam Ravnborg/* unaligned_32.c */
1679edfae3f69273c75905b24a445568f9e05ab0b2dSam Ravnborgasmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1689edfae3f69273c75905b24a445568f9e05ab0b2dSam Ravnborgasmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1699edfae3f69273c75905b24a445568f9e05ab0b2dSam Ravnborg
1707c8ee361aea9d95cc652490a347bb68072579dc9Sam Ravnborg/* windows.c */
1717c8ee361aea9d95cc652490a347bb68072579dc9Sam Ravnborgvoid try_to_clear_window_buffer(struct pt_regs *regs, int who);
1727c8ee361aea9d95cc652490a347bb68072579dc9Sam Ravnborg
173a3ee8faa1b1bd02aaffe6dd0fd13d665234530f3Sam Ravnborg/* auxio_32.c */
174a3ee8faa1b1bd02aaffe6dd0fd13d665234530f3Sam Ravnborgvoid __init auxio_probe(void);
175a3ee8faa1b1bd02aaffe6dd0fd13d665234530f3Sam Ravnborgvoid __init auxio_power_probe(void);
176a3ee8faa1b1bd02aaffe6dd0fd13d665234530f3Sam Ravnborg
1777738925de8500093638dd7fa0e5c1d8128c9fc6aSam Ravnborg/* pcic.c */
1787738925de8500093638dd7fa0e5c1d8128c9fc6aSam Ravnborgextern void __iomem *pcic_regs;
1797738925de8500093638dd7fa0e5c1d8128c9fc6aSam Ravnborgvoid pcic_nmi(unsigned int pend, struct pt_regs *regs);
1807738925de8500093638dd7fa0e5c1d8128c9fc6aSam Ravnborg
181fcea8b27f985bc02fd7b040bbb5914227a0f49d7Sam Ravnborg/* time_32.c */
182fcea8b27f985bc02fd7b040bbb5914227a0f49d7Sam Ravnborgvoid __init time_init(void);
183fcea8b27f985bc02fd7b040bbb5914227a0f49d7Sam Ravnborg
1848d74e32a537e8dbb22a1d5e9005d11111dab979aSam Ravnborg#else /* CONFIG_SPARC32 */
1857105de84f1cb5ef640bfe4b8b137837c346caab5Sam Ravnborg#endif /* CONFIG_SPARC32 */
1867105de84f1cb5ef640bfe4b8b137837c346caab5Sam Ravnborg#endif /* !(__SPARC_KERNEL_H) */
187