ASSERT_IRQ_CONTEXT(), ASSERT_USER_CONTEXT(), ASSERT_IRQ_ENABLED(), ASSERT_IRQ_DISABLE...
[bertos.git] / bertos / cpu / irq.h
index 2e20947f5ba53396eeb414495232f2eac4252d28..5fddfdc9cee57f08da34b6cbd70db60579a8e3fa 100644 (file)
@@ -62,7 +62,6 @@
 
 #elif CPU_ARM
 
-
        #ifdef __IAR_SYSTEMS_ICC__
 
                #include <inarm.h>
        #endif /* !__IAR_SYSTEMS_ICC_ */
 
 #elif CPU_PPC
-       #define IRQ_DISABLE         FIXME
-       #define IRQ_ENABLE          FIXME
-       #define IRQ_SAVE_DISABLE(x) FIXME
-       #define IRQ_RESTORE(x)      FIXME
-       #define IRQ_ENABLED()       FIXME
+
+       /* Get IRQ_* definitions from the hosting environment. */
+       #include <cfg/os.h>
+       #if OS_EMBEDDED
+               #define IRQ_DISABLE         FIXME
+               #define IRQ_ENABLE          FIXME
+               #define IRQ_SAVE_DISABLE(x) FIXME
+               #define IRQ_RESTORE(x)      FIXME
+               #define IRQ_ENABLED()       FIXME
+       #endif /* OS_EMBEDDED */
 
 #elif CPU_DSP56K
 
        #define IRQ_EXIT() /* NOP */
 #endif
 
+#ifdef IRQ_RUNNING
+       /// Ensure callee is running within an interrupt
+       #define ASSERT_IRQ_CONTEXT()  ASSERT(IRQ_RUNNING())
+
+       /// Ensure callee is not running within an interrupt
+       #define ASSERT_USER_CONTEXT() ASSERT(!IRQ_RUNNING())
+#else
+       #define ASSERT_USER_CONTEXT()  do {} while(0)
+       #define ASSERT_IRQ_CONTEXT()   do {} while(0)
+#endif
+
+#ifdef IRQ_ENABLED
+       /// Ensure interrupts are enabled
+       #define ASSERT_IRQ_ENABLED()  ASSERT(IRQ_ENABLED())
+
+       /// Ensure interrupts are not enabled
+       #define ASSERT_IRQ_DISABLED() ASSERT(IRQ_ENABLED())
+#else
+       #define ASSERT_IRQ_ENABLED() do {} while(0)
+       #define ASSERT_IRQ_DISABLED() do {} while(0)
+#endif
 
 /**
  * Execute \a CODE atomically with respect to interrupts.