1 #ifndef _ASM_POWERPC_ASM_PROTOTYPES_H 2 #define _ASM_POWERPC_ASM_PROTOTYPES_H 3 /* 4 * This file is for prototypes of C functions that are only called 5 * from asm, and any associated variables. 6 * 7 * Copyright 2016, Daniel Axtens, IBM Corporation. 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License 11 * as published by the Free Software Foundation; either version 2 12 * of the License, or (at your option) any later version. 13 */ 14 15 #include <linux/threads.h> 16 #include <asm/cacheflush.h> 17 #include <asm/checksum.h> 18 #include <linux/uaccess.h> 19 #include <asm/epapr_hcalls.h> 20 #include <asm/dcr.h> 21 #include <asm/mmu_context.h> 22 23 #include <uapi/asm/ucontext.h> 24 25 /* SMP */ 26 extern struct thread_info *current_set[NR_CPUS]; 27 extern struct thread_info *secondary_ti; 28 void start_secondary(void *unused); 29 30 /* kexec */ 31 struct paca_struct; 32 struct kimage; 33 extern struct paca_struct kexec_paca; 34 void kexec_copy_flush(struct kimage *image); 35 36 /* pseries hcall tracing */ 37 extern struct static_key hcall_tracepoint_key; 38 void __trace_hcall_entry(unsigned long opcode, unsigned long *args); 39 void __trace_hcall_exit(long opcode, unsigned long retval, 40 unsigned long *retbuf); 41 /* OPAL tracing */ 42 #ifdef HAVE_JUMP_LABEL 43 extern struct static_key opal_tracepoint_key; 44 #endif 45 46 void __trace_opal_entry(unsigned long opcode, unsigned long *args); 47 void __trace_opal_exit(long opcode, unsigned long retval); 48 49 /* VMX copying */ 50 int enter_vmx_usercopy(void); 51 int exit_vmx_usercopy(void); 52 int enter_vmx_copy(void); 53 void * exit_vmx_copy(void *dest); 54 55 /* Traps */ 56 long machine_check_early(struct pt_regs *regs); 57 long hmi_exception_realmode(struct pt_regs *regs); 58 void SMIException(struct pt_regs *regs); 59 void handle_hmi_exception(struct pt_regs *regs); 60 void instruction_breakpoint_exception(struct pt_regs *regs); 61 void RunModeException(struct pt_regs *regs); 62 void single_step_exception(struct pt_regs *regs); 63 void program_check_exception(struct pt_regs *regs); 64 void alignment_exception(struct pt_regs *regs); 65 void StackOverflow(struct pt_regs *regs); 66 void nonrecoverable_exception(struct pt_regs *regs); 67 void kernel_fp_unavailable_exception(struct pt_regs *regs); 68 void altivec_unavailable_exception(struct pt_regs *regs); 69 void vsx_unavailable_exception(struct pt_regs *regs); 70 void fp_unavailable_tm(struct pt_regs *regs); 71 void altivec_unavailable_tm(struct pt_regs *regs); 72 void vsx_unavailable_tm(struct pt_regs *regs); 73 void facility_unavailable_exception(struct pt_regs *regs); 74 void TAUException(struct pt_regs *regs); 75 void altivec_assist_exception(struct pt_regs *regs); 76 void unrecoverable_exception(struct pt_regs *regs); 77 void kernel_bad_stack(struct pt_regs *regs); 78 void system_reset_exception(struct pt_regs *regs); 79 void machine_check_exception(struct pt_regs *regs); 80 void emulation_assist_interrupt(struct pt_regs *regs); 81 82 /* signals, syscalls and interrupts */ 83 #ifdef CONFIG_PPC64 84 int sys_swapcontext(struct ucontext __user *old_ctx, 85 struct ucontext __user *new_ctx, 86 long ctx_size, long r6, long r7, long r8, struct pt_regs *regs); 87 #else 88 long sys_swapcontext(struct ucontext __user *old_ctx, 89 struct ucontext __user *new_ctx, 90 int ctx_size, int r6, int r7, int r8, struct pt_regs *regs); 91 #endif 92 long sys_switch_endian(void); 93 notrace unsigned int __check_irq_replay(void); 94 void notrace restore_interrupts(void); 95 96 /* ptrace */ 97 long do_syscall_trace_enter(struct pt_regs *regs); 98 void do_syscall_trace_leave(struct pt_regs *regs); 99 100 /* process */ 101 void restore_math(struct pt_regs *regs); 102 void restore_tm_state(struct pt_regs *regs); 103 104 /* prom_init (OpenFirmware) */ 105 unsigned long __init prom_init(unsigned long r3, unsigned long r4, 106 unsigned long pp, 107 unsigned long r6, unsigned long r7, 108 unsigned long kbase); 109 110 /* setup */ 111 void __init early_setup(unsigned long dt_ptr); 112 void early_setup_secondary(void); 113 114 /* time */ 115 void accumulate_stolen_time(void); 116 117 /* misc runtime */ 118 extern u64 __bswapdi2(u64); 119 extern s64 __lshrdi3(s64, int); 120 extern s64 __ashldi3(s64, int); 121 extern s64 __ashrdi3(s64, int); 122 extern int __cmpdi2(s64, s64); 123 extern int __ucmpdi2(u64, u64); 124 125 /* tracing */ 126 void _mcount(void); 127 unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip); 128 129 #endif /* _ASM_POWERPC_ASM_PROTOTYPES_H */ 130