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