intelflash/
section.rs

1// SPDX-License-Identifier: MIT
2
3use plain::Plain;
4use uefi::guid::Guid;
5
6#[derive(Debug)]
7pub enum HeaderKind {
8    Compression,
9    GuidDefined,
10    Disposable,
11    Pe32,
12    Pic,
13    Te,
14    DxeDepex,
15    Version,
16    UserInterface,
17    Compatibility16,
18    VolumeImage,
19    Freeform,
20    Raw,
21    PeiDepex,
22    MmDepex,
23    Unknown(u8)
24}
25
26//TODO: Extended size
27#[repr(packed)]
28pub struct Header {
29    size: [u8; 3],
30    kind: u8,
31}
32
33impl Header {
34    pub fn size(&self) -> usize {
35        self.size[0] as usize | (self.size[1] as usize) << 8 | (self.size[2] as usize) << 16
36    }
37
38    pub fn kind(&self) -> HeaderKind {
39        match self.kind {
40            0x01 => HeaderKind::Compression,
41            0x02 => HeaderKind::GuidDefined,
42            0x03 => HeaderKind::Disposable,
43            0x10 => HeaderKind::Pe32,
44            0x11 => HeaderKind::Pic,
45            0x12 => HeaderKind::Te,
46            0x13 => HeaderKind::DxeDepex,
47            0x14 => HeaderKind::Version,
48            0x15 => HeaderKind::UserInterface,
49            0x16 => HeaderKind::Compatibility16,
50            0x17 => HeaderKind::VolumeImage,
51            0x18 => HeaderKind::Freeform,
52            0x19 => HeaderKind::Raw,
53            0x1B => HeaderKind::PeiDepex,
54            0x1C => HeaderKind::MmDepex,
55            unknown => HeaderKind::Unknown(unknown)
56        }
57    }
58}
59
60unsafe impl Plain for Header {}
61
62#[repr(packed)]
63pub struct GuidDefined {
64    pub guid: Guid,
65    pub data_offset: u16,
66    pub attributes: u16,
67}
68
69unsafe impl Plain for GuidDefined {}