pub unsafe fn start(ch: Channel, transfer: Transfer)Expand description
Program channel ch with transfer and start it.
The same three stores every SDK driver makes: address, size, a
compiler-only barrier that publishes ordinary RAM stores made before the
call (it emits no instruction), then control. The caller still enables
the channel (enable_channel) and waits for completion (wait_done).
§Safety
From the control store until the channel goes idle (wait_done
returns true, or abort stops it), the DMA controller reads or writes
RAM with no regard for Rust’s borrow rules. The caller must guarantee that
for that whole window:
- every word the transfer can write (a device-to-RAM channel, such as MDEC-out, CD-ROM, GPU readback or the ordering-table clear) lies in memory the caller owns exclusively, with no live Rust reference to it;
- every word the transfer can read (a RAM-to-device channel, or each node of a linked list and the nodes its tags link to) is live, initialised and not written by anyone else;
- the extent is the one
sizeand the sync mode describe, remembering that a zero block count means 65,536 blocks; - the channel is idle when this is called (silicon ignores a control write to a busy channel, so the old transfer would keep running).