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