Path: blob/master/arch/microblaze/include/asm/irqflags.h
26442 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Copyright (C) 2006 Atmark Techno, Inc.3*/45#ifndef _ASM_MICROBLAZE_IRQFLAGS_H6#define _ASM_MICROBLAZE_IRQFLAGS_H78#include <linux/types.h>9#include <asm/registers.h>1011#if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR1213static inline notrace unsigned long arch_local_irq_save(void)14{15unsigned long flags;16asm volatile(" msrclr %0, %1 \n"17" nop \n"18: "=r"(flags)19: "i"(MSR_IE)20: "memory");21return flags;22}2324static inline notrace void arch_local_irq_disable(void)25{26/* this uses r0 without declaring it - is that correct? */27asm volatile(" msrclr r0, %0 \n"28" nop \n"29:30: "i"(MSR_IE)31: "memory");32}3334static inline notrace void arch_local_irq_enable(void)35{36/* this uses r0 without declaring it - is that correct? */37asm volatile(" msrset r0, %0 \n"38" nop \n"39:40: "i"(MSR_IE)41: "memory");42}4344#else /* !CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */4546static inline notrace unsigned long arch_local_irq_save(void)47{48unsigned long flags, tmp;49asm volatile (" mfs %0, rmsr \n"50" nop \n"51" andi %1, %0, %2 \n"52" mts rmsr, %1 \n"53" nop \n"54: "=r"(flags), "=r"(tmp)55: "i"(~MSR_IE)56: "memory");57return flags;58}5960static inline notrace void arch_local_irq_disable(void)61{62unsigned long tmp;63asm volatile(" mfs %0, rmsr \n"64" nop \n"65" andi %0, %0, %1 \n"66" mts rmsr, %0 \n"67" nop \n"68: "=r"(tmp)69: "i"(~MSR_IE)70: "memory");71}7273static inline notrace void arch_local_irq_enable(void)74{75unsigned long tmp;76asm volatile(" mfs %0, rmsr \n"77" nop \n"78" ori %0, %0, %1 \n"79" mts rmsr, %0 \n"80" nop \n"81: "=r"(tmp)82: "i"(MSR_IE)83: "memory");84}8586#endif /* CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR */8788static inline notrace unsigned long arch_local_save_flags(void)89{90unsigned long flags;91asm volatile(" mfs %0, rmsr \n"92" nop \n"93: "=r"(flags)94:95: "memory");96return flags;97}9899static inline notrace void arch_local_irq_restore(unsigned long flags)100{101asm volatile(" mts rmsr, %0 \n"102" nop \n"103:104: "r"(flags)105: "memory");106}107108static inline notrace bool arch_irqs_disabled_flags(unsigned long flags)109{110return (flags & MSR_IE) == 0;111}112113static inline notrace bool arch_irqs_disabled(void)114{115return arch_irqs_disabled_flags(arch_local_save_flags());116}117118#endif /* _ASM_MICROBLAZE_IRQFLAGS_H */119120121