1#![forbid(unsafe_code)]
7
8use crate::fault::FaultConfiguration;
9use guid::Guid;
10use mesh::MeshPayload;
11use vm_resource::Resource;
12use vm_resource::ResourceId;
13use vm_resource::kind::DiskHandleKind;
14use vm_resource::kind::PciDeviceHandleKind;
15
16pub mod fault;
17
18#[derive(MeshPayload)]
20pub struct NvmeControllerHandle {
21 pub subsystem_id: Guid,
23 pub msix_count: u16,
25 pub max_io_queues: u16,
27 pub namespaces: Vec<NamespaceDefinition>,
29}
30
31impl ResourceId<PciDeviceHandleKind> for NvmeControllerHandle {
32 const ID: &'static str = "nvme";
33}
34
35#[derive(MeshPayload)]
37pub struct NvmeFaultControllerHandle {
38 pub subsystem_id: Guid,
40 pub msix_count: u16,
42 pub max_io_queues: u16,
44 pub namespaces: Vec<NamespaceDefinition>,
46 pub fault_config: FaultConfiguration,
48}
49
50impl ResourceId<PciDeviceHandleKind> for NvmeFaultControllerHandle {
51 const ID: &'static str = "nvme_fault";
52}
53
54#[derive(MeshPayload)]
56pub struct NamespaceDefinition {
57 pub nsid: u32,
59 pub read_only: bool,
61 pub disk: Resource<DiskHandleKind>,
63}