54 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
	
		
			1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * linux/arch/unicore32/include/asm/irqflags.h
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Code specific to PKUnity SoC and UniCore ISA
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2001-2010 GUAN Xue-tao
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This program is free software; you can redistribute it and/or modify
							 | 
						||
| 
								 | 
							
								 * it under the terms of the GNU General Public License version 2 as
							 | 
						||
| 
								 | 
							
								 * published by the Free Software Foundation.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#ifndef __UNICORE_IRQFLAGS_H__
							 | 
						||
| 
								 | 
							
								#define __UNICORE_IRQFLAGS_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __KERNEL__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <asm/ptrace.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define ARCH_IRQ_DISABLED	(PRIV_MODE | PSR_I_BIT)
							 | 
						||
| 
								 | 
							
								#define ARCH_IRQ_ENABLED	(PRIV_MODE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Save the current interrupt enable state.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline unsigned long arch_local_save_flags(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									unsigned long temp;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									asm volatile("mov %0, asr" : "=r" (temp) : : "memory", "cc");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return temp & PSR_c;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * restore saved IRQ state
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								static inline void arch_local_irq_restore(unsigned long flags)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									unsigned long temp;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									asm volatile(
							 | 
						||
| 
								 | 
							
										"mov	%0, asr\n"
							 | 
						||
| 
								 | 
							
										"mov.a	asr, %1\n"
							 | 
						||
| 
								 | 
							
										"mov.f	asr, %0"
							 | 
						||
| 
								 | 
							
										: "=&r" (temp)
							 | 
						||
| 
								 | 
							
										: "r" (flags)
							 | 
						||
| 
								 | 
							
										: "memory", "cc");
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <asm-generic/irqflags.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#endif
							 |