FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/gpf/osl/os_tim_fl.c @ 923:10b4bed10192
gsm-fw/L1: fix for the DSP patch corruption bug
The L1 code we got from the LoCosto fw contains a feature for DSP CPU load
measurement. This feature is a LoCosto-ism, i.e., not applicable to earlier
DBB chips (Calypso) with their respective earlier DSP ROMs. Most of the
code dealing with that feature is conditionalized as #if (DSP >= 38),
but one spot was missed, and the MCU code was writing into an API word
dealing with this feature. In TCS211 this DSP API word happens to be
used by the DSP code patch, hence that write was corrupting the patched
DSP code.
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 19 Oct 2015 17:13:56 +0000 |
parents | 9d80090a9e0c |
children |
rev | line source |
---|---|
454
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * This C module is a reconstruction based on the disassembly of |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
3 * os_tim.obj in frame_na7_db_fl.lib from the Leonardo package, |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
4 * subsequently reworked by Space Falcon. |
454
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 */ |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 /* set of included headers from COFF symtab: */ |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include <stdio.h> |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include "gpfconf.h" /* FreeCalypso addition */ |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include "../../nucleus/nucleus.h" |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #include "typedefs.h" |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 #include "os.h" |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 #include "gdi.h" |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 #include "os_types.h" |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 #include "os_glob.h" |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 extern UNSIGNED TMD_Timer; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 extern INT TMD_Timer_State; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 extern T_OS_TIMER_ENTRY TimerTable[]; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 extern T_OS_TIMER_TABLE_ENTRY *p_list[]; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 |
457
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
23 extern void os_Timeout(UNSIGNED t_handle); |
454
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 extern void timer_error(int err); |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 unsigned os_time_to_tick_multiplier = TIME_TO_TICK_TDMA_FRAME_MULTIPLIER; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 unsigned os_tick_to_time_multiplier = TICK_TO_TIME_TDMA_FRAME_MULTIPLIER; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
29 unsigned volatile t_start_ticks; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
30 T_OS_TIMER_TABLE_ENTRY *t_running; |
454
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 int used_timers; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 int next_t_handle; |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
33 int volatile t_list_access; |
454
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 int max_used_timers; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 NU_SEMAPHORE TimSemCB; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 NU_TIMER os_timer_cb; |
8d5a9f254dfc
OSL: os_tim_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
38 #define BARRIER asm volatile ("": : :"memory") |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
39 |
455
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
40 GLOBAL LONG |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
41 os_set_tick(int os_system_tick) |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
42 { |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
43 switch (os_system_tick) { |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
44 case SYSTEM_TICK_TDMA_FRAME: |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
45 os_time_to_tick_multiplier = TIME_TO_TICK_TDMA_FRAME_MULTIPLIER; |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
46 os_tick_to_time_multiplier = TICK_TO_TIME_TDMA_FRAME_MULTIPLIER; |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
47 return(OS_OK); |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
48 case SYSTEM_TICK_10_MS: |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
49 os_time_to_tick_multiplier = TIME_TO_TICK_10MS_MULTIPLIER; |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
50 os_tick_to_time_multiplier = TICK_TO_TIME_10MS_MULTIPLIER; |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
51 return(OS_OK); |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
52 default: |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
53 return(OS_ERROR); |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
54 } |
2081103418e9
os_tim_fl.c: os_set_tick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
454
diff
changeset
|
55 } |
456
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
56 |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
57 GLOBAL LONG |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
58 os_TimerInformation(USHORT Index, char *Buffer) |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
59 { |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
60 static int t_info_read; |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
61 |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
62 if (t_info_read) { |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
63 t_info_read = 0; |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
64 return(OS_ERROR); |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
65 } |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
66 sprintf(Buffer, "Maximum %d of %d available timers running", |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
67 max_used_timers, MaxSimultaneousTimer); |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
68 t_info_read = 1; |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
69 return(OS_OK); |
6e54a3fb01b9
os_tim_fl.c: os_TimerInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
455
diff
changeset
|
70 } |
457
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
71 |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
72 GLOBAL LONG |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
73 os_TimInit(void) |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
74 { |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
75 int i; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
76 |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
77 if (NU_Create_Semaphore(&TimSemCB, "TIMSEM", 1, NU_PRIORITY) |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
78 != NU_SUCCESS) |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
79 return(OS_ERROR); |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
80 if (NU_Create_Timer(&os_timer_cb, "OS_TIMER", os_Timeout, 0, 1, 0, |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
81 NU_DISABLE_TIMER) != NU_SUCCESS) |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
82 return(OS_ERROR); |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
83 used_timers = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
84 max_used_timers = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
85 next_t_handle = 1; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
86 t_list_access = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
87 t_start_ticks = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
88 p_list[0] = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
89 for (i = 1; i < MaxSimultaneousTimer; i++) { |
481
5639b4fa8672
os_tim_{fl,ir}.c: use TMR_* constant definitions
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
460
diff
changeset
|
90 TimerTable[i].entry.status = TMR_FREE; |
457
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
91 TimerTable[i].entry.next = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
92 TimerTable[i].entry.prev = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
93 TimerTable[i].next_t_handle = i + 1; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
94 p_list[i] = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
95 } |
481
5639b4fa8672
os_tim_{fl,ir}.c: use TMR_* constant definitions
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
460
diff
changeset
|
96 TimerTable[MaxSimultaneousTimer].entry.status = TMR_FREE; |
457
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
97 TimerTable[MaxSimultaneousTimer].next_t_handle = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
98 t_running = 0; |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
99 return(OS_OK); |
103b06ef644a
os_tim_fl.c: os_TimInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
456
diff
changeset
|
100 } |
458
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
101 |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
102 GLOBAL LONG |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
103 os_RecoverTick(OS_TICK ticks) |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
104 { |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
105 UNSIGNED current_system_clock; |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
106 |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
107 current_system_clock = NU_Retrieve_Clock(); |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
108 NU_Set_Clock(current_system_clock + ticks); |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
109 if (TMD_Timer_State == TM_ACTIVE) { |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
110 if (TMD_Timer <= ticks) { |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
111 TMD_Timer_State = TM_EXPIRED; |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
112 TMD_Timer = 0; |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
113 } else |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
114 TMD_Timer -= ticks; |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
115 } |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
116 return(OS_OK); |
705030e1e8b2
os_tim_fl.c: os_RecoverTick() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
457
diff
changeset
|
117 } |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
118 |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
119 GLOBAL LONG |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
120 os_QueryTimer(OS_HANDLE TaskHandle, OS_HANDLE TimerHandle, |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
121 OS_TIME *RemainingTime) |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
122 { |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
123 T_OS_TIMER_TABLE_ENTRY *timer, *t_iter; |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
124 OS_TICK c_ticks, r_ticks, e_ticks; |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
125 STATUS sts; |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
126 |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
127 if (TimerHandle > MaxSimultaneousTimer) |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
128 return(OS_ERROR); |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
129 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
130 timer = &TimerTable[TimerHandle].entry; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
131 if (timer->status == TMR_FREE) { |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
132 if (sts == NU_SUCCESS) |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
133 NU_Release_Semaphore(&TimSemCB); |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
134 return(OS_ERROR); |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
135 } |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
136 t_list_access = 1; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
137 BARRIER; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
138 if (!t_running) { |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
139 r_ticks = 0; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
140 goto out; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
141 } |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
142 c_ticks = NU_Retrieve_Clock(); |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
143 e_ticks = c_ticks - t_start_ticks; |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
144 t_iter = t_running; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
145 if (t_iter->r_ticks >= e_ticks) |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
146 r_ticks = t_iter->r_ticks - e_ticks; |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
147 else |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
148 r_ticks = 0; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
149 while (t_iter != timer) { |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
150 t_iter = t_iter->next; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
151 if (t_iter == t_running) { |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
152 r_ticks = 0; |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
153 goto out; |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
154 } |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
155 r_ticks += t_iter->r_ticks; |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
156 } |
482
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
157 out: BARRIER; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
158 t_list_access = 0; |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
159 if (sts == NU_SUCCESS) |
9d80090a9e0c
os_tim_{fl,ir}.c: timer list concurrency interlocks redesigned
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
481
diff
changeset
|
160 NU_Release_Semaphore(&TimSemCB); |
459
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
161 *RemainingTime = SYSTEM_TICKS_TO_TIME(r_ticks); |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
162 return(OS_OK); |
38afaeb194ea
os_tim_fl.c: os_QueryTimer() decompiled w/o real understanding of the logic
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
458
diff
changeset
|
163 } |
460
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
164 |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
165 GLOBAL LONG |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
166 os_InactivityTicks(int *next_event, OS_TICK *next_event_ticks) |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
167 { |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
168 *next_event = 1; |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
169 switch (TMD_Timer_State) { |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
170 case TM_ACTIVE: |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
171 *next_event_ticks = TMD_Timer; |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
172 return(OS_OK); |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
173 case TM_NOT_ACTIVE: |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
174 *next_event_ticks = 0; |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
175 *next_event = 0; |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
176 return(OS_OK); |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
177 default: |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
178 *next_event_ticks = 0; |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
179 return(OS_OK); |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
180 } |
9cacd09e8ef3
OSL: os_tim_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
459
diff
changeset
|
181 } |