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