Home | History | Annotate | Download | only in asm
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Copyright (C) 2011 Andes Technology Corporation
      4  * Macpaul Lin, Andes Technology Corporation <macpaul (at) andestech.com>
      5  */
      6 
      7 #ifndef __ASM_NDS_SYSTEM_H
      8 #define __ASM_NDS_SYSTEM_H
      9 
     10 /*
     11  * Interrupt configuring macros.
     12  */
     13 
     14 extern int irq_flags;
     15 
     16 #define local_irq_enable() \
     17 	__asm__ __volatile__ ( \
     18 		"mfsr	%0, $psw\n\t" \
     19 		"andi	%0, %0, 0x1\n\t" \
     20 		"setgie.e\n\t" \
     21 		: \
     22 		: "r" (irq_flags) \
     23 	)
     24 
     25 #define local_irq_disable() \
     26 	do { \
     27 		int __tmp_dummy; \
     28 		__asm__ __volatile__ ( \
     29 			"mfsr	%0, $psw\n\t" \
     30 			"andi	%0, %0, 0x1\n\t" \
     31 			"setgie.d\n\t" \
     32 			"dsb\n\t" \
     33 			: "=r" (__tmp_dummy) \
     34 		); \
     35 	} while (0)
     36 
     37 #define local_irq_save(x) \
     38 	__asm__ __volatile__ ( \
     39 		"mfsr	%0, $psw\n\t" \
     40 		"andi	%0, %0, 0x1\n\t" \
     41 		"setgie.d\n\t" \
     42 		"dsb\n\t" \
     43 		: "=&r" (x) \
     44 	)
     45 
     46 #define local_save_flags(x) \
     47 	__asm__ __volatile__ ( \
     48 		"mfsr	%0, $psw\n\t" \
     49 		"andi	%0, %0, 0x1\n\t" \
     50 		"setgie.e\n\t" \
     51 		"setgie.d\n\t" \
     52 		: "=r" (x) \
     53 	)
     54 
     55 #define irqs_enabled_from_flags(x) ((x) != 0x1f)
     56 
     57 #define local_irq_restore(x) \
     58 	do { \
     59 		if (irqs_enabled_from_flags(x)) \
     60 			local_irq_enable(); \
     61 	} while (0)
     62 
     63 /*
     64  * Force strict CPU ordering.
     65  */
     66 #define nop()			asm volatile ("nop;\n\t" : : )
     67 #define mb()			asm volatile (""   : : : "memory")
     68 #define rmb()			asm volatile (""   : : : "memory")
     69 #define wmb()			asm volatile (""   : : : "memory")
     70 
     71 #endif	/* __ASM_NDS_SYSTEM_H */
     72