00001
00013 #ifndef LL_H_
00014 #define LL_H_
00015
00016
00017
00018
00019
00020 #include <asm-dsp.h>
00021 #include "critical_nesting.h"
00022
00023
00024
00025
00026
00034 #define GLOBAL_INT_START() \
00035 do \
00036 { \
00037 long __l_mod1; \
00038 \
00039 \
00040 __asm__ volatile ("mov mod1, %0" :"=&dhjlx" (__l_mod1):); \
00041 \
00042 \
00043 __l_mod1 |= 0x00000002; \
00044 \
00045 \
00046 __asm__ volatile ("nop 2"); \
00047 \
00048 \
00049 __asm__ volatile ("mov %0, mod1" :: "zdlx" (__l_mod1)); \
00050 \
00051 \
00052 __asm__ volatile ("nop 2"); \
00053 \
00054 \
00055 __asm__ volatile ("eint"); \
00056 \
00057 \
00058 __asm__ volatile ("nop 2"); \
00059 } while(0)
00060
00068 #define GLOBAL_INT_STOP() _dsp_asm("dint")
00069
00078 #define GLOBAL_INT_DISABLE() \
00079 do { \
00080 long __l_irq_rest; \
00081 long __l_temp; \
00082 \
00083 \
00084 __asm__ volatile ("mov mod1, %0" :"=&dhjlx" (__l_temp):); \
00085 \
00086 \
00087 __l_irq_rest = __l_temp; \
00088 \
00089 \
00090 __l_temp &= 0xFFFFFFFE; \
00091 \
00092 \
00093 __asm__ volatile ("nop 2"); \
00094 \
00095 \
00096 __asm__ volatile ("mov %0, mod1" :: "zdlx" (__l_temp)); \
00097 \
00098 \
00099 CRITICAL_NESTING_INC();
00100
00107 #define GLOBAL_INT_RESTORE() \
00108 \
00109 CRITICAL_NESTING_DEC(); \
00110 \
00111 \
00112 __asm__ volatile ("mov %0, mod1" :: "zdlx" (__l_irq_rest)); \
00113 } while(0)
00114
00121 #define BARRIER() __asm__ volatile("" : : : "memory");
00122
00123 void rwnxl_wakeup(void);
00124
00125 #include "reg_intc.h"
00131 #define WFI() \
00132 do { \
00133 DBG_CPU_SLEEP_START(); \
00134 while(!(intc_irq_status_get(0) || intc_irq_status_get(1))); \
00135 DBG_CPU_SLEEP_END(); \
00136 } while (0)
00137
00155 __INLINE uint32_t return_address(void)
00156 {
00157 register uint32_t retadd asm("r2");
00158 return retadd;
00159 }
00160
00161 #endif // LL_H_