blob: 408150eb17e16308f319d1b01ae11afef4164bb5 [file] [log] [blame]
Alice Wang90e6f162023-04-17 13:49:45 +00001// Copyright 2023, The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//! Error and Result types for hypervisor.
16
Andrew Walbran9afab672023-04-17 14:26:23 +000017use crate::KvmError;
Alice Wang90e6f162023-04-17 13:49:45 +000018use core::{fmt, result};
Srivatsa Vaddagiri353f5d02023-04-18 23:49:01 -070019use uuid::Uuid;
Alice Wang90e6f162023-04-17 13:49:45 +000020
21/// Result type with hypervisor error.
22pub type Result<T> = result::Result<T, Error>;
23
24/// Hypervisor error.
25#[derive(Debug, Clone)]
26pub enum Error {
27 /// MMIO guard is not supported.
28 MmioGuardNotsupported,
Andrew Walbran9afab672023-04-17 14:26:23 +000029 /// Failed to invoke a certain KVM HVC function.
30 KvmError(KvmError, u32),
Srivatsa Vaddagiri353f5d02023-04-18 23:49:01 -070031 /// Unsupported Hypervisor.
32 UnsupportedHypervisorUuid(Uuid),
Alice Wang90e6f162023-04-17 13:49:45 +000033 /// The MMIO_GUARD granule used by the hypervisor is not supported.
34 UnsupportedMmioGuardGranule(usize),
35}
36
37impl fmt::Display for Error {
38 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
39 match self {
40 Self::MmioGuardNotsupported => write!(f, "MMIO guard is not supported"),
Andrew Walbran9afab672023-04-17 14:26:23 +000041 Self::KvmError(e, function_id) => {
Alice Wang90e6f162023-04-17 13:49:45 +000042 write!(f, "Failed to invoke the HVC function with function ID {function_id}: {e}")
43 }
Srivatsa Vaddagiri353f5d02023-04-18 23:49:01 -070044 Self::UnsupportedHypervisorUuid(u) => {
45 write!(f, "Unsupported Hypervisor UUID {u}")
46 }
Alice Wang90e6f162023-04-17 13:49:45 +000047 Self::UnsupportedMmioGuardGranule(g) => {
48 write!(f, "Unsupported MMIO guard granule: {g}")
49 }
50 }
51 }
52}