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

Last change on this file since 614 was 614, checked in by bellefin, 9 years ago

Change the syscalls related to the NIC and the CMA
1) In a CHBUF, every buffer is linked to a variable called “status” which is equal to 1 if the buffer is full or 0 if it is empty. The status occupies 64 bytes to simplify cache coherence
2) The CHBUF descriptor now contains the physical addresses of the buffer and its status. It only occupies 64 bits.

  • Property svn:executable set to *
File size: 12.6 KB
Line 
1/////////////////////////////////////////////////////////////////////////////
2// File     : stdio.h         
3// Date     : 01/04/2010
4// Author   : alain greiner & Joel Porquet
5// Copyright (c) UPMC-LIP6
6/////////////////////////////////////////////////////////////////////////////
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/////////////////////////////////////////////////////////////////////////////
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
18#define SYSCALL_PROC_XYP             0x00
19#define SYSCALL_PROC_TIME            0x01
20#define SYSCALL_TTY_WRITE            0x02
21#define SYSCALL_TTY_READ             0x03
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_INIT_BUF     0x0B
30#define SYSCALL_FBF_CMA_START        0x0C
31#define SYSCALL_FBF_CMA_DISPLAY      0x0D
32#define SYSCALL_FBF_CMA_STOP         0x0E
33#define SYSCALL_EXIT                 0x0F
34
35#define SYSCALL_PROCS_NUMBER         0x10
36#define SYSCALL_FBF_SYNC_WRITE       0x11
37#define SYSCALL_FBF_SYNC_READ        0x12
38#define SYSCALL_THREAD_ID            0x13
39#define SYSCALL_TIM_ALLOC            0x14
40#define SYSCALL_TIM_START            0x15
41#define SYSCALL_TIM_STOP             0x16
42//                                   0x17
43//                                   0x18
44#define SYSCALL_CTX_SWITCH           0x19
45#define SYSCALL_VOBJ_GET_VBASE       0x1A
46#define SYSCALL_VOBJ_GET_LENGTH      0x1B
47#define SYSCALL_GET_XY               0x1C
48//                                   0x1D
49//                                   0x1E
50//                                   0x1F
51
52#define SYSCALL_FAT_OPEN             0x20
53#define SYSCALL_FAT_READ             0x21
54#define SYSCALL_FAT_WRITE            0x22
55#define SYSCALL_FAT_LSEEK            0x23
56#define SYSCALL_FAT_FINFO            0x24
57#define SYSCALL_FAT_CLOSE            0x25
58#define SYSCALL_FAT_REMOVE           0x26
59#define SYSCALL_FAT_RENAME           0x27
60#define SYSCALL_FAT_MKDIR            0x28
61#define SYSCALL_FAT_LIST             0x29
62//                                   0x2A
63//                                   0x2B
64//                                   0x2C
65//                                   0x2D
66//                                   0x2E
67//                                   0x2F
68
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
77//                                   0x38
78//                                   0x39
79//                                   0x3A
80#define SYSCALL_COPROC_COMPLETED     0x3B
81#define SYSCALL_COPROC_ALLOC         0x3C
82#define SYSCALL_COPROC_CHANNEL_INIT  0x3D
83#define SYSCALL_COPROC_RUN           0x3E
84#define SYSCALL_COPROC_RELEASE       0x3F
85
86////////////////////////////////////////////////////////////////////////////
87// These define must be synchronised vith values defined in fat32.h
88////////////////////////////////////////////////////////////////////////////
89
90#define SEEK_SET            0          // argument for giet_fat_lseek()
91#define SEEK_CUR            1          // argument for giet_fat_lseek
92
93#define O_CREATE            0x20       // argument for giet_fat_open()
94#define O_RDONLY            0x01       // argument for giet_fat_open()
95
96////////////////////////////////////////////////////////////////////////////
97// NULL pointer definition
98////////////////////////////////////////////////////////////////////////////
99
100#define NULL (void *)0
101
102////////////////////////////////////////////////////////////////////////////
103// This generic C function is used to implement all system calls.
104// It writes the system call arguments in the proper registers,
105// and tells GCC what has been modified by system call execution.
106// Returns -1 to signal an error.
107////////////////////////////////////////////////////////////////////////////
108static inline int sys_call( int call_no,
109                            int arg_0, 
110                            int arg_1, 
111                            int arg_2, 
112                            int arg_3 ) 
113{
114    register int reg_no_and_output asm("v0") = call_no;
115    register int reg_a0 asm("a0") = arg_0;
116    register int reg_a1 asm("a1") = arg_1;
117    register int reg_a2 asm("a2") = arg_2;
118    register int reg_a3 asm("a3") = arg_3;
119
120    asm volatile(
121            "syscall"
122            : "+r" (reg_no_and_output), /* input/output argument */
123              "+r" (reg_a0),             
124              "+r" (reg_a1),
125              "+r" (reg_a2),
126              "+r" (reg_a3),
127              "+r" (reg_no_and_output)
128            : /* input arguments */
129            : "memory",
130            /* These persistant registers will be saved on the stack by the
131             * compiler only if they contain relevant data. */
132            "at",
133            "v1",
134            "ra",
135            "t0",
136            "t1",
137            "t2",
138            "t3",
139            "t4",
140            "t5",
141            "t6",
142            "t7",
143            "t8",
144            "t9"
145               );
146    return (volatile int)reg_no_and_output;
147}
148
149//////////////////////////////////////////////////////////////////////////
150//               MIPS32 related system calls
151//////////////////////////////////////////////////////////////////////////
152
153extern void giet_proc_xyp( unsigned int* cluster_x,
154                           unsigned int* cluster_y,
155                           unsigned int* lpid );
156
157extern unsigned int giet_proctime();
158
159extern unsigned int giet_rand();
160
161//////////////////////////////////////////////////////////////////////////
162//                    Task context system calls
163//////////////////////////////////////////////////////////////////////////
164
165extern unsigned int giet_proc_task_id();
166
167extern unsigned int giet_global_task_id(); 
168
169extern unsigned int giet_thread_id(); 
170
171//////////////////////////////////////////////////////////////////////////
172//             Coprocessors related system calls
173//////////////////////////////////////////////////////////////////////////
174
175// this structure is used by the giet_coproc_channel_init()
176// system call to specify the communication channel parameters.
177typedef struct giet_coproc_channel
178{
179    unsigned int  channel_mode;    // MWMR / DMA_IRQ / DMA_NO_IRQ
180    unsigned int  buffer_size;     // memory buffer size
181    unsigned int  buffer_vaddr;    // memory buffer virtual address
182    unsigned int  mwmr_vaddr;      // MWMR descriptor virtual address
183    unsigned int  lock_vaddr;      // lock for MWMR virtual address
184} giet_coproc_channel_t;
185
186extern void giet_coproc_alloc( unsigned int   coproc_type,
187                               unsigned int*  coproc_info );
188
189extern void giet_coproc_release( unsigned int coproc_reg_index );
190
191extern void giet_coproc_channel_init( unsigned int            channel,
192                                      giet_coproc_channel_t*  desc );
193
194extern void giet_coproc_run( unsigned int coproc_reg_index );
195
196extern void giet_coproc_completed();
197
198//////////////////////////////////////////////////////////////////////////
199//             TTY device related system calls
200//////////////////////////////////////////////////////////////////////////
201
202extern void giet_tty_alloc();
203
204extern void giet_tty_printf( char* format, ... );
205
206extern void giet_shr_printf( char* format, ... );
207
208extern void giet_tty_getc( char* byte );
209
210extern void giet_tty_gets( char* buf, unsigned int bufsize );
211
212extern void giet_tty_getw( unsigned int* val );
213
214//////////////////////////////////////////////////////////////////////////
215//                TIMER device related system calls
216//////////////////////////////////////////////////////////////////////////
217
218extern void giet_timer_alloc();
219
220extern void giet_timer_start( unsigned int period );
221
222extern void giet_timer_stop();
223 
224//////////////////////////////////////////////////////////////////////////
225//                Frame buffer device related system calls
226//////////////////////////////////////////////////////////////////////////
227
228extern void giet_fbf_cma_alloc();
229
230extern void giet_fbf_cma_init_buf( void* buf0_vbase, 
231                                   void* buf1_vbase,
232                                   void* sts0_vaddr,
233                                   void* sts1_vaddr );
234
235extern void giet_fbf_cma_start( unsigned int length );
236
237extern void giet_fbf_cma_display( unsigned int buffer );
238
239extern void giet_fbf_cma_stop();
240
241extern void giet_fbf_sync_read( unsigned int offset, 
242                                void*        buffer, 
243                                unsigned int length );
244
245extern void giet_fbf_sync_write( unsigned int offset, 
246                                 void*        buffer, 
247                                 unsigned int length );
248
249//////////////////////////////////////////////////////////////////////////
250//                  NIC related system calls
251//////////////////////////////////////////////////////////////////////////
252
253extern unsigned int giet_nic_rx_alloc( unsigned int xmax, unsigned int ymax );
254
255extern unsigned int giet_nic_tx_alloc( unsigned int xmax, unsigned int ymax );
256
257extern void giet_nic_rx_start( unsigned int channel );
258
259extern void giet_nic_tx_start( unsigned int channel );
260
261extern void giet_nic_rx_move( unsigned int channel, void* buffer );
262
263extern void giet_nic_tx_move( unsigned int channel, void* buffer );
264
265extern void giet_nic_rx_stop( unsigned int channel );
266
267extern void giet_nic_tx_stop( unsigned int channel );
268
269extern void giet_nic_rx_stats( unsigned int channel );
270
271extern void giet_nic_tx_stats( unsigned int channel );
272
273extern void giet_nic_rx_clear( unsigned int channel );
274
275extern void giet_nic_tx_clear( unsigned int channel );
276
277//////////////////////////////////////////////////////////////////////////
278//               FAT related system calls
279//////////////////////////////////////////////////////////////////////////
280
281extern int giet_fat_open( char*        pathname,
282                          unsigned int flags );
283
284extern int giet_fat_close( unsigned int fd_id );
285
286extern int giet_fat_file_info( unsigned int  fd_id,
287                               unsigned int* size,
288                               unsigned int* offset );
289
290extern int giet_fat_read( unsigned int fd_id,
291                          void*        buffer,
292                          unsigned int count );
293
294extern int giet_fat_write( unsigned int fd,
295                           void*        buffer,
296                           unsigned int count );
297
298extern int giet_fat_lseek( unsigned int fd,
299                           unsigned int offset,
300                           unsigned int whence );
301
302extern int giet_fat_remove( char*        pathname,
303                            unsigned int should_be_dir );
304
305extern int giet_fat_rename( char*  old_path,
306                            char*  new_path ); 
307
308extern int giet_fat_mkdir( char* pathname );
309
310extern int giet_fat_list( char* pathname );
311
312//////////////////////////////////////////////////////////////////////////
313//                    Miscelaneous system calls
314//////////////////////////////////////////////////////////////////////////
315
316extern void giet_exit( char* string );
317
318extern void giet_assert( unsigned int condition, 
319                         char*        string );
320
321extern void giet_context_switch();
322
323extern void giet_procs_number( unsigned int* x_size,
324                               unsigned int* y_size,
325                               unsigned int* nprocs );
326
327extern void giet_vobj_get_vbase( char*         vspace_name, 
328                                 char*         vobj_name, 
329                                 unsigned int* vobj_vaddr);
330
331extern void giet_vobj_get_length( char*         vspace_name, 
332                                  char*         vobj_name, 
333                                  unsigned int* vobj_vaddr);
334
335extern void giet_heap_info( unsigned int* vaddr, 
336                            unsigned int* length,
337                            unsigned int  x,
338                            unsigned int  y );
339
340extern void giet_get_xy( void*          ptr, 
341                         unsigned int*  px,
342                         unsigned int*  py );
343
344#endif
345
346// Local Variables:
347// tab-width: 4
348// c-basic-offset: 4
349// c-file-offsets:((innamespace . 0)(inline-open . 0))
350// indent-tabs-mode: nil
351// End:
352// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
353
Note: See TracBrowser for help on using the repository browser.