/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _ASM_M32R_ASSEMBLER_H #define _ASM_M32R_ASSEMBLER_H /* * linux/asm-m32r/assembler.h * * Copyright (C) 2004 Hirokazu Takata <takata at linux-m32r.org> * * This file contains M32R architecture specific macro definitions. */ #include <linux/stringify.h> #undef __STR #ifdef __ASSEMBLY__ #define __STR(x) x #else #define __STR(x) __stringify(x) #endif #ifdef CONFIG_SMP #define M32R_LOCK __STR(lock) #define M32R_UNLOCK __STR(unlock) #else #define M32R_LOCK __STR(ld) #define M32R_UNLOCK __STR(st) #endif #ifdef __ASSEMBLY__ #undef ENTRY #define ENTRY(name) ENTRY_M name .macro ENTRY_M name .global \name ALIGN \name: .endm #endif /** * LDIMM - load immediate value * STI - enable interruption * CLI - disable interruption */ #ifdef __ASSEMBLY__ #define LDIMM(reg,x) LDIMM reg x .macro LDIMM reg x seth \reg, #high(\x) or3 \reg, \reg, #low(\x) .endm #if !(defined(CONFIG_CHIP_M32102) || defined(CONFIG_CHIP_M32104)) #define ENABLE_INTERRUPTS(reg) ENABLE_INTERRUPTS reg .macro ENABLE_INTERRUPTS reg setpsw #0x40 -> nop ; WORKAROUND: "-> nop" is a workaround for the M32700(TS1). .endm #define DISABLE_INTERRUPTS(reg) DISABLE_INTERRUPTS reg .macro DISABLE_INTERRUPTS reg clrpsw #0x40 -> nop ; WORKAROUND: "-> nop" is a workaround for the M32700(TS1). .endm #else /* CONFIG_CHIP_M32102 || CONFIG_CHIP_M32104 */ #define ENABLE_INTERRUPTS(reg) ENABLE_INTERRUPTS reg .macro ENABLE_INTERRUPTS reg mvfc \reg, psw or3 \reg, \reg, #0x0040 mvtc \reg, psw .endm #define DISABLE_INTERRUPTS(reg) DISABLE_INTERRUPTS reg .macro DISABLE_INTERRUPTS reg mvfc \reg, psw and3 \reg, \reg, #0xffbf mvtc \reg, psw .endm #endif /* CONFIG_CHIP_M32102 */ .macro SAVE_ALL push r0 ; orig_r0 push sp ; spi (r15) push lr ; r14 push r13 mvfc r13, cr3 ; spu push r13 mvfc r13, bbpc push r13 mvfc r13, bbpsw push r13 mvfc r13, bpc push r13 mvfc r13, psw push r13 #if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) mvfaclo r13, a1 push r13 mvfachi r13, a1 push r13 mvfaclo r13, a0 push r13 mvfachi r13, a0 push r13 #elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) mvfaclo r13 push r13 mvfachi r13 push r13 ldi r13, #0 push r13 ; dummy push acc1h push r13 ; dummy push acc1l #else #error unknown isa configuration #endif ldi r13, #-1 push r13 ; syscall_nr (default: -1) push r12 push r11 push r10 push r9 push r8 push r7 push r3 push r2 push r1 push r0 addi sp, #-4 ; room for implicit pt_regs parameter push r6 push r5 push r4 .endm .macro RESTORE_ALL pop r4 pop r5 pop r6 addi sp, #4 pop r0 pop r1 pop r2 pop r3 pop r7 pop r8 pop r9 pop r10 pop r11 pop r12 addi r15, #4 ; Skip syscall number #if defined(CONFIG_ISA_M32R2) && defined(CONFIG_ISA_DSP_LEVEL2) pop r13 mvtachi r13, a0 pop r13 mvtaclo r13, a0 pop r13 mvtachi r13, a1 pop r13 mvtaclo r13, a1 #elif defined(CONFIG_ISA_M32R2) || defined(CONFIG_ISA_M32R) pop r13 ; dummy pop acc1h pop r13 ; dummy pop acc1l pop r13 mvtachi r13 pop r13 mvtaclo r13 #else #error unknown isa configuration #endif pop r14 mvtc r14, psw pop r14 mvtc r14, bpc addi sp, #8 ; Skip bbpsw, bbpc pop r14 mvtc r14, cr3 ; spu pop r13 pop lr ; r14 pop sp ; spi (r15) addi sp, #4 ; Skip orig_r0 .fillinsn 1: rte .section .fixup,"ax" 2: bl do_exit .previous .section __ex_table,"a" ALIGN .long 1b, 2b .previous .endm #define GET_CURRENT(reg) get_current reg .macro get_current reg ldi \reg, #-8192 and \reg, sp .endm #if !(defined(CONFIG_CHIP_M32102) || defined(CONFIG_CHIP_M32104)) .macro SWITCH_TO_KERNEL_STACK ; switch to kernel stack (spi) clrpsw #0x80 -> nop .endm #else /* CONFIG_CHIP_M32102 || CONFIG_CHIP_M32104 */ .macro SWITCH_TO_KERNEL_STACK push r0 ; save r0 for working mvfc r0, psw and3 r0, r0, #0x00ff7f mvtc r0, psw slli r0, #16 bltz r0, 1f ; check BSM-bit ; ;; called from kernel context: previous stack = spi pop r0 ; retrieve r0 bra 2f .fillinsn 1: ;; called from user context: previous stack = spu mvfc r0, cr3 ; spu addi r0, #4 mvtc r0, cr3 ; spu ld r0, @(-4,r0) ; retrieve r0 .fillinsn 2: .endm #endif /* CONFIG_CHIP_M32102 || CONFIG_CHIP_M32104 */ #endif /* __ASSEMBLY__ */ #endif /* _ASM_M32R_ASSEMBLER_H */
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
m32104ut | Folder | 0755 |
|
|
m32700ut | Folder | 0755 |
|
|
mappi2 | Folder | 0755 |
|
|
mappi3 | Folder | 0755 |
|
|
opsput | Folder | 0755 |
|
|
Kbuild | File | 318 B | 0644 |
|
addrspace.h | File | 1.67 KB | 0644 |
|
asm-offsets.h | File | 35 B | 0644 |
|
assembler.h | File | 4.2 KB | 0644 |
|
atomic.h | File | 6.29 KB | 0644 |
|
barrier.h | File | 506 B | 0644 |
|
bitops.h | File | 6.23 KB | 0644 |
|
bug.h | File | 115 B | 0644 |
|
bugs.h | File | 410 B | 0644 |
|
cache.h | File | 222 B | 0644 |
|
cachectl.h | File | 739 B | 0644 |
|
cacheflush.h | File | 3.2 KB | 0644 |
|
checksum.h | File | 4.83 KB | 0644 |
|
cmpxchg.h | File | 4.86 KB | 0644 |
|
dcache_clear.h | File | 1.01 KB | 0644 |
|
delay.h | File | 31 B | 0644 |
|
device.h | File | 148 B | 0644 |
|
div64.h | File | 31 B | 0644 |
|
dma-mapping.h | File | 570 B | 0644 |
|
dma.h | File | 281 B | 0644 |
|
elf.h | File | 3.64 KB | 0644 |
|
emergency-restart.h | File | 188 B | 0644 |
|
fb.h | File | 414 B | 0644 |
|
flat.h | File | 4.2 KB | 0644 |
|
ftrace.h | File | 12 B | 0644 |
|
futex.h | File | 82 B | 0644 |
|
hardirq.h | File | 214 B | 0644 |
|
hw_irq.h | File | 87 B | 0644 |
|
io.h | File | 6.44 KB | 0644 |
|
irq.h | File | 2.94 KB | 0644 |
|
irq_regs.h | File | 34 B | 0644 |
|
irqflags.h | File | 2.24 KB | 0644 |
|
kdebug.h | File | 32 B | 0644 |
|
kmap_types.h | File | 251 B | 0644 |
|
linkage.h | File | 177 B | 0644 |
|
local.h | File | 7.8 KB | 0644 |
|
local64.h | File | 33 B | 0644 |
|
m32102.h | File | 14.71 KB | 0644 |
|
m32r.h | File | 5.7 KB | 0644 |
|
m32r_mp_fpga.h | File | 14.89 KB | 0644 |
|
mc146818rtc.h | File | 671 B | 0644 |
|
mmu.h | File | 403 B | 0644 |
|
mmu_context.h | File | 4.23 KB | 0644 |
|
mmzone.h | File | 1.29 KB | 0644 |
|
page.h | File | 2.62 KB | 0644 |
|
pci.h | File | 147 B | 0644 |
|
percpu.h | File | 165 B | 0644 |
|
pgalloc.h | File | 1.84 KB | 0644 |
|
pgtable-2level.h | File | 2.31 KB | 0644 |
|
pgtable.h | File | 9.7 KB | 0644 |
|
processor.h | File | 2.93 KB | 0644 |
|
ptrace.h | File | 1.3 KB | 0644 |
|
rtc.h | File | 1.99 KB | 0644 |
|
s1d13806.h | File | 9.84 KB | 0644 |
|
segment.h | File | 228 B | 0644 |
|
serial.h | File | 187 B | 0644 |
|
setup.h | File | 1022 B | 0644 |
|
shmparam.h | File | 197 B | 0644 |
|
signal.h | File | 561 B | 0644 |
|
smp.h | File | 3.5 KB | 0644 |
|
spinlock.h | File | 7.15 KB | 0644 |
|
spinlock_types.h | File | 520 B | 0644 |
|
string.h | File | 378 B | 0644 |
|
switch_to.h | File | 1.48 KB | 0644 |
|
syscall.h | File | 252 B | 0644 |
|
termios.h | File | 1.74 KB | 0644 |
|
thread_info.h | File | 3.71 KB | 0644 |
|
timex.h | File | 581 B | 0644 |
|
tlb.h | File | 483 B | 0644 |
|
tlbflush.h | File | 2.94 KB | 0644 |
|
topology.h | File | 167 B | 0644 |
|
types.h | File | 258 B | 0644 |
|
uaccess.h | File | 15.3 KB | 0644 |
|
ucontext.h | File | 321 B | 0644 |
|
unaligned.h | File | 592 B | 0644 |
|
unistd.h | File | 1.23 KB | 0644 |
|
user.h | File | 2.1 KB | 0644 |
|
vga.h | File | 436 B | 0644 |
|
xor.h | File | 148 B | 0644 |
|