STRUCT CDNSP_INTR_REG(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ struct cdnsp_intr_reg(9) ✨

okay so bestie, welcome to the <pink>struct cdnsp_intr_reg</pink> glow-up πŸ’… this is a kernel API manual page, and we're talking about the Interrupt Register Set β€” literally the lil control panel that makes your USB gadget yell "hey!! something happened!!" πŸ”” no cap, it's giving main character energy for your interrupts.


🌸 SYNOPSIS 🌸

here's the whole vibe, verbatim, don't touch a single character 🫢:

struct cdnsp_intr_reg {
    __le32 irq_pending;
    __le32 irq_control;
    __le32 erst_size;
    __le32 rsvd;
    __le64 erst_base;
    __le64 erst_dequeue;
 };

πŸŽ€ Members πŸŽ€

  • irq_pending β€” this one's the IMAN, aka the Interrupt Management Register 🧚 it's the girl who both enables interrupts and checks whether any are pending. multitasking icon.
  • irq_control β€” the IMOD, aka the Interrupt Moderation Register ✨ its whole job is to throttle interrupts. like yes bestie, calm down, we don't need to be pinged 4000 times a second πŸ’€
  • erst_size β€” how many segments live in the Event Ring Segment Table (ERST). it's the headcount πŸ“
  • erst_base β€” the base address of the ERST. the home address, if you will 🏠
  • erst_dequeue β€” the Event ring dequeue pointer πŸ‘‘ it's literally tracking where we're at.

πŸ’– Description πŸ’–

so every single interrupter (and yeah, each one is defined by a MSI-X vector, iykyk) has two besties attached to it: an event ring and an Event Ring Segment Table (ERST) 🌈

the event ring itself is made up of multiple segments β€” all the same size, no chaos allowed, everything matching πŸŽ€ the controller drops events onto the ring and then, quote, "updates the Cycle bit in the TRBs to indicate to software the current position of the Enqueue Pointer." 😭 so the driver sees those events and updates the dequeue pointer. that's the whole loop, fr fr πŸ”


⭐ SEE ALSO ⭐

kernel file: ./drivers/usb/cdns3/cdnsp-gadget.h β€” go read it, bestie πŸ“–

the whole squad, all of them, no gatekeeping:

  • struct cdnsp_cap_regs(9)
  • struct cdnsp_op_regs(9)
  • struct cdnsp_port_regs(9)
  • struct cdnsp_run_regs(9)
  • struct cdnsp_rev_cap(9)
  • struct cdnsp_doorbell_array(9)
  • struct cdnsp_container_ctx(9)
  • struct cdnsp_slot_ctx(9)
  • struct cdnsp_ep_ctx(9)
  • struct cdnsp_stream_info(9)
  • struct cdnsp_ep(9)
  • struct cdnsp_device_context_array(9)
  • struct cdnsp_transfer_event(9)
  • struct cdnsp_link_trb(9)
  • struct cdnsp_event_cmd(9)
  • struct cdnsp_segment(9)
  • struct cdnsp_td(9)
  • struct cdnsp_dequeue_state(9)
  • struct cdnsp_ring(9)
  • struct cdnsp_erst_entry(9)
  • struct cdnsp_erst(9)
  • struct cdnsp_request(9)
  • struct cdnsp_port(9)
  • struct cdnsp_device(9)
  • next_request(9)

mwah πŸ’‹ that's the whole page. this lil chapter of the manual lives over at ./drivers/usb/cdns3, dated October 2026 β€” so like, mark your calendar bestie πŸ—“οΈβœ¨ slay, you're done, go read some more structs πŸ¦‹πŸ’œ

πŸ“¦ where this page comes from