Add success types for FFA_ID_GET and FFA_SPM_ID_GET
Add specialized success types for converting between FFA_ID_GET and
FFA_SPM_ID_GET return arguments and generic success arguments
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I16ef1c47a8538ccc1788d23de8f3e427b5c154ae
diff --git a/src/lib.rs b/src/lib.rs
index e3c9778..174ea9b 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -205,6 +205,8 @@
///
/// The current specialized success arguments types are:
/// * `FFA_FEATURES` - [`SuccessArgsFeatures`]
+/// * `FFA_ID_GET` - [`SuccessArgsIdGet`]
+/// * `FFA_SPM_ID_GET` - [`SuccessArgsSpmIdGet`]
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
pub enum SuccessArgs {
Args32([u32; 6]),
@@ -368,6 +370,48 @@
Addr64 { rx: u64, tx: u64 },
}
+/// `FFA_ID_GET` specific success argument structure.
+#[derive(Debug, Eq, PartialEq, Clone, Copy)]
+pub struct SuccessArgsIdGet {
+ pub id: u16,
+}
+
+impl From<SuccessArgsIdGet> for SuccessArgs {
+ fn from(value: SuccessArgsIdGet) -> Self {
+ SuccessArgs::Args32([value.id as u32, 0, 0, 0, 0, 0])
+ }
+}
+
+impl TryFrom<SuccessArgs> for SuccessArgsIdGet {
+ type Error = Error;
+
+ fn try_from(value: SuccessArgs) -> Result<Self, Self::Error> {
+ let args = value.try_get_args32()?;
+ Ok(Self { id: args[0] as u16 })
+ }
+}
+
+/// `FFA_SPM_ID_GET` specific success argument structure.
+#[derive(Debug, Eq, PartialEq, Clone, Copy)]
+pub struct SuccessArgsSpmIdGet {
+ pub id: u16,
+}
+
+impl From<SuccessArgsSpmIdGet> for SuccessArgs {
+ fn from(value: SuccessArgsSpmIdGet) -> Self {
+ SuccessArgs::Args32([value.id as u32, 0, 0, 0, 0, 0])
+ }
+}
+
+impl TryFrom<SuccessArgs> for SuccessArgsSpmIdGet {
+ type Error = Error;
+
+ fn try_from(value: SuccessArgs) -> Result<Self, Self::Error> {
+ let args = value.try_get_args32()?;
+ Ok(Self { id: args[0] as u16 })
+ }
+}
+
/// Flags of the `FFA_PARTITION_INFO_GET` interface.
#[derive(Debug, Eq, PartialEq, Clone, Copy)]
pub struct PartitionInfoGetFlags {