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

Last change on this file since 478 was 455, checked in by alain, 10 years ago

Introducing the tty0.c/tty0.h files defining access function to TTY0 (including the _printf().
Introducing the locks.c/locks.h files defining two types of spin-lock (with and without a waiting queue).

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