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
kimage_addr_to_ra(const void * p)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
43*a51b8c83SSam Ravnborg /* uprobes.c */
44*a51b8c83SSam Ravnborg asmlinkage void uprobe_trap(struct pt_regs *regs,
45*a51b8c83SSam Ravnborg unsigned long trap_level);
46*a51b8c83SSam Ravnborg
47a0c54a21SSam Ravnborg /* smp_64.c */
48a0c54a21SSam Ravnborg void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs);
49a0c54a21SSam Ravnborg void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs);
50a0c54a21SSam Ravnborg void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs);
51a0c54a21SSam Ravnborg void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs);
52a0c54a21SSam Ravnborg
5348c7eca5SSam Ravnborg /* kgdb_64.c */
5448c7eca5SSam Ravnborg void __irq_entry smp_kgdb_capture_client(int irq, struct pt_regs *regs);
5548c7eca5SSam Ravnborg
564ac7b826SSam Ravnborg /* pci.c */
57c54fc984SChristoph Hellwig #ifdef CONFIG_PCI
58c54fc984SChristoph Hellwig int ali_sound_dma_hack(struct device *dev, u64 device_mask);
59c54fc984SChristoph Hellwig #else
60c54fc984SChristoph Hellwig #define ali_sound_dma_hack(dev, mask) (0)
61c54fc984SChristoph Hellwig #endif
624ac7b826SSam Ravnborg
63abaff455SSam Ravnborg /* signal32.c */
64abaff455SSam Ravnborg void do_sigreturn32(struct pt_regs *regs);
65abaff455SSam Ravnborg asmlinkage void do_rt_sigreturn32(struct pt_regs *regs);
66abaff455SSam Ravnborg void do_signal32(struct pt_regs * regs);
67abaff455SSam Ravnborg asmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp);
68abaff455SSam Ravnborg
6983e8eb99SPavel Tatashin /* time_64.c */
7083e8eb99SPavel Tatashin void __init time_init_early(void);
7183e8eb99SPavel Tatashin
72a1ca187eSSam Ravnborg /* compat_audit.c */
739ef595d8SJoe Perches extern unsigned int sparc32_dir_class[];
749ef595d8SJoe Perches extern unsigned int sparc32_chattr_class[];
759ef595d8SJoe Perches extern unsigned int sparc32_write_class[];
769ef595d8SJoe Perches extern unsigned int sparc32_read_class[];
779ef595d8SJoe Perches extern unsigned int sparc32_signal_class[];
789ef595d8SJoe Perches int sparc32_classify_syscall(unsigned int syscall);
79ac85fe8bSDavid S. Miller #endif
80ac85fe8bSDavid S. Miller
818d74e32aSSam Ravnborg #ifdef CONFIG_SPARC32
824efb55e6SSam Ravnborg /* setup_32.c */
83178f0ffaSSam Ravnborg struct linux_romvec;
844efb55e6SSam Ravnborg void sparc32_start_kernel(struct linux_romvec *rp);
854efb55e6SSam Ravnborg
868d74e32aSSam Ravnborg /* cpu.c */
872e74a74fSSam Ravnborg void cpu_probe(void);
8853ae3419SSam Ravnborg
898d74e32aSSam Ravnborg /* traps_32.c */
902e74a74fSSam Ravnborg void handle_hw_divzero(struct pt_regs *regs, unsigned long pc,
918d74e32aSSam Ravnborg unsigned long npc, unsigned long psr);
9281265fd9SSam Ravnborg /* irq_32.c */
9381265fd9SSam Ravnborg extern struct irqaction static_irqaction[];
9481265fd9SSam Ravnborg extern int static_irq_count;
9581265fd9SSam Ravnborg extern spinlock_t irq_action_lock;
9681265fd9SSam Ravnborg
972e74a74fSSam Ravnborg void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs);
98b7afdb7eSSam Ravnborg
99b7afdb7eSSam Ravnborg /* sun4m_irq.c */
1002e74a74fSSam Ravnborg void sun4m_init_IRQ(void);
1012e74a74fSSam Ravnborg void sun4m_unmask_profile_irq(void);
1022e74a74fSSam Ravnborg void sun4m_clear_profile_irq(int cpu);
103b7afdb7eSSam Ravnborg
104f9fd3488SSam Ravnborg /* sun4m_smp.c */
105f9fd3488SSam Ravnborg void sun4m_cpu_pre_starting(void *arg);
106f9fd3488SSam Ravnborg void sun4m_cpu_pre_online(void *arg);
107b8417de3SSam Ravnborg void __init smp4m_boot_cpus(void);
108b8417de3SSam Ravnborg int smp4m_boot_one_cpu(int i, struct task_struct *idle);
109b8417de3SSam Ravnborg void __init smp4m_smp_done(void);
110b8417de3SSam Ravnborg void smp4m_cross_call_irq(void);
111b8417de3SSam Ravnborg void smp4m_percpu_timer_interrupt(struct pt_regs *regs);
112f9fd3488SSam Ravnborg
113b7afdb7eSSam Ravnborg /* sun4d_irq.c */
114b7afdb7eSSam Ravnborg extern spinlock_t sun4d_imsk_lock;
115b7afdb7eSSam Ravnborg
1162e74a74fSSam Ravnborg void sun4d_init_IRQ(void);
1172e74a74fSSam Ravnborg int sun4d_request_irq(unsigned int irq,
118b7afdb7eSSam Ravnborg irq_handler_t handler,
119b7afdb7eSSam Ravnborg unsigned long irqflags,
120b7afdb7eSSam Ravnborg const char *devname, void *dev_id);
1212e74a74fSSam Ravnborg int show_sun4d_interrupts(struct seq_file *, void *);
1222e74a74fSSam Ravnborg void sun4d_distribute_irqs(void);
1232e74a74fSSam Ravnborg void sun4d_free_irq(unsigned int irq, void *dev_id);
124b7afdb7eSSam Ravnborg
125f9fd3488SSam Ravnborg /* sun4d_smp.c */
126f9fd3488SSam Ravnborg void sun4d_cpu_pre_starting(void *arg);
127f9fd3488SSam Ravnborg void sun4d_cpu_pre_online(void *arg);
12865199b0aSSam Ravnborg void __init smp4d_boot_cpus(void);
12965199b0aSSam Ravnborg int smp4d_boot_one_cpu(int i, struct task_struct *idle);
13065199b0aSSam Ravnborg void __init smp4d_smp_done(void);
13165199b0aSSam Ravnborg void smp4d_cross_call_irq(void);
13265199b0aSSam Ravnborg void smp4d_percpu_timer_interrupt(struct pt_regs *regs);
133f9fd3488SSam Ravnborg
134f9fd3488SSam Ravnborg /* leon_smp.c */
135f9fd3488SSam Ravnborg void leon_cpu_pre_starting(void *arg);
136f9fd3488SSam Ravnborg void leon_cpu_pre_online(void *arg);
1371bbc9060SSam Ravnborg void leonsmp_ipi_interrupt(void);
1381bbc9060SSam Ravnborg void leon_cross_call_irq(void);
139f9fd3488SSam Ravnborg
140b7afdb7eSSam Ravnborg /* head_32.S */
141b7afdb7eSSam Ravnborg extern unsigned int t_nmi[];
142b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4d[];
143b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4m[];
144b7afdb7eSSam Ravnborg
1457bfba2caSSam Ravnborg extern struct tt_entry trapbase[];
1467bfba2caSSam Ravnborg extern struct tt_entry trapbase_cpu1[];
1477bfba2caSSam Ravnborg extern struct tt_entry trapbase_cpu2[];
1487bfba2caSSam Ravnborg extern struct tt_entry trapbase_cpu3[];
149b7afdb7eSSam Ravnborg
150b7afdb7eSSam Ravnborg extern char cputypval[];
151b7afdb7eSSam Ravnborg
152b7afdb7eSSam Ravnborg /* entry.S */
153b7afdb7eSSam Ravnborg extern unsigned long lvl14_save[4];
154b7afdb7eSSam Ravnborg extern unsigned int real_irq_entry[];
155b7afdb7eSSam Ravnborg extern unsigned int smp4d_ticker[];
156b7afdb7eSSam Ravnborg extern unsigned int patchme_maybe_smp_msg[];
157b7afdb7eSSam Ravnborg
1582e74a74fSSam Ravnborg void floppy_hardint(void);
159b7afdb7eSSam Ravnborg
160b7afdb7eSSam Ravnborg /* trampoline_32.S */
161b7afdb7eSSam Ravnborg extern unsigned long sun4m_cpu_startup;
162b7afdb7eSSam Ravnborg extern unsigned long sun4d_cpu_startup;
16381265fd9SSam Ravnborg
164529b17a9SSam Ravnborg /* signal_32.c */
165529b17a9SSam Ravnborg asmlinkage void do_sigreturn(struct pt_regs *regs);
166529b17a9SSam Ravnborg asmlinkage void do_rt_sigreturn(struct pt_regs *regs);
167529b17a9SSam Ravnborg void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0,
168529b17a9SSam Ravnborg unsigned long thread_info_flags);
169529b17a9SSam Ravnborg asmlinkage int do_sys_sigstack(struct sigstack __user *ssptr,
170529b17a9SSam Ravnborg struct sigstack __user *ossptr,
171529b17a9SSam Ravnborg unsigned long sp);
1727c8ee361SSam Ravnborg
173c8c8782dSSam Ravnborg /* ptrace_32.c */
174c8c8782dSSam Ravnborg asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p);
175c8c8782dSSam Ravnborg
1769edfae3fSSam Ravnborg /* unaligned_32.c */
1779edfae3fSSam Ravnborg asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1789edfae3fSSam Ravnborg asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1799edfae3fSSam Ravnborg
1807c8ee361SSam Ravnborg /* windows.c */
1817c8ee361SSam Ravnborg void try_to_clear_window_buffer(struct pt_regs *regs, int who);
1827c8ee361SSam Ravnborg
183a3ee8faaSSam Ravnborg /* auxio_32.c */
184a3ee8faaSSam Ravnborg void __init auxio_probe(void);
185a3ee8faaSSam Ravnborg void __init auxio_power_probe(void);
186a3ee8faaSSam Ravnborg
1877738925dSSam Ravnborg /* pcic.c */
1887738925dSSam Ravnborg extern void __iomem *pcic_regs;
1897738925dSSam Ravnborg void pcic_nmi(unsigned int pend, struct pt_regs *regs);
1907738925dSSam Ravnborg
191fcea8b27SSam Ravnborg /* time_32.c */
192fcea8b27SSam Ravnborg void __init time_init(void);
193fcea8b27SSam Ravnborg
1948d74e32aSSam Ravnborg #else /* CONFIG_SPARC32 */
1957105de84SSam Ravnborg #endif /* CONFIG_SPARC32 */
1967105de84SSam Ravnborg #endif /* !(__SPARC_KERNEL_H) */
197