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

Last change on this file since 304 was 295, checked in by alain, 11 years ago

Introducing a major release, to suppoort the tsar_generic_leti platform
and the various (external or internal) peripherals configurations.
The map.xml format has been modified, in order to support the new
vci_iopic componentand a new policy for peripherals initialisation.
The IRQs are nom described in the XICU and IOPIC components
(and not anymore in the processors).
To enforce this major change, the map.xml file signature changed:
The signature value must be: 0xDACE2014

This new release has been tested on the tsar_generic_leti platform
for the following mappings:

  • 4c_4p_sort_leti
  • 4c_4p_sort_leti_ext
  • 4c_4p_transpose_leti
  • 4c_4p_transpose_leti_ext
  • 4c_1p_four_leti_ext
  • Property svn:executable set to *
File size: 8.6 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
19///////////////////////////////////////////////////////////////////////////////////
20// For retrieving base addresses defined in seg.ld file.
21///////////////////////////////////////////////////////////////////////////////////
22
23typedef struct _ld_symbol_s _ld_symbol_t;
24
[295]25// non replicated peripherals
[258]26extern _ld_symbol_t seg_iob_base;
27extern _ld_symbol_t seg_nic_base;
[295]28extern _ld_symbol_t seg_cma_base;
29extern _ld_symbol_t seg_tty_base;
30extern _ld_symbol_t seg_fbf_base;
31extern _ld_symbol_t seg_pic_base;
32extern _ld_symbol_t seg_ioc_base;
33extern _ld_symbol_t seg_sim_base;
34
35// replicated peripherals
[258]36extern _ld_symbol_t seg_icu_base;
37extern _ld_symbol_t seg_xcu_base;
38extern _ld_symbol_t seg_tim_base;
39extern _ld_symbol_t seg_dma_base;
40extern _ld_symbol_t seg_mmc_base;
41
42// for replicated peripherals
43extern _ld_symbol_t vseg_cluster_increment;
44
45// boot and kernel segments base addresses & sizes
46extern _ld_symbol_t seg_boot_code_base;
47extern _ld_symbol_t seg_boot_code_size;
48
49extern _ld_symbol_t seg_boot_data_base;
50extern _ld_symbol_t seg_boot_data_size;
51
52extern _ld_symbol_t seg_boot_stack_base;
53extern _ld_symbol_t seg_boot_stack_size;
54
55extern _ld_symbol_t seg_boot_mapping_base;
56extern _ld_symbol_t seg_boot_mapping_size;
57
58extern _ld_symbol_t seg_boot_buffer_base;
59extern _ld_symbol_t seg_boot_buffer_size;
60
61extern _ld_symbol_t seg_kernel_code_base;
62extern _ld_symbol_t seg_kernel_code_size;
63
64extern _ld_symbol_t seg_kernel_data_base;
65extern _ld_symbol_t seg_kernel_data_size;
66
67extern _ld_symbol_t seg_kernel_uncdata_base;
68extern _ld_symbol_t seg_kernel_uncdata_size;
69
70extern _ld_symbol_t seg_kernel_init_base;
71extern _ld_symbol_t seg_kernel_init_size;
72
[295]73extern _ld_symbol_t seg_ram_disk_base;
74extern _ld_symbol_t seg_ram_disk_size;
[258]75
[295]76extern _ld_symbol_t seg_reset_code_base;
77extern _ld_symbol_t seg_reset_code_size;
[258]78
79///////////////////////////////////////////////////////////////////////////////////
80//     Memory handling functions
81///////////////////////////////////////////////////////////////////////////////////
82
83extern void* _memcpy( void* _dst, 
84                      const void* _src, 
85                      unsigned int size );
86
87extern void* _memset( void* dst, 
88                      int s, 
89                      unsigned int count );
90
91///////////////////////////////////////////////////////////////////////////////////
[295]92//     Break function
93///////////////////////////////////////////////////////////////////////////////////
94
95extern void _break( char* str);
96
97///////////////////////////////////////////////////////////////////////////////////
[258]98//     Suicide function
99///////////////////////////////////////////////////////////////////////////////////
100
101extern void _exit(void);
102
103///////////////////////////////////////////////////////////////////////////////////
104//     Eret function
105///////////////////////////////////////////////////////////////////////////////////
106
107extern void _eret(void);
108
109///////////////////////////////////////////////////////////////////////////////////
110//     CP0 and CP2 registers access functions
111///////////////////////////////////////////////////////////////////////////////////
112
113extern unsigned int _get_sched(void);
114extern unsigned int _get_mmu_ptpr(void);
[295]115extern unsigned int _get_mmu_mode(void);
[258]116extern unsigned int _get_epc(void);
117extern unsigned int _get_bvar(void);
118extern unsigned int _get_cr(void);
119extern unsigned int _get_sr(void);
120extern unsigned int _get_procid(void);
121extern unsigned int _get_proctime(void);
[295]122extern unsigned int _get_current_task_id(void);
[258]123
[295]124extern void         _it_disable( unsigned int* save_sr_ptr );
[258]125extern void         _it_enable(void);
[295]126extern void         _it_restore( unsigned int* save_sr_ptr );
[258]127
128extern void         _set_mmu_ptpr(unsigned int value);
129extern void         _set_mmu_mode(unsigned int value);
130extern void         _set_sched(unsigned int value);
[268]131extern void         _set_sr(unsigned int value);
[258]132
133///////////////////////////////////////////////////////////////////////////////////
134//     Physical addressing related functions
135///////////////////////////////////////////////////////////////////////////////////
136
137extern unsigned int _physical_read(  unsigned long long paddr );
138
139extern void         _physical_write( unsigned long long paddr,
140                                     unsigned int       value );
141
[295]142extern unsigned int _io_extended_read(  unsigned int* vaddr );
143
144extern void         _io_extended_write( unsigned int* vaddr,
145                                        unsigned int  value );
146
[258]147///////////////////////////////////////////////////////////////////////////////////
148//     Locks access functions
149///////////////////////////////////////////////////////////////////////////////////
150
151extern void         _get_lock(unsigned int * lock);
152extern void         _release_lock(unsigned int * lock);
153
154///////////////////////////////////////////////////////////////////////////////////
[295]155//     TTY0 access functions
[258]156///////////////////////////////////////////////////////////////////////////////////
157
[295]158extern void         _puts( char*        string );
[258]159
[295]160extern void         _putx( unsigned int val );
161
162extern void         _putd( unsigned int val ); 
163
164extern void         _putl( unsigned long long val );
165
166extern void         _printf(char* format, ...); 
167
168extern void         _getc( char*        byte );       
169
[258]170///////////////////////////////////////////////////////////////////////////////////
171//     string compare functions
172///////////////////////////////////////////////////////////////////////////////////
173
174extern unsigned int _strncmp(const char*  s1, 
175                             const char*  s2, 
176                             unsigned int n);
177
178extern char*        _strcpy( char*        dest,
179                             char*        source );
180
181///////////////////////////////////////////////////////////////////////////////////
182//     cache invalidate function
183///////////////////////////////////////////////////////////////////////////////////
184
[295]185extern void  _dcache_buf_invalidate( void * buffer, 
[258]186                                     unsigned int size );
187
188///////////////////////////////////////////////////////////////////////////////////
189//     Schedulers access functions
190///////////////////////////////////////////////////////////////////////////////////
191
192extern unsigned int _get_task_slot( unsigned int gpid,
193                                    unsigned int ltid,
194                                    unsigned int slot );
195
196extern void         _set_task_slot( unsigned int gpid,
197                                    unsigned int ltid,
198                                    unsigned int slot,
199                                    unsigned int value );
200
201extern unsigned int _get_context_slot( unsigned int slot );
202
203extern void         _set_context_slot( unsigned int slot,
204                                       unsigned int value );
205
206extern unsigned int _heap_info( unsigned int* vaddr,
207                                unsigned int* size );
208
209///////////////////////////////////////////////////////////////////////////////////
210//     Mapping access functions
211///////////////////////////////////////////////////////////////////////////////////
212
213extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
214extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
215extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
216extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
217extern mapping_vobj_t *     _get_vobj_base(mapping_header_t* header);
218extern mapping_task_t *     _get_task_base(mapping_header_t* header);
219extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
220extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
221extern mapping_coproc_t *   _get_coproc_base(mapping_header_t* header);
222extern mapping_cp_port_t *  _get_cp_port_base(mapping_header_t* header);
223extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
224
225#endif
226
227// Local Variables:
228// tab-width: 4
229// c-basic-offset: 4
230// c-file-offsets:((innamespace . 0)(inline-open . 0))
231// indent-tabs-mode: nil
232// End:
233// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
234
Note: See TracBrowser for help on using the repository browser.