[724] | 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 | |
---|