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
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 }