mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 16:34:38 +07:00
b4d0d230cc
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public licence as published by the free software foundation either version 2 of the licence or at your option any later version extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 114 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190520170857.552531963@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* C6X IRQ flag handling
|
|
*
|
|
* Copyright (C) 2010 Texas Instruments Incorporated
|
|
* Written by Mark Salter (msalter@redhat.com)
|
|
*/
|
|
|
|
#ifndef _ASM_IRQFLAGS_H
|
|
#define _ASM_IRQFLAGS_H
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
/* read interrupt enabled status */
|
|
static inline unsigned long arch_local_save_flags(void)
|
|
{
|
|
unsigned long flags;
|
|
|
|
asm volatile (" mvc .s2 CSR,%0\n" : "=b"(flags));
|
|
return flags;
|
|
}
|
|
|
|
/* set interrupt enabled status */
|
|
static inline void arch_local_irq_restore(unsigned long flags)
|
|
{
|
|
asm volatile (" mvc .s2 %0,CSR\n" : : "b"(flags) : "memory");
|
|
}
|
|
|
|
/* unconditionally enable interrupts */
|
|
static inline void arch_local_irq_enable(void)
|
|
{
|
|
unsigned long flags = arch_local_save_flags();
|
|
flags |= 1;
|
|
arch_local_irq_restore(flags);
|
|
}
|
|
|
|
/* unconditionally disable interrupts */
|
|
static inline void arch_local_irq_disable(void)
|
|
{
|
|
unsigned long flags = arch_local_save_flags();
|
|
flags &= ~1;
|
|
arch_local_irq_restore(flags);
|
|
}
|
|
|
|
/* get status and disable interrupts */
|
|
static inline unsigned long arch_local_irq_save(void)
|
|
{
|
|
unsigned long flags;
|
|
|
|
flags = arch_local_save_flags();
|
|
arch_local_irq_restore(flags & ~1);
|
|
return flags;
|
|
}
|
|
|
|
/* test flags */
|
|
static inline int arch_irqs_disabled_flags(unsigned long flags)
|
|
{
|
|
return (flags & 1) == 0;
|
|
}
|
|
|
|
/* test hardware interrupt enable bit */
|
|
static inline int arch_irqs_disabled(void)
|
|
{
|
|
return arch_irqs_disabled_flags(arch_local_save_flags());
|
|
}
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
#endif /* __ASM_IRQFLAGS_H */
|