source: soft/giet_vm/giet_common/utils.h

Last change on this file was 817, checked in by cfuguet, 8 years ago

Add some utility functions into giet_common/utils.

  • Property svn:executable set to *
File size: 7.2 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#include <ctx_handler.h>
17
18//////////////////////////////////////////////////////////////////////////////////
19// NULL pointer definition
20//////////////////////////////////////////////////////////////////////////////////
21
22#define NULL (void *)0
23
24///////////////////////////////////////////////////////////////////////////////////
25// To access the virtual addresses defined in the giet_vsegs.ld file.
26///////////////////////////////////////////////////////////////////////////////////
27
28typedef struct _ld_symbol_s _ld_symbol_t;
29
30extern _ld_symbol_t boot_code_vbase;
31extern _ld_symbol_t boot_data_vbase;
32
33extern _ld_symbol_t kernel_code_vbase;
34extern _ld_symbol_t kernel_data_vbase;
35extern _ld_symbol_t kernel_uncdata_vbase;
36extern _ld_symbol_t kernel_init_vbase;
37
38
39
40///////////////////////////////////////////////////////////////////////////
41//     CP0 registers access functions
42///////////////////////////////////////////////////////////////////////////
43
44extern static_scheduler_t* _get_sched(void);
45
46extern unsigned int _get_epc(void);
47
48extern unsigned int _get_bvar(void);
49
50extern unsigned int _get_cr(void);
51
52extern unsigned int _get_sr(void);
53
54extern unsigned int _get_procid(void);
55
56extern unsigned int _get_proctime(void);
57
58extern void         _set_proctime( unsigned int value );
59
60extern void         _it_disable( unsigned int* save_sr_ptr );
61
62extern void         _it_restore( unsigned int* save_sr_ptr );
63
64extern void         _set_sched(unsigned int value);
65
66extern void         _set_sr(unsigned int value);
67
68extern void         _cpu_sync();
69
70///////////////////////////////////////////////////////////////////////////
71//     CP2 registers access functions
72///////////////////////////////////////////////////////////////////////////
73
74extern unsigned int _get_mmu_ptpr(void);
75
76extern unsigned int _get_mmu_mode(void);
77
78extern void         _set_mmu_ptpr(unsigned int value);
79
80extern void         _set_mmu_mode(unsigned int value);
81
82extern void         _set_mmu_dcache_inval(unsigned int value);
83
84///////////////////////////////////////////////////////////////////////////
85//     Physical addressing functions
86///////////////////////////////////////////////////////////////////////////
87
88extern unsigned int _physical_read(  unsigned long long paddr );
89
90extern void         _physical_write( unsigned long long paddr,
91                                     unsigned int       value );
92
93extern unsigned long long _physical_read_ull(  unsigned long long paddr );
94
95extern void               _physical_write_ull( unsigned long long paddr,
96                                               unsigned long long value );
97
98extern void         _physical_memcpy( unsigned long long dst_paddr,
99                                      unsigned long long src_paddr,
100                                      unsigned int       size );
101
102extern void         _physical_memset( unsigned long long buf_paddr, 
103                                      unsigned int       size, 
104                                      unsigned int       data );
105
106extern unsigned int _io_extended_read(  unsigned int* vaddr );
107
108extern void         _io_extended_write( unsigned int* vaddr,
109                                        unsigned int  value );
110
111///////////////////////////////////////////////////////////////////////////
112//       Scheduler and thread context access functions
113///////////////////////////////////////////////////////////////////////////
114
115extern unsigned int _get_thread_ltid(void);
116
117extern unsigned int _get_thread_trdid(void);
118
119extern unsigned int _get_thread_slot( unsigned int x,
120                                      unsigned int y,
121                                      unsigned int p,
122                                      unsigned int ltid,
123                                      unsigned int slot );
124
125extern void         _set_thread_slot( unsigned int x,
126                                      unsigned int y,
127                                      unsigned int p,
128                                      unsigned int ltid,
129                                      unsigned int slot,
130                                      unsigned int value );
131
132extern unsigned int _get_context_slot( unsigned int slot );
133
134extern void         _set_context_slot( unsigned int slot,
135                                       unsigned int value );
136
137///////////////////////////////////////////////////////////////////////////
138//     Mapping access functions
139///////////////////////////////////////////////////////////////////////////
140
141extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
142extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
143extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
144extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
145extern mapping_thread_t *   _get_thread_base(mapping_header_t* header);
146extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
147extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
148extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
149
150///////////////////////////////////////////////////////////////////////////
151//     Miscelaneous functions
152///////////////////////////////////////////////////////////////////////////
153
154extern void         _exit(void);
155
156extern void         _random_wait( unsigned int value );
157
158extern void         _break( char* str);
159
160extern void         _sleep( unsigned int cycles );
161
162extern unsigned int _strlen( char* str);
163
164extern unsigned int _strcmp(const char* s1,
165                            const char* s2);
166
167extern unsigned int _strncmp(const char*  s1, 
168                             const char*  s2, 
169                             unsigned int n);
170
171extern char*        _strcpy( char*        dest,
172                             char*        source );
173
174extern void         _dcache_buf_invalidate( unsigned int buf_vbase, 
175                                            unsigned int buf_size );
176
177extern void         _get_sqt_footprint( unsigned int* width,
178                                        unsigned int* heigth,
179                                        unsigned int* levels );
180
181//////////////////////////////////////////////////////////////////////////
182//     Required by GCC
183//////////////////////////////////////////////////////////////////////////
184
185extern void* memcpy( void*        dst, 
186                     const void*  src, 
187                     unsigned int size );
188
189extern void* memset( void*        dst, 
190                     int          value, 
191                     unsigned int count );
192
193
194#endif
195
196// Local Variables:
197// tab-width: 4
198// c-basic-offset: 4
199// c-file-offsets:((innamespace . 0)(inline-open . 0))
200// indent-tabs-mode: nil
201// End:
202// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
203
Note: See TracBrowser for help on using the repository browser.