bcm63xx_udc_data_isr(9)
π bcm63xx_udc_data_isr(9) π
okay so bestie, you found a page from the Kernel API Manual, section 9 β the kernel functions girlies. this one's about an interrupt handler and it's lowkey iconic. let's get into it π
β¨ NAME β¨
bcm63xx_udc_data_isr β the ISR for data path events (IUDMA). no cap, that's the whole vibe check.
πΈ SYNOPSIS πΈ
irqreturn_t bcm63xx_udc_data_isr (int irq , void *dev_id );
like, it takes two things and gives you back an irqreturn_t. simple. slay.
π¦ ARGUMENTS π¦
irqβ the IRQ number. and honestly? it's unused. literally just sitting there being decorative πdev_idβ a reference to the IUDMA channel that generated the interrupt. this one's the main character, it's the whole reason we're here fr fr.
π DESCRIPTION π
okay so here's the tea β β this is the interrupt service routine for data path events on IUDMA.
for the two ep0 channels, we do special handling that kicks off the ep0 worker thread. special treatment? deserved. π
for the normal bulk/intr channels, it's one of two things depending on the situation:
- either it queues up the next buffer descriptor for the transaction β that's the incomplete transaction case, the "we're not done yet bestie" energy,
- or it invokes the completion callback β that's the complete transactions case, the "ate and left no crumbs" moment π₯
π SEE ALSO π
the whole friend group π«Ά β all these are chill like that:
the kernel file: ./drivers/usb/gadget/udc/bcm63xx_udc.c
the structs:
struct iudma_ch_cfg(9)struct iudma_ch(9)struct bcm63xx_ep(9)struct bcm63xx_req(9)struct bcm63xx_udc(9)
the ep/dma/fifo girlies:
bcm63xx_ep_dma_select(9)bcm63xx_set_stall(9)bcm63xx_fifo_setup(9)bcm63xx_fifo_reset_ep(9)bcm63xx_fifo_reset(9)bcm63xx_ep_init(9)bcm63xx_ep_setup(9)
the iudma crew:
iudma_write(9)iudma_read(9)iudma_reset_channel(9)iudma_init_channel(9)iudma_init(9)iudma_uninit(9)
the hw / phy / setup squad:
bcm63xx_set_ctrl_irqs(9)bcm63xx_select_phy_mode(9)bcm63xx_select_pullup(9)bcm63xx_uninit_udc_hw(9)bcm63xx_init_udc_hw(9)bcm63xx_ep_enable(9)bcm63xx_ep_disable(9)
the udc request handlers:
bcm63xx_udc_alloc_request(9)bcm63xx_udc_free_request(9)bcm63xx_udc_queue(9)bcm63xx_udc_dequeue(9)bcm63xx_udc_set_halt(9)bcm63xx_udc_set_wedge(9)
the ep0 saga (it's giving entire trilogy):
bcm63xx_ep0_setup_callback(9)bcm63xx_ep0_spoof_set_cfg(9)bcm63xx_ep0_spoof_set_iface(9)bcm63xx_ep0_map_write(9)bcm63xx_ep0_complete(9)bcm63xx_ep0_nuke_reply(9)bcm63xx_ep0_read_complete(9)bcm63xx_ep0_internal_request(9)bcm63xx_ep0_do_setup(9)bcm63xx_ep0_do_idle(9)bcm63xx_ep0_one_round(9)bcm63xx_ep0_process(9)
the udc lifecycle + misc:
bcm63xx_udc_get_frame(9)bcm63xx_udc_pullup(9)bcm63xx_udc_start(9)bcm63xx_udc_stop(9)bcm63xx_update_cfg_iface(9)bcm63xx_update_link_speed(9)bcm63xx_update_wedge(9)bcm63xx_udc_ctrl_isr(9)bcm63xx_udc_init_debugfs(9)bcm63xx_udc_cleanup_debugfs(9)bcm63xx_udc_probe(9)bcm63xx_udc_remove(9)
ok that's the whole page bestie, no gatekeeping here π
and for the sign-off: this lil masterpiece lives in ./drivers/usb/gadget/udc, stamped October 2026 β periodt. π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms