Expand description
The raw linked-list layer: DMA channel 2 walking a chain of GP0 nodes.
Each node is a tag word, the next node’s address in bits 23..=0
(LIST_END ends the list) and the payload word count in bits 31..=24,
followed by that many GP0 words. The DMA controller follows the links on
its own, so whatever a tag names is read with no regard for Rust’s
borrows: that is why submit_raw and submit_async_raw are
unsafe. The safe layers above them prove their contract instead:
crate::frame with lifetimes, StaticChain with 'static
immutability, and crate::ordered with 'static storage it owns.
Every wait here is bounded. A walk that outlives its budget is aborted
and the GPU’s half-read command discarded, so a wedged channel costs a
reset instead of a hang; crate::recovery_stats counts the aborts.
Structs§
- Draw
Done Node - A linked-list DMA node holding only GP0(1Fh), for the end of a chain.
- Static
Packet - One immutable linked-list node:
WGP0 words, then the end of the list.
Constants§
- LIST_
END - The link value that ends a list.
- MAX_
NODE_ WORDS - Most payload words one linked-list DMA node may carry (the words after its tag), the depth of the GPU’s command FIFO.
Statics§
- DRAW_
DONE_ NODE - The shared GP0(1Fh) node: one payload word, then the end of the list.
Traits§
- Static
Chain - A complete, immutable linked list:
StaticPacketorDrawDoneNode.
Functions§
- submit_
async_ ⚠raw - Kick the chain at
headand return while the GPU walks it. - submit_
raw ⚠ - Kick the chain at
headand wait until it has been walked. - wait
- Wait until the walk kicked last has finished reading its chain.