ARM: rockchip: rk3228: add grf definition
[firefly-linux-kernel-4.4.55.git] / include / linux / irqflags.h
index 006bf45eae30e5777ece188a997736cd5ff509cf..d176d658fe25dd6b09b3d03936a4b60ce324367c 100644 (file)
@@ -12,6 +12,7 @@
 #define _LINUX_TRACE_IRQFLAGS_H
 
 #include <linux/typecheck.h>
+#include <asm/irqflags.h>
 
 #ifdef CONFIG_TRACE_IRQFLAGS
   extern void trace_softirqs_on(unsigned long ip);
 # define start_critical_timings() do { } while (0)
 #endif
 
-#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
-
-#include <asm/irqflags.h>
+/*
+ * Wrap the arch provided IRQ routines to provide appropriate checks.
+ */
+#define raw_local_irq_disable()                arch_local_irq_disable()
+#define raw_local_irq_enable()         arch_local_irq_enable()
+#define raw_local_irq_save(flags)                      \
+       do {                                            \
+               typecheck(unsigned long, flags);        \
+               flags = arch_local_irq_save();          \
+       } while (0)
+#define raw_local_irq_restore(flags)                   \
+       do {                                            \
+               typecheck(unsigned long, flags);        \
+               arch_local_irq_restore(flags);          \
+       } while (0)
+#define raw_local_save_flags(flags)                    \
+       do {                                            \
+               typecheck(unsigned long, flags);        \
+               flags = arch_local_save_flags();        \
+       } while (0)
+#define raw_irqs_disabled_flags(flags)                 \
+       ({                                              \
+               typecheck(unsigned long, flags);        \
+               arch_irqs_disabled_flags(flags);        \
+       })
+#define raw_irqs_disabled()            (arch_irqs_disabled())
+#define raw_safe_halt()                        arch_safe_halt()
 
+/*
+ * The local_irq_*() APIs are equal to the raw_local_irq*()
+ * if !TRACE_IRQFLAGS.
+ */
+#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
 #define local_irq_enable() \
        do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0)
 #define local_irq_disable() \
        do { raw_local_irq_disable(); trace_hardirqs_off(); } while (0)
 #define local_irq_save(flags)                          \
        do {                                            \
-               typecheck(unsigned long, flags);        \
                raw_local_irq_save(flags);              \
                trace_hardirqs_off();                   \
        } while (0)
@@ -70,7 +99,6 @@
 
 #define local_irq_restore(flags)                       \
        do {                                            \
-               typecheck(unsigned long, flags);        \
                if (raw_irqs_disabled_flags(flags)) {   \
                        raw_local_irq_restore(flags);   \
                        trace_hardirqs_off();           \
                        raw_local_irq_restore(flags);   \
                }                                       \
        } while (0)
-#else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */
-/*
- * The local_irq_*() APIs are equal to the raw_local_irq*()
- * if !TRACE_IRQFLAGS.
- */
-# define raw_local_irq_disable()       local_irq_disable()
-# define raw_local_irq_enable()                local_irq_enable()
-# define raw_local_irq_save(flags)                     \
-       do {                                            \
-               typecheck(unsigned long, flags);        \
-               local_irq_save(flags);                  \
-       } while (0)
-# define raw_local_irq_restore(flags)                  \
+#define local_save_flags(flags)                                \
        do {                                            \
-               typecheck(unsigned long, flags);        \
-               local_irq_restore(flags);               \
+               raw_local_save_flags(flags);            \
        } while (0)
-#endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */
 
-#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT
-#define safe_halt()                                            \
-       do {                                                    \
-               trace_hardirqs_on();                            \
-               raw_safe_halt();                                \
-       } while (0)
+#define irqs_disabled_flags(flags)                     \
+       ({                                              \
+               raw_irqs_disabled_flags(flags);         \
+       })
 
-#define local_save_flags(flags)                                \
-       do {                                            \
-               typecheck(unsigned long, flags);        \
-               raw_local_save_flags(flags);            \
+#define irqs_disabled()                                        \
+       ({                                              \
+               unsigned long _flags;                   \
+               raw_local_save_flags(_flags);           \
+               raw_irqs_disabled_flags(_flags);        \
+       })
+
+#define safe_halt()                            \
+       do {                                    \
+               trace_hardirqs_on();            \
+               raw_safe_halt();                \
        } while (0)
 
-#define irqs_disabled()                                                \
-({                                                             \
-       unsigned long _flags;                                   \
-                                                               \
-       raw_local_save_flags(_flags);                           \
-       raw_irqs_disabled_flags(_flags);                        \
-})
 
-#define irqs_disabled_flags(flags)             \
-({                                             \
-       typecheck(unsigned long, flags);        \
-       raw_irqs_disabled_flags(flags);         \
-})
+#else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */
+
+#define local_irq_enable()     do { raw_local_irq_enable(); } while (0)
+#define local_irq_disable()    do { raw_local_irq_disable(); } while (0)
+#define local_irq_save(flags)                                  \
+       do {                                                    \
+               raw_local_irq_save(flags);                      \
+       } while (0)
+#define local_irq_restore(flags) do { raw_local_irq_restore(flags); } while (0)
+#define local_save_flags(flags)        do { raw_local_save_flags(flags); } while (0)
+#define irqs_disabled()                (raw_irqs_disabled())
+#define irqs_disabled_flags(flags) (raw_irqs_disabled_flags(flags))
+#define safe_halt()            do { raw_safe_halt(); } while (0)
+
 #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */
 
 #endif