1 | //////////////////////////////////////////////////////////////////////////////////////// |
---|
2 | // File : stdio.h |
---|
3 | // Written by Alain Greiner |
---|
4 | // Date : 17/01/2014 |
---|
5 | // |
---|
6 | // This file define varions functions that can be used by applications to access |
---|
7 | // peripherals, or other ressources such as processor registers, spin_locks |
---|
8 | // or synchronisation barriers. |
---|
9 | // It is dedicated for the TSAR multi-processors multi_clusters architecture. |
---|
10 | // There is NO separation between application code and system code. |
---|
11 | // This basic GIET does not use the virtual memory, and does nort support multi-tasking. |
---|
12 | // |
---|
13 | //The supported peripherals are: |
---|
14 | //- the SoClib multi_tty |
---|
15 | //- The SoCLib frame_buffer |
---|
16 | //- The SoCLib block_device |
---|
17 | // |
---|
18 | //The following parameters must be defined in the hard_config.h file. |
---|
19 | //- X_SIZE : number of clusters in a row |
---|
20 | //- Y_SIZE : number of clusters in a column |
---|
21 | //- X_WIDTH : number of bits for X field in proc_id |
---|
22 | //- Y_WIDTH : number of bits for Y field in proc_id |
---|
23 | //- NB_PROCS_MAX : max number of processor per cluster |
---|
24 | //- NB_TTY_CHANNELS : max number of TTY channels |
---|
25 | // |
---|
26 | //The follobing base addresses must be defined in the ldscript |
---|
27 | //- seg_tty_base |
---|
28 | //- seg_fbf_base |
---|
29 | //- seg_ioc_base |
---|
30 | //////////////////////////////////////////////////////////////////////////////////////// |
---|
31 | |
---|
32 | #ifndef _GIET_STDIO_H_ |
---|
33 | #define _GIET_STDIO_H_ |
---|
34 | |
---|
35 | #include "tty.h" |
---|
36 | #include "block_device.h" |
---|
37 | #include "hard_config.h" |
---|
38 | #include <stdarg.h> |
---|
39 | |
---|
40 | typedef unsigned int size_t; |
---|
41 | |
---|
42 | // global variables defined in stdio.c |
---|
43 | |
---|
44 | extern int volatile _ioc_lock; |
---|
45 | extern int volatile _ioc_done; |
---|
46 | extern int volatile _ioc_status; |
---|
47 | |
---|
48 | extern char volatile _tty_get_buf[]; |
---|
49 | extern int volatile _tty_get_full[]; |
---|
50 | |
---|
51 | extern int volatile _barrier_value[]; |
---|
52 | extern int volatile _barrier_count[]; |
---|
53 | extern int volatile _barrier_lock[]; |
---|
54 | |
---|
55 | extern int volatile _spin_lock[]; |
---|
56 | |
---|
57 | // functions defined in stdio.c |
---|
58 | |
---|
59 | void* _memcpy( void* dst, const void* src, size_t size ); |
---|
60 | |
---|
61 | void _extended_memcpy( unsigned int dst_cluster, |
---|
62 | unsigned int dst_address, |
---|
63 | unsigned int src_cluster, |
---|
64 | unsigned int src_address, |
---|
65 | unsigned int length ); |
---|
66 | unsigned int _procid(); |
---|
67 | unsigned int _proctime(); |
---|
68 | unsigned int _procnumber(); |
---|
69 | |
---|
70 | unsigned int _rand(); |
---|
71 | |
---|
72 | void _it_mask(); |
---|
73 | void _it_enable(); |
---|
74 | |
---|
75 | void _dcache_buf_invalidate( const void* buffer, size_t size ); |
---|
76 | |
---|
77 | void _exit(); |
---|
78 | |
---|
79 | void _itoa_dec( unsigned int val, char* buf ); |
---|
80 | void _itoa_hex( unsigned int val, char* buf ); |
---|
81 | |
---|
82 | int _tty_write( char* buffer, size_t length, size_t channel ); |
---|
83 | int _tty_read( char* buffer, size_t channel ); |
---|
84 | void _tty_puts( char* string ); |
---|
85 | void _tty_putd( unsigned int val ); |
---|
86 | void _tty_putx( unsigned int val ); |
---|
87 | void _tty_get_lock( size_t channel ); |
---|
88 | void _tty_release_lock( size_t channel ); |
---|
89 | void _tty_getc( char* buffer ); |
---|
90 | void _tty_getw( unsigned int* buffer ); |
---|
91 | void _tty_printf( char* format, ... ); |
---|
92 | void _tty_isr(); |
---|
93 | |
---|
94 | void _ioc_get_lock(); |
---|
95 | void _ioc_write( size_t lba, void* buffer, size_t count, size_t ext ); |
---|
96 | void _ioc_read (size_t lba, void* buffer, size_t count, size_t ext ); |
---|
97 | void _ioc_completed(); |
---|
98 | void _ioc_isr(); |
---|
99 | |
---|
100 | void _mmc_isr(); |
---|
101 | |
---|
102 | void _fb_sync_write( unsigned int offset, |
---|
103 | unsigned int buffer, |
---|
104 | unsigned int length, |
---|
105 | unsigned int ext ); |
---|
106 | void _fb_sync_read( unsigned int offset, |
---|
107 | unsigned int buffer, |
---|
108 | unsigned int length, |
---|
109 | unsigned int ext ); |
---|
110 | |
---|
111 | void _release_lock( size_t lock_index ); |
---|
112 | void _get_lock( size_t lock_index ); |
---|
113 | |
---|
114 | void _barrier_init(size_t index, size_t count); |
---|
115 | void _barrier_wait(size_t index); |
---|
116 | |
---|
117 | unsigned char _byte_extended_read( unsigned int cluster, |
---|
118 | unsigned int address ); |
---|
119 | unsigned int _word_extended_read( unsigned int cluster, |
---|
120 | unsigned int address ); |
---|
121 | void _word_extended_write( unsigned int cluster, |
---|
122 | unsigned int address, |
---|
123 | unsigned int word ); |
---|
124 | void _byte_extended_write( unsigned int cluster, |
---|
125 | unsigned int address, |
---|
126 | unsigned char byte ); |
---|
127 | #endif |
---|
128 | |
---|
129 | // Local Variables: |
---|
130 | // tab-width: 4; |
---|
131 | // c-basic-offset: 4; |
---|
132 | // c-file-offsets:((innamespace . 0)(inline-open . 0)); |
---|
133 | // indent-tabs-mode: nil; |
---|
134 | // End: |
---|
135 | // |
---|
136 | // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 |
---|
137 | |
---|