pub(crate) mod capabilities;
pub(crate) mod net;
pub(crate) mod pci;
pub mod features {
use virtio_bindings::{
bindings::virtio_net::{VIRTIO_NET_F_MAC, VIRTIO_NET_F_MTU, VIRTIO_NET_F_STATUS},
virtio_config::VIRTIO_F_VERSION_1,
};
pub const UHYVE_NET_FEATURES_LOW: u32 =
1 << VIRTIO_NET_F_MAC | 1 << VIRTIO_NET_F_STATUS | 1 << VIRTIO_NET_F_MTU;
pub const UHYVE_NET_FEATURES_HIGH: u32 = ((1_usize << VIRTIO_F_VERSION_1) >> 32) as u32;
}
use bitflags::bitflags;
use zerocopy::{Immutable, IntoBytes};
pub(crate) const QUEUE_LIMIT: usize = 256;
#[repr(C)]
#[derive(IntoBytes, Debug, Default, Immutable)]
pub struct VirtqueueNotification {
pub vqn: u16,
pub next_off_wrap: u16,
}
#[derive(Copy, Clone, Debug, IntoBytes, PartialEq, Eq, Immutable)]
#[repr(C)]
pub struct DeviceStatus(u16);
bitflags! {
impl DeviceStatus : u16 {
const UNINITIALIZED = 0;
const ACKNOWLEDGE = 1;
const DRIVER = 2;
const DRIVER_OK = 4;
const FEATURES_OK = 8;
const DEVICE_NEEDS_RESET = 64;
const PCI_CAPABILITIES_LIST_ENABLE = 16;
const FAILED = 128;
}
}
const ROOT_DEVICE_ID: u16 = 0x1040;
pub const NET_DEVICE_ID: u16 = ROOT_DEVICE_ID + 1;
const _BLOCK_DEVICE_ID: u16 = ROOT_DEVICE_ID + 2;
const _CONSOLE_DEVICE_ID: u16 = ROOT_DEVICE_ID + 3;
const _SOCKET_DEVICE_ID: u16 = ROOT_DEVICE_ID + 19;
pub const VIRTIO_VENDOR_ID: u16 = 0x1AF4;
const VIRTIO_MSI_NO_VECTOR: u16 = 0xffff;