]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - include/asm-powerpc/hw_irq.h
[POWERPC] pasemi: iommu support
[karo-tx-linux.git] / include / asm-powerpc / hw_irq.h
index c4a1ab608f6f07cc96d72e2f61b35fcdc4bfe482..9e4dd98eb220ca65a409ffe475bc59a762f84f55 100644 (file)
@@ -18,15 +18,25 @@ extern void timer_interrupt(struct pt_regs *);
 
 static inline unsigned long local_get_flags(void)
 {
-       return get_paca()->soft_enabled;
+       unsigned long flags;
+
+       __asm__ __volatile__("lbz %0,%1(13)"
+       : "=r" (flags)
+       : "i" (offsetof(struct paca_struct, soft_enabled)));
+
+       return flags;
 }
 
 static inline unsigned long local_irq_disable(void)
 {
-       unsigned long flag = get_paca()->soft_enabled;
-       get_paca()->soft_enabled = 0;
-       barrier();
-       return flag;
+       unsigned long flags, zero;
+
+       __asm__ __volatile__("li %1,0; lbz %0,%2(13); stb %1,%2(13)"
+       : "=r" (flags), "=&r" (zero)
+       : "i" (offsetof(struct paca_struct, soft_enabled))
+       : "memory");
+
+       return flags;
 }
 
 extern void local_irq_restore(unsigned long);
@@ -92,26 +102,10 @@ static inline void local_irq_save_ptr(unsigned long *flags)
 #define local_irq_save(flags)  local_irq_save_ptr(&flags)
 #define irqs_disabled()                ((mfmsr() & MSR_EE) == 0)
 
-#endif /* CONFIG_PPC64 */
+#define hard_irq_enable()      local_irq_enable()
+#define hard_irq_disable()     local_irq_disable()
 
-#define mask_irq(irq)                                          \
-       ({                                                      \
-               irq_desc_t *desc = get_irq_desc(irq);           \
-               if (desc->chip && desc->chip->disable)  \
-                       desc->chip->disable(irq);               \
-       })
-#define unmask_irq(irq)                                                \
-       ({                                                      \
-               irq_desc_t *desc = get_irq_desc(irq);           \
-               if (desc->chip && desc->chip->enable)   \
-                       desc->chip->enable(irq);                \
-       })
-#define ack_irq(irq)                                           \
-       ({                                                      \
-               irq_desc_t *desc = get_irq_desc(irq);           \
-               if (desc->chip && desc->chip->ack)      \
-                       desc->chip->ack(irq);           \
-       })
+#endif /* CONFIG_PPC64 */
 
 /*
  * interrupt-retrigger: should we handle this via lost interrupts and IPIs