[pvmfw] Extract smccc into a separate library for reuse
Test: m pvmfw_img
Bug: 272226230
Change-Id: Ie6e03e92acca8f0947febefa80587c0db0010c49
diff --git a/pvmfw/Android.bp b/pvmfw/Android.bp
index 6d5226a..a446c90 100644
--- a/pvmfw/Android.bp
+++ b/pvmfw/Android.bp
@@ -20,10 +20,10 @@
"liblibfdt",
"liblog_rust_nostd",
"libonce_cell_nostd",
- "libpsci",
"libpvmfw_avb_nostd",
"libpvmfw_embedded_key",
"libpvmfw_fdt_template",
+ "libsmccc",
"libstatic_assertions",
"libtinyvec_nostd",
"libuuid_nostd",
diff --git a/pvmfw/src/hvc.rs b/pvmfw/src/hvc.rs
index b5b0909..f44e26e 100644
--- a/pvmfw/src/hvc.rs
+++ b/pvmfw/src/hvc.rs
@@ -16,8 +16,8 @@
pub mod trng;
-use crate::smccc::{self, checked_hvc64, checked_hvc64_expect_zero};
use log::info;
+use smccc::{self, checked_hvc64, checked_hvc64_expect_zero};
const ARM_SMCCC_TRNG_VERSION: u32 = 0x8400_0050;
#[allow(dead_code)]
diff --git a/pvmfw/src/hvc/trng.rs b/pvmfw/src/hvc/trng.rs
index 53d5881..05ecc6b 100644
--- a/pvmfw/src/hvc/trng.rs
+++ b/pvmfw/src/hvc/trng.rs
@@ -14,7 +14,6 @@
use core::fmt;
use core::result;
-use psci::smccc;
/// Standard SMCCC TRNG error values as described in DEN 0098 1.0 REL0.
#[derive(Debug, Clone)]
diff --git a/pvmfw/src/hypervisor.rs b/pvmfw/src/hypervisor.rs
index e06d809..22609c5 100644
--- a/pvmfw/src/hypervisor.rs
+++ b/pvmfw/src/hypervisor.rs
@@ -15,7 +15,6 @@
//! Wrappers around hypervisor back-ends.
use crate::hvc;
-use crate::smccc;
pub fn hyp_meminfo() -> smccc::Result<u64> {
hvc::kvm_hyp_meminfo()
diff --git a/pvmfw/src/main.rs b/pvmfw/src/main.rs
index 06cc81e..fd6054f 100644
--- a/pvmfw/src/main.rs
+++ b/pvmfw/src/main.rs
@@ -35,7 +35,6 @@
mod mmio_guard;
mod mmu;
mod rand;
-mod smccc;
mod virtio;
use alloc::boxed::Box;
diff --git a/pvmfw/src/memory.rs b/pvmfw/src/memory.rs
index b223f82..d26a4ba 100644
--- a/pvmfw/src/memory.rs
+++ b/pvmfw/src/memory.rs
@@ -20,7 +20,6 @@
use crate::hypervisor::{hyp_meminfo, mem_share, mem_unshare};
use crate::mmio_guard;
use crate::mmu;
-use crate::smccc;
use alloc::alloc::alloc_zeroed;
use alloc::alloc::dealloc;
use alloc::alloc::handle_alloc_error;
diff --git a/pvmfw/src/mmio_guard.rs b/pvmfw/src/mmio_guard.rs
index dac26e0..95a1b7f 100644
--- a/pvmfw/src/mmio_guard.rs
+++ b/pvmfw/src/mmio_guard.rs
@@ -16,7 +16,6 @@
use crate::helpers;
use crate::hypervisor::{mmio_guard_enroll, mmio_guard_info, mmio_guard_map, mmio_guard_unmap};
-use crate::smccc;
use core::{fmt, result};
#[derive(Debug, Clone)]
diff --git a/pvmfw/src/smccc.rs b/pvmfw/src/smccc.rs
deleted file mode 100644
index 16f5a62..0000000
--- a/pvmfw/src/smccc.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2022, The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-use core::{fmt, result};
-use psci::smccc::hvc64;
-
-/// Standard SMCCC error values as described in DEN 0028E.
-#[derive(Debug, Clone)]
-pub enum Error {
- /// The call is not supported by the implementation.
- NotSupported,
- /// The call is deemed not required by the implementation.
- NotRequired,
- /// One of the call parameters has a non-supported value.
- InvalidParameter,
- /// Negative values indicate error.
- Unknown(i64),
- /// The call returned a positive value when 0 was expected.
- Unexpected(u64),
-}
-
-impl fmt::Display for Error {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- match self {
- Self::NotSupported => write!(f, "SMCCC call not supported"),
- Self::NotRequired => write!(f, "SMCCC call not required"),
- Self::InvalidParameter => write!(f, "SMCCC call received non-supported value"),
- Self::Unexpected(v) => write!(f, "Unexpected SMCCC return value {} ({0:#x})", v),
- Self::Unknown(e) => write!(f, "Unknown SMCCC return value {} ({0:#x})", e),
- }
- }
-}
-
-pub type Result<T> = result::Result<T, Error>;
-
-pub fn checked_hvc64_expect_zero(function: u32, args: [u64; 17]) -> Result<()> {
- match checked_hvc64(function, args)? {
- 0 => Ok(()),
- v => Err(Error::Unexpected(v)),
- }
-}
-
-pub fn checked_hvc64(function: u32, args: [u64; 17]) -> Result<u64> {
- match hvc64(function, args)[0] as i64 {
- ret if ret >= 0 => Ok(ret as u64),
- -1 => Err(Error::NotSupported),
- -2 => Err(Error::NotRequired),
- -3 => Err(Error::InvalidParameter),
- ret => Err(Error::Unknown(ret)),
- }
-}