hblack_transfer doesn't need to be unsafe

This commit is contained in:
Gwilym Inzani 2024-05-27 13:23:49 +01:00
parent 248f71dbfa
commit e9ce8cd2ad

View file

@ -70,14 +70,10 @@ impl Dma {
/// drop the DmaTransferHandler return value until the next vblank interrupt to ensure that you /// drop the DmaTransferHandler return value until the next vblank interrupt to ensure that you
/// a continuous effect. /// a continuous effect.
/// ///
/// # Safety
///
/// While DmaTransferHandle is not dropped, the slice at `values` must not move in memory.
///
/// # Examples /// # Examples
/// ///
/// See the `dma_effect_*` examples in the repository to see some ways to use this. /// See the `dma_effect_*` examples in the repository to see some ways to use this.
pub unsafe fn hblank_transfer<T>( pub fn hblank_transfer<T>(
&self, &self,
location: &DmaControllable<T>, location: &DmaControllable<T>,
values: &[T], values: &[T],
@ -93,10 +89,13 @@ impl Dma {
let n_transfers = (size_of::<T>() / 2) as u32; let n_transfers = (size_of::<T>() / 2) as u32;
self.source_addr.set(handle.data.as_ptr().add(1) as u32); self.source_addr.set(handle.data[1..].as_ptr() as u32);
self.dest_addr.set(location.memory_location as u32); self.dest_addr.set(location.memory_location as u32);
location.memory_location.write_volatile(values[0]); // SAFETY: by construction it is safe to write to location.memory_location
unsafe {
location.memory_location.write_volatile(values[0]);
}
self.ctrl_addr.set( self.ctrl_addr.set(
(0b10 << 0x15) | // keep destination address fixed (0b10 << 0x15) | // keep destination address fixed