Implement FFA_MEM_PERM_GET/SET types

Add new types for describing memory permissions in FFA_MEM_PERM_GET/SET
calls and parsing the FFA_SUCCESS arguments of an FFA_MEM_PERM_GET call.

Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I5fa5c67c258683efe586f567a0c4ad250254525c
diff --git a/src/lib.rs b/src/lib.rs
index 1408d51..fb30191 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -60,6 +60,8 @@
     InvalidVersionForFunctionId(Version, FuncId),
     #[error("Invalid character count {0}")]
     InvalidCharacterCount(u8),
+    #[error("Memory management error")]
+    MemoryManagementError(#[from] memory_management::Error),
 }
 
 impl From<Error> for FfaError {
@@ -81,7 +83,8 @@
             | Error::InvalidSuccessArgsVariant
             | Error::InvalidNotificationCount
             | Error::InvalidPartitionInfoGetRegsResponse
-            | Error::InvalidCharacterCount(_) => Self::InvalidParameters,
+            | Error::InvalidCharacterCount(_)
+            | Error::MemoryManagementError(_) => Self::InvalidParameters,
         }
     }
 }
@@ -1278,7 +1281,7 @@
     MemPermSet {
         addr: MemAddr,
         page_cnt: u32,
-        mem_perm: u32,
+        mem_perm: memory_management::MemPermissionsGetSet,
     },
     ConsoleLog {
         chars: ConsoleLogChars,
@@ -1800,12 +1803,12 @@
             FuncId::MemPermSet32 => Self::MemPermSet {
                 addr: MemAddr::Addr32(regs[1] as u32),
                 page_cnt: regs[2] as u32,
-                mem_perm: regs[3] as u32,
+                mem_perm: (regs[3] as u32).try_into()?,
             },
             FuncId::MemPermSet64 => Self::MemPermSet {
                 addr: MemAddr::Addr64(regs[1]),
                 page_cnt: regs[2] as u32,
-                mem_perm: regs[3] as u32,
+                mem_perm: (regs[3] as u32).try_into()?,
             },
             FuncId::ConsoleLog32 => {
                 let char_cnt = regs[1] as u8;
@@ -2272,7 +2275,7 @@
                     MemAddr::Addr64(addr) => addr,
                 };
                 a[2] = page_cnt.into();
-                a[3] = mem_perm.into();
+                a[3] = u32::from(mem_perm).into();
             }
             Interface::ConsoleLog { chars } => match chars {
                 ConsoleLogChars::Chars32(ConsoleLogChars32 {