annotate gsm-fw/gpf/osl/os_sem_fl.c @ 443:42f9e12a9ced

os_sem_fl.c: os_SemInit() done
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 23 Jun 2014 00:55:22 +0000
parents 0dbc1795ff42
children caeff442faf1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }