cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

irqflags.h (1175B)


      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/processor.h>
     11#include <asm/csr.h>
     12
     13/* read interrupt enabled status */
     14static inline unsigned long arch_local_save_flags(void)
     15{
     16	return csr_read(CSR_STATUS);
     17}
     18
     19/* unconditionally enable interrupts */
     20static inline void arch_local_irq_enable(void)
     21{
     22	csr_set(CSR_STATUS, SR_IE);
     23}
     24
     25/* unconditionally disable interrupts */
     26static inline void arch_local_irq_disable(void)
     27{
     28	csr_clear(CSR_STATUS, SR_IE);
     29}
     30
     31/* get status and disable interrupts */
     32static inline unsigned long arch_local_irq_save(void)
     33{
     34	return csr_read_clear(CSR_STATUS, SR_IE);
     35}
     36
     37/* test flags */
     38static inline int arch_irqs_disabled_flags(unsigned long flags)
     39{
     40	return !(flags & SR_IE);
     41}
     42
     43/* test hardware interrupt enable bit */
     44static inline int arch_irqs_disabled(void)
     45{
     46	return arch_irqs_disabled_flags(arch_local_save_flags());
     47}
     48
     49/* set interrupt enabled status */
     50static inline void arch_local_irq_restore(unsigned long flags)
     51{
     52	csr_set(CSR_STATUS, flags & SR_IE);
     53}
     54
     55#endif /* _ASM_RISCV_IRQFLAGS_H */