1*819833afSPeter Tyser /* 2*819833afSPeter Tyser * (C) Copyright 2004, Psyent Corporation <www.psyent.com> 3*819833afSPeter Tyser * Scott McNutt <smcnutt@psyent.com> 4*819833afSPeter Tyser * 5*819833afSPeter Tyser * See file CREDITS for list of people who contributed to this 6*819833afSPeter Tyser * project. 7*819833afSPeter Tyser * 8*819833afSPeter Tyser * This program is free software; you can redistribute it and/or 9*819833afSPeter Tyser * modify it under the terms of the GNU General Public License as 10*819833afSPeter Tyser * published by the Free Software Foundation; either version 2 of 11*819833afSPeter Tyser * the License, or (at your option) any later version. 12*819833afSPeter Tyser * 13*819833afSPeter Tyser * This program is distributed in the hope that it will be useful, 14*819833afSPeter Tyser * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*819833afSPeter Tyser * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*819833afSPeter Tyser * GNU General Public License for more details. 17*819833afSPeter Tyser * 18*819833afSPeter Tyser * You should have received a copy of the GNU General Public License 19*819833afSPeter Tyser * along with this program; if not, write to the Free Software 20*819833afSPeter Tyser * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*819833afSPeter Tyser * MA 02111-1307 USA 22*819833afSPeter Tyser */ 23*819833afSPeter Tyser #ifndef __ASM_NIOS2_SYSTEM_H_ 24*819833afSPeter Tyser #define __ASM_NIOS2_SYSTEM_H_ 25*819833afSPeter Tyser 26*819833afSPeter Tyser #define local_irq_enable() __asm__ __volatile__ ( \ 27*819833afSPeter Tyser "rdctl r8, status\n" \ 28*819833afSPeter Tyser "ori r8, r8, 1\n" \ 29*819833afSPeter Tyser "wrctl status, r8\n" \ 30*819833afSPeter Tyser : : : "r8") 31*819833afSPeter Tyser 32*819833afSPeter Tyser #define local_irq_disable() __asm__ __volatile__ ( \ 33*819833afSPeter Tyser "rdctl r8, status\n" \ 34*819833afSPeter Tyser "andi r8, r8, 0xfffe\n" \ 35*819833afSPeter Tyser "wrctl status, r8\n" \ 36*819833afSPeter Tyser : : : "r8") 37*819833afSPeter Tyser 38*819833afSPeter Tyser #define local_save_flags(x) __asm__ __volatile__ ( \ 39*819833afSPeter Tyser "rdctl r8, status\n" \ 40*819833afSPeter Tyser "mov %0, r8\n" \ 41*819833afSPeter Tyser : "=r" (x) : : "r8", "memory") 42*819833afSPeter Tyser 43*819833afSPeter Tyser #define local_irq_restore(x) __asm__ __volatile__ ( \ 44*819833afSPeter Tyser "mov r8, %0\n" \ 45*819833afSPeter Tyser "wrctl status, r8\n" \ 46*819833afSPeter Tyser : : "r" (x) : "r8", "memory") 47*819833afSPeter Tyser 48*819833afSPeter Tyser /* For spinlocks etc */ 49*819833afSPeter Tyser #define local_irq_save(x) do { local_save_flags(x); local_irq_disable(); } \ 50*819833afSPeter Tyser while (0) 51*819833afSPeter Tyser 52*819833afSPeter Tyser #define irqs_disabled() \ 53*819833afSPeter Tyser ({ \ 54*819833afSPeter Tyser unsigned long flags; \ 55*819833afSPeter Tyser local_save_flags(flags); \ 56*819833afSPeter Tyser ((flags & NIOS2_STATUS_PIE_MSK) == 0x0); \ 57*819833afSPeter Tyser }) 58*819833afSPeter Tyser 59*819833afSPeter Tyser #endif /* __ASM_NIOS2_SYSTEM_H */ 60