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

Last change on this file since 357 was 351, checked in by alain, 11 years ago

Using the giet_lock_t structure in _get_lock() / _release_lock() functions,
to have only one lock per cache line.

  • 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// This structure is used to have one single lock in a cache line
27///////////////////////////////////////////////////////////////////////////////////
28
29typedef struct giet_lock_s { unsigned int value;
30                             unsigned int padding[15]; } giet_lock_t;
31
32///////////////////////////////////////////////////////////////////////////////////
33// To access the virtual addresses defined in the giet_vsegs.ld file.
34///////////////////////////////////////////////////////////////////////////////////
35
36typedef struct _ld_symbol_s _ld_symbol_t;
37
38extern _ld_symbol_t boot_code_vbase;
39extern _ld_symbol_t boot_data_vbase;
40
41extern _ld_symbol_t kernel_code_vbase;
42extern _ld_symbol_t kernel_data_vbase;
43extern _ld_symbol_t kernel_uncdata_vbase;
44extern _ld_symbol_t kernel_init_vbase;
45
46///////////////////////////////////////////////////////////////////////////////////
47//     Memory handling functions
48///////////////////////////////////////////////////////////////////////////////////
49
50extern void* memcpy( void* _dst, 
51                     const void* _src, 
52                     unsigned int size );
53
54extern void* memset( void* dst, 
55                     int s, 
56                     unsigned int count );
57
58///////////////////////////////////////////////////////////////////////////////////
59//     Break function
60///////////////////////////////////////////////////////////////////////////////////
61
62extern void _break( char* str);
63
64///////////////////////////////////////////////////////////////////////////////////
65//     Suicide function
66///////////////////////////////////////////////////////////////////////////////////
67
68extern void _exit(void);
69
70///////////////////////////////////////////////////////////////////////////////////
71//     Eret function
72///////////////////////////////////////////////////////////////////////////////////
73
74extern void _eret(void);
75
76///////////////////////////////////////////////////////////////////////////////////
77//     CP0 and CP2 registers access functions
78///////////////////////////////////////////////////////////////////////////////////
79
80extern unsigned int _get_sched(void);
81extern unsigned int _get_mmu_ptpr(void);
82extern unsigned int _get_mmu_mode(void);
83extern unsigned int _get_epc(void);
84extern unsigned int _get_bvar(void);
85extern unsigned int _get_cr(void);
86extern unsigned int _get_sr(void);
87extern unsigned int _get_procid(void);
88extern unsigned int _get_proctime(void);
89extern unsigned int _get_current_task_id(void);
90
91extern void         _it_disable( unsigned int* save_sr_ptr );
92extern void         _it_enable(void);
93extern void         _it_restore( unsigned int* save_sr_ptr );
94
95extern void         _set_mmu_ptpr(unsigned int value);
96extern void         _set_mmu_mode(unsigned int value);
97extern void         _set_sched(unsigned int value);
98extern void         _set_sr(unsigned int value);
99
100///////////////////////////////////////////////////////////////////////////////////
101//     Physical addressing related functions
102///////////////////////////////////////////////////////////////////////////////////
103
104extern unsigned int _physical_read(  unsigned long long paddr );
105
106extern void         _physical_write( unsigned long long paddr,
107                                     unsigned int       value );
108
109extern void         _physical_memcpy( unsigned long long dst_paddr,
110                                      unsigned long long src_paddr,
111                                      unsigned int       size );
112
113extern unsigned int _io_extended_read(  unsigned int* vaddr );
114
115extern void         _io_extended_write( unsigned int* vaddr,
116                                        unsigned int  value );
117
118///////////////////////////////////////////////////////////////////////////////////
119//     Locks access functions
120///////////////////////////////////////////////////////////////////////////////////
121
122extern void         _get_lock(giet_lock_t* lock);
123extern void         _release_lock(giet_lock_t* lock);
124
125///////////////////////////////////////////////////////////////////////////////////
126//     TTY0 access functions
127///////////////////////////////////////////////////////////////////////////////////
128
129extern void         _puts( char*        string );
130
131extern void         _putx( unsigned int val );
132
133extern void         _putd( unsigned int val ); 
134
135extern void         _putl( unsigned long long val );
136
137extern void         _printf(char* format, ...); 
138
139extern void         _getc( char*        byte );       
140
141///////////////////////////////////////////////////////////////////////////////////
142//     string compare functions
143///////////////////////////////////////////////////////////////////////////////////
144
145extern unsigned int _strncmp(const char*  s1, 
146                             const char*  s2, 
147                             unsigned int n);
148
149extern char*        _strcpy( char*        dest,
150                             char*        source );
151
152///////////////////////////////////////////////////////////////////////////////////
153//     cache invalidate function
154///////////////////////////////////////////////////////////////////////////////////
155
156extern void  _dcache_buf_invalidate( void * buffer, 
157                                     unsigned int size );
158
159///////////////////////////////////////////////////////////////////////////////////
160//     Schedulers access functions
161///////////////////////////////////////////////////////////////////////////////////
162
163extern unsigned int _get_task_slot( unsigned int gpid,
164                                    unsigned int ltid,
165                                    unsigned int slot );
166
167extern void         _set_task_slot( unsigned int gpid,
168                                    unsigned int ltid,
169                                    unsigned int slot,
170                                    unsigned int value );
171
172extern unsigned int _get_context_slot( unsigned int slot );
173
174extern void         _set_context_slot( unsigned int slot,
175                                       unsigned int value );
176
177extern unsigned int _heap_info( unsigned int* vaddr,
178                                unsigned int* size );
179
180///////////////////////////////////////////////////////////////////////////////////
181//     Mapping access functions
182///////////////////////////////////////////////////////////////////////////////////
183
184extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
185extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
186extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
187extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
188extern mapping_vobj_t *     _get_vobj_base(mapping_header_t* header);
189extern mapping_task_t *     _get_task_base(mapping_header_t* header);
190extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
191extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
192extern mapping_coproc_t *   _get_coproc_base(mapping_header_t* header);
193extern mapping_cp_port_t *  _get_cp_port_base(mapping_header_t* header);
194extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
195
196#endif
197
198// Local Variables:
199// tab-width: 4
200// c-basic-offset: 4
201// c-file-offsets:((innamespace . 0)(inline-open . 0))
202// indent-tabs-mode: nil
203// End:
204// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
205
Note: See TracBrowser for help on using the repository browser.