FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/gpf/osl/os_tim_fl.c @ 789:beb8e9851a07
aci: ati_*.c finished
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Thu, 12 Mar 2015 16:35:22 +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 } |