Skip to main content

Crate axdevice_base

Crate axdevice_base 

Source
Expand description

Basic traits and structures for emulated devices in ArceOS hypervisor.

This crate provides the foundational abstractions for implementing virtual devices in the AxVisor hypervisor. It is designed for no_std environments and supports multiple architectures.

§Overview

The crate contains the following key components:

§Usage

To implement a custom emulated device, you need to implement the BaseDeviceOps trait with the appropriate address range type:

use axdevice_base::{BaseDeviceOps, EmuDeviceType};
use axaddrspace::{GuestPhysAddrRange, device::AccessWidth};
use axerrno::AxResult;

struct MyDevice {
    base_addr: usize,
    size: usize,
}

impl BaseDeviceOps<GuestPhysAddrRange> for MyDevice {
    fn emu_type(&self) -> EmuDeviceType {
        EmuDeviceType::Dummy
    }

    fn address_range(&self) -> GuestPhysAddrRange {
        (self.base_addr..self.base_addr + self.size).try_into().unwrap()
    }

    fn handle_read(&self, addr: GuestPhysAddr, width: AccessWidth) -> AxResult<usize> {
        // Handle read operation
        Ok(0)
    }

    fn handle_write(&self, addr: GuestPhysAddr, width: AccessWidth, val: usize) -> AxResult {
        // Handle write operation
        Ok(())
    }
}

§Feature Flags

This crate currently has no optional feature flags. All functionality is available by default.

Structs§

EmulatedDeviceConfig
Represents the configuration of an emulated device for a virtual machine.

Enums§

EmuDeviceType
The type of Emulated Device.

Traits§

BaseDeviceOps
The core trait that all emulated devices must implement.

Functions§

map_device_of_type
Attempts to downcast a device to a specific type and apply a function to it.

Trait Aliases§

BaseMmioDeviceOps
Trait alias for MMIO (Memory-Mapped I/O) device operations.
BasePortDeviceOps
Trait alias for port I/O device operations.
BaseSysRegDeviceOps
Trait alias for system register device operations.