summaryrefslogtreecommitdiff
path: root/bsp/AE210P/nds32.h
blob: 8015eb51c33747eb3896e815109bcd2b47562c2b (plain)
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__ */