12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- /*
- * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
- */
- #ifndef _ASM_POWERPC_RUNLATCH_H
- #define _ASM_POWERPC_RUNLATCH_H
- #ifdef CONFIG_PPC64
- extern void __ppc64_runlatch_on(void);
- extern void __ppc64_runlatch_off(void);
- /*
- * We manually hard enable-disable, this is called
- * in the idle loop and we don't want to mess up
- * with soft-disable/enable & interrupt replay.
- */
- #define ppc64_runlatch_off() \
- do { \
- if (cpu_has_feature(CPU_FTR_CTRL) && \
- test_thread_local_flags(_TLF_RUNLATCH)) { \
- unsigned long msr = mfmsr(); \
- __hard_irq_disable(); \
- __ppc64_runlatch_off(); \
- if (msr & MSR_EE) \
- __hard_irq_enable(); \
- } \
- } while (0)
- #define ppc64_runlatch_on() \
- do { \
- if (cpu_has_feature(CPU_FTR_CTRL) && \
- !test_thread_local_flags(_TLF_RUNLATCH)) { \
- unsigned long msr = mfmsr(); \
- __hard_irq_disable(); \
- __ppc64_runlatch_on(); \
- if (msr & MSR_EE) \
- __hard_irq_enable(); \
- } \
- } while (0)
- #else
- #define ppc64_runlatch_on()
- #define ppc64_runlatch_off()
- #endif /* CONFIG_PPC64 */
- #endif /* _ASM_POWERPC_RUNLATCH_H */
|