Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v6.11 54 lines 1.1 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (C) 2012 Regents of the University of California 4 */ 5 6 7#ifndef _ASM_RISCV_IRQFLAGS_H 8#define _ASM_RISCV_IRQFLAGS_H 9 10#include <asm/csr.h> 11 12/* read interrupt enabled status */ 13static inline unsigned long arch_local_save_flags(void) 14{ 15 return csr_read(CSR_STATUS); 16} 17 18/* unconditionally enable interrupts */ 19static inline void arch_local_irq_enable(void) 20{ 21 csr_set(CSR_STATUS, SR_IE); 22} 23 24/* unconditionally disable interrupts */ 25static inline void arch_local_irq_disable(void) 26{ 27 csr_clear(CSR_STATUS, SR_IE); 28} 29 30/* get status and disable interrupts */ 31static inline unsigned long arch_local_irq_save(void) 32{ 33 return csr_read_clear(CSR_STATUS, SR_IE); 34} 35 36/* test flags */ 37static inline int arch_irqs_disabled_flags(unsigned long flags) 38{ 39 return !(flags & SR_IE); 40} 41 42/* test hardware interrupt enable bit */ 43static inline int arch_irqs_disabled(void) 44{ 45 return arch_irqs_disabled_flags(arch_local_save_flags()); 46} 47 48/* set interrupt enabled status */ 49static inline void arch_local_irq_restore(unsigned long flags) 50{ 51 csr_set(CSR_STATUS, flags & SR_IE); 52} 53 54#endif /* _ASM_RISCV_IRQFLAGS_H */