/usr/src/linux-headers-5.15.0-181/arch/arc/include/asm
NameSizeModeActions
arcregs.h94770644editdlrm
asm-offsets.h1650644editdlrm
asserts.h9580644editdlrm
atomic-llsc.h28640644editdlrm
atomic-spinlock.h25690644editdlrm
atomic.h11530644editdlrm
atomic64-arcv2.h60950644editdlrm
barrier.h13760644editdlrm
bitops.h38850644editdlrm
bug.h8190644editdlrm
cache.h36040644editdlrm
cacheflush.h38240644editdlrm
checksum.h23710644editdlrm
cmpxchg.h31880644editdlrm
current.h5490644editdlrm
delay.h18960644editdlrm
disasm.h38130644editdlrm
dma.h3130644editdlrm
dsp-impl.h38600644editdlrm
dsp.h7960644editdlrm
dwarf.h7460644editdlrm
elf.h19350644editdlrm
entry-arcv2.h74190644editdlrm
entry-compact.h88100644editdlrm
entry.h66870644editdlrm
exec.h2640644editdlrm
fb.h4110644editdlrm
fpu.h11250644editdlrm
futex.h36110644editdlrm
highmem.h14220644editdlrm
hugepage.h20710644editdlrm
io.h62910644editdlrm
irq.h6790644editdlrm
irqflags-arcv2.h34910644editdlrm
irqflags-compact.h42930644editdlrm
irqflags.h3630644editdlrm
jump_label.h19760644editdlrm
Kbuild1530644editdlrm
kdebug.h2540644editdlrm
kgdb.h12390644editdlrm
kprobes.h11860644editdlrm
linkage.h14840644editdlrm
mach_desc.h19430644editdlrm
mmu-arcv2.h24940644editdlrm
mmu.h3870644editdlrm
mmu_context.h55680644editdlrm
module.h4280644editdlrm
page.h33130644editdlrm
pci.h3600644editdlrm
perf_event.h68790644editdlrm
pgalloc.h28880644editdlrm
pgtable-bits-arcv2.h48960644editdlrm
pgtable-levels.h56260644editdlrm
pgtable.h7800644editdlrm
processor.h32530644editdlrm
ptrace.h37590644editdlrm
sections.h2610644editdlrm
segment.h4760644editdlrm
serial.h4980644editdlrm
setup.h12740644editdlrm
shmparam.h2960644editdlrm
smp.h38230644editdlrm
spinlock.h85800644editdlrm
spinlock_types.h9050644editdlrm
stacktrace.h11780644editdlrm
string.h10360644editdlrm
switch_to.h5530644editdlrm
syscall.h17380644editdlrm
syscalls.h5470644editdlrm
thread_info.h33390644editdlrm
timex.h3620644editdlrm
tlb.h2620644editdlrm
tlbflush.h16540644editdlrm
uaccess.h170190644editdlrm
unaligned.h6250644editdlrm
unwind.h34460644editdlrm
vermagic.h1570644editdlrm
vmalloc.h870644editdlrm
Edit: /usr/src/linux-headers-5.15.0-181/arch/arc/include/asm/entry.h (6687B)
/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com) * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) */ #ifndef __ASM_ARC_ENTRY_H #define __ASM_ARC_ENTRY_H #include /* For NR_syscalls defination */ #include #include #include /* For VMALLOC_START */ #include #ifdef CONFIG_ISA_ARCOMPACT #include /* ISA specific bits */ #else #include #endif /* Note on the LD/ST addr modes with addr reg wback * * LD.a same as LD.aw * * LD.a reg1, [reg2, x] => Pre Incr * Eff Addr for load = [reg2 + x] * * LD.ab reg1, [reg2, x] => Post Incr * Eff Addr for load = [reg2] */ .macro PUSH reg st.a \reg, [sp, -4] .endm .macro PUSHAX aux lr r9, [\aux] PUSH r9 .endm .macro POP reg ld.ab \reg, [sp, 4] .endm .macro POPAX aux POP r9 sr r9, [\aux] .endm /*-------------------------------------------------------------- * Helpers to save/restore Scratch Regs: * used by Interrupt/Exception Prologue/Epilogue *-------------------------------------------------------------*/ .macro SAVE_R0_TO_R12 PUSH r0 PUSH r1 PUSH r2 PUSH r3 PUSH r4 PUSH r5 PUSH r6 PUSH r7 PUSH r8 PUSH r9 PUSH r10 PUSH r11 PUSH r12 .endm .macro RESTORE_R12_TO_R0 POP r12 POP r11 POP r10 POP r9 POP r8 POP r7 POP r6 POP r5 POP r4 POP r3 POP r2 POP r1 POP r0 .endm /*-------------------------------------------------------------- * Helpers to save/restore callee-saved regs: * used by several macros below *-------------------------------------------------------------*/ .macro SAVE_R13_TO_R24 PUSH r13 PUSH r14 PUSH r15 PUSH r16 PUSH r17 PUSH r18 PUSH r19 PUSH r20 PUSH r21 PUSH r22 PUSH r23 PUSH r24 .endm .macro RESTORE_R24_TO_R13 POP r24 POP r23 POP r22 POP r21 POP r20 POP r19 POP r18 POP r17 POP r16 POP r15 POP r14 POP r13 .endm /*-------------------------------------------------------------- * Collect User Mode callee regs as struct callee_regs - needed by * fork/do_signal/unaligned-access-emulation. * (By default only scratch regs are saved on entry to kernel) * * Special handling for r25 if used for caching Task Pointer. * It would have been saved in task->thread.user_r25 already, but to keep * the interface same it is copied into regular r25 placeholder in * struct callee_regs. *-------------------------------------------------------------*/ .macro SAVE_CALLEE_SAVED_USER mov r12, sp ; save SP as ref to pt_regs SAVE_R13_TO_R24 #ifdef CONFIG_ARC_CURR_IN_REG ; Retrieve orig r25 and save it with rest of callee_regs ld r12, [r12, PT_user_r25] PUSH r12 #else PUSH r25 #endif .endm /*-------------------------------------------------------------- * Save kernel Mode callee regs at the time of Contect Switch. * * Special handling for r25 if used for caching Task Pointer. * Kernel simply skips saving it since it will be loaded with * incoming task pointer anyways *-------------------------------------------------------------*/ .macro SAVE_CALLEE_SAVED_KERNEL SAVE_R13_TO_R24 #ifdef CONFIG_ARC_CURR_IN_REG sub sp, sp, 4 #else PUSH r25 #endif .endm /*-------------------------------------------------------------- * Opposite of SAVE_CALLEE_SAVED_KERNEL *-------------------------------------------------------------*/ .macro RESTORE_CALLEE_SAVED_KERNEL #ifdef CONFIG_ARC_CURR_IN_REG add sp, sp, 4 /* skip usual r25 placeholder */ #else POP r25 #endif RESTORE_R24_TO_R13 .endm /*-------------------------------------------------------------- * Opposite of SAVE_CALLEE_SAVED_USER * * ptrace tracer or unaligned-access fixup might have changed a user mode * callee reg which is saved back to usual r25 storage location *-------------------------------------------------------------*/ .macro RESTORE_CALLEE_SAVED_USER #ifdef CONFIG_ARC_CURR_IN_REG POP r12 #else POP r25 #endif RESTORE_R24_TO_R13 ; SP is back to start of pt_regs #ifdef CONFIG_ARC_CURR_IN_REG st r12, [sp, PT_user_r25] #endif .endm /*-------------------------------------------------------------- * Super FAST Restore callee saved regs by simply re-adjusting SP *-------------------------------------------------------------*/ .macro DISCARD_CALLEE_SAVED_USER add sp, sp, SZ_CALLEE_REGS .endm /*------------------------------------------------------------- * given a tsk struct, get to the base of it's kernel mode stack * tsk->thread_info is really a PAGE, whose bottom hoists stack * which grows upwards towards thread_info *------------------------------------------------------------*/ .macro GET_TSK_STACK_BASE tsk, out /* Get task->thread_info (this is essentially start of a PAGE) */ ld \out, [\tsk, TASK_THREAD_INFO] /* Go to end of page where stack begins (grows upwards) */ add2 \out, \out, (THREAD_SIZE)/4 .endm /* * @reg [OUT] thread_info->flags of "current" */ .macro GET_CURR_THR_INFO_FLAGS reg GET_CURR_THR_INFO_FROM_SP \reg ld \reg, [\reg, THREAD_INFO_FLAGS] .endm #ifdef CONFIG_SMP /*------------------------------------------------- * Retrieve the current running task on this CPU * 1. Determine curr CPU id. * 2. Use it to index into _current_task[ ] */ .macro GET_CURR_TASK_ON_CPU reg GET_CPU_ID \reg ld.as \reg, [@_current_task, \reg] .endm /*------------------------------------------------- * Save a new task as the "current" task on this CPU * 1. Determine curr CPU id. * 2. Use it to index into _current_task[ ] * * Coded differently than GET_CURR_TASK_ON_CPU (which uses LD.AS) * because ST r0, [r1, offset] can ONLY have s9 @offset * while LD can take s9 (4 byte insn) or LIMM (8 byte insn) */ .macro SET_CURR_TASK_ON_CPU tsk, tmp GET_CPU_ID \tmp add2 \tmp, @_current_task, \tmp st \tsk, [\tmp] #ifdef CONFIG_ARC_CURR_IN_REG mov r25, \tsk #endif .endm #else /* Uniprocessor implementation of macros */ .macro GET_CURR_TASK_ON_CPU reg ld \reg, [@_current_task] .endm .macro SET_CURR_TASK_ON_CPU tsk, tmp st \tsk, [@_current_task] #ifdef CONFIG_ARC_CURR_IN_REG mov r25, \tsk #endif .endm #endif /* SMP / UNI */ /* ------------------------------------------------------------------ * Get the ptr to some field of Current Task at @off in task struct * -Uses r25 for Current task ptr if that is enabled */ #ifdef CONFIG_ARC_CURR_IN_REG .macro GET_CURR_TASK_FIELD_PTR off, reg add \reg, r25, \off .endm #else .macro GET_CURR_TASK_FIELD_PTR off, reg GET_CURR_TASK_ON_CPU \reg add \reg, \reg, \off .endm #endif /* CONFIG_ARC_CURR_IN_REG */ #endif /* __ASM_ARC_ENTRY_H */