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