In preparation of porting PPC32 to C syscall entry/exit,
add PPC32 version of following helpers:
        __hard_irq_enable()
        __hard_irq_disable()
        __hard_EE_RI_disable()
        __hard_RI_enable()

Signed-off-by: Christophe Leroy <christophe.le...@c-s.fr>
---
 arch/powerpc/include/asm/hw_irq.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/arch/powerpc/include/asm/hw_irq.h 
b/arch/powerpc/include/asm/hw_irq.h
index e0e71777961f..6ccf07de6665 100644
--- a/arch/powerpc/include/asm/hw_irq.h
+++ b/arch/powerpc/include/asm/hw_irq.h
@@ -321,6 +321,16 @@ static inline void arch_local_irq_disable(void)
                mtmsr(mfmsr() & ~MSR_EE);
 }
 
+static inline void arch_local_recovery_disable(void)
+{
+       if (IS_ENABLED(CONFIG_BOOKE))
+               wrtee(0);
+       else if (IS_ENABLED(CONFIG_PPC_8xx))
+               wrtspr(SPRN_NRI);
+       else
+               mtmsr(mfmsr() & ~(MSR_EE | MSR_RI));
+}
+
 static inline void arch_local_irq_enable(void)
 {
        if (IS_ENABLED(CONFIG_BOOKE))
@@ -343,6 +353,11 @@ static inline bool arch_irqs_disabled(void)
 
 #define hard_irq_disable()             arch_local_irq_disable()
 
+#define __hard_irq_enable()            arch_local_irq_enable()
+#define __hard_irq_disable()           arch_local_irq_disable()
+#define __hard_EE_RI_disable()         arch_local_recovery_disable()
+#define __hard_RI_enable()             arch_local_irq_disable()
+
 static inline bool arch_irq_disabled_regs(struct pt_regs *regs)
 {
        return !(regs->msr & MSR_EE);
-- 
2.25.0

Reply via email to