Skip to main content

rdif_block/
info.rs

1use crate::request::RequestFlags;
2
3#[derive(Debug, Clone, Copy)]
4pub struct DeviceInfo {
5    pub num_blocks: u64,
6    pub logical_block_size: usize,
7    pub read_only: bool,
8    pub name: Option<&'static str>,
9    pub vendor: Option<&'static str>,
10    pub model: Option<&'static str>,
11}
12
13impl DeviceInfo {
14    pub const fn new(num_blocks: u64, logical_block_size: usize) -> Self {
15        Self {
16            num_blocks,
17            logical_block_size,
18            read_only: false,
19            name: None,
20            vendor: None,
21            model: None,
22        }
23    }
24}
25
26#[derive(Debug, Clone, Copy)]
27pub struct QueueLimits {
28    pub dma_mask: u64,
29    pub dma_alignment: usize,
30    pub max_blocks_per_request: u32,
31    pub max_segments: usize,
32    pub max_segment_size: usize,
33    pub supported_flags: RequestFlags,
34    pub supports_flush: bool,
35    pub supports_discard: bool,
36    pub supports_write_zeroes: bool,
37}
38
39impl QueueLimits {
40    pub const fn simple(logical_block_size: usize, dma_mask: u64) -> Self {
41        Self {
42            dma_mask,
43            dma_alignment: logical_block_size,
44            max_blocks_per_request: 1,
45            max_segments: 1,
46            max_segment_size: logical_block_size,
47            supported_flags: RequestFlags::NONE,
48            supports_flush: false,
49            supports_discard: false,
50            supports_write_zeroes: false,
51        }
52    }
53}
54
55#[derive(Debug, Clone, Copy)]
56pub struct QueueInfo {
57    pub id: usize,
58    pub device: DeviceInfo,
59    pub limits: QueueLimits,
60}