199a70aa0SRichard Kuo /*
299a70aa0SRichard Kuo  * IRQ support for the Hexagon architecture
399a70aa0SRichard Kuo  *
499a70aa0SRichard Kuo  * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
599a70aa0SRichard Kuo  *
699a70aa0SRichard Kuo  * This program is free software; you can redistribute it and/or modify
799a70aa0SRichard Kuo  * it under the terms of the GNU General Public License version 2 and
899a70aa0SRichard Kuo  * only version 2 as published by the Free Software Foundation.
999a70aa0SRichard Kuo  *
1099a70aa0SRichard Kuo  * This program is distributed in the hope that it will be useful,
1199a70aa0SRichard Kuo  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1299a70aa0SRichard Kuo  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1399a70aa0SRichard Kuo  * GNU General Public License for more details.
1499a70aa0SRichard Kuo  *
1599a70aa0SRichard Kuo  * You should have received a copy of the GNU General Public License
1699a70aa0SRichard Kuo  * along with this program; if not, write to the Free Software
1799a70aa0SRichard Kuo  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
1899a70aa0SRichard Kuo  * 02110-1301, USA.
1999a70aa0SRichard Kuo  */
2099a70aa0SRichard Kuo 
2199a70aa0SRichard Kuo #ifndef _ASM_IRQFLAGS_H
2299a70aa0SRichard Kuo #define _ASM_IRQFLAGS_H
2399a70aa0SRichard Kuo 
2499a70aa0SRichard Kuo #include <asm/hexagon_vm.h>
2599a70aa0SRichard Kuo #include <linux/types.h>
2699a70aa0SRichard Kuo 
2799a70aa0SRichard Kuo static inline unsigned long arch_local_save_flags(void)
2899a70aa0SRichard Kuo {
2999a70aa0SRichard Kuo 	return __vmgetie();
3099a70aa0SRichard Kuo }
3199a70aa0SRichard Kuo 
3299a70aa0SRichard Kuo static inline unsigned long arch_local_irq_save(void)
3399a70aa0SRichard Kuo {
3499a70aa0SRichard Kuo 	return __vmsetie(VM_INT_DISABLE);
3599a70aa0SRichard Kuo }
3699a70aa0SRichard Kuo 
3799a70aa0SRichard Kuo static inline bool arch_irqs_disabled_flags(unsigned long flags)
3899a70aa0SRichard Kuo {
3999a70aa0SRichard Kuo 	return !flags;
4099a70aa0SRichard Kuo }
4199a70aa0SRichard Kuo 
4299a70aa0SRichard Kuo static inline bool arch_irqs_disabled(void)
4399a70aa0SRichard Kuo {
4499a70aa0SRichard Kuo 	return !__vmgetie();
4599a70aa0SRichard Kuo }
4699a70aa0SRichard Kuo 
4799a70aa0SRichard Kuo static inline void arch_local_irq_enable(void)
4899a70aa0SRichard Kuo {
4999a70aa0SRichard Kuo 	__vmsetie(VM_INT_ENABLE);
5099a70aa0SRichard Kuo }
5199a70aa0SRichard Kuo 
5299a70aa0SRichard Kuo static inline void arch_local_irq_disable(void)
5399a70aa0SRichard Kuo {
5499a70aa0SRichard Kuo 	__vmsetie(VM_INT_DISABLE);
5599a70aa0SRichard Kuo }
5699a70aa0SRichard Kuo 
5799a70aa0SRichard Kuo static inline void arch_local_irq_restore(unsigned long flags)
5899a70aa0SRichard Kuo {
5999a70aa0SRichard Kuo 	__vmsetie(flags);
6099a70aa0SRichard Kuo }
6199a70aa0SRichard Kuo 
6299a70aa0SRichard Kuo #endif
63