Add success argument type for memory operations
Add SuccessArgsMemOp for parsing the FFA_SUCCESS arguments of
FFA_MEM_DONATE, FFA_MEM_LEND, FFA_MEM_SHARE calls.
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I585ab306a73676c99d0d8ddde00e25ea94726a54
diff --git a/src/memory_management.rs b/src/memory_management.rs
index dc0fc41..1302f82 100644
--- a/src/memory_management.rs
+++ b/src/memory_management.rs
@@ -12,10 +12,13 @@
//! - The Owner can reclaim access to a memory region after the FF-A endpoints that were granted
//! access to that memory region have relinquished their access.
-use crate::ffa_v1_1::{
- composite_memory_region_descriptor, constituent_memory_region_descriptor,
- endpoint_memory_access_descriptor, memory_access_permission_descriptor,
- memory_relinquish_descriptor, memory_transaction_descriptor,
+use crate::{
+ ffa_v1_1::{
+ composite_memory_region_descriptor, constituent_memory_region_descriptor,
+ endpoint_memory_access_descriptor, memory_access_permission_descriptor,
+ memory_relinquish_descriptor, memory_transaction_descriptor,
+ },
+ SuccessArgs,
};
use core::mem::size_of;
use thiserror::Error;
@@ -785,6 +788,29 @@
const ENDPOINT_ARRAY_OFFSET: usize = size_of::<memory_relinquish_descriptor>();
}
+/// Success argument structure for `FFA_MEM_DONATE`, `FFA_MEM_LEND` and `FFA_MEM_SHARE`.
+pub struct SuccessArgsMemOp {
+ pub handle: Handle,
+}
+
+impl From<SuccessArgsMemOp> for SuccessArgs {
+ fn from(value: SuccessArgsMemOp) -> Self {
+ let [handle_lo, handle_hi]: [u32; 2] = value.handle.into();
+ SuccessArgs::Args32([handle_lo, handle_hi, 0, 0, 0, 0])
+ }
+}
+
+impl TryFrom<SuccessArgs> for SuccessArgsMemOp {
+ type Error = crate::Error;
+
+ fn try_from(value: SuccessArgs) -> Result<Self, Self::Error> {
+ let [handle_lo, handle_hi, ..] = value.try_get_args32()?;
+ Ok(Self {
+ handle: [handle_lo, handle_hi].into(),
+ })
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;