annotate gsm-fw/gpf/osl/os_tim_fl.c @ 810:47a9c4eadf7f

aci: psa_sim?.c done
author Space Falcon <falcon@ivan.Harhan.ORG>
date Sun, 05 Apr 2015 07:40:15 +0000
parents 9d80090a9e0c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }