dwc2_hcd_start_xfer_ddma(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… NAME πŸ’…

dwc2_hcd_start_xfer_ddma β€” starts a transfer in Descriptor DMA mode ✨

Okay so real talk, this is a function from the Kernel API Manual, and it's lowkey the "get this transfer moving" moment for Descriptor DMA. Let's get into it 🫢


🌸 SYNOPSIS 🌸

void dwc2_hcd_start_xfer_ddma (struct dwc2_hsotg *hsotg , struct dwc2_qh
*qh );

Yes bestie it's void, and yes we'll talk about the RETURN section in a sec. Just… stay with me 😭


πŸŽ€ ARGUMENTS πŸŽ€

  • hsotg β€” the HCD state structure for the DWC OTG controller πŸ’– like, the whole controller's situation lives in here
  • qh β€” the QH to init πŸ‘‘ this is the one getting set up, main character energy fr

⭐ RETURN ⭐

0 if successful, negative error code otherwise.

That's what the page says, and that's what I'm telling you. Periodt πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the vibe check on what this actually does ✨

For Control and Bulk endpoints, it initializes the descriptor list and starts the transfer. Simple, clean, iconic 🌈

For Interrupt and Isochronous endpoints, it initializes the descriptor list and then updates FrameList, marking the appropriate entries as active. Very much a "set it up, then flag it live" sitch πŸ’œ

For Isochronous endpoints, the starting descriptor index is calculated based on the scheduled frame β€” but only on the first transfer descriptor within a session 🎯 Then the transfer is started via enabling the channel. Slay.

And also for Isochronous endpoints: the channel is not halted on the XferComplete interrupt, so it stays assigned to the endpoint (QH) until the session is done 🧚 Not me pointing out that this is the deliberate behaviour, okay, it's just how it works.


πŸ”₯ SEE ALSO πŸ”₯


And that's the whole page cutie πŸ“ this came out of the ./drivers/usb/dwc2 corner of the kernel, dated October 2026 β€” go off, Descriptor DMA, no cap πŸ’€βœ¨

πŸ“¦ where this page comes from