FreeCalypso > hg > freecalypso-citrine
annotate gpf/osl/os_sem_ir.c @ 18:a872b92dcd3c
tpudrv12.c: TPU_wait_idle() call removed to match TCS211
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Fri, 10 Jun 2016 06:42:21 +0000 | 
| parents | 75a11d740a02 | 
| children | 
| rev | line source | 
|---|---|
| 
0
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
2 * This C module is a reconstruction based on the disassembly of | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
3 * os_sem.obj in frame_na7_db_ir.lib from the Leonardo package. | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
4 */ | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
5 | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
6 /* set of included headers from COFF symtab: */ | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
7 #include <stdio.h> | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
8 #include <string.h> | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
9 #include "gpfconf.h" /* FreeCalypso addition */ | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
10 #include "../../nucleus/nucleus.h" | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
11 #include "typedefs.h" | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
12 #include "os.h" | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
13 #include "gdi.h" | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
14 #include "os_types.h" | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
15 #include "os_glob.h" | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
16 | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
17 extern T_OS_SEM_TABLE_ENTRY SemTable[]; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
18 extern unsigned os_time_to_tick_multiplier; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
19 | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
20 int | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
21 ReleaseSemaphoreCB(NU_SEMAPHORE *SemCB) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
22 { | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
23 if (NU_Release_Semaphore(SemCB) == NU_SUCCESS) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
24 return(OS_OK); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
25 else | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
26 return(OS_ERROR); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
27 } | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
28 | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
29 GLOBAL LONG | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
30 os_ReleaseSemaphore(OS_HANDLE TaskHandle, OS_HANDLE SemHandle) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
31 { | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
32 if (NU_Release_Semaphore(&SemTable[SemHandle].SemCB) == NU_SUCCESS) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
33 return(OS_OK); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
34 else | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
35 return(OS_ERROR); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
36 } | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
37 | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
38 int | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
39 ObtainSemaphoreCB(NU_SEMAPHORE *SemCB, ULONG Timeout, USHORT wait_check) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
40 { | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
41 UNSIGNED nu_timeout; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
42 STATUS sts; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
43 int ret; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
44 | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
45 ret = OS_OK; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
46 if (Timeout != OS_SUSPEND) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
47 nu_timeout = TIME_TO_SYSTEM_TICKS(Timeout); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
48 else if (wait_check == 1) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
49 nu_timeout = 1; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
50 else | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
51 nu_timeout = NU_SUSPEND; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
52 for (;;) { | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
53 sts = NU_Obtain_Semaphore(SemCB, nu_timeout); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
54 switch (sts) { | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
55 case NU_SUCCESS: | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
56 return(ret); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
57 case NU_INVALID_SEMAPHORE: | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
58 return(OS_ERROR); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
59 case NU_INVALID_SUSPEND: | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
60 nu_timeout = 0; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
61 continue; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
62 case NU_TIMEOUT: | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
63 case NU_UNAVAILABLE: | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
64 if (nu_timeout == 1 && wait_check == 1) { | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
65 nu_timeout = NU_SUSPEND; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
66 ret = OS_WAITED; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
67 continue; | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
68 } | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
69 return(OS_TIMEOUT); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
70 default: | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
71 /* | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
72 * Disassembly reveals that the original code | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
73 * has an endless loop here, the equivalent | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
74 * of continue. My guess is that they simply | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
75 * forgot the default case, and so control | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
76 * falls onto the closing brace of the switch | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
77 * and then onto the closing brace of the for | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
78 * loop. But I prefer better error handling, | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
79 * hence the present addition. - Space Falcon | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
80 */ | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
81 return(OS_ERROR); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
82 } | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
83 } | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
84 } | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
85 | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
86 GLOBAL LONG | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
87 os_ObtainSemaphore(OS_HANDLE TaskHandle, OS_HANDLE SemHandle, ULONG Timeout) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
88 { | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
89 if (SemHandle > MaxSemaphores) | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
90 return(OS_ERROR); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
91 return ObtainSemaphoreCB(&SemTable[SemHandle].SemCB, Timeout, 0); | 
| 
 
75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
 
Mychaela Falconia <falcon@freecalypso.org> 
parents:  
diff
changeset
 | 
92 } | 
