Go to the documentation of this file.
30 #ifndef __GRTOS_REGS_H__
31 #define __GRTOS_REGS_H__
37 #define ADDR_TM_CNT_HGH 1
39 #define ADDR_NXT_OCC_TM_HGH 3
40 #define ADDR_SYS_MUTEX_TIME_HGH 4
42 #define ADDR_MTX_GRN 6
43 #define ADDR_MTX_RLS 7
45 #define ADDR_MTX_RSV_SET 9
46 #define ADDR_MTX_RSV_CLR 10
47 #define ADDR_INT_PRC_PND_CLR 11
48 #define ADDR_ELP_TM_CNT 12
49 #define ADDR_MTX_SET_TM 13
50 #define ADDR_FRZ_TM_HGH 14
51 #define ADDR_TM_PSC 15
52 #define ADDR_FRZ_THR_HGH 16
54 #define ADDR_EVN_OCC 19
55 #define ADDR_MUTEXBLOCKED32 20
56 #define ADDR_INT_ENB_SET 21
57 #define ADD_INT_ENB_CLR 22
58 #define ADDR_LOW_PRC_SET 23
59 #define ADDR_NXT_TM_PRC_SET 24
61 #define ADDR_HLT_IDL_PRC_ENB 25
62 #define ADDR_HLT_IDL_PRC_DSB 26
64 #define ADDR_IRQ_ENB_SET 27
65 #define ADDR_IRQ_ENB_CLR 28
66 #define ADDR_IRQ_RQS 29
67 #define ADDR_RST_CLR 30
68 #define ADDR_TRG_INT_PRC 31
70 #define ADDR_HLT_ACT_CNT_SMP 34
73 #define IORD_GRTOS_HLT_ACT_CNT_SMP IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_HLT_ACT_CNT_SMP)
74 #define IORD_GRTOS_TRG_INT_PRC IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_TRG_INT_PRC)
75 #define IORD_GRTOS_HLT_IDL_PRC_ENB IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_HLT_IDL_PRC_ENB)
76 #define IORD_GRTOS_RST_CLR IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_RST_CLR)
77 #define IORD_GRTOS_FRZ_TM_HGH IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_FRZ_TM_HGH)
79 #define IOWR_GRTOS_HLT_IDL_PRC_CLR(data) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_HLT_IDL_PRC_DSB, data)
80 #define IOWR_GRTOS_FRZ_TM_HGH(data) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_FRZ_TM_HGH,data)
81 #define IOWR_GRTOS_MTX_RSV_CLR(data) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_MTX_RSV_CLR, data)
82 #define IOWR_GRTOS_MTX_RQS(data) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_MTX_GRN, data)
97 #define GRTOS_now ({ \
98 TIMEPRIORITY value64; \
100 value64.i32[1] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_TM_CNT_HGH); \
101 value64.i32[0] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_SMP); \
110 #define GRTOS_CMD_MTX_TM_GET ({ \
111 TIMEPRIORITY value64; \
113 value64.i32[1] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_SYS_MUTEX_TIME_HGH); \
114 value64.i32[0] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_SMP); \
123 #define GRTOS_CMD_SYS_TM_GET ({ \
124 TIMEPRIORITY value64; \
126 value64.i32[1] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_SYS_TM); \
127 value64.i32[0] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_SMP); \
135 #define GRTOS_MTX_PRC_GRANTED IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_MTX_GRN)
141 #define GRTOS_GET_INTERVAL IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_ELP_TM_CNT)
145 #define GRTOS_CMD_GET_TIME_PRESCALE IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_TM_PSC)
152 #define GRTOS_CMD_FRZ_TM_THR_GET ({ \
153 TIMEPRIORITY value64; \
154 value64.i32[1] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_FRZ_THR_HGH); \
155 value64.i32[0] = (unsigned) IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_SMP); \
161 #define GRTOS_CMD_GET_STATUS_DEBUG_HOLD (((IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL) >> 2) & 1) ? G_TRUE : G_FALSE)
165 #define GRTOS_CMD_GET_FRZ_ENB (((IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL) >> 1) & 1) ? G_TRUE : G_FALSE)
169 #define GRTOS_CMD_GET_FRZ_ACT ((IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL) & 1) ? G_TRUE : G_FALSE)
173 #define GRTOS_CMD_EVN_OCC IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_EVN_OCC)
176 #define GRTOS_MUTEX_BLOCKED_GET IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_MUTEXBLOCKED32)
181 #define GRTOS_CMD_IRQ_RQS IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_IRQ_RQS)
185 #define GRTOS_CMD_IRQ_ENB_GET(irq) ((IORD(GRTOS_DRIVER_GRTOS_BASE, ADDR_INT_ENB_SET) >> (irq-1)) & 1)
192 #define GRTOS_CMD_FRZ_TM_THR_SET(timeset) \
194 TIMEPRIORITY temp_aux; \
195 temp_aux.i64 = (INT64) timeset; \
196 IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_SMP, (unsigned long)temp_aux.i32[0]); \
197 IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_FRZ_THR_HGH, (unsigned long)temp_aux.i32[1]); \
203 #define GRTOS_CMD_NXT_OCC_TM_EVN_SET(timeset) \
205 TIMEPRIORITY temp_aux; \
206 temp_aux.i64 = (INT64) timeset; \
207 IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_SMP, (unsigned long)temp_aux.i32[0]); \
208 IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_NXT_OCC_TM_HGH, (unsigned long)temp_aux.i32[1]); \
212 #define GRTOS_MTX_RLS IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_MTX_RLS, GRTOS_CMD_PRC_ID)
215 #define GRTOS_MTX_RSV_SET IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_MTX_RSV_SET, GRTOS_CMD_PRC_ID)
220 #define GRTOS_CMD_INT_PRC_PND_CLR IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_INT_PRC_PND_CLR, GRTOS_CMD_PRC_ID);
224 #define GRTOS_CMD_SET_TIME_PRESCALE(scale) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_TM_PSC, scale);
228 #define GRTOS_CMD_FRZ_ENB_SET IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL, 1)
232 #define GRTOS_CMD_FRZ_DSB_SET IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL, 2)
237 #define GRTOS_CMD_FRZ_EVN_CLR IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL, 3)
242 #define GRTOS_CMD_TM_CNT_CLR IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL, 4);
246 #define GRTOS_CMD_DEBUG_HOLD_ENB IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL, 6)
250 #define GRTOS_CMD_DEBUG_HOLD_DIS IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_CTRL, 7)
254 #define GRTOS_CMD_PRC_INT_ENB IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_INT_ENB_SET, GRTOS_CMD_PRC_ID);
258 #define GRTOS_CMD_PRC_INT_DSB IOWR(GRTOS_DRIVER_GRTOS_BASE, ADD_INT_ENB_CLR, GRTOS_CMD_PRC_ID);
263 #define GRTOS_CMD_LOW_PRC_SET(processor) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_LOW_PRC_SET, processor);
267 #define GRTOS_CMD_NXT_TM_PRC_SET(processor) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_NXT_TM_PRC_SET, processor);
270 #define GRTOS_MUTEX_BLOCKED(data) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_MUTEXBLOCKED32, data)
274 #define GRTOS_CMD_HLT_IDL_PRC IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_HLT_IDL_PRC_ENB, GRTOS_CMD_PRC_ID)
278 #define GRTOS_CMD_IRQ_ENB_SET(irq) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_IRQ_ENB_SET, irq)
282 #define GRTOS_CMD_IRQ_ENB_CLR(irq) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_IRQ_ENB_CLR, irq)
287 #define GRTOS_CMD_TRG_PRC_INT_SET(proc) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_TRG_INT_PRC, proc);
292 #define GRTOS_CMD_RST_GRTOS IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_RST_CLR, 0)
295 #define GRTOS_CMD_RLS_NXT_PRC IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_RST_CLR, GRTOS_CMD_PRC_ID)
301 #define GRTOS_USER_CRITICAL_SECTION_SET_RELEASE_TIME(time) IOWR(GRTOS_DRIVER_GRTOS_BASE, ADDR_MTX_SET_TM, time);
309 #define GRTOS_CMD_PRC_ID __builtin_rdctl(5)
315 #define GRTOS_CMD_PRC_INT(proc) \
316 GRTOS_CMD_TRG_PRC_INT_SET(proc); \
317 while (GRTOS_CMD_IRQ_ENB_GET(proc)){ \
326 #define GRTOS_CMD_HALT_PROCESSOR \
327 GRTOS_CMD_HLT_IDL_PRC; \
328 g_kcb.G_PCBTbl[GRTOS_CMD_PRC_ID -1].GRTOS_PROCESSOR_BASE[0] = (int) 0;
340 #define GRTOS_CMD_CRITICAL_SECTION_GET \
344 GRTOS_CMD_HALT_PROCESSOR \
345 } while (GRTOS_CMD_PRC_ID != GRTOS_MTX_PRC_GRANTED); \
356 #define GRTOS_CMD_CRITICAL_SECTION_RELEASE \
357 do{ GRTOS_CMD_PRC_INT_ENB; \
358 alt_dcache_flush_all(); \
366 #define GRTOS_CMD_MTX_RQS_GET GRTOS_MTX_PRC_GRANTED;
373 #define GRTOS_USER_CRITICAL_SECTION_GET GRTOS_CMD_CRITICAL_SECTION_GET
381 #define GRTOS_USER_CRITICAL_SECTION_RELEASE GRTOS_CMD_CRITICAL_SECTION_RELEASE