Skip to main content
← PSoXide SDK guides and examples · SDK f2fec1c301f1 · All Cargo features enabled; check feature gates before use.

Module chain

Module chain 

Source
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§

DrawDoneNode
A linked-list DMA node holding only GP0(1Fh), for the end of a chain.
StaticPacket
One immutable linked-list node: W GP0 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§

StaticChain
A complete, immutable linked list: StaticPacket or DrawDoneNode.

Functions§

submit_async_raw⚠
Kick the chain at head and return while the GPU walks it.
submit_raw⚠
Kick the chain at head and wait until it has been walked.
wait
Wait until the walk kicked last has finished reading its chain.