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}