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

Last change on this file since 768 was 709, checked in by alain, 9 years ago

Major release: Change the task model to implement the POSIX threads API.

  • The shell "exec" and "kill" commands can be used to activate/de-activate the applications.
  • The "pause", "resume", and "context" commands can be used to stop, restart, a single thtead or to display the thread context.

This version has been tested on the following multi-threaded applications,
that have been modified to use the POSIX threads:

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