source: soft/giet_vm/giet_libs/stdio.h @ 501

Last change on this file since 501 was 501, checked in by alain, 9 years ago

Introduce user-level, distributed barriers and locks (quad-tree based).

  • Property svn:executable set to *
File size: 10.5 KB
RevLine 
[258]1//////////////////////////////////////////////////////////////////////////////////
2// File     : stdio.h         
3// Date     : 01/04/2010
4// Author   : alain greiner & Joel Porquet
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
[390]7// The stdio.c and stdio.h files are part of the GIET_VM nano-kernel.
8// This library contains all user-level functions that contain a system call
9// to access protected or shared ressources.
10///////////////////////////////////////////////////////////////////////////////////
[258]11
12#ifndef _STDIO_H
13#define _STDIO_H
14
15// These define must be synchronised with
16// the _syscall_vector defined in file sys_handler.c
17
[438]18#define SYSCALL_PROC_XYP          0x00
19#define SYSCALL_PROC_TIME         0x01
[258]20#define SYSCALL_TTY_WRITE         0x02
21#define SYSCALL_TTY_READ          0x03
[438]22#define SYSCALL_TTY_ALLOC         0x04
23#define SYSCALL_TTY_GET_LOCK      0x05
24#define SYSCALL_TTY_RELEASE_LOCK  0x06
25#define SYSCALL_HEAP_INFO         0x07
26#define SYSCALL_LOCAL_TASK_ID     0x08
27#define SYSCALL_GLOBAL_TASK_ID    0x09
28#define SYSCALL_FBF_CMA_ALLOC     0x0A
29#define SYSCALL_FBF_CMA_START     0x0B
30#define SYSCALL_FBF_CMA_DISPLAY   0x0C
31#define SYSCALL_FBF_CMA_STOP      0x0D
[258]32#define SYSCALL_EXIT              0x0E
[501]33#define SYSCALL_PROCS_NUMBER      0x0F
[258]34
[438]35#define SYSCALL_FBF_SYNC_WRITE    0x10
36#define SYSCALL_FBF_SYNC_READ     0x11
[267]37#define SYSCALL_THREAD_ID         0x12
[438]38//                                0x13
39#define SYSCALL_TIM_ALLOC         0x14
40#define SYSCALL_TIM_START         0x15
41#define SYSCALL_TIM_STOP          0x16
42//                                0x17
43//                                0x18
[258]44#define SYSCALL_CTX_SWITCH        0x19
45#define SYSCALL_VOBJ_GET_VBASE    0x1A
[438]46#define SYSCALL_VOBJ_GET_LENGTH   0x1B
47#define SYSCALL_GET_XY            0x1C
[450]48//                                0x1D
49//                                0x1E
50//                                0x1F
[258]51
52#define SYSCALL_FAT_OPEN          0x20
53#define SYSCALL_FAT_READ          0x21
[259]54#define SYSCALL_FAT_WRITE         0x22
55#define SYSCALL_FAT_LSEEK         0x23
[260]56#define SYSCALL_FAT_FSTAT         0x24
57#define SYSCALL_FAT_CLOSE         0x25
[438]58//                                0x26
59//                                0x27
60//                                0x28
61//                                0x29
62//                                0x2A
63//                                0x2B
64//                                0x2C
65//                                0x2D
66//                                0x2E
67//                                0x2F
[258]68
[461]69#define SYSCALL_NIC_ALLOC         0x30
70#define SYSCALL_NIC_START         0x31
71#define SYSCALL_NIC_MOVE          0x32
72#define SYSCALL_NIC_STOP          0x33
73#define SYSCALL_NIC_STATS         0x34
74#define SYSCALL_NIC_CLEAR         0x35
75//                                0x36
76//                                0x37
[450]77//                                0x38
78//                                0x39
79//                                0x3A
80//                                0x3B
81//                                0x3C
82//                                0x3D
83//                                0x3E
84//                                0x3F
85
[258]86//////////////////////////////////////////////////////////////////////////////////
[368]87// NULL pointer definition
88//////////////////////////////////////////////////////////////////////////////////
89
90#define NULL (void *)0
91
92//////////////////////////////////////////////////////////////////////////////////
[258]93// This generic C function is used to implement all system calls.
94// It writes the system call arguments in the proper registers,
95// and tells GCC what has been modified by system call execution.
[438]96// Returns -1 to signal an error.
[258]97//////////////////////////////////////////////////////////////////////////////////
98static inline int sys_call( int call_no,
99                            int arg_0, 
100                            int arg_1, 
101                            int arg_2, 
102                            int arg_3 ) 
103{
104    register int reg_no_and_output asm("v0") = call_no;
105    register int reg_a0 asm("a0") = arg_0;
106    register int reg_a1 asm("a1") = arg_1;
107    register int reg_a2 asm("a2") = arg_2;
108    register int reg_a3 asm("a3") = arg_3;
109
110    asm volatile(
111            "syscall"
[345]112            : "+r" (reg_no_and_output), /* input/output argument */
113              "+r" (reg_a0),             
114              "+r" (reg_a1),
115              "+r" (reg_a2),
116              "+r" (reg_a3),
117              "+r" (reg_no_and_output)
118            : /* input arguments */
[258]119            : "memory",
120            /* These persistant registers will be saved on the stack by the
121             * compiler only if they contain relevant data. */
122            "at",
123            "v1",
124            "ra",
125            "t0",
126            "t1",
127            "t2",
128            "t3",
129            "t4",
130            "t5",
131            "t6",
132            "t7",
133            "t8",
134            "t9"
135               );
[345]136    return (volatile int)reg_no_and_output;
[258]137}
138
139//////////////////////////////////////////////////////////////////////////
[295]140//               MIPS32 related system calls
141//////////////////////////////////////////////////////////////////////////
[258]142
[295]143//////////////////////////////////////////////////////////////////////////
[431]144extern void giet_proc_xyp( unsigned int* cluster_x,
145                           unsigned int* cluster_y,
146                           unsigned int* lpid );
[382]147
[438]148extern unsigned int giet_proctime();
149
150extern unsigned int giet_rand();
151
[382]152//////////////////////////////////////////////////////////////////////////
[438]153//                    Task context system calls
[382]154//////////////////////////////////////////////////////////////////////////
155
[438]156extern unsigned int giet_proc_task_id();
[382]157
[438]158extern unsigned int giet_global_task_id(); 
159
160extern unsigned int giet_thread_id(); 
161
[382]162//////////////////////////////////////////////////////////////////////////
[295]163//             TTY device related system calls
164//////////////////////////////////////////////////////////////////////////
[258]165
[438]166extern void giet_tty_alloc();
167
[295]168extern void giet_tty_printf( char* format, ... );
[258]169
[295]170extern void giet_shr_printf( char* format, ... );
[258]171
[295]172extern void giet_tty_getc( char* byte );
[258]173
[295]174extern void giet_tty_gets( char* buf, unsigned int bufsize );
[258]175
[295]176extern void giet_tty_getw( unsigned int* val );
[258]177
[295]178//////////////////////////////////////////////////////////////////////////
179//                TIMER device related system calls
180//////////////////////////////////////////////////////////////////////////
[258]181
[438]182extern void giet_timer_alloc();
[258]183
[438]184extern void giet_timer_start( unsigned int period );
185
[295]186extern void giet_timer_stop();
[258]187 
188//////////////////////////////////////////////////////////////////////////
[295]189//                Frame buffer device related system calls
190//////////////////////////////////////////////////////////////////////////
[258]191
[438]192extern void giet_fbf_cma_alloc();
[258]193
[438]194extern void giet_fbf_cma_start( void*        buf0, 
195                                void*        buf1,
[295]196                                unsigned int length );
[258]197
[438]198extern void giet_fbf_cma_display( unsigned int buffer );
[258]199
[438]200extern void giet_fbf_cma_stop();
[258]201
[438]202extern void giet_fbf_sync_read( unsigned int offset, 
203                                void*        buffer, 
204                                unsigned int length );
[258]205
[438]206extern void giet_fbf_sync_write( unsigned int offset, 
207                                 void*        buffer, 
208                                 unsigned int length );
209
[258]210//////////////////////////////////////////////////////////////////////////
[295]211//                  NIC related system calls
212//////////////////////////////////////////////////////////////////////////
[258]213
[501]214extern unsigned int giet_nic_rx_alloc( unsigned int xmax, unsigned int ymax );
[258]215
[501]216extern unsigned int giet_nic_tx_alloc( unsigned int xmax, unsigned int ymax );
[258]217
[487]218extern void giet_nic_rx_start( unsigned int channel );
[438]219
[487]220extern void giet_nic_tx_start( unsigned int channel );
[450]221
[461]222extern void giet_nic_rx_move( unsigned int channel, void* buffer );
[450]223
[461]224extern void giet_nic_tx_move( unsigned int channel, void* buffer );
[450]225
[487]226extern void giet_nic_rx_stop( unsigned int channel );
[450]227
[487]228extern void giet_nic_tx_stop( unsigned int channel );
[450]229
[487]230extern void giet_nic_rx_stats( unsigned int channel );
[461]231
[487]232extern void giet_nic_tx_stats( unsigned int channel );
[461]233
[487]234extern void giet_nic_rx_clear( unsigned int channel );
[468]235
[487]236extern void giet_nic_tx_clear( unsigned int channel );
[468]237
[258]238//////////////////////////////////////////////////////////////////////////
[295]239//               FAT related system calls
240//////////////////////////////////////////////////////////////////////////
[258]241
242extern int giet_fat_open(  const char*  pathname,
243                           unsigned int flags );
244
[295]245extern void giet_fat_read(  unsigned int fd,
246                            void*        buffer,
247                            unsigned int count,
248                            unsigned int offset );
[258]249
[295]250extern void giet_fat_write( unsigned int fd,
251                            void*        buffer,
252                            unsigned int count,
253                            unsigned int offset );
[258]254
[295]255extern void giet_fat_lseek( unsigned int fd,
256                            unsigned int offset,
257                            unsigned int whence );
[258]258
[295]259extern void giet_fat_fstat( unsigned int fd );
[260]260
[295]261extern void giet_fat_close( unsigned int fd );
[258]262
263//////////////////////////////////////////////////////////////////////////
[382]264//                    Miscelaneous system calls
265//////////////////////////////////////////////////////////////////////////
[258]266
[382]267extern void giet_exit( char* string );
[258]268
[389]269extern void giet_assert( unsigned int condition, 
270                         char*        string );
[258]271
[389]272extern void giet_context_switch();
273
[501]274extern void giet_procs_number( unsigned int* x_size,
275                               unsigned int* y_size,
276                               unsigned int* nprocs );
[438]277
[295]278extern void giet_vobj_get_vbase( char*         vspace_name, 
279                                 char*         vobj_name, 
280                                 unsigned int* vobj_vaddr);
[258]281
[438]282extern void giet_vobj_get_length( char*         vspace_name, 
283                                  char*         vobj_name, 
284                                  unsigned int* vobj_vaddr);
[295]285
286extern void giet_heap_info( unsigned int* vaddr, 
[368]287                            unsigned int* length,
288                            unsigned int  x,
289                            unsigned int  y );
[295]290
[390]291extern void giet_get_xy( void*          ptr, 
292                         unsigned int*  px,
293                         unsigned int*  py );
294
[258]295#endif
296
297// Local Variables:
298// tab-width: 4
299// c-basic-offset: 4
300// c-file-offsets:((innamespace . 0)(inline-open . 0))
301// indent-tabs-mode: nil
302// End:
303// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
304
Note: See TracBrowser for help on using the repository browser.