Add missing FF-A SecondaryEpRegister Interface and FuncId
Change-Id: Ie1dfb5f182c16bac5b08b5bb16801c9a013987be
Signed-off-by: Tomás González <tomasagustin.gonzalezorlando@arm.com>
diff --git a/src/lib.rs b/src/lib.rs
index cf5a6ca..659e85f 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -95,6 +95,8 @@
NotificationInfoGet32 = 0x84000083,
NotificationInfoGet64 = 0xc4000083,
El3IntrHandle = 0x8400008c,
+ SecondaryEpRegister32 = 0x84000087,
+ SecondaryEpRegister64 = 0xc4000087,
MemDonate32 = 0x84000071,
MemDonate64 = 0xc4000071,
MemLend32 = 0x84000072,
@@ -174,6 +176,13 @@
Result64_2([u64; 16]),
}
+/// Entrypoint address argument for `FFA_SECONDARY_EP_REGISTER` interface.
+#[derive(Debug, Eq, PartialEq, Clone, Copy)]
+pub enum SecondaryEpRegisterAddr {
+ Addr32(u32),
+ Addr64(u64),
+}
+
/// Version number of the FF-A implementation, `.0` is the major, `.1` is minor the version.
#[derive(Clone, Copy, Eq, PartialEq, PartialOrd, Ord)]
pub struct Version(pub u16, pub u16);
@@ -344,6 +353,9 @@
target_info: TargetInfo,
},
NormalWorldResume,
+ SecondaryEpRegister {
+ entrypoint: SecondaryEpRegisterAddr,
+ },
MsgSend2 {
sender_vm_id: u16,
flags: u32,
@@ -442,6 +454,10 @@
Interface::Yield => Some(FuncId::Yield),
Interface::Run { .. } => Some(FuncId::Run),
Interface::NormalWorldResume => Some(FuncId::NormalWorldResume),
+ Interface::SecondaryEpRegister { entrypoint } => match entrypoint {
+ SecondaryEpRegisterAddr::Addr32 { .. } => Some(FuncId::SecondaryEpRegister32),
+ SecondaryEpRegisterAddr::Addr64 { .. } => Some(FuncId::SecondaryEpRegister64),
+ },
Interface::MsgSend2 { .. } => Some(FuncId::MsgSend2),
Interface::MsgSendDirectReq { args, .. } => match args {
DirectMsgArgs::Args32(_) => Some(FuncId::MsgSendDirectReq32),
@@ -607,6 +623,12 @@
target_info: (regs[1] as u32).into(),
},
FuncId::NormalWorldResume => Self::NormalWorldResume,
+ FuncId::SecondaryEpRegister32 => Self::SecondaryEpRegister {
+ entrypoint: SecondaryEpRegisterAddr::Addr32(regs[1] as u32),
+ },
+ FuncId::SecondaryEpRegister64 => Self::SecondaryEpRegister {
+ entrypoint: SecondaryEpRegisterAddr::Addr64(regs[1]),
+ },
FuncId::MsgSend2 => Self::MsgSend2 {
sender_vm_id: regs[1] as u16,
flags: regs[2] as u32,
@@ -951,6 +973,10 @@
a[1] = u32::from(target_info).into();
}
Interface::NormalWorldResume => {}
+ Interface::SecondaryEpRegister { entrypoint } => match entrypoint {
+ SecondaryEpRegisterAddr::Addr32(addr) => a[1] = addr as u64,
+ SecondaryEpRegisterAddr::Addr64(addr) => a[1] = addr,
+ },
Interface::MsgSend2 {
sender_vm_id,
flags,