Nothing to see here, move along meow
1use core::mem::size_of;
2
3pub const BAR_TAG_NONE: u8 = 0;
4pub const BAR_TAG_MEMORY: u8 = 1;
5pub const BAR_TAG_IO: u8 = 2;
6
7pub const BAR_FLAG_64BIT: u8 = 1;
8pub const BAR_FLAG_PREFETCHABLE: u8 = 2;
9
10#[derive(Debug, Clone, Copy)]
11#[repr(C)]
12#[derive(zerocopy::FromBytes, zerocopy::IntoBytes, zerocopy::KnownLayout, zerocopy::Immutable)]
13pub struct BarInfoWire {
14 pub tag: u8,
15 pub flags: u8,
16 pub io_port_base: u16,
17 pub io_size: u16,
18 pub _reserved: [u8; 2],
19 pub mem_phys_base: u64,
20 pub mem_size: u64,
21}
22
23impl BarInfoWire {
24 pub const fn zeroed() -> Self {
25 Self {
26 tag: BAR_TAG_NONE,
27 flags: 0,
28 io_port_base: 0,
29 io_size: 0,
30 _reserved: [0; 2],
31 mem_phys_base: 0,
32 mem_size: 0,
33 }
34 }
35}
36
37#[derive(Debug, Clone, Copy)]
38#[repr(C)]
39#[derive(zerocopy::FromBytes, zerocopy::IntoBytes, zerocopy::KnownLayout, zerocopy::Immutable)]
40pub struct BlockedRangeWire {
41 pub start: u16,
42 pub end: u16,
43}
44
45impl BlockedRangeWire {
46 pub const fn zeroed() -> Self {
47 Self { start: 0, end: 0 }
48 }
49}
50
51#[derive(Debug, Clone, Copy)]
52#[repr(C)]
53#[derive(zerocopy::FromBytes, zerocopy::IntoBytes, zerocopy::KnownLayout, zerocopy::Immutable)]
54pub struct PciDeviceInfoWire {
55 pub bus: u8,
56 pub device: u8,
57 pub function: u8,
58 pub class_code: u8,
59 pub subclass: u8,
60 pub prog_if: u8,
61 pub header_type: u8,
62 pub interrupt_line: u8,
63 pub interrupt_pin: u8,
64 pub _pad0: u8,
65 pub vendor_id: u16,
66 pub device_id: u16,
67 pub _pad1: [u8; 2],
68 pub bars: [BarInfoWire; 6],
69 pub blocked_config_ranges: [BlockedRangeWire; 4],
70}
71
72const _: () = assert!(size_of::<BarInfoWire>() == 24);
73const _: () = assert!(size_of::<BlockedRangeWire>() == 4);
74const _: () = assert!(size_of::<PciDeviceInfoWire>() == 176);