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 guid::Guid;
9use mesh::MeshPayload;
10use vm_resource::Resource;
11use vm_resource::ResourceId;
12use vm_resource::kind::DiskHandleKind;
13use vm_resource::kind::PciDeviceHandleKind;
14
15/// A handle to an NVMe controller.
16#[derive(MeshPayload)]
17pub struct NvmeControllerHandle {
18    /// The subsystem ID to use when responding to controller identify queries.
19    pub subsystem_id: Guid,
20    /// The number of MSI-X interrupts to support.
21    pub msix_count: u16,
22    /// The number of IO queues to support.
23    pub max_io_queues: u16,
24    /// The initial set of namespaces.
25    pub namespaces: Vec<NamespaceDefinition>,
26}
27
28impl ResourceId<PciDeviceHandleKind> for NvmeControllerHandle {
29    const ID: &'static str = "nvme";
30}
31
32/// A controller namespace definition.
33#[derive(MeshPayload)]
34pub struct NamespaceDefinition {
35    /// The namespace ID.
36    pub nsid: u32,
37    /// Whether the disk is read only.
38    pub read_only: bool,
39    /// The backing disk resource.
40    pub disk: Resource<DiskHandleKind>,
41}