Avoid "missing_transmute_annotations" warnings (#1410)

This commit is contained in:
Björn Quentin 2024-04-08 13:47:36 +02:00 committed by GitHub
parent 52e5b94bd5
commit 41aa556764
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 344 additions and 95 deletions

View File

@ -310,7 +310,9 @@ unsafe fn get_assigned_cpu_interrupt(interrupt: Interrupt) -> Option<CpuInterrup
let cpu_intr = intr_map_base.offset(interrupt_number).read_volatile();
if cpu_intr > 0 {
Some(core::mem::transmute(cpu_intr - EXTERNAL_INTERRUPT_OFFSET))
Some(core::mem::transmute::<u32, CpuInterrupt>(
cpu_intr - EXTERNAL_INTERRUPT_OFFSET,
))
} else {
None
}
@ -327,15 +329,15 @@ mod vectored {
for (prio, num) in PRIORITY_TO_INTERRUPT.iter().enumerate() {
set_kind(
crate::get_core(),
core::mem::transmute(*num as u32),
core::mem::transmute::<u32, CpuInterrupt>(*num as u32),
InterruptKind::Level,
);
set_priority(
crate::get_core(),
core::mem::transmute(*num as u32),
core::mem::transmute((prio as u8) + 1),
core::mem::transmute::<u32, CpuInterrupt>(*num as u32),
core::mem::transmute::<u8, Priority>((prio as u8) + 1),
);
enable_cpu_interrupt(core::mem::transmute(*num as u32));
enable_cpu_interrupt(core::mem::transmute::<u32, CpuInterrupt>(*num as u32));
}
}
@ -349,7 +351,7 @@ mod vectored {
let interrupt_nr = status.trailing_zeros() as u16;
// safety: cast is safe because of repr(u16)
if let Some(cpu_interrupt) =
get_assigned_cpu_interrupt(core::mem::transmute(interrupt_nr))
get_assigned_cpu_interrupt(core::mem::transmute::<u16, Interrupt>(interrupt_nr))
{
let prio = get_priority_by_core(core, cpu_interrupt);
prios[prio as usize] |= 1 << (interrupt_nr as usize);
@ -371,8 +373,9 @@ mod vectored {
return Err(Error::InvalidInterruptPriority);
}
unsafe {
let cpu_interrupt =
core::mem::transmute(PRIORITY_TO_INTERRUPT[(level as usize) - 1] as u32);
let cpu_interrupt = core::mem::transmute::<u32, CpuInterrupt>(
PRIORITY_TO_INTERRUPT[(level as usize) - 1] as u32,
);
map(crate::get_core(), interrupt, cpu_interrupt);
enable_cpu_interrupt(cpu_interrupt);
}
@ -423,7 +426,8 @@ mod vectored {
) {
EspDefaultHandler(interrupt);
} else {
let handler: fn(&mut TrapFrame) = core::mem::transmute(handler);
let handler: fn(&mut TrapFrame) =
core::mem::transmute::<unsafe extern "C" fn(), fn(&mut TrapFrame)>(handler);
handler(save_frame);
}
}
@ -632,7 +636,7 @@ mod classic {
let prio = intr_prio_base
.offset(cpu_interrupt as isize)
.read_volatile();
core::mem::transmute(prio as u8)
core::mem::transmute::<u8, Priority>(prio as u8)
}
#[no_mangle]
#[link_section = ".trap"]
@ -761,7 +765,7 @@ mod plic {
let prio = plic_mxint_pri_ptr
.offset(cpu_interrupt_number)
.read_volatile();
core::mem::transmute(prio as u8)
core::mem::transmute::<u8, Priority>(prio as u8)
}
#[no_mangle]
#[link_section = ".trap"]
@ -904,7 +908,7 @@ mod clic {
unsafe {
let intr_cntrl = intr_cntrl(core, cpu_interrupt_number);
let val = InterruptControl(intr_cntrl.read_volatile());
core::mem::transmute(val.priority())
core::mem::transmute::<u8, Priority>(val.priority())
}
}
}

View File

@ -321,7 +321,8 @@ mod vectored {
let i = interrupt_nr as isize;
let cpu_interrupt = intr_map_base.offset(i).read_volatile();
// safety: cast is safe because of repr(u32)
let cpu_interrupt: CpuInterrupt = core::mem::transmute(cpu_interrupt);
let cpu_interrupt: CpuInterrupt =
core::mem::transmute::<u32, CpuInterrupt>(cpu_interrupt);
let level = cpu_interrupt.level() as u8 as usize;
levels[level] |= 1 << i;
@ -491,7 +492,8 @@ mod vectored {
) {
EspDefaultHandler(level, interrupt);
} else {
let handler: fn(&mut Context) = core::mem::transmute(handler);
let handler: fn(&mut Context) =
core::mem::transmute::<unsafe extern "C" fn(), fn(&mut Context)>(handler);
handler(save_frame);
}
}

View File

@ -76,42 +76,150 @@ pub(crate) fn get_io_mux_reg(gpio_num: u8) -> &'static crate::peripherals::io_mu
let iomux = &*crate::peripherals::IO_MUX::PTR;
match gpio_num {
0 => core::mem::transmute(iomux.gpio0()),
1 => core::mem::transmute(iomux.gpio1()),
2 => core::mem::transmute(iomux.gpio2()),
3 => core::mem::transmute(iomux.gpio3()),
4 => core::mem::transmute(iomux.gpio4()),
5 => core::mem::transmute(iomux.gpio5()),
6 => core::mem::transmute(iomux.gpio6()),
7 => core::mem::transmute(iomux.gpio7()),
8 => core::mem::transmute(iomux.gpio8()),
9 => core::mem::transmute(iomux.gpio9()),
10 => core::mem::transmute(iomux.gpio10()),
11 => core::mem::transmute(iomux.gpio11()),
12 => core::mem::transmute(iomux.gpio12()),
13 => core::mem::transmute(iomux.gpio13()),
14 => core::mem::transmute(iomux.gpio14()),
15 => core::mem::transmute(iomux.gpio15()),
16 => core::mem::transmute(iomux.gpio16()),
17 => core::mem::transmute(iomux.gpio17()),
18 => core::mem::transmute(iomux.gpio18()),
19 => core::mem::transmute(iomux.gpio19()),
20 => core::mem::transmute(iomux.gpio20()),
21 => core::mem::transmute(iomux.gpio21()),
22 => core::mem::transmute(iomux.gpio22()),
23 => core::mem::transmute(iomux.gpio23()),
24 => core::mem::transmute(iomux.gpio24()),
25 => core::mem::transmute(iomux.gpio25()),
26 => core::mem::transmute(iomux.gpio26()),
27 => core::mem::transmute(iomux.gpio27()),
32 => core::mem::transmute(iomux.gpio32()),
33 => core::mem::transmute(iomux.gpio33()),
34 => core::mem::transmute(iomux.gpio34()),
35 => core::mem::transmute(iomux.gpio35()),
36 => core::mem::transmute(iomux.gpio36()),
37 => core::mem::transmute(iomux.gpio37()),
38 => core::mem::transmute(iomux.gpio38()),
39 => core::mem::transmute(iomux.gpio39()),
0 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO0,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio0()),
1 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO1,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio1()),
2 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO2,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio2()),
3 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO3,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio3()),
4 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO4,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio4()),
5 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO5,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio5()),
6 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO6,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio6()),
7 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO7,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio7()),
8 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO8,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio8()),
9 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO9,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio9()),
10 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO10,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio10()),
11 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO11,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio11()),
12 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO12,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio12()),
13 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO13,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio13()),
14 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO14,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio14()),
15 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO15,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio15()),
16 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO16,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio16()),
17 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO17,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio17()),
18 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO18,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio18()),
19 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO19,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio19()),
20 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO20,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio20()),
21 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO21,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio21()),
22 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO22,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio22()),
23 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO23,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio23()),
24 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO24,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio24()),
25 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO25,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio25()),
26 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO26,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio26()),
27 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO27,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio27()),
32 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO32,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio32()),
33 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO33,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio33()),
34 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO34,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio34()),
35 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO35,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio35()),
36 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO36,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio36()),
37 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO37,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio37()),
38 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO38,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio38()),
39 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO39,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio39()),
_ => panic!(),
}
}

