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

Last change on this file since 380 was 370, checked in by alain, 10 years ago

1) Introducing the _physical_read_ull() and _physical_write_ull() functions.
2) Modifying the heap_info() to support (x,y) topological constraint.

  • Property svn:executable set to *
File size: 8.4 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.
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
[324]19//////////////////////////////////////////////////////////////////////////////////
20// NULL pointer definition
21//////////////////////////////////////////////////////////////////////////////////
22
23#define NULL (void *)0
24
[258]25///////////////////////////////////////////////////////////////////////////////////
[351]26// This structure is used to have one single lock in a cache line
[258]27///////////////////////////////////////////////////////////////////////////////////
28
[351]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
[258]36typedef struct _ld_symbol_s _ld_symbol_t;
37
[324]38extern _ld_symbol_t boot_code_vbase;
39extern _ld_symbol_t boot_data_vbase;
[258]40
[324]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;
[258]45
46///////////////////////////////////////////////////////////////////////////////////
47//     Memory handling functions
48///////////////////////////////////////////////////////////////////////////////////
49
[345]50extern void* memcpy( void* _dst, 
51                     const void* _src, 
52                     unsigned int size );
[258]53
[345]54extern void* memset( void* dst, 
55                     int s, 
56                     unsigned int count );
[258]57
58///////////////////////////////////////////////////////////////////////////////////
[295]59//     Break function
60///////////////////////////////////////////////////////////////////////////////////
61
62extern void _break( char* str);
63
64///////////////////////////////////////////////////////////////////////////////////
[258]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);
[295]82extern unsigned int _get_mmu_mode(void);
[258]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);
[295]89extern unsigned int _get_current_task_id(void);
[258]90
[295]91extern void         _it_disable( unsigned int* save_sr_ptr );
[258]92extern void         _it_enable(void);
[295]93extern void         _it_restore( unsigned int* save_sr_ptr );
[258]94
95extern void         _set_mmu_ptpr(unsigned int value);
96extern void         _set_mmu_mode(unsigned int value);
97extern void         _set_sched(unsigned int value);
[268]98extern void         _set_sr(unsigned int value);
[258]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
[370]109extern unsigned long long _physical_read_ull(  unsigned long long paddr );
110
111extern void               _physical_write_ull( unsigned long long paddr,
112                                               unsigned long long value );
113
[344]114extern void         _physical_memcpy( unsigned long long dst_paddr,
115                                      unsigned long long src_paddr,
116                                      unsigned int       size );
117
[295]118extern unsigned int _io_extended_read(  unsigned int* vaddr );
119
120extern void         _io_extended_write( unsigned int* vaddr,
121                                        unsigned int  value );
122
[258]123///////////////////////////////////////////////////////////////////////////////////
124//     Locks access functions
125///////////////////////////////////////////////////////////////////////////////////
126
[351]127extern void         _get_lock(giet_lock_t* lock);
128extern void         _release_lock(giet_lock_t* lock);
[258]129
130///////////////////////////////////////////////////////////////////////////////////
[295]131//     TTY0 access functions
[258]132///////////////////////////////////////////////////////////////////////////////////
133
[295]134extern void         _puts( char*        string );
[258]135
[295]136extern void         _putx( unsigned int val );
137
138extern void         _putd( unsigned int val ); 
139
140extern void         _putl( unsigned long long val );
141
142extern void         _printf(char* format, ...); 
143
144extern void         _getc( char*        byte );       
145
[258]146///////////////////////////////////////////////////////////////////////////////////
147//     string compare functions
148///////////////////////////////////////////////////////////////////////////////////
149
150extern unsigned int _strncmp(const char*  s1, 
151                             const char*  s2, 
152                             unsigned int n);
153
154extern char*        _strcpy( char*        dest,
155                             char*        source );
156
157///////////////////////////////////////////////////////////////////////////////////
158//     cache invalidate function
159///////////////////////////////////////////////////////////////////////////////////
160
[295]161extern void  _dcache_buf_invalidate( void * buffer, 
[258]162                                     unsigned int size );
163
164///////////////////////////////////////////////////////////////////////////////////
165//     Schedulers access functions
166///////////////////////////////////////////////////////////////////////////////////
167
168extern unsigned int _get_task_slot( unsigned int gpid,
169                                    unsigned int ltid,
170                                    unsigned int slot );
171
172extern void         _set_task_slot( unsigned int gpid,
173                                    unsigned int ltid,
174                                    unsigned int slot,
175                                    unsigned int value );
176
177extern unsigned int _get_context_slot( unsigned int slot );
178
179extern void         _set_context_slot( unsigned int slot,
180                                       unsigned int value );
181
182extern unsigned int _heap_info( unsigned int* vaddr,
[370]183                                unsigned int* length,
184                                unsigned int  x,
185                                unsigned int  y );
[258]186
187///////////////////////////////////////////////////////////////////////////////////
188//     Mapping access functions
189///////////////////////////////////////////////////////////////////////////////////
190
191extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
192extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
193extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
194extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
195extern mapping_vobj_t *     _get_vobj_base(mapping_header_t* header);
196extern mapping_task_t *     _get_task_base(mapping_header_t* header);
197extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
198extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
199extern mapping_coproc_t *   _get_coproc_base(mapping_header_t* header);
200extern mapping_cp_port_t *  _get_cp_port_base(mapping_header_t* header);
201extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
202
203#endif
204
205// Local Variables:
206// tab-width: 4
207// c-basic-offset: 4
208// c-file-offsets:((innamespace . 0)(inline-open . 0))
209// indent-tabs-mode: nil
210// End:
211// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
212
Note: See TracBrowser for help on using the repository browser.