diff options
Diffstat (limited to 'arch/arm64/include/asm/irqflags.h')
| -rw-r--r-- | arch/arm64/include/asm/irqflags.h | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/irqflags.h b/arch/arm64/include/asm/irqflags.h index aa11943b850..11cc941bd10 100644 --- a/arch/arm64/include/asm/irqflags.h +++ b/arch/arm64/include/asm/irqflags.h @@ -56,6 +56,9 @@ static inline void arch_local_irq_disable(void)  #define local_fiq_enable()	asm("msr	daifclr, #1" : : : "memory")  #define local_fiq_disable()	asm("msr	daifset, #1" : : : "memory") +#define local_async_enable()	asm("msr	daifclr, #4" : : : "memory") +#define local_async_disable()	asm("msr	daifset, #4" : : : "memory") +  /*   * Save the current interrupt enable state.   */ @@ -87,5 +90,28 @@ static inline int arch_irqs_disabled_flags(unsigned long flags)  	return flags & PSR_I_BIT;  } +/* + * save and restore debug state + */ +#define local_dbg_save(flags)						\ +	do {								\ +		typecheck(unsigned long, flags);			\ +		asm volatile(						\ +		"mrs    %0, daif		// local_dbg_save\n"	\ +		"msr    daifset, #8"					\ +		: "=r" (flags) : : "memory");				\ +	} while (0) + +#define local_dbg_restore(flags)					\ +	do {								\ +		typecheck(unsigned long, flags);			\ +		asm volatile(						\ +		"msr    daif, %0		// local_dbg_restore\n"	\ +		: : "r" (flags) : "memory");				\ +	} while (0) + +#define local_dbg_enable()	asm("msr	daifclr, #8" : : : "memory") +#define local_dbg_disable()	asm("msr	daifset, #8" : : : "memory") +  #endif  #endif  | 
