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

Last change on this file since 443 was 442, checked in by alain, 10 years ago

Removing the _printf() function in the boot code i
and in the drivers used by the boot code.

  • Property svn:executable set to *
File size: 8.2 KB
RevLine 
[258]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.
[399]8// They define more or less the GIET-VM Hardware Abstraction Layer,
[258]9// and contains various utility functions, that can be used by both the
[430]10// boot code and the kernel code (but not by the user applications).
[258]11///////////////////////////////////////////////////////////////////////////////////
12
13#ifndef GIET_UTILS_H
14#define GIET_UTILS_H
15
16#include <mapping_info.h>
17
[324]18//////////////////////////////////////////////////////////////////////////////////
19// NULL pointer definition
20//////////////////////////////////////////////////////////////////////////////////
21
22#define NULL (void *)0
23
[258]24///////////////////////////////////////////////////////////////////////////////////
[351]25// This structure is used to have one single lock in a cache line
[258]26///////////////////////////////////////////////////////////////////////////////////
27
[351]28typedef struct giet_lock_s { unsigned int value;
29                             unsigned int padding[15]; } giet_lock_t;
30
31///////////////////////////////////////////////////////////////////////////////////
32// To access the virtual addresses defined in the giet_vsegs.ld file.
33///////////////////////////////////////////////////////////////////////////////////
34
[258]35typedef struct _ld_symbol_s _ld_symbol_t;
36
[324]37extern _ld_symbol_t boot_code_vbase;
38extern _ld_symbol_t boot_data_vbase;
[258]39
[324]40extern _ld_symbol_t kernel_code_vbase;
41extern _ld_symbol_t kernel_data_vbase;
42extern _ld_symbol_t kernel_uncdata_vbase;
43extern _ld_symbol_t kernel_init_vbase;
[258]44
45///////////////////////////////////////////////////////////////////////////////////
[399]46//     CP0 registers access functions
[258]47///////////////////////////////////////////////////////////////////////////////////
48
49extern unsigned int _get_sched(void);
[408]50
[258]51extern unsigned int _get_epc(void);
[408]52
[258]53extern unsigned int _get_bvar(void);
[408]54
[258]55extern unsigned int _get_cr(void);
[408]56
[258]57extern unsigned int _get_sr(void);
[408]58
[258]59extern unsigned int _get_procid(void);
[408]60
[258]61extern unsigned int _get_proctime(void);
62
[295]63extern void         _it_disable( unsigned int* save_sr_ptr );
[408]64
[295]65extern void         _it_restore( unsigned int* save_sr_ptr );
[258]66
67extern void         _set_sched(unsigned int value);
[408]68
[268]69extern void         _set_sr(unsigned int value);
[258]70
71///////////////////////////////////////////////////////////////////////////////////
[399]72//     CP2 registers access functions
73///////////////////////////////////////////////////////////////////////////////////
74
75extern unsigned int _get_mmu_ptpr(void);
[408]76
[399]77extern unsigned int _get_mmu_mode(void);
78
79extern void         _set_mmu_ptpr(unsigned int value);
[408]80
[399]81extern void         _set_mmu_mode(unsigned int value);
82
[408]83extern void         _set_mmu_dcache_inval(unsigned int value);
84
85///////////////////////////////////////////////////////////////////////////////////
[430]86//     Physical addressing functions
[258]87///////////////////////////////////////////////////////////////////////////////////
88
89extern unsigned int _physical_read(  unsigned long long paddr );
[430]90
[258]91extern void         _physical_write( unsigned long long paddr,
92                                     unsigned int       value );
93
[370]94extern unsigned long long _physical_read_ull(  unsigned long long paddr );
[430]95
[370]96extern void               _physical_write_ull( unsigned long long paddr,
97                                               unsigned long long value );
98
[344]99extern void         _physical_memcpy( unsigned long long dst_paddr,
100                                      unsigned long long src_paddr,
101                                      unsigned int       size );
102
[430]103extern void         _physical_memset( unsigned long long buf_paddr, 
104                                      unsigned int       size, 
105                                      unsigned int       data );
106
[295]107extern unsigned int _io_extended_read(  unsigned int* vaddr );
[430]108
[295]109extern void         _io_extended_write( unsigned int* vaddr,
110                                        unsigned int  value );
111
[258]112///////////////////////////////////////////////////////////////////////////////////
[442]113//      Locks access functions
[258]114///////////////////////////////////////////////////////////////////////////////////
115
[351]116extern void         _get_lock(giet_lock_t* lock);
[430]117
[351]118extern void         _release_lock(giet_lock_t* lock);
[258]119
120///////////////////////////////////////////////////////////////////////////////////
[442]121//       Access functions to kernel terminal TTY0
[258]122///////////////////////////////////////////////////////////////////////////////////
123
[442]124extern void         _puts( char*  string );
125
[295]126extern void         _putx( unsigned int val );
[442]127
[295]128extern void         _putl( unsigned long long val );
129
[442]130extern void         _putd( unsigned int val ); 
[295]131
[442]132extern void         _getc( char* byte );       
[295]133
[430]134
[258]135///////////////////////////////////////////////////////////////////////////////////
[442]136//       Scheduler and task context access functions
[258]137///////////////////////////////////////////////////////////////////////////////////
138
[399]139extern unsigned int _get_current_task_id(void);
[258]140
[430]141extern unsigned int _get_task_slot( unsigned int x,
142                                    unsigned int y,
143                                    unsigned int p,
[258]144                                    unsigned int ltid,
145                                    unsigned int slot );
[430]146
147extern void         _set_task_slot( unsigned int x,
148                                    unsigned int y,
149                                    unsigned int p,
[258]150                                    unsigned int ltid,
151                                    unsigned int slot,
152                                    unsigned int value );
153
154extern unsigned int _get_context_slot( unsigned int slot );
[430]155
[258]156extern void         _set_context_slot( unsigned int slot,
157                                       unsigned int value );
158
159///////////////////////////////////////////////////////////////////////////////////
160//     Mapping access functions
161///////////////////////////////////////////////////////////////////////////////////
162
163extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
164extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
165extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
166extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
167extern mapping_vobj_t *     _get_vobj_base(mapping_header_t* header);
168extern mapping_task_t *     _get_task_base(mapping_header_t* header);
169extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
170extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
171extern mapping_coproc_t *   _get_coproc_base(mapping_header_t* header);
172extern mapping_cp_port_t *  _get_cp_port_base(mapping_header_t* header);
173extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
174
[399]175///////////////////////////////////////////////////////////////////////////////////
176//     Miscelaneous functions
177///////////////////////////////////////////////////////////////////////////////////
178
179extern void         _exit(void);
180
181extern void         _random_wait( unsigned int value );
182
183extern void         _break( char* str);
184
185extern unsigned int _strncmp(const char*  s1, 
186                             const char*  s2, 
187                             unsigned int n);
188
189extern char*        _strcpy( char*        dest,
190                             char*        source );
191
[408]192extern void         _dcache_buf_invalidate( unsigned int buf_vbase, 
193                                            unsigned int buf_size );
[399]194
195///////////////////////////////////////////////////////////////////////////////////
196//     Required by GCC
197///////////////////////////////////////////////////////////////////////////////////
198
[442]199///////////////////////////////////////////////////////////////////////////////////
200extern void* memcpy( void*        dst, 
201                     const void*  src, 
[399]202                     unsigned int size );
203
[442]204extern void* memset( void*        dst, 
205                     int          value, 
[399]206                     unsigned int count );
207
208
[258]209#endif
210
211// Local Variables:
212// tab-width: 4
213// c-basic-offset: 4
214// c-file-offsets:((innamespace . 0)(inline-open . 0))
215// indent-tabs-mode: nil
216// End:
217// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
218
Note: See TracBrowser for help on using the repository browser.