mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.2 KiB
46 lines
1.2 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* |
|
* Copyright (C) 1999 Cort Dougan <[email protected]> |
|
*/ |
|
#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 */
|
|
|