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

Last change on this file since 578 was 523, checked in by alain, 10 years ago

The access functions to the mapping have been modified
to comply with the removing of the coproc and cp_port objects
in the mapping_info.h file.

  • Property svn:executable set to *
File size: 6.9 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//     CP0 registers access functions
41///////////////////////////////////////////////////////////////////////////
42
43extern unsigned int _get_sched(void);
44
45extern unsigned int _get_epc(void);
46
47extern unsigned int _get_bvar(void);
48
49extern unsigned int _get_cr(void);
50
51extern unsigned int _get_sr(void);
52
53extern unsigned int _get_procid(void);
54
55extern unsigned int _get_proctime(void);
56
57extern void         _it_disable( unsigned int* save_sr_ptr );
58
59extern void         _it_restore( unsigned int* save_sr_ptr );
60
61extern void         _set_sched(unsigned int value);
62
63extern void         _set_sr(unsigned int value);
64
65///////////////////////////////////////////////////////////////////////////
66//     CP2 registers access functions
67///////////////////////////////////////////////////////////////////////////
68
69extern unsigned int _get_mmu_ptpr(void);
70
71extern unsigned int _get_mmu_mode(void);
72
73extern void         _set_mmu_ptpr(unsigned int value);
74
75extern void         _set_mmu_mode(unsigned int value);
76
77extern void         _set_mmu_dcache_inval(unsigned int value);
78
79///////////////////////////////////////////////////////////////////////////
80//     Physical addressing functions
81///////////////////////////////////////////////////////////////////////////
82
83extern unsigned int _physical_read(  unsigned long long paddr );
84
85extern void         _physical_write( unsigned long long paddr,
86                                     unsigned int       value );
87
88extern unsigned long long _physical_read_ull(  unsigned long long paddr );
89
90extern void               _physical_write_ull( unsigned long long paddr,
91                                               unsigned long long value );
92
93extern void         _physical_memcpy( unsigned long long dst_paddr,
94                                      unsigned long long src_paddr,
95                                      unsigned int       size );
96
97extern void         _physical_memset( unsigned long long buf_paddr, 
98                                      unsigned int       size, 
99                                      unsigned int       data );
100
101extern unsigned int _io_extended_read(  unsigned int* vaddr );
102
103extern void         _io_extended_write( unsigned int* vaddr,
104                                        unsigned int  value );
105
106///////////////////////////////////////////////////////////////////////////
107//       Scheduler and task context access functions
108///////////////////////////////////////////////////////////////////////////
109
110extern unsigned int _get_current_task_id(void);
111
112extern unsigned int _get_task_slot( unsigned int x,
113                                    unsigned int y,
114                                    unsigned int p,
115                                    unsigned int ltid,
116                                    unsigned int slot );
117
118extern void         _set_task_slot( unsigned int x,
119                                    unsigned int y,
120                                    unsigned int p,
121                                    unsigned int ltid,
122                                    unsigned int slot,
123                                    unsigned int value );
124
125extern unsigned int _get_context_slot( unsigned int slot );
126
127extern void         _set_context_slot( unsigned int slot,
128                                       unsigned int value );
129
130///////////////////////////////////////////////////////////////////////////
131//     Mapping access functions
132///////////////////////////////////////////////////////////////////////////
133
134extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
135extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
136extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
137extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
138extern mapping_task_t *     _get_task_base(mapping_header_t* header);
139extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
140extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
141extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
142
143///////////////////////////////////////////////////////////////////////////
144//     Miscelaneous functions
145///////////////////////////////////////////////////////////////////////////
146
147extern void         _exit(void);
148
149extern void         _random_wait( unsigned int value );
150
151extern void         _break( char* str);
152
153extern unsigned int _strncmp(const char*  s1, 
154                             const char*  s2, 
155                             unsigned int n);
156
157extern char*        _strcpy( char*        dest,
158                             char*        source );
159
160extern void         _dcache_buf_invalidate( unsigned int buf_vbase, 
161                                            unsigned int buf_size );
162
163extern void         _get_sqt_footprint( unsigned int* width,
164                                        unsigned int* heigth,
165                                        unsigned int* levels );
166
167//////////////////////////////////////////////////////////////////////////
168//     Required by GCC
169//////////////////////////////////////////////////////////////////////////
170
171extern void* memcpy( void*        dst, 
172                     const void*  src, 
173                     unsigned int size );
174
175extern void* memset( void*        dst, 
176                     int          value, 
177                     unsigned int count );
178
179
180#endif
181
182// Local Variables:
183// tab-width: 4
184// c-basic-offset: 4
185// c-file-offsets:((innamespace . 0)(inline-open . 0))
186// indent-tabs-mode: nil
187// End:
188// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
189
Note: See TracBrowser for help on using the repository browser.