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

Last change on this file since 405 was 399, checked in by alain, 10 years ago

Cosmetic

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