FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/gpf/osl/os_sem_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 | 03b6377d61db |
children |
rev | line source |
---|---|
441
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * This C module is a reconstruction based on the disassembly of |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * os_sem.obj in frame_na7_db_fl.lib from the Leonardo package. |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 */ |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 /* set of included headers from COFF symtab: */ |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include <stdio.h> |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include <string.h> |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include "gpfconf.h" /* FreeCalypso addition */ |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include "../../nucleus/nucleus.h" |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #include "typedefs.h" |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 #include "os.h" |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 #include "gdi.h" |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 #include "os_types.h" |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 #include "os_glob.h" |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 extern T_OS_SEM_TABLE_ENTRY SemTable[]; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 static NU_SEMAPHORE SemSemCB; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 static int |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 os_GetSemaphoreEntry(USHORT Index, OS_HANDLE *Handle) |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 { |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 static USHORT Idx; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 if (Index == FIRST_ENTRY) |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 Idx = 0; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 if (Index == FIRST_ENTRY || Index == NEXT_ENTRY) { |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 for (;;) { |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 Idx++; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 if (Idx > MaxSemaphores) |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 return(OS_ERROR); |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 if (SemTable[Idx].Name[0]) |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 break; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 } |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 } else |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 Idx = Index; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 if (Idx > MaxSemaphores) |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 return(OS_ERROR); |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 if (SemTable[Idx].Name[0]) { |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 *Handle = Idx; |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 return(OS_OK); |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 } else |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 return(OS_ERROR); |
b23743555ca8
OSL: os_sem_fl.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 } |
442
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
46 |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
47 GLOBAL LONG |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
48 os_SemaphoreInformation(USHORT Index, char *Buffer) |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
49 { |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
50 OS_HANDLE Handle; |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
51 OPTION SuspendType; |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
52 UNSIGNED Current, TasksWaiting; |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
53 NU_TASK *First; |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
54 CHAR Name[NU_MAX_NAME]; |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
55 |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
56 if (os_GetSemaphoreEntry(Index, &Handle) < 0) |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
57 return(OS_ERROR); |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
58 if (NU_Semaphore_Information(&SemTable[Handle].SemCB, Name, &Current, |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
59 &SuspendType, &TasksWaiting, &First) |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
60 != NU_SUCCESS) |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
61 return(OS_ERROR); |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
62 sprintf(Buffer, "Semname:%s Count:%ld Suspend:%d Waiting:%ld", Name, |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
63 Current, SuspendType, TasksWaiting); |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
64 return(OS_OK); |
0dbc1795ff42
os_sem_fl.c: os_SemaphoreInformation() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
441
diff
changeset
|
65 } |
443
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
66 |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
67 GLOBAL LONG |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
68 os_SemInit(void) |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
69 { |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
70 USHORT i; |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
71 |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
72 if (NU_Create_Semaphore(&SemSemCB, "SEMSEM", 1, NU_PRIORITY) |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
73 != NU_SUCCESS) |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
74 return(OS_ERROR); |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
75 for (i = 1; i <= MaxSemaphores; i++) |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
76 bzero(&SemTable[i], sizeof(T_OS_SEM_TABLE_ENTRY)); |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
77 return(OS_OK); |
42f9e12a9ced
os_sem_fl.c: os_SemInit() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
442
diff
changeset
|
78 } |
444
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
79 |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
80 GLOBAL LONG |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
81 os_ResetSemaphore(OS_HANDLE TaskHandle, OS_HANDLE SemHandle, |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
82 USHORT init_counter) |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
83 { |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
84 STATUS sts; |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
85 |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
86 sts = NU_Obtain_Semaphore(&SemSemCB, NU_SUSPEND); |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
87 if (!SemTable[SemHandle].Name[0]) { |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
88 error_out: if (sts == NU_SUCCESS) |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
89 NU_Release_Semaphore(&SemSemCB); |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
90 return(OS_ERROR); |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
91 } |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
92 if (NU_Reset_Semaphore(&SemTable[SemHandle].SemCB, init_counter) |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
93 != NU_SUCCESS) |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
94 goto error_out; |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
95 if (sts == NU_SUCCESS) |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
96 NU_Release_Semaphore(&SemSemCB); |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
97 return(OS_OK); |
caeff442faf1
os_sem_fl.c: os_ResetSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
443
diff
changeset
|
98 } |
445
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
99 |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
100 GLOBAL LONG |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
101 os_QuerySemaphore(OS_HANDLE TaskHandle, OS_HANDLE SemHandle, USHORT *Count) |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
102 { |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
103 OPTION SuspendType; |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
104 UNSIGNED SemCount, TasksWaiting; |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
105 NU_TASK *First; |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
106 CHAR Name[NU_MAX_NAME]; |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
107 |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
108 if (NU_Semaphore_Information(&SemTable[SemHandle].SemCB, Name, |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
109 &SemCount, &SuspendType, &TasksWaiting, |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
110 &First) != NU_SUCCESS) |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
111 return(OS_ERROR); |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
112 *Count = SemCount; |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
113 return(OS_OK); |
9eeeef3ff7db
os_sem_fl.c: os_QuerySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
444
diff
changeset
|
114 } |
446
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
115 |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
116 GLOBAL LONG |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
117 os_OpenSemaphore(OS_HANDLE TaskHandle, char *Name, OS_HANDLE *SemHandle) |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
118 { |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
119 USHORT i; |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
120 |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
121 for (i = 1; i <= MaxSemaphores; i++) { |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
122 if (!SemTable[i].Name[0]) |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
123 continue; |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
124 if (strncmp(Name, SemTable[i].Name, RESOURCE_NAMELEN-1)) |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
125 continue; |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
126 *SemHandle = i; |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
127 return(OS_OK); |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
128 } |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
129 return(OS_ERROR); |
57f8e2b747c4
os_sem_fl.c: os_OpenSemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
445
diff
changeset
|
130 } |
447
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
131 |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
132 GLOBAL unsigned char * |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
133 os_FindSuspendingSema(unsigned int *tcb) |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
134 { |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
135 USHORT i; |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
136 SM_SUSPEND *susp, *susp_loopchk; |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
137 |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
138 for (i = 1; i <= MaxSemaphores; i++) { |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
139 if (!SemTable[i].Name[0]) |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
140 continue; |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
141 susp = SemTable[i].SemCB.sm_suspension_list; |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
142 if (!susp) |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
143 continue; |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
144 if (susp->sm_suspended_task == (NU_TASK *)tcb) |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
145 return(SemTable[i].SemCB.sm_name); |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
146 susp = (SM_SUSPEND *)susp->sm_suspend_link.cs_next; |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
147 for (susp_loopchk = susp; susp != susp_loopchk; |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
148 susp = (SM_SUSPEND *)susp->sm_suspend_link.cs_next) |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
149 if (susp->sm_suspended_task == (NU_TASK *)tcb) |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
150 return(SemTable[i].SemCB.sm_name); |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
151 } |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
152 return(0); |
b55882290007
os_sem_fl.c: os_FindSuspendingSema() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
446
diff
changeset
|
153 } |
448
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
154 |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
155 GLOBAL LONG |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
156 os_DestroySemaphore(OS_HANDLE TaskHandle, OS_HANDLE SemHandle) |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
157 { |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
158 STATUS sts; |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
159 |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
160 sts = NU_Obtain_Semaphore(&SemSemCB, NU_SUSPEND); |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
161 if (!SemTable[SemHandle].Name[0]) { |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
162 error_out: if (sts == NU_SUCCESS) |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
163 NU_Release_Semaphore(&SemSemCB); |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
164 return(OS_ERROR); |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
165 } |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
166 if (NU_Delete_Semaphore(&SemTable[SemHandle].SemCB) != NU_SUCCESS) |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
167 goto error_out; |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
168 SemTable[SemHandle].Name[0] = 0; |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
169 if (sts == NU_SUCCESS) |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
170 NU_Release_Semaphore(&SemSemCB); |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
171 return(OS_OK); |
fd1729fd979e
os_sem_fl.c: os_DestroySemaphore() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
447
diff
changeset
|
172 } |
449
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
173 |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
174 GLOBAL LONG |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
175 os_CreateSemaphore(OS_HANDLE TaskHandle, char *Name, USHORT Count, |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
176 OS_HANDLE *SemHandle, OS_HANDLE MemPoolHandle) |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
177 { |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
178 USHORT i; |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
179 STATUS sts; |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
180 |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
181 if (os_OpenSemaphore(TaskHandle, Name, SemHandle) == OS_OK) |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
182 return(OS_ERROR); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
183 sts = NU_Obtain_Semaphore(&SemSemCB, NU_SUSPEND); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
184 for (i = 1; i <= MaxSemaphores; i++) { |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
185 if (SemTable[i].Name[0]) |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
186 continue; |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
187 if (NU_Create_Semaphore(&SemTable[i].SemCB, Name, Count, |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
188 NU_PRIORITY) != NU_SUCCESS) |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
189 break; |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
190 strncpy(SemTable[i].Name, Name, RESOURCE_NAMELEN); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
191 SemTable[i].Name[RESOURCE_NAMELEN-1] = 0; |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
192 *SemHandle = i; |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
193 if (sts == NU_SUCCESS) |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
194 NU_Release_Semaphore(&SemSemCB); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
195 return(OS_OK); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
196 } |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
197 if (sts == NU_SUCCESS) |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
198 NU_Release_Semaphore(&SemSemCB); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
199 return(OS_ERROR); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
200 } |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
201 |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
202 GLOBAL LONG |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
203 os_CloseSemaphore(OS_HANDLE TaskHandle, OS_HANDLE SemHandle) |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
204 { |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
205 return(OS_OK); |
03b6377d61db
OSL: os_sem_fl.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
448
diff
changeset
|
206 } |