source: trunk/libs/libalmos-mkh/almos-mkh.c @ 444

Last change on this file since 444 was 444, checked in by satin@…, 4 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 7.2 KB
Line 
1#include <hal_user.h>
2#include <almos-mkh.h>
3#include <stdio.h>
4#include <syscalls_numbers.h>
5
6
7#define  reg_t     int
8
9/////////////     Non standard system calls ////////////////////////////////////
10
11
12//////////////////////////
13int fg( unsigned int pid )
14{
15    return hal_user_syscall( SYS_FG,
16                             (reg_t)pid, 0, 0, 0 );
17}
18
19//////////////////////////////////////
20int get_config( unsigned int * x_size,
21                unsigned int * y_size,
22                unsigned int * ncores )
23{
24    return hal_user_syscall( SYS_GET_CONFIG,
25                             (reg_t)x_size,
26                             (reg_t)y_size,
27                             (reg_t)ncores, 0 );
28}
29
30/////////////////////////////////
31int get_core( unsigned int * cxy,
32              unsigned int * lid )
33{
34    return hal_user_syscall( SYS_GET_CORE,
35                             (reg_t)cxy,
36                             (reg_t)lid, 0, 0 );
37}
38
39////////////////////////////////////
40void display_string( char * string )
41{
42    hal_user_syscall( SYS_DISPLAY,
43                      DISPLAY_STRING,
44                      (reg_t)string, 0, 0 );
45}
46
47///////////////////////////////////
48int display_vmm( unsigned int cxy, unsigned int pid )
49{
50    return hal_user_syscall( SYS_DISPLAY,
51                             DISPLAY_VMM,
52                             (reg_t)pid,
53                             (reg_t)cxy, 0 );
54} 
55
56////////////////////////////////
57int display_sched( unsigned int cxy,
58                   unsigned int lid )
59{
60    return hal_user_syscall( SYS_DISPLAY,
61                             DISPLAY_SCHED,
62                             (reg_t)cxy,
63                             (reg_t)lid, 0 );
64} 
65
66/////////////////////////////////////////////////
67int display_cluster_processes( unsigned int cxy )
68{
69    return hal_user_syscall( SYS_DISPLAY,
70                             DISPLAY_CLUSTER_PROCESSES,
71                             (reg_t)cxy, 0, 0 );
72} 
73
74///////////////////
75int display_chdev()
76{
77    return hal_user_syscall( SYS_DISPLAY,
78                             DISPLAY_CHDEV, 0, 0, 0 );
79} 
80
81/////////////////
82int display_vfs()
83{
84    return hal_user_syscall( SYS_DISPLAY,
85                             DISPLAY_VFS, 0, 0, 0 );
86} 
87
88////////////////////////////////////////////////
89int display_txt_processes( unsigned int txt_id )
90{
91    return hal_user_syscall( SYS_DISPLAY,
92                             DISPLAY_TXT_PROCESSES,
93                             (reg_t)txt_id, 0, 0 );
94} 
95
96///////////////////////////////////////////
97int get_cycle( unsigned long long * cycle )
98{
99    return hal_user_syscall( SYS_GET_CYCLE,
100                             (reg_t)cycle, 0, 0, 0 );
101}
102
103//////////////////////////////////
104int trace( unsigned int active,
105           unsigned int pid, 
106           unsigned int lid )
107{
108    return hal_user_syscall( SYS_TRACE,
109                             (reg_t)active,
110                             (reg_t)pid,
111                             (reg_t)lid, 0 );
112}
113
114/////////////////////////////////
115int utls( unsigned int operation,
116          unsigned int value )
117{
118    return hal_user_syscall( SYS_UTLS,
119                             (reg_t)operation,
120                             (reg_t)value, 0, 0 );
121}
122
123
124////////////
125int getint()
126{
127    unsigned int  i;
128    int           val;    // ASCII character value
129
130    unsigned char buf[32];
131    unsigned int  save          = 0;
132    unsigned int  dec           = 0;
133    unsigned int  done          = 0;
134    unsigned int  overflow      = 0;
135    unsigned int  length        = 0;
136 
137    // get characters
138    while (done == 0) 
139    {
140        // read one character
141        val = getchar();
142
143        // analyse character
144        if ((val > 0x2F) && (val < 0x3A))         // decimal character
145        {
146            buf[length] = (unsigned char)val;
147            length++;                     
148            putchar( val );                       // echo
149        }
150        else if (val == 0x0A)                     // LF character
151        {
152            done = 1;
153        }
154        else if ( (val == 0x7F) ||                // DEL character
155                  (val == 0x08) )                 // BS  character
156        {
157            if ( length > 0 ) 
158            {
159                length--;         
160                printf("\b \b");                  // BS /  / BS
161            }
162        }
163        else if ( val == 0 )                      // EOF
164        {
165            return -1;
166        }
167
168        // test buffer overflow
169        if ( length >= 32 ) 
170        {
171            overflow = 1;
172            done     = 1;
173        }
174    }  // end while characters
175
176    // string to int conversion with overflow detection
177    if ( overflow == 0 )
178    {
179        for (i = 0; (i < length) && (overflow == 0) ; i++) 
180        {
181            dec = dec * 10 + (buf[i] - 0x30);
182            if (dec < save)  overflow = 1; 
183            save = dec;
184        }
185    } 
186
187    // final evaluation
188    if ( overflow == 0 )
189    {
190        // return value
191        return dec;
192    }
193    else
194    {
195        // cancel all echo characters
196        for (i = 0; i < length ; i++) 
197        {
198            printf("\b \b");                  // BS /  / BS
199        }
200
201        // echo character '0'
202        putchar( '0' );
203
204        // return 0 value
205        return 0;
206    }
207}  // end getint()
208
209///////////
210void idbg()
211{
212   char          cmd;
213   unsigned int  cxy;
214   unsigned int  lid;
215   unsigned int  txt;
216   unsigned int  active;
217
218   while( 1 )
219   {
220        printf("\n[idbg] cmd = ");
221        cmd = (char)getchar();
222
223        if( cmd == 'h' )
224        {
225            printf("h\n"
226                   "p : display on TXT0 process descriptors in cluster[cxy]\n"
227                   "s : display on TXT0 scheduler state for core[cxy,lid]\n"
228                   "v : display on TXT0 VMM for calling process in cluster [cxy]\n"
229                   "t : display on TXT0 process decriptors attached to TXT[tid]\n"
230                   "y : activate/desactivate trace for core[cxy,lid]\n"
231                   "x : force calling process to exit\n"
232                   "c : resume calling process execution\n"
233                   "h : list supported commands\n");
234        }
235        else if( cmd == 'p' )
236        {
237            printf("p / cxy = ");
238            cxy = getint();
239            display_cluster_processes( cxy );
240        }
241        else if( cmd == 's' )
242        {
243            printf("s / cxy = ");
244            cxy = getint();
245            printf(" / lid = ");
246            lid = getint();
247            display_sched( cxy , lid );
248        }
249        else if( cmd == 'v' )
250        {
251            printf("v / cxy = ");
252            cxy = getint();
253            display_vmm( cxy , (unsigned int)getpid() );
254        }
255        else if( cmd == 't' )
256        {
257            printf("t / txt_id = ");
258            txt = getint();
259            display_txt_processes( txt );
260        }
261        else if( cmd == 'y' )
262        {
263            printf("y / active = ");
264            active = getint();
265            printf(" / cxy = ");
266            cxy    = getint();
267            printf(" / lid = ");
268            lid    = getint();
269            trace( active , cxy , lid );
270        }
271        else if( cmd == 'x' )
272        {
273            printf("x\n");
274            exit( 0 );
275        }
276        else if( cmd == 'c' )
277        {
278            printf("c\n");
279            break;
280        }
281    }
282}  // end idbg()
283
284
285
Note: See TracBrowser for help on using the repository browser.