blob: 84228c438e02a236781b495cefc2e07b57d61431 [file] [log] [blame]
Alice Wang9a8b39f2023-04-12 15:31:48 +00001// Copyright 2022, 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//! This module contains the error thrown by Rialto.
16
17use aarch64_paging::MapError;
18use core::{fmt, result};
Alice Wangdda3ba92023-05-25 15:15:30 +000019use fdtpci::PciError;
Alice Wang90e6f162023-04-17 13:49:45 +000020use hyp::Error as HypervisorError;
Alice Wangdda3ba92023-05-25 15:15:30 +000021use libfdt::FdtError;
Alice Wangd36c7112023-07-04 09:50:45 +000022use vmbase::{memory::MemoryTrackerError, virtio::pci};
Alice Wang9a8b39f2023-04-12 15:31:48 +000023
24pub type Result<T> = result::Result<T, Error>;
25
26#[derive(Clone, Debug)]
27pub enum Error {
Alice Wang90e6f162023-04-17 13:49:45 +000028 /// Hypervisor error.
29 Hypervisor(HypervisorError),
Alice Wang9a8b39f2023-04-12 15:31:48 +000030 /// Failed when attempting to map some range in the page table.
31 PageTableMapping(MapError),
32 /// Failed to initialize the logger.
33 LoggerInit,
Alice Wangdda3ba92023-05-25 15:15:30 +000034 /// Invalid FDT.
35 InvalidFdt(FdtError),
36 /// Invalid PCI.
37 InvalidPci(PciError),
Alice Wang74f7f4b2023-06-13 08:24:50 +000038 /// Failed memory operation.
39 MemoryOperationFailed(MemoryTrackerError),
Alice Wangd36c7112023-07-04 09:50:45 +000040 /// Failed to initialize PCI.
41 PciInitializationFailed(pci::PciError),
Alice Wang9a8b39f2023-04-12 15:31:48 +000042}
43
44impl fmt::Display for Error {
45 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
46 match self {
Alice Wangdda3ba92023-05-25 15:15:30 +000047 Self::Hypervisor(e) => write!(f, "Hypervisor error: {e}."),
Alice Wang9a8b39f2023-04-12 15:31:48 +000048 Self::PageTableMapping(e) => {
49 write!(f, "Failed when attempting to map some range in the page table: {e}.")
50 }
51 Self::LoggerInit => write!(f, "Failed to initialize the logger."),
Alice Wangdda3ba92023-05-25 15:15:30 +000052 Self::InvalidFdt(e) => write!(f, "Invalid FDT: {e}"),
53 Self::InvalidPci(e) => write!(f, "Invalid PCI: {e}"),
Alice Wang74f7f4b2023-06-13 08:24:50 +000054 Self::MemoryOperationFailed(e) => write!(f, "Failed memory operation: {e}"),
Alice Wangd36c7112023-07-04 09:50:45 +000055 Self::PciInitializationFailed(e) => write!(f, "Failed to initialize PCI: {e}"),
Alice Wang9a8b39f2023-04-12 15:31:48 +000056 }
57 }
58}
59
Alice Wang90e6f162023-04-17 13:49:45 +000060impl From<HypervisorError> for Error {
61 fn from(e: HypervisorError) -> Self {
62 Self::Hypervisor(e)
Alice Wang9a8b39f2023-04-12 15:31:48 +000063 }
64}
65
66impl From<MapError> for Error {
67 fn from(e: MapError) -> Self {
68 Self::PageTableMapping(e)
69 }
70}
Alice Wangdda3ba92023-05-25 15:15:30 +000071
72impl From<FdtError> for Error {
73 fn from(e: FdtError) -> Self {
74 Self::InvalidFdt(e)
75 }
76}
77
78impl From<PciError> for Error {
79 fn from(e: PciError) -> Self {
80 Self::InvalidPci(e)
81 }
82}
Alice Wang74f7f4b2023-06-13 08:24:50 +000083
84impl From<MemoryTrackerError> for Error {
85 fn from(e: MemoryTrackerError) -> Self {
86 Self::MemoryOperationFailed(e)
87 }
88}