Alioth Code Coverage

device.rs0.00%

1// Copyright 2024 Google LLC
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// https://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
15use alioth_macros::trace_error;
16use snafu::Snafu;
17
18use crate::errors::DebugTrace;
19use crate::mem::emulated::Mmio;
20
21pub mod clock;
22pub mod cmos;
23pub mod console;
24#[cfg(target_arch = "x86_64")]
25#[path = "fw_cfg/fw_cfg.rs"]
26pub mod fw_cfg;
27pub mod fw_dbg;
28#[cfg(target_arch = "x86_64")]
29pub mod ioapic;
30pub mod net;
31#[cfg(target_arch = "aarch64")]
32pub mod pl011;
33#[cfg(target_arch = "aarch64")]
34pub mod pl031;
35#[cfg(target_arch = "x86_64")]
36pub mod serial;
37
38#[trace_error]
39#[derive(Snafu, DebugTrace)]
40#[snafu(module, visibility(pub(crate)), context(suffix(false)))]
41pub enum Error {
42 #[snafu(display("Device is not pausable"))]
43 NotPausable,
44}
45
46pub type Result<T, E = Error> = std::result::Result<T, E>;
47
48pub trait Pause {
49 fn pause(&self) -> Result<()> {
50 error::NotPausable.fail()
51 }
52 fn resume(&self) -> Result<()> {
53 error::NotPausable.fail()
54 }
55}
56
57pub trait MmioDev: Mmio + Pause {}
58