linux/arch/sparc/kernel/kernel.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __SPARC_KERNEL_H
   3#define __SPARC_KERNEL_H
   4
   5#include <linux/interrupt.h>
   6#include <linux/ftrace.h>
   7
   8#include <asm/traps.h>
   9#include <asm/head.h>
  10#include <asm/io.h>
  11
  12/* cpu.c */
  13extern const char *sparc_pmu_type;
  14extern unsigned int fsr_storage;
  15extern int ncpus_probed;
  16
  17#ifdef CONFIG_SPARC64
  18/* setup_64.c */
  19struct seq_file;
  20void cpucap_info(struct seq_file *);
  21
  22static inline unsigned long kimage_addr_to_ra(const void *p)
  23{
  24        unsigned long val = (unsigned long) p;
  25
  26        return kern_base + (val - KERNBASE);
  27}
  28
  29/* sys_sparc_64.c */
  30asmlinkage long sys_kern_features(void);
  31
  32/* unaligned_64.c */
  33asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn);
  34int handle_popc(u32 insn, struct pt_regs *regs);
  35void handle_lddfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr);
  36void handle_stdfmna(struct pt_regs *regs, unsigned long sfar, unsigned long sfsr);
  37
  38/* smp_64.c */
  39void __irq_entry smp_call_function_client(int irq, struct pt_regs *regs);
  40void __irq_entry smp_call_function_single_client(int irq, struct pt_regs *regs);
  41void __irq_entry smp_penguin_jailcell(int irq, struct pt_regs *regs);
  42void __irq_entry smp_receive_signal_client(int irq, struct pt_regs *regs);
  43
  44/* kgdb_64.c */
  45void __irq_entry smp_kgdb_capture_client(int irq, struct pt_regs *regs);
  46
  47/* pci.c */
  48#ifdef CONFIG_PCI
  49int ali_sound_dma_hack(struct device *dev, u64 device_mask);
  50#else
  51#define ali_sound_dma_hack(dev, mask)   (0)
  52#endif
  53
  54/* signal32.c */
  55void do_sigreturn32(struct pt_regs *regs);
  56asmlinkage void do_rt_sigreturn32(struct pt_regs *regs);
  57void do_signal32(struct pt_regs * regs);
  58asmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp);
  59
  60/* time_64.c */
  61void __init time_init_early(void);
  62
  63/* compat_audit.c */
  64extern unsigned int sparc32_dir_class[];
  65extern unsigned int sparc32_chattr_class[];
  66extern unsigned int sparc32_write_class[];
  67extern unsigned int sparc32_read_class[];
  68extern unsigned int sparc32_signal_class[];
  69int sparc32_classify_syscall(unsigned int syscall);
  70#endif
  71
  72#ifdef CONFIG_SPARC32
  73/* setup_32.c */
  74struct linux_romvec;
  75void sparc32_start_kernel(struct linux_romvec *rp);
  76
  77/* cpu.c */
  78void cpu_probe(void);
  79
  80/* traps_32.c */
  81void handle_hw_divzero(struct pt_regs *regs, unsigned long pc,
  82                       unsigned long npc, unsigned long psr);
  83/* irq_32.c */
  84extern struct irqaction static_irqaction[];
  85extern int static_irq_count;
  86extern spinlock_t irq_action_lock;
  87
  88void unexpected_irq(int irq, void *dev_id, struct pt_regs * regs);
  89void init_IRQ(void);
  90
  91/* sun4m_irq.c */
  92void sun4m_init_IRQ(void);
  93void sun4m_unmask_profile_irq(void);
  94void sun4m_clear_profile_irq(int cpu);
  95
  96/* sun4m_smp.c */
  97void sun4m_cpu_pre_starting(void *arg);
  98void sun4m_cpu_pre_online(void *arg);
  99void __init smp4m_boot_cpus(void);
 100int smp4m_boot_one_cpu(int i, struct task_struct *idle);
 101void __init smp4m_smp_done(void);
 102void smp4m_cross_call_irq(void);
 103void smp4m_percpu_timer_interrupt(struct pt_regs *regs);
 104
 105/* sun4d_irq.c */
 106extern spinlock_t sun4d_imsk_lock;
 107
 108void sun4d_init_IRQ(void);
 109int sun4d_request_irq(unsigned int irq,
 110                      irq_handler_t handler,
 111                      unsigned long irqflags,
 112                      const char *devname, void *dev_id);
 113int show_sun4d_interrupts(struct seq_file *, void *);
 114void sun4d_distribute_irqs(void);
 115void sun4d_free_irq(unsigned int irq, void *dev_id);
 116
 117/* sun4d_smp.c */
 118void sun4d_cpu_pre_starting(void *arg);
 119void sun4d_cpu_pre_online(void *arg);
 120void __init smp4d_boot_cpus(void);
 121int smp4d_boot_one_cpu(int i, struct task_struct *idle);
 122void __init smp4d_smp_done(void);
 123void smp4d_cross_call_irq(void);
 124void smp4d_percpu_timer_interrupt(struct pt_regs *regs);
 125
 126/* leon_smp.c */
 127void leon_cpu_pre_starting(void *arg);
 128void leon_cpu_pre_online(void *arg);
 129void leonsmp_ipi_interrupt(void);
 130void leon_cross_call_irq(void);
 131
 132/* head_32.S */
 133extern unsigned int t_nmi[];
 134extern unsigned int linux_trap_ipi15_sun4d[];
 135extern unsigned int linux_trap_ipi15_sun4m[];
 136
 137extern struct tt_entry trapbase;
 138extern struct tt_entry trapbase_cpu1;
 139extern struct tt_entry trapbase_cpu2;
 140extern struct tt_entry trapbase_cpu3;
 141
 142extern char cputypval[];
 143
 144/* entry.S */
 145extern unsigned long lvl14_save[4];
 146extern unsigned int real_irq_entry[];
 147extern unsigned int smp4d_ticker[];
 148extern unsigned int patchme_maybe_smp_msg[];
 149
 150void floppy_hardint(void);
 151
 152/* trampoline_32.S */
 153extern unsigned long sun4m_cpu_startup;
 154extern unsigned long sun4d_cpu_startup;
 155
 156/* process_32.c */
 157asmlinkage int sparc_do_fork(unsigned long clone_flags,
 158                             unsigned long stack_start,
 159                             struct pt_regs *regs,
 160                             unsigned long stack_size);
 161
 162/* signal_32.c */
 163asmlinkage void do_sigreturn(struct pt_regs *regs);
 164asmlinkage void do_rt_sigreturn(struct pt_regs *regs);
 165void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0,
 166                      unsigned long thread_info_flags);
 167asmlinkage int do_sys_sigstack(struct sigstack __user *ssptr,
 168                               struct sigstack __user *ossptr,
 169                               unsigned long sp);
 170
 171/* ptrace_32.c */
 172asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p);
 173
 174/* unaligned_32.c */
 175asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn);
 176asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn);
 177
 178/* windows.c */
 179void try_to_clear_window_buffer(struct pt_regs *regs, int who);
 180
 181/* auxio_32.c */
 182void __init auxio_probe(void);
 183void __init auxio_power_probe(void);
 184
 185/* pcic.c */
 186extern void __iomem *pcic_regs;
 187void pcic_nmi(unsigned int pend, struct pt_regs *regs);
 188
 189/* time_32.c */
 190void __init time_init(void);
 191
 192#else /* CONFIG_SPARC32 */
 193#endif /* CONFIG_SPARC32 */
 194#endif /* !(__SPARC_KERNEL_H) */
 195