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 (1652B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _M68K_IRQFLAGS_H
      3#define _M68K_IRQFLAGS_H
      4
      5#include <linux/types.h>
      6#include <linux/preempt.h>
      7#include <asm/thread_info.h>
      8#include <asm/entry.h>
      9
     10static inline unsigned long arch_local_save_flags(void)
     11{
     12	unsigned long flags;
     13	asm volatile ("movew %%sr,%0" : "=d" (flags) : : "memory");
     14	return flags;
     15}
     16
     17static inline void arch_local_irq_disable(void)
     18{
     19#ifdef CONFIG_COLDFIRE
     20	asm volatile (
     21		"move	%/sr,%%d0	\n\t"
     22		"ori.l	#0x0700,%%d0	\n\t"
     23		"move	%%d0,%/sr	\n"
     24		: /* no outputs */
     25		:
     26		: "cc", "%d0", "memory");
     27#else
     28	asm volatile ("oriw  #0x0700,%%sr" : : : "memory");
     29#endif
     30}
     31
     32static inline void arch_local_irq_enable(void)
     33{
     34#if defined(CONFIG_COLDFIRE)
     35	asm volatile (
     36		"move	%/sr,%%d0	\n\t"
     37		"andi.l	#0xf8ff,%%d0	\n\t"
     38		"move	%%d0,%/sr	\n"
     39		: /* no outputs */
     40		:
     41		: "cc", "%d0", "memory");
     42#else
     43# if defined(CONFIG_MMU)
     44	if (MACH_IS_Q40 || !hardirq_count())
     45# endif
     46		asm volatile (
     47			"andiw %0,%%sr"
     48			:
     49			: "i" (ALLOWINT)
     50			: "memory");
     51#endif
     52}
     53
     54static inline unsigned long arch_local_irq_save(void)
     55{
     56	unsigned long flags = arch_local_save_flags();
     57	arch_local_irq_disable();
     58	return flags;
     59}
     60
     61static inline void arch_local_irq_restore(unsigned long flags)
     62{
     63	asm volatile ("movew %0,%%sr" : : "d" (flags) : "memory");
     64}
     65
     66static inline bool arch_irqs_disabled_flags(unsigned long flags)
     67{
     68	if (MACH_IS_ATARI) {
     69		/* Ignore HSYNC = ipl 2 on Atari */
     70		return (flags & ~(ALLOWINT | 0x200)) != 0;
     71	}
     72	return (flags & ~ALLOWINT) != 0;
     73}
     74
     75static inline bool arch_irqs_disabled(void)
     76{
     77	return arch_irqs_disabled_flags(arch_local_save_flags());
     78}
     79
     80#endif /* _M68K_IRQFLAGS_H */