lwIP: disable LWIP_POSIX_SOCKETS_IO_NAMES
[bertos.git] / bertos / cpu / irq.h
index 40571142bc33d3bb7be821c185b18099dafa4728..8e8abe20802dd85f1a93efe69bba000172bd765e 100644 (file)
        }
        #define IRQ_RUNNING() irq_running()
 
-       #if CONFIG_KERN_PREEMPT
+       #if (CONFIG_KERN && CONFIG_KERN_PREEMPT)
 
                #define DECLARE_ISR_CONTEXT_SWITCH(func)                \
                void func(void);                                        \
                        sreg;                                           \
                })
 
-               #define IRQ_ENABLED() (!(CPU_READ_FLAGS() & 0x80))
+               #define IRQ_ENABLED() ((CPU_READ_FLAGS() & 0xc0) != 0xc0)
 
-               #if CONFIG_KERN_PREEMPT
+               #if (CONFIG_KERN && CONFIG_KERN_PREEMPT)
                        EXTERN_C void asm_irq_switch_context(void);
 
                        /**
                                        __isr_##func();                         \
                                        IRQ_EXIT();                             \
                                }                                               \
-                               static void __isr_##func(void)
+                               static NOINLINE void __isr_##func(void)
                        /**
                         * Interrupt service routine prototype: can be used for
                         * forward declarations.
                #endif /* CONFIG_KERN_PREEMPT */
 
                #ifndef ISR_FUNC
-                       #define ISR_FUNC  __attribute__((interrupt))
+                       #define ISR_FUNC __attribute__((naked))
                #endif
                #ifndef DECLARE_ISR
                        #define DECLARE_ISR(func) \
                                static NOINLINE void __isr_##func(void);                \
                                void ISR_FUNC func(void)                                \
                                {                                                       \
+                                       asm volatile (                                  \
+                                               "sub    lr, lr, #4\n\t"                 \
+                                               "stmfd  sp!, {r0-r3, ip, lr}\n\t");     \
                                        __isr_##func();                                 \
+                                       asm volatile (                                  \
+                                               "ldmfd sp!, {r0-r3, ip, pc}^\n\t");     \
                                }                                                       \
-                               static void __isr_##func(void)
+                               static NOINLINE void __isr_##func(void)
                #endif
                #ifndef DECLARE_ISR_CONTEXT_SWITCH
                        #define DECLARE_ISR_CONTEXT_SWITCH(func) DECLARE_ISR(func)
                ); \
                (bool)(sreg & 0x80); \
        })
-       #if CONFIG_KERN_PREEMPT
+       #if (CONFIG_KERN && CONFIG_KERN_PREEMPT)
                #define DECLARE_ISR_CONTEXT_SWITCH(vect)                \
                        INLINE void __isr_##vect(void);                 \
                        ISR(vect)                                       \
                #define ISR_PROTO_CONTEXT_SWITCH(vect) ISR(vect)
        #endif
 
+#elif CPU_MSP430
+
+       /* Get the compiler defined macros */
+       #include <signal.h>
+       #define IRQ_DISABLE         dint()
+       #define IRQ_ENABLE          eint()
+
 #else
        #error No CPU_... defined.
 #endif
 
 
 #ifndef IRQ_PREEMPT_HANDLER
-       #if CONFIG_KERN_PREEMPT
+       #if (CONFIG_KERN && CONFIG_KERN_PREEMPT)
                /**
                 * Handle preemptive context switch inside timer IRQ.
                 */