diff --git a/embassy-stm32/src/eth/mod.rs b/embassy-stm32/src/eth/mod.rs index 04c74e60..89d2c5a3 100644 --- a/embassy-stm32/src/eth/mod.rs +++ b/embassy-stm32/src/eth/mod.rs @@ -5,6 +5,7 @@ mod _version; pub mod generic_smi; +use core::mem::MaybeUninit; use core::task::Context; use embassy_net_driver::{Capabilities, LinkState}; @@ -30,43 +31,19 @@ pub struct PacketQueue { impl PacketQueue { pub const fn new() -> Self { - #[cfg(feature = "nightly")] - { - let mut this = core::mem::MaybeUninit::uninit(); - unsafe { - Self::init(&mut this); - this.assume_init() - } - } - #[cfg(not(feature = "nightly"))] - { - const NEW_TDES: TDes = TDes::new(); - const NEW_RDES: RDes = RDes::new(); - Self { - tx_desc: [NEW_TDES; TX], - rx_desc: [NEW_RDES; RX], - tx_buf: [Packet([0; TX_BUFFER_SIZE]); TX], - rx_buf: [Packet([0; RX_BUFFER_SIZE]); RX], - } + const NEW_TDES: TDes = TDes::new(); + const NEW_RDES: RDes = RDes::new(); + Self { + tx_desc: [NEW_TDES; TX], + rx_desc: [NEW_RDES; RX], + tx_buf: [Packet([0; TX_BUFFER_SIZE]); TX], + rx_buf: [Packet([0; RX_BUFFER_SIZE]); RX], } } // Allow to initialize a Self without requiring it to go on the stack - #[cfg(feature = "nightly")] - pub const unsafe fn init(this: &mut core::mem::MaybeUninit) { - let this: &mut Self = unsafe { this.assume_init_mut() }; - let mut i = 0; - while i < TX { - this.tx_desc[i] = TDes::new(); - this.tx_buf[i] = Packet([0; TX_BUFFER_SIZE]); - i += 1; - } - i = 0; - while i < RX { - this.rx_desc[i] = RDes::new(); - this.rx_buf[i] = Packet([0; RX_BUFFER_SIZE]); - i += 1; - } + pub unsafe fn init(this: &mut MaybeUninit) { + this.as_mut_ptr().write_bytes(0u8, core::mem::size_of::()); } } diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs index 7c0b2d51..eeaa04f6 100644 --- a/embassy-stm32/src/lib.rs +++ b/embassy-stm32/src/lib.rs @@ -1,13 +1,7 @@ #![no_std] #![cfg_attr( feature = "nightly", - feature( - type_alias_impl_trait, - async_fn_in_trait, - impl_trait_projections, - const_mut_refs, - const_maybe_uninit_assume_init - ) + feature(type_alias_impl_trait, async_fn_in_trait, impl_trait_projections) )] #![cfg_attr(feature = "nightly", allow(incomplete_features))]