View File

@ -82,45 +82,162 @@ pub(crate) const fn get_io_mux_reg(gpio_num: u8) -> &'static crate::peripherals:
let iomux = &*crate::peripherals::IO_MUX::PTR;
match gpio_num {
0 => core::mem::transmute(iomux.gpio0()),
1 => core::mem::transmute(iomux.gpio1()),
2 => core::mem::transmute(iomux.gpio2()),
3 => core::mem::transmute(iomux.gpio3()),
4 => core::mem::transmute(iomux.gpio4()),
5 => core::mem::transmute(iomux.gpio5()),
6 => core::mem::transmute(iomux.gpio6()),
7 => core::mem::transmute(iomux.gpio7()),
8 => core::mem::transmute(iomux.gpio8()),
9 => core::mem::transmute(iomux.gpio9()),
10 => core::mem::transmute(iomux.gpio10()),
11 => core::mem::transmute(iomux.gpio11()),
12 => core::mem::transmute(iomux.gpio12()),
13 => core::mem::transmute(iomux.gpio13()),
14 => core::mem::transmute(iomux.gpio14()),
15 => core::mem::transmute(iomux.gpio15()),
16 => core::mem::transmute(iomux.gpio16()),
17 => core::mem::transmute(iomux.gpio17()),
18 => core::mem::transmute(iomux.gpio18()),
19 => core::mem::transmute(iomux.gpio19()),
20 => core::mem::transmute(iomux.gpio20()),
21 => core::mem::transmute(iomux.gpio21()),
26 => core::mem::transmute(iomux.gpio26()),
27 => core::mem::transmute(iomux.gpio27()),
32 => core::mem::transmute(iomux.gpio32()),
33 => core::mem::transmute(iomux.gpio33()),
34 => core::mem::transmute(iomux.gpio34()),
35 => core::mem::transmute(iomux.gpio35()),
36 => core::mem::transmute(iomux.gpio36()),
37 => core::mem::transmute(iomux.gpio37()),
38 => core::mem::transmute(iomux.gpio38()),
39 => core::mem::transmute(iomux.gpio39()),
40 => core::mem::transmute(iomux.gpio40()),
41 => core::mem::transmute(iomux.gpio41()),
42 => core::mem::transmute(iomux.gpio42()),
43 => core::mem::transmute(iomux.gpio43()),
44 => core::mem::transmute(iomux.gpio44()),
45 => core::mem::transmute(iomux.gpio45()),
46 => core::mem::transmute(iomux.gpio46()),
0 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO0,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio0()),
1 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO1,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio1()),
2 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO2,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio2()),
3 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO3,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio3()),
4 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO4,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio4()),
5 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO5,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio5()),
6 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO6,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio6()),
7 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO7,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio7()),
8 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO8,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio8()),
9 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO9,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio9()),
10 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO10,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio10()),
11 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO11,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio11()),
12 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO12,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio12()),
13 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO13,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio13()),
14 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO14,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio14()),
15 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO15,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio15()),
16 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO16,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio16()),
17 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO17,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio17()),
18 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO18,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio18()),
19 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO19,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio19()),
20 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO20,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio20()),
21 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO21,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio21()),
26 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO26,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio26()),
27 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO27,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio27()),
32 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO32,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio32()),
33 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO33,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio33()),
34 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO34,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio34()),
35 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO35,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio35()),
36 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO36,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio36()),
37 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO37,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio37()),
38 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO38,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio38()),
39 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO39,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio39()),
40 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO40,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio40()),
41 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO41,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio41()),
42 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO42,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio42()),
43 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO43,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio43()),
44 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO44,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio44()),
45 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO45,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio45()),
46 => core::mem::transmute::<
&'static crate::peripherals::io_mux::GPIO46,
&'static crate::peripherals::io_mux::GPIO0,
>(iomux.gpio46()),
_ => ::core::unreachable!(),
}
}

