| | 1 | = GIET-VM / Physical addressing functions = |
| | 2 | |
| | 3 | [[PageOutline]] |
| | 4 | |
| | 5 | The [source:soft/giet_vm/giet_common/utils.c utils.c] and [source:soft/giet_vm/giet_common/utils.h util.h] files define the functions supporting physical addressing, using the CP2_PADDR_EXT register. |
| | 6 | Physical addresses can have up to 64 bits. |
| | 7 | |
| | 8 | They are prefixed by "_" to remind that they can only be executed by a processor in kernel mode. |
| | 9 | |
| | 10 | === unsigned int _physical_read( unsigned long long paddr ) === |
| | 11 | Returns the 32 bits word stored at physical address ''paddr'', after a temporary DTLB deactivation. |
| | 12 | It uses the CP2_PADDR_EXT register. |
| | 13 | |
| | 14 | === void _physical_write( unsigned long long paddr, unsigned int value ) |
| | 15 | Writes the 32 bits word ''value'' at physical address ''paddr'', after a temporary DTLB deactivation. |
| | 16 | It uses the CP2_PADDR_EXT register. |
| | 17 | |
| | 18 | === unsigned long long _physical_read_ull( unsigned long long paddr ) === |
| | 19 | Returns the 64 bits word stored at physical address ''paddr'', after a temporary DTLB deactivation. |
| | 20 | It uses the CP2_PADDR_EXT register. |
| | 21 | |
| | 22 | === void _physical_write_ull( unsigned long long paddr, unsigned long long value ) === |
| | 23 | Writes the 64 bits word ''value'' at physical address ''paddr'', after a temporary DTLB deactivation. |
| | 24 | It uses the CP2_PADDR_EXT register. |
| | 25 | |
| | 26 | === void _physical_memcpy( unsigned long long dst_paddr, unsigned long long src paddr, unsigned int size ) === |
| | 27 | This function makes a memcpy from a source buffer to a destination buffer, using physical addresses, after a temporary DTLB de-activation. The ''src_paddr'', ''dst_paddr'' and ''size'' arguments must be multiple of 4 bytes. |
| | 28 | |
| | 29 | === unsigned int _io_extended_read( unsigned int* vaddr ) === |
| | 30 | This function is used by the GIET-VM drivers to read a 32 bits word in a peripheral register. |
| | 31 | If the MMU is not activated, the virtual address is extended using X_IO and Y_IO (defined in the hard-config.h file) to reach the cluster_io. |
| | 32 | |
| | 33 | === void _io_extended_write( unsigned int* vaddr, unsigned int value ) === |
| | 34 | This function is used by the GIET-VM drivers to write a 32 bits word in a peripheral register. |
| | 35 | If the MMU is not activated, the virtual address is extended using X_IO and Y_IO (defined in the hard-config.h file) to reach the cluster_io. |