1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 27105de84SSam Ravnborg #ifndef __SPARC_KERNEL_H 37105de84SSam Ravnborg #define __SPARC_KERNEL_H 481265fd9SSam Ravnborg 581265fd9SSam Ravnborg #include <linux/interrupt.h> 6a0c54a21SSam Ravnborg #include <linux/ftrace.h> 781265fd9SSam Ravnborg 8a2a211cbSSam Ravnborg #include <asm/traps.h> 9ea5e7447SDavid S. Miller #include <asm/head.h> 10ea5e7447SDavid S. Miller #include <asm/io.h> 11a2a211cbSSam Ravnborg 1253ae3419SSam Ravnborg /* cpu.c */ 13c3cf5e8cSDavid S. Miller extern const char *sparc_pmu_type; 1453ae3419SSam Ravnborg extern unsigned int fsr_storage; 15cb1b8209SSam Ravnborg extern int ncpus_probed; 1653ae3419SSam Ravnborg 17a4261d4bSChristian Brauner /* process{_32,_64}.c */ 18a4261d4bSChristian Brauner asmlinkage long sparc_clone(struct pt_regs *regs); 19a4261d4bSChristian Brauner asmlinkage long sparc_fork(struct pt_regs *regs); 20a4261d4bSChristian Brauner asmlinkage long sparc_vfork(struct pt_regs *regs); 21a4261d4bSChristian Brauner 22ac85fe8bSDavid S. Miller #ifdef CONFIG_SPARC64 23ac85fe8bSDavid S. Miller /* setup_64.c */ 24ac85fe8bSDavid S. Miller struct seq_file; 252e74a74fSSam Ravnborg void cpucap_info(struct seq_file *); 26ea5e7447SDavid S. Miller 27a0c54a21SSam Ravnborg static inline unsigned long kimage_addr_to_ra(const void *p) 28ea5e7447SDavid S. Miller { 29ea5e7447SDavid S. Miller unsigned long val = (unsigned long) p; 30ea5e7447SDavid S. Miller 31ea5e7447SDavid S. Miller return kern_base + (val - KERNBASE); 32ea5e7447SDavid S. Miller } 338df52620SSam Ravnborg 348df52620SSam Ravnborg /* sys_sparc_64.c */ 358df52620SSam Ravnborg asmlinkage long sys_kern_features(void); 368df52620SSam Ravnborg 378df52620SSam Ravnborg /* unaligned_64.c */ 388df52620SSam Ravnborg asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn); 398df52620SSam Ravnborg int handle_popc(u32 insn, struct pt_regs *regs); 408df52620SSam Ravnborg void handle_lddfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr); 418df52620SSam Ravnborg void handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr); 428df52620SSam Ravnborg 43a0c54a21SSam Ravnborg /* smp_64.c */ 44a0c54a21SSam Ravnborg void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs); 45a0c54a21SSam Ravnborg void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs); 46a0c54a21SSam Ravnborg void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs); 47a0c54a21SSam Ravnborg void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs); 48a0c54a21SSam Ravnborg 4948c7eca5SSam Ravnborg /* kgdb_64.c */ 5048c7eca5SSam Ravnborg void __irq_entry smp_kgdb_capture_client(int irq, struct pt_regs *regs); 5148c7eca5SSam Ravnborg 524ac7b826SSam Ravnborg /* pci.c */ 53c54fc984SChristoph Hellwig #ifdef CONFIG_PCI 54c54fc984SChristoph Hellwig int ali_sound_dma_hack(struct device *dev, u64 device_mask); 55c54fc984SChristoph Hellwig #else 56c54fc984SChristoph Hellwig #define ali_sound_dma_hack(dev, mask) (0) 57c54fc984SChristoph Hellwig #endif 584ac7b826SSam Ravnborg 59abaff455SSam Ravnborg /* signal32.c */ 60abaff455SSam Ravnborg void do_sigreturn32(struct pt_regs *regs); 61abaff455SSam Ravnborg asmlinkage void do_rt_sigreturn32(struct pt_regs *regs); 62abaff455SSam Ravnborg void do_signal32(struct pt_regs * regs); 63abaff455SSam Ravnborg asmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp); 64abaff455SSam Ravnborg 6583e8eb99SPavel Tatashin /* time_64.c */ 6683e8eb99SPavel Tatashin void __init time_init_early(void); 6783e8eb99SPavel Tatashin 68a1ca187eSSam Ravnborg /* compat_audit.c */ 699ef595d8SJoe Perches extern unsigned int sparc32_dir_class[]; 709ef595d8SJoe Perches extern unsigned int sparc32_chattr_class[]; 719ef595d8SJoe Perches extern unsigned int sparc32_write_class[]; 729ef595d8SJoe Perches extern unsigned int sparc32_read_class[]; 739ef595d8SJoe Perches extern unsigned int sparc32_signal_class[]; 749ef595d8SJoe Perches int sparc32_classify_syscall(unsigned int syscall); 75ac85fe8bSDavid S. Miller #endif 76ac85fe8bSDavid S. Miller 778d74e32aSSam Ravnborg #ifdef CONFIG_SPARC32 784efb55e6SSam Ravnborg /* setup_32.c */ 79178f0ffaSSam Ravnborg struct linux_romvec; 804efb55e6SSam Ravnborg void sparc32_start_kernel(struct linux_romvec *rp); 814efb55e6SSam Ravnborg 828d74e32aSSam Ravnborg /* cpu.c */ 832e74a74fSSam Ravnborg void cpu_probe(void); 8453ae3419SSam Ravnborg 858d74e32aSSam Ravnborg /* traps_32.c */ 862e74a74fSSam Ravnborg void handle_hw_divzero(struct pt_regs *regs, unsigned long pc, 878d74e32aSSam Ravnborg unsigned long npc, unsigned long psr); 8881265fd9SSam Ravnborg /* irq_32.c */ 8981265fd9SSam Ravnborg extern struct irqaction static_irqaction[]; 9081265fd9SSam Ravnborg extern int static_irq_count; 9181265fd9SSam Ravnborg extern spinlock_t irq_action_lock; 9281265fd9SSam Ravnborg 932e74a74fSSam Ravnborg void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs); 942e74a74fSSam Ravnborg void init_IRQ(void); 95b7afdb7eSSam Ravnborg 96b7afdb7eSSam Ravnborg /* sun4m_irq.c */ 972e74a74fSSam Ravnborg void sun4m_init_IRQ(void); 982e74a74fSSam Ravnborg void sun4m_unmask_profile_irq(void); 992e74a74fSSam Ravnborg void sun4m_clear_profile_irq(int cpu); 100b7afdb7eSSam Ravnborg 101f9fd3488SSam Ravnborg /* sun4m_smp.c */ 102f9fd3488SSam Ravnborg void sun4m_cpu_pre_starting(void *arg); 103f9fd3488SSam Ravnborg void sun4m_cpu_pre_online(void *arg); 104b8417de3SSam Ravnborg void __init smp4m_boot_cpus(void); 105b8417de3SSam Ravnborg int smp4m_boot_one_cpu(int i, struct task_struct *idle); 106b8417de3SSam Ravnborg void __init smp4m_smp_done(void); 107b8417de3SSam Ravnborg void smp4m_cross_call_irq(void); 108b8417de3SSam Ravnborg void smp4m_percpu_timer_interrupt(struct pt_regs *regs); 109f9fd3488SSam Ravnborg 110b7afdb7eSSam Ravnborg /* sun4d_irq.c */ 111b7afdb7eSSam Ravnborg extern spinlock_t sun4d_imsk_lock; 112b7afdb7eSSam Ravnborg 1132e74a74fSSam Ravnborg void sun4d_init_IRQ(void); 1142e74a74fSSam Ravnborg int sun4d_request_irq(unsigned int irq, 115b7afdb7eSSam Ravnborg irq_handler_t handler, 116b7afdb7eSSam Ravnborg unsigned long irqflags, 117b7afdb7eSSam Ravnborg const char *devname, void *dev_id); 1182e74a74fSSam Ravnborg int show_sun4d_interrupts(struct seq_file *, void *); 1192e74a74fSSam Ravnborg void sun4d_distribute_irqs(void); 1202e74a74fSSam Ravnborg void sun4d_free_irq(unsigned int irq, void *dev_id); 121b7afdb7eSSam Ravnborg 122f9fd3488SSam Ravnborg /* sun4d_smp.c */ 123f9fd3488SSam Ravnborg void sun4d_cpu_pre_starting(void *arg); 124f9fd3488SSam Ravnborg void sun4d_cpu_pre_online(void *arg); 12565199b0aSSam Ravnborg void __init smp4d_boot_cpus(void); 12665199b0aSSam Ravnborg int smp4d_boot_one_cpu(int i, struct task_struct *idle); 12765199b0aSSam Ravnborg void __init smp4d_smp_done(void); 12865199b0aSSam Ravnborg void smp4d_cross_call_irq(void); 12965199b0aSSam Ravnborg void smp4d_percpu_timer_interrupt(struct pt_regs *regs); 130f9fd3488SSam Ravnborg 131f9fd3488SSam Ravnborg /* leon_smp.c */ 132f9fd3488SSam Ravnborg void leon_cpu_pre_starting(void *arg); 133f9fd3488SSam Ravnborg void leon_cpu_pre_online(void *arg); 1341bbc9060SSam Ravnborg void leonsmp_ipi_interrupt(void); 1351bbc9060SSam Ravnborg void leon_cross_call_irq(void); 136f9fd3488SSam Ravnborg 137b7afdb7eSSam Ravnborg /* head_32.S */ 138b7afdb7eSSam Ravnborg extern unsigned int t_nmi[]; 139b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4d[]; 140b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4m[]; 141b7afdb7eSSam Ravnborg 1423c46e2d6SSam Ravnborg extern struct tt_entry trapbase; 143a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu1; 144a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu2; 145a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu3; 146b7afdb7eSSam Ravnborg 147b7afdb7eSSam Ravnborg extern char cputypval[]; 148b7afdb7eSSam Ravnborg 149b7afdb7eSSam Ravnborg /* entry.S */ 150b7afdb7eSSam Ravnborg extern unsigned long lvl14_save[4]; 151b7afdb7eSSam Ravnborg extern unsigned int real_irq_entry[]; 152b7afdb7eSSam Ravnborg extern unsigned int smp4d_ticker[]; 153b7afdb7eSSam Ravnborg extern unsigned int patchme_maybe_smp_msg[]; 154b7afdb7eSSam Ravnborg 1552e74a74fSSam Ravnborg void floppy_hardint(void); 156b7afdb7eSSam Ravnborg 157b7afdb7eSSam Ravnborg /* trampoline_32.S */ 158b7afdb7eSSam Ravnborg extern unsigned long sun4m_cpu_startup; 159b7afdb7eSSam Ravnborg extern unsigned long sun4d_cpu_startup; 16081265fd9SSam Ravnborg 161529b17a9SSam Ravnborg /* signal_32.c */ 162529b17a9SSam Ravnborg asmlinkage void do_sigreturn(struct pt_regs *regs); 163529b17a9SSam Ravnborg asmlinkage void do_rt_sigreturn(struct pt_regs *regs); 164529b17a9SSam Ravnborg void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0, 165529b17a9SSam Ravnborg unsigned long thread_info_flags); 166529b17a9SSam Ravnborg asmlinkage int do_sys_sigstack(struct sigstack __user *ssptr, 167529b17a9SSam Ravnborg struct sigstack __user *ossptr, 168529b17a9SSam Ravnborg unsigned long sp); 1697c8ee361SSam Ravnborg 170c8c8782dSSam Ravnborg /* ptrace_32.c */ 171c8c8782dSSam Ravnborg asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p); 172c8c8782dSSam Ravnborg 1739edfae3fSSam Ravnborg /* unaligned_32.c */ 1749edfae3fSSam Ravnborg asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn); 1759edfae3fSSam Ravnborg asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn); 1769edfae3fSSam Ravnborg 1777c8ee361SSam Ravnborg /* windows.c */ 1787c8ee361SSam Ravnborg void try_to_clear_window_buffer(struct pt_regs *regs, int who); 1797c8ee361SSam Ravnborg 180a3ee8faaSSam Ravnborg /* auxio_32.c */ 181a3ee8faaSSam Ravnborg void __init auxio_probe(void); 182a3ee8faaSSam Ravnborg void __init auxio_power_probe(void); 183a3ee8faaSSam Ravnborg 1847738925dSSam Ravnborg /* pcic.c */ 1857738925dSSam Ravnborg extern void __iomem *pcic_regs; 1867738925dSSam Ravnborg void pcic_nmi(unsigned int pend, struct pt_regs *regs); 1877738925dSSam Ravnborg 188fcea8b27SSam Ravnborg /* time_32.c */ 189fcea8b27SSam Ravnborg void __init time_init(void); 190fcea8b27SSam Ravnborg 1918d74e32aSSam Ravnborg #else /* CONFIG_SPARC32 */ 1927105de84SSam Ravnborg #endif /* CONFIG_SPARC32 */ 1937105de84SSam Ravnborg #endif /* !(__SPARC_KERNEL_H) */ 194