nvme_resources/
lib.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4//! Resource definitions for NVMe controllers.
5
6#![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/// A handle to an NVMe controller.
19#[derive(MeshPayload)]
20pub struct NvmeControllerHandle {
21    /// The subsystem ID to use when responding to controller identify queries.
22    pub subsystem_id: Guid,
23    /// The number of MSI-X interrupts to support.
24    pub msix_count: u16,
25    /// The number of IO queues to support.
26    pub max_io_queues: u16,
27    /// The initial set of namespaces.
28    pub namespaces: Vec<NamespaceDefinition>,
29}
30
31impl ResourceId<PciDeviceHandleKind> for NvmeControllerHandle {
32    const ID: &'static str = "nvme";
33}
34
35/// A handle to a NVMe fault controller.
36#[derive(MeshPayload)]
37pub struct NvmeFaultControllerHandle {
38    /// The subsystem ID to use when responding to controller identify queries.
39    pub subsystem_id: Guid,
40    /// The number of MSI-X interrupts to support.
41    pub msix_count: u16,
42    /// The number of IO queues to support.
43    pub max_io_queues: u16,
44    /// The initial set of namespaces.
45    pub namespaces: Vec<NamespaceDefinition>,
46    /// Configuration for the fault
47    pub fault_config: FaultConfiguration,
48}
49
50impl ResourceId<PciDeviceHandleKind> for NvmeFaultControllerHandle {
51    const ID: &'static str = "nvme_fault";
52}
53
54/// A controller namespace definition.
55#[derive(MeshPayload)]
56pub struct NamespaceDefinition {
57    /// The namespace ID.
58    pub nsid: u32,
59    /// Whether the disk is read only.
60    pub read_only: bool,
61    /// The backing disk resource.
62    pub disk: Resource<DiskHandleKind>,
63}