source: soft/giet_vm/giet_kernel/sys_handler.h @ 708

Last change on this file since 708 was 707, checked in by guerin, 9 years ago

fix kill/exec

  • introduce physical_memcpy for fat_read
  • don't defer task exec
  • load writable segments in exec syscall
  • Property svn:executable set to *
File size: 8.9 KB
Line 
1///////////////////////////////////////////////////////////////////////////////
2// File     : sys_handler.h
3// Date     : 01/04/2012
4// Author   : alain greiner
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////
7// The sys_handler.c and sys_handler.h files are part of the GIET-VM kernel.
8// It define the syscall_vector[] (at the end of this file), as well as the
9// associated syscall handlers.
10///////////////////////////////////////////////////////////////////////////////
11
12#ifndef _SYS_HANDLER_H
13#define _SYS_HANDLER_H
14
15#include "giet_config.h"
16#include "kernel_locks.h"
17#include "stdio.h"
18
19///////////////////////////////////////////////////////////////////////////////
20//     Syscall Vector Table (indexed by syscall index)
21///////////////////////////////////////////////////////////////////////////////
22
23extern const void * _syscall_vector[64];
24
25///////////////////////////////////////////////////////////////////////////////
26// This structure is used by the CMA component to store the status of the
27// frame buffer (full or empty). The useful information is contained in the
28// "status" integer (1 for full and 0 for empty).
29// This structure must be aligned on a cache line (64 bytes) to simplify
30// the software L2/L3 cache coherence when the IO bridge is used.
31///////////////////////////////////////////////////////////////////////////////
32
33typedef struct buffer_status_s
34{
35    unsigned int status;
36    unsigned int padding[15];
37} buffer_status_t;
38
39///////////////////////////////////////////////////////////////////////////////
40// This structure is used by the CMA component to move a stream
41// of images from two user buffers to the frame buffer in kernel space.
42// It contains two chbuf arrays:
43// - The SRC chbuf contains two buffers (buf0 & buf1), in user space.
44// - The DST cbuf contains one single buffer (fbf), that is the frame buffer.
45// Each buffer is described with a 64 bits buffer descriptor:
46// - the 26 LSB bits contain bits[6:31] of the buffer physical address
47// - the 26 following bits contain bits[6:31] of the physical address where the
48//   buffer status is located
49// - the 12 MSB bits contain the common address extension of the buffer and its
50//   status
51// The length field define the buffer size (bytes)
52// This structure must be 64 bytes aligned.
53///////////////////////////////////////////////////////////////////////////////
54
55typedef struct fbf_chbuf_s
56{
57    unsigned long long  buf0_desc;     // first user buffer descriptor
58    unsigned long long  buf1_desc;     // second user buffer descriptor
59    unsigned long long  fbf_desc;      // frame buffer descriptor
60    unsigned int        length;        // buffer length (bytes)
61    unsigned int        padding[9];    // padding for 64 bytes alignment
62} fbf_chbuf_t;   
63
64///////////////////////////////////////////////////////////////////////////////
65// This structure is used by the CMA component to move a stream of containers
66// between the NIC chbuf containing 2 buffers, and a kernel chbuf
67// containing up to (X_SIZE * Y_SIZE) buffers (one buffer per cluster).
68// The same structure is used for both TX or RX transfers.
69// The number of distributed containers can be smaller than (X_SIZE * YSIZE).
70// The actual number of buffers used in the chbuf is defined by (xmax * ymax).
71// Each buffer is described with a 64 bits buffer descriptor:
72// - the 26 LSB bits contain bits[6:31] of the buffer physical address
73// - the 26 following bits contain bits[6:31] of the physical address where the
74//   buffer status is located
75// - the 12 MSB bits contain the common address extension of the buffer and its
76//   status
77// This structure must be 64 bytes aligned.
78///////////////////////////////////////////////////////////////////////////////
79
80typedef struct ker_chbuf_s
81{
82    unsigned long long   buf_desc[X_SIZE*Y_SIZE]; // kernel chbuf descriptor
83    unsigned int         xmax;                        // nb clusters in a row
84    unsigned int         ymax;                        // nb clusters in a column
85} ker_chbuf_t;
86
87
88
89
90///////////////////////////////////////////////////////////////////////////////
91//    Coprocessors related syscall handlers
92///////////////////////////////////////////////////////////////////////////////
93
94int _sys_coproc_register_set( unsigned int cluster_xy,
95                              unsigned int reg_index,
96                              unsigned int value );
97
98int _sys_coproc_register_get( unsigned int  cluster_xy,
99                              unsigned int  reg_index,
100                              unsigned int* buffer );
101
102int _sys_coproc_alloc( unsigned int   coproc_type,
103                       unsigned int*  coproc_info );
104
105int _sys_coproc_release( unsigned int coproc_reg_index );
106
107int _sys_coproc_channel_init( unsigned int            channel,
108                              giet_coproc_channel_t*  desc );
109
110int _sys_coproc_run( unsigned int coproc_reg_index );
111
112int _sys_coproc_completed();
113
114///////////////////////////////////////////////////////////////////////////////
115//    TTY related syscall handlers
116///////////////////////////////////////////////////////////////////////////////
117
118int _sys_tty_alloc( unsigned int shared );
119
120int _sys_tty_release();
121
122int _sys_tty_write( const char*  buffer,
123                    unsigned int length,
124                    unsigned int channel );
125
126int _sys_tty_read(  char*        buffer,
127                    unsigned int length,
128                    unsigned int channel );
129
130//////////////////////////////////////////////////////////////////////////////
131//    TIM related syscall handlers
132//////////////////////////////////////////////////////////////////////////////
133
134int _sys_tim_alloc();
135
136int _sys_tim_release();
137
138int _sys_tim_start( unsigned int period );
139
140int _sys_tim_stop();
141
142//////////////////////////////////////////////////////////////////////////////
143//    NIC related syscall handlers
144//////////////////////////////////////////////////////////////////////////////
145
146int _sys_nic_alloc( unsigned int is_rx,
147                    unsigned int xmax,
148                    unsigned int ymax );
149
150int _sys_nic_release( unsigned int is_rx );
151
152int _sys_nic_start( unsigned int is_rx,
153                    unsigned int channel );
154
155int _sys_nic_move( unsigned int is_rx,
156                   unsigned int channel,
157                   void*        buffer );
158
159int _sys_nic_stop( unsigned int is_rx,
160                   unsigned int channel );
161
162int _sys_nic_clear( unsigned int is_rx,
163                    unsigned int channel );
164
165int _sys_nic_stats( unsigned int is_rx,
166                    unsigned int channel );
167
168//////////////////////////////////////////////////////////////////////////////
169//    FBF related syscall handlers
170//////////////////////////////////////////////////////////////////////////////
171
172int _sys_fbf_sync_write( unsigned int offset,
173                         void*        buffer,
174                         unsigned int length );
175
176int _sys_fbf_sync_read(  unsigned int offset,
177                         void*        buffer,
178                         unsigned int length );
179
180int _sys_fbf_cma_alloc();
181
182int _sys_fbf_cma_release();
183
184int _sys_fbf_cma_init_buf(void*        buf0_vbase, 
185                          void*        buf1_vbase, 
186                          void*        sts0_vaddr,
187                          void*        sts1_vaddr );
188
189int _sys_fbf_cma_start( unsigned int length );
190
191int _sys_fbf_cma_display( unsigned int buffer_index );
192
193int _sys_fbf_cma_stop();
194
195//////////////////////////////////////////////////////////////////////////////
196//    Miscelaneous syscall handlers
197//////////////////////////////////////////////////////////////////////////////
198
199int _sys_ukn();
200
201int _sys_proc_xyp( unsigned int* x,
202                   unsigned int* y,
203                   unsigned int* p );
204
205int _sys_task_exit( char* string );
206
207int _sys_kill_application( char* name );
208
209int _sys_exec_application( char* name );
210
211int _sys_context_switch();
212
213int _sys_local_task_id();
214
215int _sys_global_task_id();
216
217int _sys_thread_id();
218
219int _sys_procs_number( unsigned int* x_size,
220                       unsigned int* y_size, 
221                       unsigned int* nprocs );
222
223int _sys_vseg_get_vbase( char*         vspace_name,
224                         char*         vseg_name,
225                         unsigned int* vbase );
226
227int _sys_vseg_get_length( char*         vspace_name, 
228                          char*         vseg_name,
229                          unsigned int* length );
230
231int _sys_xy_from_ptr( void*          ptr,
232                      unsigned int*  x,
233                      unsigned int*  y );
234
235int _sys_heap_info( unsigned int* vaddr, 
236                    unsigned int* length,
237                    unsigned int  x,
238                    unsigned int  y ); 
239
240int _sys_tasks_status();
241
242int _sys_fat_read( unsigned int fd_id,
243                   unsigned int buffer,
244                   unsigned int count );
245
246#endif
247
248// Local Variables:
249// tab-width: 4
250// c-basic-offset: 4
251// c-file-offsets:((innamespace . 0)(inline-open . 0))
252// indent-tabs-mode: nil
253// End:
254// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
255
Note: See TracBrowser for help on using the repository browser.