source: soft/giet_vm/giet_common/utils.h @ 495

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

Introduce quad tree for distributed locks and barriers.

  • Property svn:executable set to *
File size: 8.3 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////
2// File     : utils.h
3// Date     : 18/10/2013
4// Author   : alain greiner
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
7// The utils.c and utils.h files are part of the GIET-VM nano-kernel.
8// They define various utility functions, that can be used by both the
9// boot code and the kernel code (but not by the user applications).
10///////////////////////////////////////////////////////////////////////////////////
11
12#ifndef GIET_UTILS_H
13#define GIET_UTILS_H
14
15#include <mapping_info.h>
16
17//////////////////////////////////////////////////////////////////////////////////
18// NULL pointer definition
19//////////////////////////////////////////////////////////////////////////////////
20
21#define NULL (void *)0
22
23///////////////////////////////////////////////////////////////////////////////////
24// To access the virtual addresses defined in the giet_vsegs.ld file.
25///////////////////////////////////////////////////////////////////////////////////
26
27typedef struct _ld_symbol_s _ld_symbol_t;
28
29extern _ld_symbol_t boot_code_vbase;
30extern _ld_symbol_t boot_data_vbase;
31
32extern _ld_symbol_t kernel_code_vbase;
33extern _ld_symbol_t kernel_data_vbase;
34extern _ld_symbol_t kernel_uncdata_vbase;
35extern _ld_symbol_t kernel_init_vbase;
36
37
38
39///////////////////////////////////////////////////////////////////////////////////
40//      Locks access functions
41///////////////////////////////////////////////////////////////////////////////////
42volatile typedef struct _giet_barrier_s
43{
44    char         name[32];   // barrier name
45    unsigned int sense;      // barrier state (toggle)
46    unsigned int ntasks;     // total number of expected tasks
47    unsigned int count;      // number of not arrived tasks
48} _giet_barrier_t;
49
50extern void _barrier_init( _giet_barrier_t* barrier,
51                           unsigned int    ntasks );   
52
53extern void _barrier_wait( _giet_barrier_t* barrier );
54
55
56///////////////////////////////////////////////////////////////////////////////////
57//      Locks access functions
58///////////////////////////////////////////////////////////////////////////////////
59volatile typedef struct _giet_lock_s { unsigned int value;
60                                       unsigned int padding[15]; } _giet_lock_t;
61
62
63extern void _get_lock(_giet_lock_t* lock);
64
65extern void _release_lock(_giet_lock_t* lock);
66///////////////////////////////////////////////////////////////////////////////////
67//     CP0 registers access functions
68///////////////////////////////////////////////////////////////////////////////////
69
70extern unsigned int _get_sched(void);
71
72extern unsigned int _get_epc(void);
73
74extern unsigned int _get_bvar(void);
75
76extern unsigned int _get_cr(void);
77
78extern unsigned int _get_sr(void);
79
80extern unsigned int _get_procid(void);
81
82extern unsigned int _get_proctime(void);
83
84extern void         _it_disable( unsigned int* save_sr_ptr );
85
86extern void         _it_restore( unsigned int* save_sr_ptr );
87
88extern void         _set_sched(unsigned int value);
89
90extern void         _set_sr(unsigned int value);
91
92///////////////////////////////////////////////////////////////////////////////////
93//     CP2 registers access functions
94///////////////////////////////////////////////////////////////////////////////////
95
96extern unsigned int _get_mmu_ptpr(void);
97
98extern unsigned int _get_mmu_mode(void);
99
100extern void         _set_mmu_ptpr(unsigned int value);
101
102extern void         _set_mmu_mode(unsigned int value);
103
104extern void         _set_mmu_dcache_inval(unsigned int value);
105
106///////////////////////////////////////////////////////////////////////////////////
107//     Physical addressing functions
108///////////////////////////////////////////////////////////////////////////////////
109
110extern unsigned int _physical_read(  unsigned long long paddr );
111
112extern void         _physical_write( unsigned long long paddr,
113                                     unsigned int       value );
114
115extern unsigned long long _physical_read_ull(  unsigned long long paddr );
116
117extern void               _physical_write_ull( unsigned long long paddr,
118                                               unsigned long long value );
119
120extern void         _physical_memcpy( unsigned long long dst_paddr,
121                                      unsigned long long src_paddr,
122                                      unsigned int       size );
123
124extern void         _physical_memset( unsigned long long buf_paddr, 
125                                      unsigned int       size, 
126                                      unsigned int       data );
127
128extern unsigned int _io_extended_read(  unsigned int* vaddr );
129
130extern void         _io_extended_write( unsigned int* vaddr,
131                                        unsigned int  value );
132
133///////////////////////////////////////////////////////////////////////////////////
134//       Scheduler and task context access functions
135///////////////////////////////////////////////////////////////////////////////////
136
137extern unsigned int _get_current_task_id(void);
138
139extern unsigned int _get_task_slot( unsigned int x,
140                                    unsigned int y,
141                                    unsigned int p,
142                                    unsigned int ltid,
143                                    unsigned int slot );
144
145extern void         _set_task_slot( unsigned int x,
146                                    unsigned int y,
147                                    unsigned int p,
148                                    unsigned int ltid,
149                                    unsigned int slot,
150                                    unsigned int value );
151
152extern unsigned int _get_context_slot( unsigned int slot );
153
154extern void         _set_context_slot( unsigned int slot,
155                                       unsigned int value );
156
157///////////////////////////////////////////////////////////////////////////////////
158//     Mapping access functions
159///////////////////////////////////////////////////////////////////////////////////
160
161extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
162extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
163extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
164extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
165extern mapping_vobj_t *     _get_vobj_base(mapping_header_t* header);
166extern mapping_task_t *     _get_task_base(mapping_header_t* header);
167extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
168extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
169extern mapping_coproc_t *   _get_coproc_base(mapping_header_t* header);
170extern mapping_cp_port_t *  _get_cp_port_base(mapping_header_t* header);
171extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
172
173///////////////////////////////////////////////////////////////////////////////////
174//     Miscelaneous functions
175///////////////////////////////////////////////////////////////////////////////////
176
177extern void         _exit(void);
178
179extern void         _random_wait( unsigned int value );
180
181extern void         _break( char* str);
182
183extern unsigned int _strncmp(const char*  s1, 
184                             const char*  s2, 
185                             unsigned int n);
186
187extern char*        _strcpy( char*        dest,
188                             char*        source );
189
190extern void         _dcache_buf_invalidate( unsigned int buf_vbase, 
191                                            unsigned int buf_size );
192
193extern void         _get_sqt_footprint( unsigned int* width,
194                                        unsigned int* heigth,
195                                        unsigned int* levels );
196
197///////////////////////////////////////////////////////////////////////////////////
198//     Required by GCC
199///////////////////////////////////////////////////////////////////////////////////
200
201///////////////////////////////////////////////////////////////////////////////////
202extern void* memcpy( void*        dst, 
203                     const void*  src, 
204                     unsigned int size );
205
206extern void* memset( void*        dst, 
207                     int          value, 
208                     unsigned int count );
209
210
211#endif
212
213// Local Variables:
214// tab-width: 4
215// c-basic-offset: 4
216// c-file-offsets:((innamespace . 0)(inline-open . 0))
217// indent-tabs-mode: nil
218// End:
219// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
220
Note: See TracBrowser for help on using the repository browser.