11549Srgrimes/* SPDX-License-Identifier: GPL-2.0-only */
21549Srgrimes/*
31549Srgrimes * IRQ support for the Hexagon architecture
41541Srgrimes *
51541Srgrimes * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
61541Srgrimes */
71541Srgrimes
81541Srgrimes#ifndef _ASM_IRQFLAGS_H
91541Srgrimes#define _ASM_IRQFLAGS_H
101541Srgrimes
111541Srgrimes#include <asm/hexagon_vm.h>
121541Srgrimes#include <linux/types.h>
131541Srgrimes
141541Srgrimesstatic inline unsigned long arch_local_save_flags(void)
151549Srgrimes{
161549Srgrimes	return __vmgetie();
171549Srgrimes}
181541Srgrimes
191549Srgrimesstatic inline unsigned long arch_local_irq_save(void)
201541Srgrimes{
211541Srgrimes	return __vmsetie(VM_INT_DISABLE);
221549Srgrimes}
231541Srgrimes
241541Srgrimesstatic inline bool arch_irqs_disabled_flags(unsigned long flags)
251541Srgrimes{
261541Srgrimes	return !flags;
271541Srgrimes}
281541Srgrimes
291541Srgrimesstatic inline bool arch_irqs_disabled(void)
301541Srgrimes{
3114235Speter	return !__vmgetie();
321541Srgrimes}
331541Srgrimes
341541Srgrimesstatic inline void arch_local_irq_enable(void)
351549Srgrimes{
3612221Sbde	__vmsetie(VM_INT_ENABLE);
371549Srgrimes}
381549Srgrimes
391549Srgrimesstatic inline void arch_local_irq_disable(void)
403308Sphk{
4111607Sdg	__vmsetie(VM_INT_DISABLE);
421549Srgrimes}
431549Srgrimes
441549Srgrimesstatic inline void arch_local_irq_restore(unsigned long flags)
451549Srgrimes{
461549Srgrimes	__vmsetie(flags);
476380Ssos}
481549Srgrimes
493308Sphk#endif
5014235Speter