17105de84SSam Ravnborg #ifndef __SPARC_KERNEL_H 27105de84SSam Ravnborg #define __SPARC_KERNEL_H 381265fd9SSam Ravnborg 481265fd9SSam Ravnborg #include <linux/interrupt.h> 5a0c54a21SSam Ravnborg #include <linux/ftrace.h> 681265fd9SSam Ravnborg 7a2a211cbSSam Ravnborg #include <asm/traps.h> 8ea5e7447SDavid S. Miller #include <asm/head.h> 9ea5e7447SDavid S. Miller #include <asm/io.h> 10a2a211cbSSam Ravnborg 1153ae3419SSam Ravnborg /* cpu.c */ 12c3cf5e8cSDavid S. Miller extern const char *sparc_pmu_type; 1353ae3419SSam Ravnborg extern unsigned int fsr_storage; 14cb1b8209SSam Ravnborg extern int ncpus_probed; 1553ae3419SSam Ravnborg 16ac85fe8bSDavid S. Miller #ifdef CONFIG_SPARC64 17ac85fe8bSDavid S. Miller /* setup_64.c */ 18ac85fe8bSDavid S. Miller struct seq_file; 192e74a74fSSam Ravnborg void cpucap_info(struct seq_file *); 20ea5e7447SDavid S. Miller 21a0c54a21SSam Ravnborg static inline unsigned long kimage_addr_to_ra(const void *p) 22ea5e7447SDavid S. Miller { 23ea5e7447SDavid S. Miller unsigned long val = (unsigned long) p; 24ea5e7447SDavid S. Miller 25ea5e7447SDavid S. Miller return kern_base + (val - KERNBASE); 26ea5e7447SDavid S. Miller } 278df52620SSam Ravnborg 288df52620SSam Ravnborg /* sys_sparc_64.c */ 298df52620SSam Ravnborg asmlinkage long sys_kern_features(void); 308df52620SSam Ravnborg 318df52620SSam Ravnborg /* unaligned_64.c */ 328df52620SSam Ravnborg asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn); 338df52620SSam Ravnborg int handle_popc(u32 insn, struct pt_regs *regs); 348df52620SSam Ravnborg void handle_lddfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr); 358df52620SSam Ravnborg void handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr); 368df52620SSam Ravnborg 37a0c54a21SSam Ravnborg /* smp_64.c */ 38a0c54a21SSam Ravnborg void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs); 39a0c54a21SSam Ravnborg void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs); 40a0c54a21SSam Ravnborg void __irq_entry smp_new_mmu_context_version_client(int irq, struct pt_regs *regs); 41a0c54a21SSam Ravnborg void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs); 42a0c54a21SSam Ravnborg void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs); 43a0c54a21SSam Ravnborg 444ac7b826SSam Ravnborg /* pci.c */ 454ac7b826SSam Ravnborg int pci64_dma_supported(struct pci_dev *pdev, u64 device_mask); 464ac7b826SSam Ravnborg 47abaff455SSam Ravnborg /* signal32.c */ 48abaff455SSam Ravnborg void do_sigreturn32(struct pt_regs *regs); 49abaff455SSam Ravnborg asmlinkage void do_rt_sigreturn32(struct pt_regs *regs); 50abaff455SSam Ravnborg void do_signal32(struct pt_regs * regs); 51abaff455SSam Ravnborg asmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp); 52abaff455SSam Ravnborg 53a1ca187eSSam Ravnborg /* compat_audit.c */ 54a1ca187eSSam Ravnborg extern unsigned sparc32_dir_class[]; 55a1ca187eSSam Ravnborg extern unsigned sparc32_chattr_class[]; 56a1ca187eSSam Ravnborg extern unsigned sparc32_write_class[]; 57a1ca187eSSam Ravnborg extern unsigned sparc32_read_class[]; 58a1ca187eSSam Ravnborg extern unsigned sparc32_signal_class[]; 59a1ca187eSSam Ravnborg int sparc32_classify_syscall(unsigned syscall); 60ac85fe8bSDavid S. Miller #endif 61ac85fe8bSDavid S. Miller 628d74e32aSSam Ravnborg #ifdef CONFIG_SPARC32 634efb55e6SSam Ravnborg /* setup_32.c */ 64178f0ffaSSam Ravnborg struct linux_romvec; 654efb55e6SSam Ravnborg void sparc32_start_kernel(struct linux_romvec *rp); 664efb55e6SSam Ravnborg 678d74e32aSSam Ravnborg /* cpu.c */ 682e74a74fSSam Ravnborg void cpu_probe(void); 6953ae3419SSam Ravnborg 708d74e32aSSam Ravnborg /* traps_32.c */ 712e74a74fSSam Ravnborg void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, 728d74e32aSSam Ravnborg unsigned long npc, unsigned long psr); 7381265fd9SSam Ravnborg /* irq_32.c */ 7481265fd9SSam Ravnborg extern struct irqaction static_irqaction[]; 7581265fd9SSam Ravnborg extern int static_irq_count; 7681265fd9SSam Ravnborg extern spinlock_t irq_action_lock; 7781265fd9SSam Ravnborg 782e74a74fSSam Ravnborg void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs); 792e74a74fSSam Ravnborg void init_IRQ(void); 80b7afdb7eSSam Ravnborg 81b7afdb7eSSam Ravnborg /* sun4m_irq.c */ 822e74a74fSSam Ravnborg void sun4m_init_IRQ(void); 832e74a74fSSam Ravnborg void sun4m_unmask_profile_irq(void); 842e74a74fSSam Ravnborg void sun4m_clear_profile_irq(int cpu); 85b7afdb7eSSam Ravnborg 86f9fd3488SSam Ravnborg /* sun4m_smp.c */ 87f9fd3488SSam Ravnborg void sun4m_cpu_pre_starting(void *arg); 88f9fd3488SSam Ravnborg void sun4m_cpu_pre_online(void *arg); 89b8417de3SSam Ravnborg void __init smp4m_boot_cpus(void); 90b8417de3SSam Ravnborg int smp4m_boot_one_cpu(int i, struct task_struct *idle); 91b8417de3SSam Ravnborg void __init smp4m_smp_done(void); 92b8417de3SSam Ravnborg void smp4m_cross_call_irq(void); 93b8417de3SSam Ravnborg void smp4m_percpu_timer_interrupt(struct pt_regs *regs); 94f9fd3488SSam Ravnborg 95b7afdb7eSSam Ravnborg /* sun4d_irq.c */ 96b7afdb7eSSam Ravnborg extern spinlock_t sun4d_imsk_lock; 97b7afdb7eSSam Ravnborg 982e74a74fSSam Ravnborg void sun4d_init_IRQ(void); 992e74a74fSSam Ravnborg int sun4d_request_irq(unsigned int irq, 100b7afdb7eSSam Ravnborg irq_handler_t handler, 101b7afdb7eSSam Ravnborg unsigned long irqflags, 102b7afdb7eSSam Ravnborg const char *devname, void *dev_id); 1032e74a74fSSam Ravnborg int show_sun4d_interrupts(struct seq_file *, void *); 1042e74a74fSSam Ravnborg void sun4d_distribute_irqs(void); 1052e74a74fSSam Ravnborg void sun4d_free_irq(unsigned int irq, void *dev_id); 106b7afdb7eSSam Ravnborg 107f9fd3488SSam Ravnborg /* sun4d_smp.c */ 108f9fd3488SSam Ravnborg void sun4d_cpu_pre_starting(void *arg); 109f9fd3488SSam Ravnborg void sun4d_cpu_pre_online(void *arg); 11065199b0aSSam Ravnborg void __init smp4d_boot_cpus(void); 11165199b0aSSam Ravnborg int smp4d_boot_one_cpu(int i, struct task_struct *idle); 11265199b0aSSam Ravnborg void __init smp4d_smp_done(void); 11365199b0aSSam Ravnborg void smp4d_cross_call_irq(void); 11465199b0aSSam Ravnborg void smp4d_percpu_timer_interrupt(struct pt_regs *regs); 115f9fd3488SSam Ravnborg 116f9fd3488SSam Ravnborg /* leon_smp.c */ 117f9fd3488SSam Ravnborg void leon_cpu_pre_starting(void *arg); 118f9fd3488SSam Ravnborg void leon_cpu_pre_online(void *arg); 1191bbc9060SSam Ravnborg void leonsmp_ipi_interrupt(void); 1201bbc9060SSam Ravnborg void leon_cross_call_irq(void); 121f9fd3488SSam Ravnborg 122b7afdb7eSSam Ravnborg /* head_32.S */ 123b7afdb7eSSam Ravnborg extern unsigned int t_nmi[]; 124b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4d[]; 125b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4m[]; 126b7afdb7eSSam Ravnborg 127a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu1; 128a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu2; 129a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu3; 130b7afdb7eSSam Ravnborg 131b7afdb7eSSam Ravnborg extern char cputypval[]; 132b7afdb7eSSam Ravnborg 133b7afdb7eSSam Ravnborg /* entry.S */ 134b7afdb7eSSam Ravnborg extern unsigned long lvl14_save[4]; 135b7afdb7eSSam Ravnborg extern unsigned int real_irq_entry[]; 136b7afdb7eSSam Ravnborg extern unsigned int smp4d_ticker[]; 137b7afdb7eSSam Ravnborg extern unsigned int patchme_maybe_smp_msg[]; 138b7afdb7eSSam Ravnborg 1392e74a74fSSam Ravnborg void floppy_hardint(void); 140b7afdb7eSSam Ravnborg 141b7afdb7eSSam Ravnborg /* trampoline_32.S */ 142b7afdb7eSSam Ravnborg extern unsigned long sun4m_cpu_startup; 143b7afdb7eSSam Ravnborg extern unsigned long sun4d_cpu_startup; 14481265fd9SSam Ravnborg 1458bdd5a1bSSam Ravnborg /* process_32.c */ 1468bdd5a1bSSam Ravnborg asmlinkage int sparc_do_fork(unsigned long clone_flags, 1478bdd5a1bSSam Ravnborg unsigned long stack_start, 1488bdd5a1bSSam Ravnborg struct pt_regs *regs, 1498bdd5a1bSSam Ravnborg unsigned long stack_size); 1508bdd5a1bSSam Ravnborg 151529b17a9SSam Ravnborg /* signal_32.c */ 152529b17a9SSam Ravnborg asmlinkage void do_sigreturn(struct pt_regs *regs); 153529b17a9SSam Ravnborg asmlinkage void do_rt_sigreturn(struct pt_regs *regs); 154529b17a9SSam Ravnborg void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, 155529b17a9SSam Ravnborg unsigned long thread_info_flags); 156529b17a9SSam Ravnborg asmlinkage int do_sys_sigstack(struct sigstack __user *ssptr, 157529b17a9SSam Ravnborg struct sigstack __user *ossptr, 158529b17a9SSam Ravnborg unsigned long sp); 1597c8ee361SSam Ravnborg 160c8c8782dSSam Ravnborg /* ptrace_32.c */ 161c8c8782dSSam Ravnborg asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p); 162c8c8782dSSam Ravnborg 1639edfae3fSSam Ravnborg /* unaligned_32.c */ 1649edfae3fSSam Ravnborg asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn); 1659edfae3fSSam Ravnborg asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn); 1669edfae3fSSam Ravnborg 1677c8ee361SSam Ravnborg /* windows.c */ 1687c8ee361SSam Ravnborg void try_to_clear_window_buffer(struct pt_regs *regs, int who); 1697c8ee361SSam Ravnborg 170a3ee8faaSSam Ravnborg /* auxio_32.c */ 171a3ee8faaSSam Ravnborg void __init auxio_probe(void); 172a3ee8faaSSam Ravnborg void __init auxio_power_probe(void); 173a3ee8faaSSam Ravnborg 1747738925dSSam Ravnborg /* pcic.c */ 1757738925dSSam Ravnborg extern void __iomem *pcic_regs; 1767738925dSSam Ravnborg void pcic_nmi(unsigned int pend, struct pt_regs *regs); 1777738925dSSam Ravnborg 178fcea8b27SSam Ravnborg /* time_32.c */ 179fcea8b27SSam Ravnborg void __init time_init(void); 180fcea8b27SSam Ravnborg 1818d74e32aSSam Ravnborg #else /* CONFIG_SPARC32 */ 1827105de84SSam Ravnborg #endif /* CONFIG_SPARC32 */ 1837105de84SSam Ravnborg #endif /* !(__SPARC_KERNEL_H) */ 184