driver_interface/
register.rs1use core::ops::Deref;
2
3use crate::{intc, timer};
4
5#[derive(Clone)]
6pub struct DriverRegister {
7 pub name: &'static str,
8 pub probe_kinds: &'static [ProbeKind],
9}
10
11unsafe impl Send for DriverRegister {}
12unsafe impl Sync for DriverRegister {}
13
14pub enum ProbeKind {
15 Fdt {
16 compatibles: &'static [&'static str],
17 on_probe: OnProbeKindFdt,
18 },
19}
20
21#[derive(Clone)]
22pub enum OnProbeKindFdt {
23 InterruptController(intc::OnProbeFdt),
24 Timer(timer::OnProbeFdt),
25}
26
27#[repr(C)]
28pub struct DriverRegisterSlice {
29 data: *const u8,
30 len: usize,
31}
32
33impl DriverRegisterSlice {
34 pub fn from_raw(data: &'static [u8]) -> Self {
35 Self {
36 data: data.as_ptr(),
37 len: data.len(),
38 }
39 }
40
41 pub fn as_slice(&self) -> &[DriverRegister] {
42 unsafe {
43 core::slice::from_raw_parts(self.data as _, self.len / size_of::<DriverRegister>())
44 }
45 }
46}
47
48impl Deref for DriverRegisterSlice {
49 type Target = [DriverRegister];
50
51 fn deref(&self) -> &Self::Target {
52 self.as_slice()
53 }
54}