1use plain::Plain;
2
3#[derive(Clone, Copy, Debug)]
4#[repr(packed)]
5pub struct FmapArea {
6 pub offset: u32,
7 pub size: u32,
8 pub name: [u8; 32],
9 pub flags: u16,
10}
11
12#[derive(Clone, Copy, Debug)]
13#[repr(packed)]
14pub struct Fmap {
15 pub signature: [u8; 8],
16 pub ver_major: u8,
17 pub ver_minor: u8,
18 pub base: u64,
19 pub size: u32,
20 pub name: [u8; 32],
21 pub nareas: u16,
22}
23
24impl Fmap {
25 pub fn area(&self, i: u16) -> &FmapArea {
26 unsafe {
27 &*((self as *const Self).add(1) as *const FmapArea).add(i as usize)
28 }
29 }
30}
31
32unsafe impl Plain for Fmap {}