use num_enum::{FromPrimitive, IntoPrimitive};
use volatile::access::ReadOnly;
use volatile_macro::VolatileFieldAccess;
pub use super::features::console::F;
use crate::{le16, le32};
#[doc(alias = "virtio_console_config")]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy_derive::KnownLayout,
zerocopy_derive::Immutable,
zerocopy_derive::FromBytes,
)
)]
#[derive(VolatileFieldAccess)]
#[repr(C)]
pub struct Config {
#[access(ReadOnly)]
cols: le16,
#[access(ReadOnly)]
rows: le16,
#[access(ReadOnly)]
max_nr_ports: le32,
#[access(ReadOnly)]
emerg_wr: le32,
}
#[doc(alias = "virtio_console_control")]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy_derive::KnownLayout,
zerocopy_derive::Immutable,
zerocopy_derive::FromBytes,
zerocopy_derive::IntoBytes,
)
)]
#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct Control {
pub id: le32,
pub event: le16,
pub value: le16,
}
#[doc(alias = "VIRTIO_CONSOLE")]
#[derive(IntoPrimitive, FromPrimitive, PartialEq, Eq, Clone, Copy, Debug)]
#[non_exhaustive]
#[repr(u16)]
pub enum Device {
#[doc(alias = "VIRTIO_CONSOLE_DEVICE_READY")]
DeviceReady = 0,
#[doc(alias = "VIRTIO_CONSOLE_DEVICE_ADD")]
DeviceAdd = 1,
#[doc(alias = "VIRTIO_CONSOLE_DEVICE_REMOVE")]
DeviceRemove = 2,
#[doc(alias = "VIRTIO_CONSOLE_PORT_READY")]
PortReady = 3,
#[doc(alias = "VIRTIO_CONSOLE_CONSOLE_PORT")]
ConsolePort = 4,
#[doc(alias = "VIRTIO_CONSOLE_RESIZE")]
Resize = 5,
#[doc(alias = "VIRTIO_CONSOLE_PORT_OPEN")]
PortOpen = 6,
#[doc(alias = "VIRTIO_CONSOLE_PORT_NAME")]
PortName = 7,
#[num_enum(catch_all)]
Unknown(u16),
}
#[doc(alias = "virtio_console_resize")]
#[cfg_attr(
feature = "zerocopy",
derive(
zerocopy_derive::KnownLayout,
zerocopy_derive::Immutable,
zerocopy_derive::FromBytes,
zerocopy_derive::IntoBytes,
)
)]
#[derive(Clone, Copy, Debug)]
#[repr(C)]
pub struct Resize {
pub cols: le16,
pub rows: le16,
}