nvme/ds/controller/properties/
mod.rs

1use self::{
2    aqa::AdminQueueAttributes, capabilities::ControllerCap, config::ControllerConfig,
3    status::ControllerStatus,
4};
5
6pub mod aqa;
7pub mod capabilities;
8pub mod config;
9pub mod status;
10
11#[repr(C)]
12pub struct ControllerProperties {
13    pub capabilities: ControllerCap,
14    pub version: u32,
15    pub int_mask_set: u32,
16    pub int_mask_clear: u32,
17    pub configuration: ControllerConfig,
18    resv: u32,
19    pub status: ControllerStatus,
20    pub nvm_subsystem_reset: u32,
21    pub admin_queue_attr: AdminQueueAttributes,
22    pub admin_subqueue_base_addr: u64,
23    pub admin_comqueue_base_addr: u64,
24    pub memory_buffer_location: u32,
25    pub memory_buffer_size: u32,
26    pub boot_partition_info: u32,
27    pub boot_partition_read_select: u32,
28    pub boot_partition_memory_buffer_location: u64,
29    pub memory_buffer_memory_space_control: u64,
30    pub memory_buffer_status: u32,
31    pub memory_buffer_elasticity_buffer_size: u32,
32    pub memory_buffer_sustained_write_throughput: u32,
33    pub nvm_subsystem_shutdown: u32,
34    pub controller_ready_timeouts: u32,
35    resv2: u32,
36    resv3: [u8; 0xD90], //TODO: verify
37    pub pmem_capabilities: u32,
38    pub pmem_region_control: u32,
39    pub pmem_region_status: u32,
40    pub pmem_region_elasticity_buffer_size: u32,
41    pub pmem_region_sustained_write_throughput: u32,
42    pub pmem_region_controller_mem_space_control_lower: u32,
43    pub pmem_region_controller_mem_space_control_upper: u32,
44}
45
46impl ControllerProperties {
47    pub fn version_maj(&self) -> u16 {
48        (self.version >> 16) as u16
49    }
50
51    pub fn version_min(&self) -> u8 {
52        ((self.version >> 8) & 0xff) as u8
53    }
54}