mediatek_optical/
layout.rs1#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
9pub struct Range {
10 pub name: &'static str,
12 pub start: usize,
14 pub len: usize,
16}
17
18impl Range {
19 pub const fn end(&self) -> usize {
21 self.start + self.len
22 }
23
24 pub fn of<'a>(&self, image: &'a [u8]) -> Option<&'a [u8]> {
26 image.get(self.start..self.end())
27 }
28}
29
30pub const IMAGE_SIZE: usize = 0x20_0000;
32
33pub const BOOT_PAGE: Range = Range {
36 name: "boot page",
37 start: 0,
38 len: 0x400,
39};
40
41pub const BOOT_MIRROR: Range = Range {
43 name: "boot mirror",
44 start: 0x1_0000,
45 len: 0x400,
46};
47
48pub const BOOT_AREA: Range = Range {
51 name: "boot area",
52 start: 0,
53 len: 0x1000,
54};
55
56pub const CMAC_TABLE: Range = Range {
58 name: "integrity table",
59 start: 0x1_0400,
60 len: 16 * 28,
61};
62
63pub const BANNER: Range = Range {
65 name: "boot banner",
66 start: 0x3000,
67 len: 0x20,
68};
69
70pub const DESCRIPTOR: Range = Range {
73 name: "identity descriptor",
74 start: 0x1E_C000,
75 len: 0x100,
76};
77
78pub const UHD_REVOCATION: Range = Range {
80 name: "UHD revocation list",
81 start: 0x1D_8000,
82 len: 0x8000,
83};
84
85pub const BD_REVOCATION: Range = Range {
87 name: "BD revocation list",
88 start: 0x1E_0000,
89 len: 0x8000,
90};
91
92pub const SETTINGS: Range = Range {
94 name: "settings",
95 start: 0x1E_8000,
96 len: 0x4000,
97};
98
99pub const CALIBRATION: Range = Range {
101 name: "calibration",
102 start: 0x1F_0000,
103 len: 0x1_0000,
104};
105
106pub const DRIVE_WRITTEN: [Range; 4] = [UHD_REVOCATION, BD_REVOCATION, SETTINGS, CALIBRATION];
109
110pub fn is_erased(bytes: &[u8]) -> bool {
112 bytes.iter().all(|&b| b == 0xFF)
113}
114
115#[cfg(test)]
116#[path = "layout_tests.rs"]
117mod tests;