View File

@ -39,6 +39,12 @@ use crate::{
target0_conf::TARGET0_CONF_SPEC,
target0_hi::TARGET0_HI_SPEC,
target0_lo::TARGET0_LO_SPEC,
target1_conf::TARGET1_CONF_SPEC,
target1_hi::TARGET1_HI_SPEC,
target1_lo::TARGET1_LO_SPEC,
target2_conf::TARGET2_CONF_SPEC,
target2_hi::TARGET2_HI_SPEC,
target2_lo::TARGET2_LO_SPEC,
},
SYSTIMER,
},
@ -157,14 +163,26 @@ impl<T, DM: crate::Mode, const CHANNEL: u8> Alarm<T, DM, CHANNEL> {
systimer.target0_lo(),
),
1 => (
transmute(systimer.target1_conf()),
transmute(systimer.target1_hi()),
transmute(systimer.target1_lo()),
transmute::<&Reg<TARGET1_CONF_SPEC>, &Reg<TARGET0_CONF_SPEC>>(
systimer.target1_conf(),
),
transmute::<&Reg<TARGET1_HI_SPEC>, &Reg<TARGET0_HI_SPEC>>(
systimer.target1_hi(),
),
transmute::<&Reg<TARGET1_LO_SPEC>, &Reg<TARGET0_LO_SPEC>>(
systimer.target1_lo(),
),
),
2 => (
transmute(systimer.target2_conf()),
transmute(systimer.target2_hi()),
transmute(systimer.target2_lo()),
transmute::<&Reg<TARGET2_CONF_SPEC>, &Reg<TARGET0_CONF_SPEC>>(
systimer.target2_conf(),
),
transmute::<&Reg<TARGET2_HI_SPEC>, &Reg<TARGET0_HI_SPEC>>(
systimer.target2_hi(),
),
transmute::<&Reg<TARGET2_LO_SPEC>, &Reg<TARGET0_LO_SPEC>>(
systimer.target2_lo(),
),
),
_ => unreachable!(),
};