Merge branch 'msm-video' of git://codeaurora.org/quic/kernel/dwalker/linux-msm
[pandora-kernel.git] / arch / sh / include / asm / entry-macros.S
index 3a4752a..cc43a55 100644 (file)
@@ -7,7 +7,7 @@
        .endm
 
        .macro  sti
-       mov     #0xf0, r11
+       mov     #0xfffffff0, r11
        extu.b  r11, r11
        not     r11, r11
        stc     sr, r10
 #endif 
        .endm
 
+#ifdef CONFIG_TRACE_IRQFLAGS
+
+       .macro  TRACE_IRQS_ON
+       mov.l   r0, @-r15
+       mov.l   r1, @-r15
+       mov.l   r2, @-r15
+       mov.l   r3, @-r15
+       mov.l   r4, @-r15
+       mov.l   r5, @-r15
+       mov.l   r6, @-r15
+       mov.l   r7, @-r15
+
+       mov.l   7834f, r0
+       jsr     @r0
+        nop
+
+       mov.l   @r15+, r7
+       mov.l   @r15+, r6
+       mov.l   @r15+, r5
+       mov.l   @r15+, r4
+       mov.l   @r15+, r3
+       mov.l   @r15+, r2
+       mov.l   @r15+, r1
+       mov.l   @r15+, r0
+       mov.l   7834f, r0
+
+       bra     7835f
+        nop
+       .balign 4
+7834:  .long   trace_hardirqs_on
+7835:
+       .endm
+       .macro  TRACE_IRQS_OFF
+
+       mov.l   r0, @-r15
+       mov.l   r1, @-r15
+       mov.l   r2, @-r15
+       mov.l   r3, @-r15
+       mov.l   r4, @-r15
+       mov.l   r5, @-r15
+       mov.l   r6, @-r15
+       mov.l   r7, @-r15
+
+       mov.l   7834f, r0
+       jsr     @r0
+        nop
+
+       mov.l   @r15+, r7
+       mov.l   @r15+, r6
+       mov.l   @r15+, r5
+       mov.l   @r15+, r4
+       mov.l   @r15+, r3
+       mov.l   @r15+, r2
+       mov.l   @r15+, r1
+       mov.l   @r15+, r0
+       mov.l   7834f, r0
+
+       bra     7835f
+        nop
+       .balign 4
+7834:  .long   trace_hardirqs_off
+7835:
+       .endm
+
+#else
+       .macro  TRACE_IRQS_ON
+       .endm
+
+       .macro  TRACE_IRQS_OFF
+       .endm
+#endif
+
 #if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH4)
 # define PREF(x)       pref    @x
 #else
 # define PREF(x)       nop
 #endif
+
+       /*
+        * Macro for use within assembly. Because the DWARF unwinder
+        * needs to use the frame register to unwind the stack, we
+        * need to setup r14 with the value of the stack pointer as
+        * the return address is usually on the stack somewhere.
+        */
+       .macro  setup_frame_reg
+#ifdef CONFIG_DWARF_UNWINDER
+       mov     r15, r14
+#endif
+       .endm