nvme/ds/controller/properties/
config.rs

1use modular_bitfield::prelude::*;
2
3#[derive(Copy, Clone)]
4#[bitfield(bits = 32)]
5#[repr(u32)]
6pub struct ControllerConfig {
7    pub enable: bool,
8    #[skip]
9    res: B3,
10    pub io_command_set_selected: IOCommandSet,
11    pub mem_page_size: B4,
12    pub arbitration_mechanism: ArbitrationMechanism,
13    pub shutdown_notification: ShutdownNotification,
14    pub io_submission_queue_entry_size: B4,
15    pub io_completion_queue_entry_size: B4,
16    pub controller_ready_independent_of_media_enable: bool,
17    #[skip]
18    res1: B7,
19}
20
21#[derive(Copy, Clone, BitfieldSpecifier, Debug)]
22#[bits = 3]
23pub enum IOCommandSet {
24    NVMCommandSet,
25    AllSupported = 0b110,
26    AdminOnly = 0b111,
27}
28
29#[derive(Copy, Clone, BitfieldSpecifier, Debug)]
30#[bits = 3]
31pub enum ArbitrationMechanism {
32    RoundRobin,
33    WeightedRoundRobinWithUrgent,
34    VendorSpecific = 0b111,
35}
36
37#[derive(Copy, Clone, BitfieldSpecifier, Debug)]
38#[bits = 2]
39pub enum ShutdownNotification {
40    NoNotification,
41    NormalShutdown,
42    AbruptShutdown,
43}