nvme/ds/controller/properties/
config.rs1use 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}