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

Last change on this file since 262 was 258, checked in by alain, 11 years ago

This is a major release, including a deep restructuration of code.
The main evolutions are

  • use of the Tsar preloader to load the GIET boot-loader from disk
  • introduction of a FAT32 file system library,
  • use of this fat32 library by the boot-loader to load the map.bin data structure, and the various .elf files
  • reorganisation of drivers (one file per peripheral).
  • introduction of drivers for new peripherals: vci_chbuf_dma and vci_multi_ahci.
  • introduction of a new physical memory allocator in the boot code.

This release has been tested on the tsar_generic_iob architecture,
for the two following mappings: 4c_1p_iob_four.xml and 4c_1p_iob_sort.xml

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