]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-powerpc/irqflags.h
[POWERPC] irqtrace support for 64-bit powerpc
[linux-2.6-omap-h63xx.git] / include / asm-powerpc / irqflags.h
index 7970cbaeaa5457a257a126b88dae3da829e4fe60..cc6fdba33660c015a466d202ab0aff55405df96b 100644 (file)
@@ -2,30 +2,43 @@
  * include/asm-powerpc/irqflags.h
  *
  * IRQ flags handling
- *
- * This file gets included from lowlevel asm headers too, to provide
- * wrapped versions of the local_irq_*() APIs, based on the
- * raw_local_irq_*() macros from the lowlevel headers.
  */
 #ifndef _ASM_IRQFLAGS_H
 #define _ASM_IRQFLAGS_H
 
+#ifndef __ASSEMBLY__
 /*
  * Get definitions for raw_local_save_flags(x), etc.
  */
 #include <asm-powerpc/hw_irq.h>
 
+#else
+#ifdef CONFIG_TRACE_IRQFLAGS
 /*
- * Do the CPU's IRQ-state tracing from assembly code. We call a
- * C function, so save all the C-clobbered registers:
+ * Most of the CPU's IRQ-state tracing is done from assembly code; we
+ * have to call a C function so call a wrapper that saves all the
+ * C-clobbered registers.
  */
-#ifdef CONFIG_TRACE_IRQFLAGS
-
-#error No support on PowerPC yet for CONFIG_TRACE_IRQFLAGS
-
+#define TRACE_ENABLE_INTS      bl .trace_hardirqs_on
+#define TRACE_DISABLE_INTS     bl .trace_hardirqs_off
+#define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip) \
+       cmpdi   en, 0;                          \
+       bne     95f;                            \
+       stb     en,PACASOFTIRQEN(r13);          \
+       bl      .trace_hardirqs_off;            \
+       b       skip;                           \
+95:    bl      .trace_hardirqs_on;             \
+       li      en,1;
+#define TRACE_AND_RESTORE_IRQ(en)              \
+       TRACE_AND_RESTORE_IRQ_PARTIAL(en,96f);  \
+96:    stb     en,PACASOFTIRQEN(r13)
 #else
-# define TRACE_IRQS_ON
-# define TRACE_IRQS_OFF
+#define TRACE_ENABLE_INTS
+#define TRACE_DISABLE_INTS
+#define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip)
+#define TRACE_AND_RESTORE_IRQ(en)              \
+       stb     en,PACASOFTIRQEN(r13)
+#endif
 #endif
 
 #endif