xref: /openbmc/linux/arch/sparc/kernel/kernel.h (revision 9ef595d8)
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 
4448c7eca5SSam Ravnborg /* kgdb_64.c */
4548c7eca5SSam Ravnborg void __irq_entry smp_kgdb_capture_client(int irq, struct pt_regs *regs);
4648c7eca5SSam Ravnborg 
474ac7b826SSam Ravnborg /* pci.c */
484ac7b826SSam Ravnborg int pci64_dma_supported(struct pci_dev *pdev, u64 device_mask);
494ac7b826SSam Ravnborg 
50abaff455SSam Ravnborg /* signal32.c */
51abaff455SSam Ravnborg void do_sigreturn32(struct pt_regs *regs);
52abaff455SSam Ravnborg asmlinkage void do_rt_sigreturn32(struct pt_regs *regs);
53abaff455SSam Ravnborg void do_signal32(struct pt_regs * regs);
54abaff455SSam Ravnborg asmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp);
55abaff455SSam Ravnborg 
56a1ca187eSSam Ravnborg /* compat_audit.c */
579ef595d8SJoe Perches extern unsigned int sparc32_dir_class[];
589ef595d8SJoe Perches extern unsigned int sparc32_chattr_class[];
599ef595d8SJoe Perches extern unsigned int sparc32_write_class[];
609ef595d8SJoe Perches extern unsigned int sparc32_read_class[];
619ef595d8SJoe Perches extern unsigned int sparc32_signal_class[];
629ef595d8SJoe Perches int sparc32_classify_syscall(unsigned int syscall);
63ac85fe8bSDavid S. Miller #endif
64ac85fe8bSDavid S. Miller 
658d74e32aSSam Ravnborg #ifdef CONFIG_SPARC32
664efb55e6SSam Ravnborg /* setup_32.c */
67178f0ffaSSam Ravnborg struct linux_romvec;
684efb55e6SSam Ravnborg void sparc32_start_kernel(struct linux_romvec *rp);
694efb55e6SSam Ravnborg 
708d74e32aSSam Ravnborg /* cpu.c */
712e74a74fSSam Ravnborg void cpu_probe(void);
7253ae3419SSam Ravnborg 
738d74e32aSSam Ravnborg /* traps_32.c */
742e74a74fSSam Ravnborg void handle_hw_divzero(struct pt_regs *regs, unsigned long pc,
758d74e32aSSam Ravnborg                        unsigned long npc, unsigned long psr);
7681265fd9SSam Ravnborg /* irq_32.c */
7781265fd9SSam Ravnborg extern struct irqaction static_irqaction[];
7881265fd9SSam Ravnborg extern int static_irq_count;
7981265fd9SSam Ravnborg extern spinlock_t irq_action_lock;
8081265fd9SSam Ravnborg 
812e74a74fSSam Ravnborg void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs);
822e74a74fSSam Ravnborg void init_IRQ(void);
83b7afdb7eSSam Ravnborg 
84b7afdb7eSSam Ravnborg /* sun4m_irq.c */
852e74a74fSSam Ravnborg void sun4m_init_IRQ(void);
862e74a74fSSam Ravnborg void sun4m_unmask_profile_irq(void);
872e74a74fSSam Ravnborg void sun4m_clear_profile_irq(int cpu);
88b7afdb7eSSam Ravnborg 
89f9fd3488SSam Ravnborg /* sun4m_smp.c */
90f9fd3488SSam Ravnborg void sun4m_cpu_pre_starting(void *arg);
91f9fd3488SSam Ravnborg void sun4m_cpu_pre_online(void *arg);
92b8417de3SSam Ravnborg void __init smp4m_boot_cpus(void);
93b8417de3SSam Ravnborg int smp4m_boot_one_cpu(int i, struct task_struct *idle);
94b8417de3SSam Ravnborg void __init smp4m_smp_done(void);
95b8417de3SSam Ravnborg void smp4m_cross_call_irq(void);
96b8417de3SSam Ravnborg void smp4m_percpu_timer_interrupt(struct pt_regs *regs);
97f9fd3488SSam Ravnborg 
98b7afdb7eSSam Ravnborg /* sun4d_irq.c */
99b7afdb7eSSam Ravnborg extern spinlock_t sun4d_imsk_lock;
100b7afdb7eSSam Ravnborg 
1012e74a74fSSam Ravnborg void sun4d_init_IRQ(void);
1022e74a74fSSam Ravnborg int sun4d_request_irq(unsigned int irq,
103b7afdb7eSSam Ravnborg                       irq_handler_t handler,
104b7afdb7eSSam Ravnborg                       unsigned long irqflags,
105b7afdb7eSSam Ravnborg                       const char *devname, void *dev_id);
1062e74a74fSSam Ravnborg int show_sun4d_interrupts(struct seq_file *, void *);
1072e74a74fSSam Ravnborg void sun4d_distribute_irqs(void);
1082e74a74fSSam Ravnborg void sun4d_free_irq(unsigned int irq, void *dev_id);
109b7afdb7eSSam Ravnborg 
110f9fd3488SSam Ravnborg /* sun4d_smp.c */
111f9fd3488SSam Ravnborg void sun4d_cpu_pre_starting(void *arg);
112f9fd3488SSam Ravnborg void sun4d_cpu_pre_online(void *arg);
11365199b0aSSam Ravnborg void __init smp4d_boot_cpus(void);
11465199b0aSSam Ravnborg int smp4d_boot_one_cpu(int i, struct task_struct *idle);
11565199b0aSSam Ravnborg void __init smp4d_smp_done(void);
11665199b0aSSam Ravnborg void smp4d_cross_call_irq(void);
11765199b0aSSam Ravnborg void smp4d_percpu_timer_interrupt(struct pt_regs *regs);
118f9fd3488SSam Ravnborg 
119f9fd3488SSam Ravnborg /* leon_smp.c */
120f9fd3488SSam Ravnborg void leon_cpu_pre_starting(void *arg);
121f9fd3488SSam Ravnborg void leon_cpu_pre_online(void *arg);
1221bbc9060SSam Ravnborg void leonsmp_ipi_interrupt(void);
1231bbc9060SSam Ravnborg void leon_cross_call_irq(void);
124f9fd3488SSam Ravnborg 
125b7afdb7eSSam Ravnborg /* head_32.S */
126b7afdb7eSSam Ravnborg extern unsigned int t_nmi[];
127b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4d[];
128b7afdb7eSSam Ravnborg extern unsigned int linux_trap_ipi15_sun4m[];
129b7afdb7eSSam Ravnborg 
130a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu1;
131a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu2;
132a2a211cbSSam Ravnborg extern struct tt_entry trapbase_cpu3;
133b7afdb7eSSam Ravnborg 
134b7afdb7eSSam Ravnborg extern char cputypval[];
135b7afdb7eSSam Ravnborg 
136b7afdb7eSSam Ravnborg /* entry.S */
137b7afdb7eSSam Ravnborg extern unsigned long lvl14_save[4];
138b7afdb7eSSam Ravnborg extern unsigned int real_irq_entry[];
139b7afdb7eSSam Ravnborg extern unsigned int smp4d_ticker[];
140b7afdb7eSSam Ravnborg extern unsigned int patchme_maybe_smp_msg[];
141b7afdb7eSSam Ravnborg 
1422e74a74fSSam Ravnborg void floppy_hardint(void);
143b7afdb7eSSam Ravnborg 
144b7afdb7eSSam Ravnborg /* trampoline_32.S */
145b7afdb7eSSam Ravnborg extern unsigned long sun4m_cpu_startup;
146b7afdb7eSSam Ravnborg extern unsigned long sun4d_cpu_startup;
14781265fd9SSam Ravnborg 
1488bdd5a1bSSam Ravnborg /* process_32.c */
1498bdd5a1bSSam Ravnborg asmlinkage int sparc_do_fork(unsigned long clone_flags,
1508bdd5a1bSSam Ravnborg                              unsigned long stack_start,
1518bdd5a1bSSam Ravnborg                              struct pt_regs *regs,
1528bdd5a1bSSam Ravnborg                              unsigned long stack_size);
1538bdd5a1bSSam Ravnborg 
154529b17a9SSam Ravnborg /* signal_32.c */
155529b17a9SSam Ravnborg asmlinkage void do_sigreturn(struct pt_regs *regs);
156529b17a9SSam Ravnborg asmlinkage void do_rt_sigreturn(struct pt_regs *regs);
157529b17a9SSam Ravnborg void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0,
158529b17a9SSam Ravnborg                       unsigned long thread_info_flags);
159529b17a9SSam Ravnborg asmlinkage int do_sys_sigstack(struct sigstack __user *ssptr,
160529b17a9SSam Ravnborg                                struct sigstack __user *ossptr,
161529b17a9SSam Ravnborg                                unsigned long sp);
1627c8ee361SSam Ravnborg 
163c8c8782dSSam Ravnborg /* ptrace_32.c */
164c8c8782dSSam Ravnborg asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p);
165c8c8782dSSam Ravnborg 
1669edfae3fSSam Ravnborg /* unaligned_32.c */
1679edfae3fSSam Ravnborg asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1689edfae3fSSam Ravnborg asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn);
1699edfae3fSSam Ravnborg 
1707c8ee361SSam Ravnborg /* windows.c */
1717c8ee361SSam Ravnborg void try_to_clear_window_buffer(struct pt_regs *regs, int who);
1727c8ee361SSam Ravnborg 
173a3ee8faaSSam Ravnborg /* auxio_32.c */
174a3ee8faaSSam Ravnborg void __init auxio_probe(void);
175a3ee8faaSSam Ravnborg void __init auxio_power_probe(void);
176a3ee8faaSSam Ravnborg 
1777738925dSSam Ravnborg /* pcic.c */
1787738925dSSam Ravnborg extern void __iomem *pcic_regs;
1797738925dSSam Ravnborg void pcic_nmi(unsigned int pend, struct pt_regs *regs);
1807738925dSSam Ravnborg 
181fcea8b27SSam Ravnborg /* time_32.c */
182fcea8b27SSam Ravnborg void __init time_init(void);
183fcea8b27SSam Ravnborg 
1848d74e32aSSam Ravnborg #else /* CONFIG_SPARC32 */
1857105de84SSam Ravnborg #endif /* CONFIG_SPARC32 */
1867105de84SSam Ravnborg #endif /* !(__SPARC_KERNEL_H) */
187