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

Last change on this file since 343 was 324, checked in by alain, 10 years ago

heu...

  • Property svn:executable set to *
File size: 8.1 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 more or less the GIET-VM HAL (Hardware Abstraction Layer),
9// and contains various utility functions, that can be used by both the
10// boot code and the kernel code.
11///////////////////////////////////////////////////////////////////////////////////
12
13#ifndef GIET_UTILS_H
14#define GIET_UTILS_H
15
16#include <mapping_info.h>
17#include <giet_config.h>
18
19//////////////////////////////////////////////////////////////////////////////////
20// NULL pointer definition
21//////////////////////////////////////////////////////////////////////////////////
22
23#define NULL (void *)0
24
25///////////////////////////////////////////////////////////////////////////////////
26// For retrieving base addresses defined in seg.ld file.
27///////////////////////////////////////////////////////////////////////////////////
28
29typedef struct _ld_symbol_s _ld_symbol_t;
30
31// boot segments vbase addresses & sizes
32extern _ld_symbol_t boot_code_vbase;
33extern _ld_symbol_t boot_code_size;
34
35extern _ld_symbol_t boot_data_vbase;
36extern _ld_symbol_t boot_data_size;
37
38extern _ld_symbol_t boot_stack_vbase;
39extern _ld_symbol_t boot_stack_size;
40
41extern _ld_symbol_t boot_mapping_vbase;
42extern _ld_symbol_t boot_mapping_size;
43
44extern _ld_symbol_t boot_buffer_vbase;
45extern _ld_symbol_t boot_buffer_size;
46
47// kernel segments vbase addresses & sizes
48extern _ld_symbol_t kernel_code_vbase;
49extern _ld_symbol_t kernel_code_size;
50
51extern _ld_symbol_t kernel_data_vbase;
52extern _ld_symbol_t kernel_data_size;
53
54extern _ld_symbol_t kernel_uncdata_vbase;
55extern _ld_symbol_t kernel_uncdata_size;
56
57extern _ld_symbol_t kernel_init_vbase;
58extern _ld_symbol_t kernel_init_size;
59
60///////////////////////////////////////////////////////////////////////////////////
61//     Memory handling functions
62///////////////////////////////////////////////////////////////////////////////////
63
64extern void* _memcpy( void* _dst, 
65                      const void* _src, 
66                      unsigned int size );
67
68extern void* _memset( void* dst, 
69                      int s, 
70                      unsigned int count );
71
72///////////////////////////////////////////////////////////////////////////////////
73//     Break function
74///////////////////////////////////////////////////////////////////////////////////
75
76extern void _break( char* str);
77
78///////////////////////////////////////////////////////////////////////////////////
79//     Suicide function
80///////////////////////////////////////////////////////////////////////////////////
81
82extern void _exit(void);
83
84///////////////////////////////////////////////////////////////////////////////////
85//     Eret function
86///////////////////////////////////////////////////////////////////////////////////
87
88extern void _eret(void);
89
90///////////////////////////////////////////////////////////////////////////////////
91//     CP0 and CP2 registers access functions
92///////////////////////////////////////////////////////////////////////////////////
93
94extern unsigned int _get_sched(void);
95extern unsigned int _get_mmu_ptpr(void);
96extern unsigned int _get_mmu_mode(void);
97extern unsigned int _get_epc(void);
98extern unsigned int _get_bvar(void);
99extern unsigned int _get_cr(void);
100extern unsigned int _get_sr(void);
101extern unsigned int _get_procid(void);
102extern unsigned int _get_proctime(void);
103extern unsigned int _get_current_task_id(void);
104
105extern void         _it_disable( unsigned int* save_sr_ptr );
106extern void         _it_enable(void);
107extern void         _it_restore( unsigned int* save_sr_ptr );
108
109extern void         _set_mmu_ptpr(unsigned int value);
110extern void         _set_mmu_mode(unsigned int value);
111extern void         _set_sched(unsigned int value);
112extern void         _set_sr(unsigned int value);
113
114///////////////////////////////////////////////////////////////////////////////////
115//     Physical addressing related functions
116///////////////////////////////////////////////////////////////////////////////////
117
118extern unsigned int _physical_read(  unsigned long long paddr );
119
120extern void         _physical_write( unsigned long long paddr,
121                                     unsigned int       value );
122
123extern unsigned int _io_extended_read(  unsigned int* vaddr );
124
125extern void         _io_extended_write( unsigned int* vaddr,
126                                        unsigned int  value );
127
128///////////////////////////////////////////////////////////////////////////////////
129//     Locks access functions
130///////////////////////////////////////////////////////////////////////////////////
131
132extern void         _get_lock(unsigned int * lock);
133extern void         _release_lock(unsigned int * lock);
134
135///////////////////////////////////////////////////////////////////////////////////
136//     TTY0 access functions
137///////////////////////////////////////////////////////////////////////////////////
138
139extern void         _puts( char*        string );
140
141extern void         _putx( unsigned int val );
142
143extern void         _putd( unsigned int val ); 
144
145extern void         _putl( unsigned long long val );
146
147extern void         _printf(char* format, ...); 
148
149extern void         _getc( char*        byte );       
150
151///////////////////////////////////////////////////////////////////////////////////
152//     string compare functions
153///////////////////////////////////////////////////////////////////////////////////
154
155extern unsigned int _strncmp(const char*  s1, 
156                             const char*  s2, 
157                             unsigned int n);
158
159extern char*        _strcpy( char*        dest,
160                             char*        source );
161
162///////////////////////////////////////////////////////////////////////////////////
163//     cache invalidate function
164///////////////////////////////////////////////////////////////////////////////////
165
166extern void  _dcache_buf_invalidate( void * buffer, 
167                                     unsigned int size );
168
169///////////////////////////////////////////////////////////////////////////////////
170//     Schedulers access functions
171///////////////////////////////////////////////////////////////////////////////////
172
173extern unsigned int _get_task_slot( unsigned int gpid,
174                                    unsigned int ltid,
175                                    unsigned int slot );
176
177extern void         _set_task_slot( unsigned int gpid,
178                                    unsigned int ltid,
179                                    unsigned int slot,
180                                    unsigned int value );
181
182extern unsigned int _get_context_slot( unsigned int slot );
183
184extern void         _set_context_slot( unsigned int slot,
185                                       unsigned int value );
186
187extern unsigned int _heap_info( unsigned int* vaddr,
188                                unsigned int* size );
189
190///////////////////////////////////////////////////////////////////////////////////
191//     Mapping access functions
192///////////////////////////////////////////////////////////////////////////////////
193
194extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
195extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
196extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
197extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
198extern mapping_vobj_t *     _get_vobj_base(mapping_header_t* header);
199extern mapping_task_t *     _get_task_base(mapping_header_t* header);
200extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
201extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
202extern mapping_coproc_t *   _get_coproc_base(mapping_header_t* header);
203extern mapping_cp_port_t *  _get_cp_port_base(mapping_header_t* header);
204extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
205
206#endif
207
208// Local Variables:
209// tab-width: 4
210// c-basic-offset: 4
211// c-file-offsets:((innamespace . 0)(inline-open . 0))
212// indent-tabs-mode: nil
213// End:
214// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
215
Note: See TracBrowser for help on using the repository browser.