Add physical and virtual address types

Create wrapper types for physical and virtual address to limit available
operations on addresses and to be able to require explicit address types
for given function parameters.

Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: Iaef5ab1af24fc153d959d79404b3827d9c85bf53
diff --git a/src/page_pool.rs b/src/page_pool.rs
index 5161ae7..8636af7 100644
--- a/src/page_pool.rs
+++ b/src/page_pool.rs
@@ -9,6 +9,7 @@
 use alloc::vec::Vec;
 use spin::Mutex;
 
+use super::address::PhysicalAddress;
 use super::kernel_space::KernelSpace;
 use super::region_pool::{Region, RegionPool, RegionPoolError};
 
@@ -62,8 +63,8 @@
     }
 
     /// Get physical address
-    pub fn get_pa(&self) -> usize {
-        self.pa
+    pub fn get_pa(&self) -> PhysicalAddress {
+        PhysicalAddress(self.pa)
     }
 
     /// Get as mutable slice
@@ -210,7 +211,7 @@
         assert_eq!(area.as_ptr() as usize, pages.pa);
         assert_eq!(area.len(), pages.length);
         assert!(pages.used);
-        assert_eq!(area.as_ptr() as usize, pages.get_pa());
+        assert_eq!(PhysicalAddress(area.as_ptr() as usize), pages.get_pa());
         assert_eq!(area.as_ptr() as usize, pages.base());
         assert_eq!(area.len(), pages.length());
         assert!(pages.used());