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

Last change on this file since 454 was 449, checked in by alain, 10 years ago

Introducing the CMA_RX, CMA_TX, NIC_RX, NIC_TX slots in the task context.
This allows an user task to have a private NIC channel and a private CMA channel.

  • Property svn:executable set to *
File size: 6.4 KB
RevLine 
[258]1///////////////////////////////////////////////////////////////////////////////////
2// File     : sys_handler.h
3// Date     : 01/04/2012
4// Author   : alain greiner and joel porquet
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
[440]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///////////////////////////////////////////////////////////////////////////////////
[258]11
12#ifndef _SYS_HANDLER_H
13#define _SYS_HANDLER_H
14
[440]15#include <mapping_info.h>
[449]16#include <giet_config.h>
[440]17
18///////////////////////////////////////////////////////////////////////////////////
[258]19//     Syscall Vector Table (indexed by syscall index)
[440]20///////////////////////////////////////////////////////////////////////////////////
[258]21
22extern const void * _syscall_vector[64];
23
[440]24///////////////////////////////////////////////////////////////////////////////////
[449]25// This structure is used by the vci_chbuf_dma component to transfer a stream
[440]26// of images from two buffers in user space to the frame buffer in kernel space.
27// It contains two chbuf descriptors
28// - The SRC chbuf contains two buffers (buf0 & buf1), that can be in user space.
29// - The DST cbuf contains one single buffer (fbf), that is the frame buffer.
30///////////////////////////////////////////////////////////////////////////////////
31
32typedef struct fbf_chbuf_s
33{
34    unsigned long long  buf0;     // physical address + status for user buffer 0
35    unsigned long long  buf1;     // physical address + status for user buffer 1
36    unsigned long long  fbf;      // physical address + status for user buffer 0
37    unsigned int        length;   // buffer length (bytes)
[449]38    unsigned int        padding;  // 8 bytes alignment
[440]39} fbf_chbuf_t;   
40
[258]41//////////////////////////////////////////////////////////////////////////////////
[449]42// This structure define the generic chained buffer used by the vci_chbuf_dma
43// component to move a stream of containers to or from the vci_multi_nic component.
44// The same structure is used for both TX or RX transfers.
45// The single buffer size and the number of buffers must be defined by the
46// GIET_NIC_CHBUF_SIZE and GIET_NIC_CHBUF_NBUFS parameters in giet_config.h.
47// - The buffer array is the chbuf descriptor, shared by the vci_chbuf_dma,
48//   and by the kernel.
49// - The index field is only used by the kernel. It define the currently pointed
50//   buffer for read (RX transfer) or write (TX transfer).
51//////////////////////////////////////////////////////////////////////////////////
52
53typedef struct nic_chbuf_s
54{
55    unsigned long long  buffer[GIET_NIC_CHBUF_NBUFS];      // chbuf descriptor
56    unsigned int        index;                             // current buffer index
57    unsigned int        padding;                           // 8 bytes alignment
58} nic_chbuf_t;
59
60
61//////////////////////////////////////////////////////////////////////////////////
[440]62//    TTY related syscall handlers
[258]63//////////////////////////////////////////////////////////////////////////////////
64
[440]65int _sys_tty_alloc();
[294]66
[440]67int _sys_tty_write( const char*  buffer,
68                    unsigned int length,
69                    unsigned int channel );
[428]70
[440]71int _sys_tty_read(  char*        buffer,
72                    unsigned int length,
73                    unsigned int channel );
[294]74
[440]75int _sys_tty_get_lock( unsigned int   channel,
76                       unsigned int * save_sr_ptr );
[294]77
[440]78int _sys_tty_release_lock( unsigned int   channel,
79                           unsigned int * save_sr_ptr );
[294]80
[440]81//////////////////////////////////////////////////////////////////////////////
82//    TIM related syscall handlers
83//////////////////////////////////////////////////////////////////////////////
[294]84
[440]85int _sys_tim_alloc();
[258]86
[440]87int _sys_tim_start( unsigned int period );
[258]88
[440]89int _sys_tim_stop();
[258]90
[440]91//////////////////////////////////////////////////////////////////////////////
92//    NIC related syscall handlers
93//////////////////////////////////////////////////////////////////////////////
[294]94
[449]95int _sys_nic_alloc( unsigned int is_rx );
[396]96
[449]97int _sys_nic_start( unsigned int is_rx,
98                    unsigned int mac4,
99                    unsigned int mac2 );
[396]100
[449]101int _sys_nic_move( unsigned int is_rx,
102                   void*        buffer );
[440]103
[449]104int _sys_nic_stop( unsigned int is_rx );
105
[440]106//////////////////////////////////////////////////////////////////////////////
107//    FBF related syscall handlers
108//////////////////////////////////////////////////////////////////////////////
109
110int _sys_fbf_sync_write( unsigned int offset,
111                         void*        buffer,
112                         unsigned int length );
113
114int _sys_fbf_sync_read(  unsigned int offset,
115                         void*        buffer,
116                         unsigned int length );
117
118int _sys_fbf_cma_alloc();
119
120int _sys_fbf_cma_start( void*        vbase0, 
121                        void*        vbase1, 
122                        unsigned int length );
123
124int _sys_fbf_cma_display( unsigned int buffer_index );
125
126int _sys_fbf_cma_stop();
127
128//////////////////////////////////////////////////////////////////////////////
129//    Miscelaneous syscall handlers
130//////////////////////////////////////////////////////////////////////////////
131
132int _sys_ukn();
133
134int _sys_proc_xyp( unsigned int* x,
135                   unsigned int* y,
136                   unsigned int* p );
137
138int _sys_task_exit( char* string );
139
140int _context_switch();
141
142int _sys_local_task_id();
143
144int _sys_global_task_id();
145
146int _sys_thread_id();
147
148int _sys_procs_number( unsigned int  x,
149                       unsigned int  y, 
150                       unsigned int* number );
151
152int _sys_vobj_get_vbase( char*         vspace_name,
153                         char*         vobj_name,
154                         unsigned int* vbase );
155
156int _sys_vobj_get_length( char*         vspace_name, 
157                          char*         vobj_name,
158                          unsigned int* length );
159
160int _sys_xy_from_ptr( void*          ptr,
161                      unsigned int*  x,
162                      unsigned int*  y );
163
164int _sys_heap_info( unsigned int* vaddr, 
165                    unsigned int* length,
166                    unsigned int  x,
167                    unsigned int  y ); 
168
[258]169#endif
170
171// Local Variables:
172// tab-width: 4
173// c-basic-offset: 4
174// c-file-offsets:((innamespace . 0)(inline-open . 0))
175// indent-tabs-mode: nil
176// End:
177// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
178
Note: See TracBrowser for help on using the repository browser.