File Index
Files and directories
Sign in
FILE

irqflags.h

File preview with syntax highlighting.

linux-6.19.14/arch/loongarch/include/asm/irqflags.h C
 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.