FILE
irqflags.h
File preview with syntax highlighting.
linux-6.19.14/arch/loongarch/include/asm/irqflags.h
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 4 */ 5#ifndef _ASM_IRQFLAGS_H 6#define _ASM_IRQFLAGS_H 7 8#ifndef __ASSEMBLER__ 9 10#include <linux/compiler.h> 11#include <linux/stringify.h> 12#include <asm/loongarch.h> 13 14static inline void arch_local_irq_enable(void) 15{ 16 u32 flags = CSR_CRMD_IE; 17 register u32 mask asm("t0") = CSR_CRMD_IE; 18 19 __asm__ __volatile__( 20 "csrxchg %[val], %[mask], %[reg]\n\t" 21 : [val] "+r" (flags) 22 : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) 23 : "memory"); 24} 25 26static inline void arch_local_irq_disable(void) 27{ 28 u32 flags = 0; 29 register u32 mask asm("t0") = CSR_CRMD_IE; 30 31 __asm__ __volatile__( 32 "csrxchg %[val], %[mask], %[reg]\n\t" 33 : [val] "+r" (flags) 34 : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) 35 : "memory"); 36} 37 38static inline unsigned long arch_local_irq_save(void) 39{ 40 u32 flags = 0; 41 register u32 mask asm("t0") = CSR_CRMD_IE; 42 43 __asm__ __volatile__( 44 "csrxchg %[val], %[mask], %[reg]\n\t" 45 : [val] "+r" (flags) 46 : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) 47 : "memory"); 48 return flags; 49} 50 51static inline void arch_local_irq_restore(unsigned long flags) 52{ 53 register u32 mask asm("t0") = CSR_CRMD_IE; 54 55 __asm__ __volatile__( 56 "csrxchg %[val], %[mask], %[reg]\n\t" 57 : [val] "+r" (flags) 58 : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD) 59 : "memory"); 60} 61 62static inline unsigned long arch_local_save_flags(void) 63{ 64 u32 flags; 65 __asm__ __volatile__( 66 "csrrd %[val], %[reg]\n\t" 67 : [val] "=r" (flags) 68 : [reg] "i" (LOONGARCH_CSR_CRMD) 69 : "memory"); 70 return flags; 71} 72 73static inline int arch_irqs_disabled_flags(unsigned long flags) 74{ 75 return !(flags & CSR_CRMD_IE); 76} 77 78static inline int arch_irqs_disabled(void) 79{ 80 return arch_irqs_disabled_flags(arch_local_save_flags()); 81} 82 83#endif /* #ifndef __ASSEMBLER__ */ 84 85#endif /* _ASM_IRQFLAGS_H */
~/
Read-only file preview.