annotate gsm-fw/gpf/osl/os_pro_ir.c @ 992:a7b0b426f9ca

target-utils: boot ROM UART autodetection revamped The new implementation should work with both the familiar Calypso C035 boot ROM version found in our regular targets as well as the older Calypso F741979B version found on the vintage D-Sample board.
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Wed, 30 Dec 2015 21:28:41 +0000
parents fdeea3d6582d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
343
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
1 /*
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
2 * This C module is a reconstruction based on the disassembly of
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
3 * os_pro.obj in frame_na7_db_ir.lib from the Leonardo package.
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
4 */
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
5
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
6 /* set of included headers from COFF symtab: */
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
7 #include <stdio.h>
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
8 #include <string.h>
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
9 #include "gpfconf.h" /* FreeCalypso addition */
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
10 #include "../../nucleus/nucleus.h"
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
11 #include "typedefs.h"
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
12 #include "os.h"
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
13 #include "gdi.h"
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
14 #include "os_types.h"
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
15 #include "os_glob.h"
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
16
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
17 extern VOID *TCD_Current_Thread;
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
18 extern T_OS_TASK_TABLE_ENTRY TaskTable[];
344
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
19 extern unsigned os_time_to_tick_multiplier;
343
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
20
345
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
21 #define OS_NU_TASK_MAGIC 0xdeafbeef
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
22
343
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
23 VOID
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
24 os_TaskEntry(UNSIGNED TaskHandle, VOID *argv)
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
25 {
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
26 TaskTable[TaskHandle].TaskEntry(TaskHandle, 0);
e3a2e6e875de OSL reconstruction: beginning of os_pro_ir.c
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
27 }
344
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
28
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
29 GLOBAL LONG
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
30 os_SuspendTask(OS_HANDLE Caller, ULONG Time)
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
31 {
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
32 UNSIGNED SuspendTicks;
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
33
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
34 SuspendTicks = TIME_TO_SYSTEM_TICKS(Time);
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
35 if (!SuspendTicks)
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
36 SuspendTicks = 1;
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
37 NU_Sleep(SuspendTicks);
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
38 return (OS_OK);
c51d6b3748c3 OSL: os_SuspendTask() done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 343
diff changeset
39 }
345
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
40
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
41 GLOBAL LONG
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
42 os_ResumeTask(OS_HANDLE task_handle)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
43 {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
44 if (NU_Resume_Task(&TaskTable[task_handle].TaskCB.TCB) == NU_SUCCESS)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
45 return(OS_OK);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
46 else
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
47 return(OS_ERROR);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
48 }
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
49
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
50 GLOBAL LONG
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
51 os_Relinquish(void)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
52 {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
53 NU_Relinquish();
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
54 return(OS_OK);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
55 }
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
56
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
57 GLOBAL OS_HANDLE
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
58 os_MyHandle(void)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
59 {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
60 OS_NU_TASK *os_nu_task = (OS_NU_TASK *) TCD_Current_Thread;
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
61
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
62 if (os_nu_task && os_nu_task->magic_nr == OS_NU_TASK_MAGIC)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
63 return(os_nu_task->handle);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
64 else
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
65 return(OS_NOTASK);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
66 }
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
67
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
68 GLOBAL LONG
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
69 os_GetTaskName(OS_HANDLE Caller, OS_HANDLE TaskHandle, char *Name)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
70 {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
71 if (TaskHandle) {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
72 if (TaskHandle > MaxTasks || !TaskTable[TaskHandle].Name[0])
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
73 return(OS_ERROR);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
74 strcpy(Name, TaskTable[TaskHandle].Name);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
75 } else if (TCD_Current_Thread) {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
76 NU_TASK *curtask = TCD_Current_Thread;
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
77 strcpy(Name, curtask->tc_name);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
78 } else
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
79 strcpy(Name, "ROOT");
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
80 return(OS_OK);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
81 }
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
82
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
83 GLOBAL LONG
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
84 os_DeferTask(OS_HANDLE task_handle, OS_TIME time)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
85 {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
86 if (NU_Suspend_Task(&TaskTable[task_handle].TaskCB.TCB) == NU_SUCCESS)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
87 return(OS_OK);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
88 else
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
89 return(OS_ERROR);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
90 }
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
91
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
92 GLOBAL LONG
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
93 os_CheckTaskStack(OS_HANDLE Handle)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
94 {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
95 register void *sp asm("sp");
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
96
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
97 if (*TaskTable[Handle].Stack != GUARD_PATTERN)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
98 return(OS_ERROR);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
99 if (TCD_Current_Thread) {
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
100 NU_TASK *curtask = TCD_Current_Thread;
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
101 if (sp < curtask->tc_stack_start)
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
102 return(OS_ERROR);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
103 }
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
104 return(OS_OK);
460ed6748e4c OSL: os_pro_ir.c done
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 344
diff changeset
105 }