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

Last change on this file since 612 was 594, checked in by alain, 9 years ago

1) Fix a bug in the _free() function in kernel_malloc.c
2) Introduce a strlen() function in utils.c

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