xref: /openbmc/linux/arch/sparc/kernel/kernel.h (revision ad1a4830)
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 
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);
94b7afdb7eSSam Ravnborg 
95b7afdb7eSSam Ravnborg /* sun4m_irq.c */
962e74a74fSSam Ravnborg void sun4m_init_IRQ(void);
972e74a74fSSam Ravnborg void sun4m_unmask_profile_irq(void);
982e74a74fSSam Ravnborg void sun4m_clear_profile_irq(int cpu);
99b7afdb7eSSam Ravnborg 
100f9fd3488SSam Ravnborg /* sun4m_smp.c */
101f9fd3488SSam Ravnborg void sun4m_cpu_pre_starting(void *arg);
102f9fd3488SSam Ravnborg void sun4m_cpu_pre_online(void *arg);
103b8417de3SSam Ravnborg void __init smp4m_boot_cpus(void);
104b8417de3SSam Ravnborg int smp4m_boot_one_cpu(int i, struct task_struct *idle);
105b8417de3SSam Ravnborg void __init smp4m_smp_done(void);
106b8417de3SSam Ravnborg void smp4m_cross_call_irq(void);
107b8417de3SSam Ravnborg void smp4m_percpu_timer_interrupt(struct pt_regs *regs);
108f9fd3488SSam Ravnborg 
109b7afdb7eSSam Ravnborg /* sun4d_irq.c */
110b7afdb7eSSam Ravnborg extern spinlock_t sun4d_imsk_lock;
111b7afdb7eSSam Ravnborg 
1122e74a74fSSam Ravnborg void sun4d_init_IRQ(void);
1132e74a74fSSam Ravnborg int sun4d_request_irq(unsigned int irq,
114b7afdb7eSSam Ravnborg                       irq_handler_t handler,
115b7afdb7eSSam Ravnborg                       unsigned long irqflags,
116b7afdb7eSSam Ravnborg                       const char *devname, void *dev_id);
1172e74a74fSSam Ravnborg int show_sun4d_interrupts(struct seq_file *, void *);
1182e74a74fSSam Ravnborg void sun4d_distribute_irqs(void);
1192e74a74fSSam Ravnborg void sun4d_free_irq(unsigned int irq, void *dev_id);
120b7afdb7eSSam Ravnborg 
121f9fd3488SSam Ravnborg /* sun4d_smp.c */
122f9fd3488SSam Ravnborg void sun4d_cpu_pre_starting(void *arg);
123f9fd3488SSam Ravnborg void sun4d_cpu_pre_online(void *arg);
12465199b0aSSam Ravnborg void __init smp4d_boot_cpus(void);
12565199b0aSSam Ravnborg int smp4d_boot_one_cpu(int i, struct task_struct *idle);
12665199b0aSSam Ravnborg void __init smp4d_smp_done(void);
12765199b0aSSam Ravnborg void smp4d_cross_call_irq(void);
12865199b0aSSam Ravnborg void smp4d_percpu_timer_interrupt(struct pt_regs *regs);
129f9fd3488SSam Ravnborg 
130f9fd3488SSam Ravnborg /* leon_smp.c */
131f9fd3488SSam Ravnborg void leon_cpu_pre_starting(void *arg);
132f9fd3488SSam Ravnborg void leon_cpu_pre_online(void *arg);
1331bbc9060SSam Ravnborg void leonsmp_ipi_interrupt(void);
1341bbc9060SSam Ravnborg void leon_cross_call_irq(void);
135f9fd3488SSam Ravnborg 
136b7afdb7eSSam Ravnborg /* head_32.S */
137b7afdb7eSSam Ravnborg extern unsigned int t_nmi[];
138b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4d[];
139b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4m[];
140b7afdb7eSSam Ravnborg 
1413c46e2d6SSam Ravnborg extern struct tt_entry trapbase;
142a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu1;
143a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu2;
144a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu3;
145b7afdb7eSSam Ravnborg 
146b7afdb7eSSam Ravnborg extern char cputypval[];
147b7afdb7eSSam Ravnborg 
148b7afdb7eSSam Ravnborg /* entry.S */
149b7afdb7eSSam Ravnborg extern unsigned long lvl14_save[4];
150b7afdb7eSSam Ravnborg extern unsigned int real_irq_entry[];
151b7afdb7eSSam Ravnborg extern unsigned int smp4d_ticker[];
152b7afdb7eSSam Ravnborg extern unsigned int patchme_maybe_smp_msg[];
153b7afdb7eSSam Ravnborg 
1542e74a74fSSam Ravnborg void floppy_hardint(void);
155b7afdb7eSSam Ravnborg 
156b7afdb7eSSam Ravnborg /* trampoline_32.S */
157b7afdb7eSSam Ravnborg extern unsigned long sun4m_cpu_startup;
158b7afdb7eSSam Ravnborg extern unsigned long sun4d_cpu_startup;
15981265fd9SSam Ravnborg 
160529b17a9SSam Ravnborg /* signal_32.c */
161529b17a9SSam Ravnborg asmlinkage void do_sigreturn(struct pt_regs *regs);
162529b17a9SSam Ravnborg asmlinkage void do_rt_sigreturn(struct pt_regs *regs);
163529b17a9SSam Ravnborg void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0,
164529b17a9SSam Ravnborg                       unsigned long thread_info_flags);
165529b17a9SSam Ravnborg asmlinkage int do_sys_sigstack(struct sigstack __user *ssptr,
166529b17a9SSam Ravnborg                                struct sigstack __user *ossptr,
167529b17a9SSam Ravnborg                                unsigned long sp);
1687c8ee361SSam Ravnborg 
169c8c8782dSSam Ravnborg /* ptrace_32.c */
170c8c8782dSSam Ravnborg asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p);
171c8c8782dSSam Ravnborg 
1729edfae3fSSam Ravnborg /* unaligned_32.c */
1739edfae3fSSam Ravnborg asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1749edfae3fSSam Ravnborg asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1759edfae3fSSam Ravnborg 
1767c8ee361SSam Ravnborg /* windows.c */
1777c8ee361SSam Ravnborg void try_to_clear_window_buffer(struct pt_regs *regs, int who);
1787c8ee361SSam Ravnborg 
179a3ee8faaSSam Ravnborg /* auxio_32.c */
180a3ee8faaSSam Ravnborg void __init auxio_probe(void);
181a3ee8faaSSam Ravnborg void __init auxio_power_probe(void);
182a3ee8faaSSam Ravnborg 
1837738925dSSam Ravnborg /* pcic.c */
1847738925dSSam Ravnborg extern void __iomem *pcic_regs;
1857738925dSSam Ravnborg void pcic_nmi(unsigned int pend, struct pt_regs *regs);
1867738925dSSam Ravnborg 
187fcea8b27SSam Ravnborg /* time_32.c */
188fcea8b27SSam Ravnborg void __init time_init(void);
189fcea8b27SSam Ravnborg 
1908d74e32aSSam Ravnborg #else /* CONFIG_SPARC32 */
1917105de84SSam Ravnborg #endif /* CONFIG_SPARC32 */
1927105de84SSam Ravnborg #endif /* !(__SPARC_KERNEL_H) */
193