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

Last change on this file since 464 was 459, checked in by alain, 10 years ago

Removing the kernel_utils.c/kernel_utils.h file.
Introducing new functions in sys_handler.c/sys_handler.h to handle NIC related system calls.

  • Property svn:executable set to *
File size: 7.5 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////
2// File     : sys_handler.h
3// Date     : 01/04/2012
4// Author   : alain greiner and joel porquet
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
7// The sys_handler.c and sys_handler.h files are part of the GIET-VM nano-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 "locks.h"
17
18#if !defined ( GIET_NIC_NBUFS )
19# error: You must define GIET_NIC_NBUFS in the giet_config.h file
20#endif
21
22#if !defined ( GIET_NIC_NFAKE )
23# error: You must define GIET_NIC_NFAKE in the giet_config.h file
24#endif
25
26#if !defined ( GIET_NIC_BUFSIZE )
27# error: You must define GIET_NIC_BUFSIZE in the giet_config.h file
28#endif
29
30#if !defined ( GIET_NIC_TIMEOUT )
31# error: You must define GIET_NIC_TIMEOUT in the giet_config.h file
32#endif
33
34#if !defined ( GIET_NIC_MAC4 )
35# error: You must define GIET_NIC_MAC4 in the giet_config.h file
36#endif
37
38#if !defined ( GIET_NIC_MAC2 )
39# error: You must define GIET_NIC_MAC2 in the giet_config.h file
40#endif
41
42#if ( (GIET_NIC_NBUFS + GIET_NIC_NFAKE) % 8 )
43#error: GIET_NIC_NBUFS + GIET_NIC_NFAKE must be multiple of 8 for alignment
44#endif
45
46///////////////////////////////////////////////////////////////////////////////////
47//     Syscall Vector Table (indexed by syscall index)
48///////////////////////////////////////////////////////////////////////////////////
49
50extern const void * _syscall_vector[64];
51
52///////////////////////////////////////////////////////////////////////////////////
53// This structure is used by the CMA component to move a stream
54// of images from two buffers in user space to the frame buffer in kernel space.
55// it must be 64 bytes aligned.
56// It contains two chbuf arrays:
57// - The SRC chbuf contains two buffers (buf0 & buf1), that can be in user space.
58// - The DST cbuf contains one single buffer (fbf), that is the frame buffer.
59// - The length field define the buffer size (bytes)
60///////////////////////////////////////////////////////////////////////////////////
61
62typedef struct fbf_chbuf_s
63{
64    unsigned long long  buf0;        // physical address + status for user buffer 0
65    unsigned long long  buf1;        // physical address + status for user buffer 1
66    unsigned long long  fbf;         // physical address + status for user buffer 0
67    unsigned int        length;      // buffer length (bytes)
68    unsigned int        padding[9];  // 64 bytes alignment
69} fbf_chbuf_t;   
70
71//////////////////////////////////////////////////////////////////////////////////
72// This structure is used by the CMA component to move a stream
73// of packet containers between the NIC component an a chbuf containing
74// a variable number of buffers in kernel space.
75// The same structure is used for both TX or RX transfers.
76// It must be 64 bytes aligned.
77// The single buffer size and the number of buffers must be defined by the
78// GIET_NIC_BUFSIZE and GIET_NIC_NBUFS parameters in giet_config.h.
79// - The buffer array implements the chbuf, and is concurently accessed
80//   by the CMA component and by the kernel code.
81// - The lock must be taken by the kernel code, because several user tasks
82//   can concurently try to consume buffers in the chbuf.
83// - The index is only used by the kernel, and define the currently pointed
84//   buffer for read (RX transfer) or write (TX transfer).
85//////////////////////////////////////////////////////////////////////////////////
86
87typedef struct nic_chbuf_s
88{
89    unsigned long long  buffer[GIET_NIC_NBUFS];  // Kernel CHBUF
90    unsigned long long  unused[GIET_NIC_NFAKE];  // padding for 64 bytes alignment
91    unsigned int        index;                   // current buffer index
92    unsigned int        padding[15];             // padding for 64 bytes alignment
93} nic_chbuf_t;
94
95
96//////////////////////////////////////////////////////////////////////////////////
97//    TTY related syscall handlers
98//////////////////////////////////////////////////////////////////////////////////
99
100int _sys_tty_alloc();
101
102int _sys_tty_write( const char*  buffer,
103                    unsigned int length,
104                    unsigned int channel );
105
106int _sys_tty_read(  char*        buffer,
107                    unsigned int length,
108                    unsigned int channel );
109
110int _sys_tty_get_lock( unsigned int   channel,
111                       unsigned int * save_sr_ptr );
112
113int _sys_tty_release_lock( unsigned int   channel,
114                           unsigned int * save_sr_ptr );
115
116//////////////////////////////////////////////////////////////////////////////
117//    TIM related syscall handlers
118//////////////////////////////////////////////////////////////////////////////
119
120int _sys_tim_alloc();
121
122int _sys_tim_start( unsigned int period );
123
124int _sys_tim_stop();
125
126//////////////////////////////////////////////////////////////////////////////
127//    NIC related syscall handlers
128//////////////////////////////////////////////////////////////////////////////
129
130int _sys_nic_alloc( unsigned int is_rx );
131
132int _sys_nic_start( unsigned int is_rx );
133
134int _sys_nic_move( unsigned int is_rx,
135                   unsigned int nic_channel,
136                   void*        buffer );
137
138int _sys_nic_stop( unsigned int is_rx );
139
140int _sys_nic_clear( unsigned int is_rx );
141
142int _sys_nic_stats( unsigned int is_rx );
143
144//////////////////////////////////////////////////////////////////////////////
145//    FBF related syscall handlers
146//////////////////////////////////////////////////////////////////////////////
147
148int _sys_fbf_sync_write( unsigned int offset,
149                         void*        buffer,
150                         unsigned int length );
151
152int _sys_fbf_sync_read(  unsigned int offset,
153                         void*        buffer,
154                         unsigned int length );
155
156int _sys_fbf_cma_alloc();
157
158int _sys_fbf_cma_start( void*        vbase0, 
159                        void*        vbase1, 
160                        unsigned int length );
161
162int _sys_fbf_cma_display( unsigned int buffer_index );
163
164int _sys_fbf_cma_stop();
165
166//////////////////////////////////////////////////////////////////////////////
167//    Miscelaneous syscall handlers
168//////////////////////////////////////////////////////////////////////////////
169
170int _sys_ukn();
171
172int _sys_proc_xyp( unsigned int* x,
173                   unsigned int* y,
174                   unsigned int* p );
175
176int _sys_task_exit( char* string );
177
178int _context_switch();
179
180int _sys_local_task_id();
181
182int _sys_global_task_id();
183
184int _sys_thread_id();
185
186int _sys_procs_number( unsigned int  x,
187                       unsigned int  y, 
188                       unsigned int* number );
189
190int _sys_vobj_get_vbase( char*         vspace_name,
191                         char*         vobj_name,
192                         unsigned int* vbase );
193
194int _sys_vobj_get_length( char*         vspace_name, 
195                          char*         vobj_name,
196                          unsigned int* length );
197
198int _sys_xy_from_ptr( void*          ptr,
199                      unsigned int*  x,
200                      unsigned int*  y );
201
202int _sys_heap_info( unsigned int* vaddr, 
203                    unsigned int* length,
204                    unsigned int  x,
205                    unsigned int  y ); 
206
207#endif
208
209// Local Variables:
210// tab-width: 4
211// c-basic-offset: 4
212// c-file-offsets:((innamespace . 0)(inline-open . 0))
213// indent-tabs-mode: nil
214// End:
215// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
216
Note: See TracBrowser for help on using the repository browser.