nds32.h 1.7 KB
Newer Older
A
ArcherChang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
#ifndef __NDS32_H__
#define __NDS32_H__

#include "nds32_defs.h"

/* Support FPU */
#if defined(__NDS32_EXT_FPU_DP__) || defined(__NDS32_EXT_FPU_SP__)
#define __TARGET_FPU_EXT
#if defined(__NDS32_EXT_FPU_CONFIG_0__)
#define FPU_REGS        8
#elif defined(__NDS32_EXT_FPU_CONFIG_1__)
#define FPU_REGS        16
#elif defined(__NDS32_EXT_FPU_CONFIG_2__)
#define FPU_REGS        32
#elif defined(__NDS32_EXT_FPU_CONFIG_3__)
#define FPU_REGS        64
#else
#error FPU register numbers no defined
#endif
#endif

/* Support IFC */
#ifdef __NDS32_EXT_IFC__
#ifndef CONFIG_NO_NDS32_EXT_IFC
#define __TARGET_IFC_EXT
#endif
#endif

/* Support ZOL */
#ifdef CONFIG_HWZOL
#define __TARGET_ZOL_EXT
#endif

#ifndef __ASSEMBLER__

#include "nds32_intrinsic.h"

#define GIE_ENABLE()                    __nds32__gie_en()
#define GIE_DISABLE()                   __nds32__gie_dis()

#ifdef CONFIG_CPU_DCACHE_ENABLE

#define NDS_DCache_Flush                nds32_dcache_flush
#define NDS_DCache_Invalidate_Flush     nds32_dcache_invalidate
#define NDS_DCache_Writeback            nds32_dcache_flush_range

#else

#define NDS_DCache_Flush()              ((void)0)
#define NDS_DCache_Invalidate_Flush()   ((void)0)
#define NDS_DCache_Writeback()          ((void)0)

#endif

static inline void GIE_SAVE(unsigned long *var)
{
	*var = __nds32__mfsr(NDS32_SR_PSW);
	GIE_DISABLE();
}

static inline void GIE_RESTORE(unsigned long var)
{
	if (var & PSW_mskGIE)
		GIE_ENABLE();
}

extern void *OS_CPU_Vector_Table[32];
typedef void (*isr_t)(int vector);

static inline void register_isr(int vector, isr_t isr, isr_t *old)
{
	if (old)
		*old = OS_CPU_Vector_Table[vector];

	OS_CPU_Vector_Table[vector] = isr;
}

#endif /* __ASSEMBLER__ */

#endif /* __NDS32_H__ */