diff options
author | bunnei <bunneidev@gmail.com> | 2014-08-30 23:27:46 -0400 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2014-08-30 23:27:46 -0400 |
commit | 038a51aac18df7fbb5fc58cff9811fc58aa8ee54 (patch) | |
tree | 7ecdca2c2f42e2a791b91bd1ed614ab481bc55d8 /src/core/mem_map.h | |
parent | 06864c93fdf41ed383aadc3a76c40cb4725051b0 (diff) | |
parent | 83c3d2bcd192f069030450a863b57f28982f86d2 (diff) |
Merge pull request #82 from yuriks/addr-types
Introduce VAddr and PAddr typedefs for ARM addresses.
Diffstat (limited to 'src/core/mem_map.h')
-rw-r--r-- | src/core/mem_map.h | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/core/mem_map.h b/src/core/mem_map.h index 3c7810573..eed445046 100644 --- a/src/core/mem_map.h +++ b/src/core/mem_map.h @@ -9,6 +9,11 @@ namespace Memory { +// TODO: It would be nice to eventually replace these with strong types that prevent accidental +// conversion between each other. +typedef u32 VAddr; ///< Represents a pointer in the ARM11 virtual address space. +typedef u32 PAddr; ///< Represents a pointer in the physical address space. + //////////////////////////////////////////////////////////////////////////////////////////////////// enum { @@ -127,25 +132,25 @@ void Init(); void Shutdown(); template <typename T> -inline void Read(T &var, const u32 addr); +inline void Read(T &var, VAddr addr); template <typename T> -inline void Write(u32 addr, const T data); +inline void Write(VAddr addr, T data); -u8 Read8(const u32 addr); -u16 Read16(const u32 addr); -u32 Read32(const u32 addr); +u8 Read8(VAddr addr); +u16 Read16(VAddr addr); +u32 Read32(VAddr addr); -u32 Read8_ZX(const u32 addr); -u32 Read16_ZX(const u32 addr); +u32 Read8_ZX(VAddr addr); +u32 Read16_ZX(VAddr addr); -void Write8(const u32 addr, const u8 data); -void Write16(const u32 addr, const u16 data); -void Write32(const u32 addr, const u32 data); +void Write8(VAddr addr, u8 data); +void Write16(VAddr addr, u16 data); +void Write32(VAddr addr, u32 data); -void WriteBlock(const u32 addr, const u8* data, const int size); +void WriteBlock(VAddr addr, const u8* data, size_t size); -u8* GetPointer(const u32 virtual_address); +u8* GetPointer(VAddr virtual_address); /** * Maps a block of memory on the heap @@ -163,14 +168,18 @@ u32 MapBlock_Heap(u32 size, u32 operation, u32 permissions); */ u32 MapBlock_HeapGSP(u32 size, u32 operation, u32 permissions); -inline const char* GetCharPointer(const u32 address) { +inline const char* GetCharPointer(const VAddr address) { return (const char *)GetPointer(address); } /// Converts a physical address to virtual address -u32 PhysicalToVirtualAddress(const u32 addr); +VAddr PhysicalToVirtualAddress(PAddr addr); /// Converts a virtual address to physical address -u32 VirtualToPhysicalAddress(const u32 addr); +PAddr VirtualToPhysicalAddress(VAddr addr); } // namespace + +// These are used often, so re-export then on the root namespace +using Memory::VAddr; +using Memory::PAddr; |