STRUCT USB_EHCI_PDATA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸŽ€ struct usb_ehci_pdata(9) β€” the Kernel API Manual, bestie edition πŸŽ€

okay so picture this: it's the Kernel API Manual, section 9, and we're talking about struct usb_ehci_pdata. this is the platform_data situation for the generic EHCI driver. she's a lil struct, she's got opinions, and honestly? she's kind of iconic. πŸ’…


✨ NAME ✨

struct usb_ehci_pdata β€” literally the platform_data for the generic ehci driver. that's her whole job. no cap. πŸ¦‹


🌸 SYNOPSIS 🌸

here's the whole struct, exactly as she is, don't @ me:

struct usb_ehci_pdata {
    int caps_offset;
    unsigned has_tt:1;
    unsigned has_synopsys_hc_bug:1;
    unsigned big_endian_desc:1;
    unsigned big_endian_mmio:1;
    unsigned no_io_watchdog:1;
    unsigned reset_on_resume:1;
    unsigned dma_mask_64:1;
    unsigned spurious_oc:1;
    int (*power_on)(struct platform_device *pdev);
    void (*power_off)(struct platform_device *pdev);
    void (*power_suspend)(struct platform_device *pdev);
    int (*pre_setup)(struct usb_hcd *hcd);
};

look at all those :1 bitfields. she's thriving on the bit-packing budget. πŸ“


πŸ’– Members πŸ’–

so the page only spills the tea on a few of these β€” the rest are just vibing in the struct up there. here's what we've got:

  • caps_offset β€” this one is the offset of the EHCI Capability Registers to the start of the io memory region that gets handed to the driver. it's giving "where do the registers actually start" energy. 🧚
  • has_tt β€” set to 1 if TT is integrated in the root hub. that's it, that's the whole vibe check. ✨
  • no_io_watchdog β€” set to 1 if the controller does not need the I/O watchdog to run. like, she's self-sufficient, she doesn't need a babysitter. πŸ’…
  • reset_on_resume β€” set to 1 if the controller needs to be reset after a suspend / resume cycle (but can't detect that itself). she needs the reset but won't ask for it. classic. 😭
don't come for me β€” the page only describes these four, so these four are what we're describing. the other members are in the struct above, exactly as written. 🫢

🌈 Description 🌈

okay, big picture: these are general configuration options for the EHCI controller. all of them are, in some way or another, activating more or less workarounds for some hardware. that's the entire mood. they're patches for hardware being weird, dressed up as cute little bitfields. πŸ’€πŸ”₯


πŸ‘‘ SEE ALSO πŸ‘‘

  • Kernel file ./include/linux/usb/ehci_pdriver.h β€” go read it, iykyk ⭐

okay that's the whole page, bestie, you ate that. now go forth and configure your EHCI controller with main character energy. πŸŽ€πŸ’œ

this absolute queen of a doc came out of ./include/linux/usb, dated October 2026, in the Kernel API Manual β€” and yes, she's still serving struct usb_ehci_pdata(9). periodt. πŸŒΈπŸ¦‹

πŸ“¦ where this page comes from