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

Last change on this file since 276 was 268, checked in by cfuguet, 11 years ago

Using the CP0 $4,2 register for the scheduler virtual address
instead of the CP0 $22 register

  • Property svn:executable set to *
File size: 8.0 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);
118extern void         _set_sr(unsigned int value);
119
120///////////////////////////////////////////////////////////////////////////////////
121//     Physical addressing related functions
122///////////////////////////////////////////////////////////////////////////////////
123
124extern unsigned int _physical_read(  unsigned long long paddr );
125
126extern void         _physical_write( unsigned long long paddr,
127                                     unsigned int       value );
128
129///////////////////////////////////////////////////////////////////////////////////
130//     Locks access functions
131///////////////////////////////////////////////////////////////////////////////////
132
133extern void         _get_lock(unsigned int * lock);
134extern void         _release_lock(unsigned int * lock);
135
136///////////////////////////////////////////////////////////////////////////////////
137//     Display functions
138///////////////////////////////////////////////////////////////////////////////////
139
140extern void         _puts(char *string);             // display a string
141extern void         _putx(unsigned int val);         // display a 32 bits value (hexa)
142extern void         _putd(unsigned int val);         // display a 32 bits value (dec)
143extern void         _putl(unsigned long long val);   // display a 64 bits value (hexa)
144
145///////////////////////////////////////////////////////////////////////////////////
146//     string compare functions
147///////////////////////////////////////////////////////////////////////////////////
148
149extern unsigned int _strncmp(const char*  s1, 
150                             const char*  s2, 
151                             unsigned int n);
152
153extern char*        _strcpy( char*        dest,
154                             char*        source );
155
156///////////////////////////////////////////////////////////////////////////////////
157//     cache invalidate function
158///////////////////////////////////////////////////////////////////////////////////
159
160extern void  _dcache_buf_invalidate( const void * buffer, 
161                                     unsigned int size );
162
163///////////////////////////////////////////////////////////////////////////////////
164//     Schedulers access functions
165///////////////////////////////////////////////////////////////////////////////////
166
167extern unsigned int _get_task_slot( unsigned int gpid,
168                                    unsigned int ltid,
169                                    unsigned int slot );
170
171extern void         _set_task_slot( unsigned int gpid,
172                                    unsigned int ltid,
173                                    unsigned int slot,
174                                    unsigned int value );
175
176extern unsigned int _get_context_slot( unsigned int slot );
177
178extern void         _set_context_slot( unsigned int slot,
179                                       unsigned int value );
180
181extern unsigned int _heap_info( unsigned int* vaddr,
182                                unsigned int* size );
183
184///////////////////////////////////////////////////////////////////////////////////
185//     Mapping access functions
186///////////////////////////////////////////////////////////////////////////////////
187
188extern mapping_cluster_t *  _get_cluster_base(mapping_header_t* header);
189extern mapping_pseg_t *     _get_pseg_base(mapping_header_t* header);
190extern mapping_vspace_t *   _get_vspace_base(mapping_header_t* header);
191extern mapping_vseg_t *     _get_vseg_base(mapping_header_t* header);
192extern mapping_vobj_t *     _get_vobj_base(mapping_header_t* header);
193extern mapping_task_t *     _get_task_base(mapping_header_t* header);
194extern mapping_proc_t *     _get_proc_base(mapping_header_t* header);
195extern mapping_irq_t *      _get_irq_base(mapping_header_t* header);
196extern mapping_coproc_t *   _get_coproc_base(mapping_header_t* header);
197extern mapping_cp_port_t *  _get_cp_port_base(mapping_header_t* header);
198extern mapping_periph_t *   _get_periph_base(mapping_header_t* header);
199
200#endif
201
202// Local Variables:
203// tab-width: 4
204// c-basic-offset: 4
205// c-file-offsets:((innamespace . 0)(inline-open . 0))
206// indent-tabs-mode: nil
207// End:
208// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
209
Note: See TracBrowser for help on using the repository browser.