1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2004, Psyent Corporation <www.psyent.com> 3*4882a593Smuzhiyun * Scott McNutt <smcnutt@psyent.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun #ifndef __ASM_NIOS2_SYSTEM_H_ 8*4882a593Smuzhiyun #define __ASM_NIOS2_SYSTEM_H_ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #define local_irq_enable() __asm__ __volatile__ ( \ 11*4882a593Smuzhiyun "rdctl r8, status\n" \ 12*4882a593Smuzhiyun "ori r8, r8, 1\n" \ 13*4882a593Smuzhiyun "wrctl status, r8\n" \ 14*4882a593Smuzhiyun : : : "r8") 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define local_irq_disable() __asm__ __volatile__ ( \ 17*4882a593Smuzhiyun "rdctl r8, status\n" \ 18*4882a593Smuzhiyun "andi r8, r8, 0xfffe\n" \ 19*4882a593Smuzhiyun "wrctl status, r8\n" \ 20*4882a593Smuzhiyun : : : "r8") 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define local_save_flags(x) __asm__ __volatile__ ( \ 23*4882a593Smuzhiyun "rdctl r8, status\n" \ 24*4882a593Smuzhiyun "mov %0, r8\n" \ 25*4882a593Smuzhiyun : "=r" (x) : : "r8", "memory") 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define local_irq_restore(x) __asm__ __volatile__ ( \ 28*4882a593Smuzhiyun "mov r8, %0\n" \ 29*4882a593Smuzhiyun "wrctl status, r8\n" \ 30*4882a593Smuzhiyun : : "r" (x) : "r8", "memory") 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* For spinlocks etc */ 33*4882a593Smuzhiyun #define local_irq_save(x) do { local_save_flags(x); local_irq_disable(); } \ 34*4882a593Smuzhiyun while (0) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #define irqs_disabled() \ 37*4882a593Smuzhiyun ({ \ 38*4882a593Smuzhiyun unsigned long flags; \ 39*4882a593Smuzhiyun local_save_flags(flags); \ 40*4882a593Smuzhiyun ((flags & NIOS2_STATUS_PIE_MSK) == 0x0); \ 41*4882a593Smuzhiyun }) 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* indirect call to go beyond 256MB limitation of toolchain */ 44*4882a593Smuzhiyun #define nios2_callr(addr) __asm__ __volatile__ ( \ 45*4882a593Smuzhiyun "callr %0" \ 46*4882a593Smuzhiyun : : "r" (addr)) 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun void display_sysid(void); 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #endif /* __ASM_NIOS2_SYSTEM_H */ 51