STRUCT IUDMA_CH(9)
πΈ struct iudma_ch(9) πΈ
Kernel API Manual? Yup, bestie β this is the group-chat-approved tour of struct iudma_ch, the struct that literally represents the current state of a single IUDMA channel. No cap, it's giving very structured main character energy.
π NAME π
struct iudma_ch β represents the current state of a single IUDMA channel. That's the whole vibe: one channel, one state bundle. π«Ά
β¨ SYNOPSIS β¨
okay so here is the exact shape, bestie β copy it character-for-character, no freestyling:
struct iudma_ch {
unsigned int ch_idx;
int ep_num;
bool enabled;
int max_pkt;
bool is_tx;
struct bcm63xx_ep *bep;
struct bcm63xx_udc *udc;
struct bcm_enet_desc *read_bd;
struct bcm_enet_desc *write_bd;
struct bcm_enet_desc *end_bd;
int n_bds_used;
struct bcm_enet_desc *bd_ring;
dma_addr_t bd_ring_dma;
unsigned int n_bds;
};
π Members π
ch_idxβ the IUDMA channel index, from0toBCM63XX_NUM_IUDMA-1. iconic little range.ep_numβ the USB endpoint number. It's-1for ep0 RX.enabledβ whetherbcm63xx_ep_enablehas been called. vibe check: enabled or not?max_pktβ the "Chunk size" on the USB interface. It's based on interface speed.is_txβtruefor TX,falsefor RX. simple as that, fr fr.bepβ pointer to the associated endpoint.NULLfor ep0 RX.udcβ reference to the device controller.read_bdβ next buffer descriptor to reap from the hardware.write_bdβ next BD available for a new packet.end_bdβ points to the final BD in the ring. the end, literally.n_bds_usedβ number of BD entries currently occupied.bd_ringβ base pointer to the BD ring.bd_ring_dmaβ physical (DMA) address ofbd_ring.n_bdsβ total number of BDs in the ring.
π Description π
okay so ep0 is the bidirectional bestie, which is why it has two IUDMA channels: IUDMA_EP0_RXCHAN and IUDMA_EP0_TXCHAN. The struct usb_ep associated with ep0 is for TX (IN) only β yes, TX only, that's the whole rule.
Every bulk/intr endpoint has a single IUDMA channel and a single struct usb_ep. That's it, that's the setup. periodt. π
π¦ SEE ALSO π¦
Kernel file ./drivers/usb/gadget/udc/bcm63xx_udc.c is the home base. The whole linked-bestie list, no skips:
struct iudma_ch_cfg(9)struct bcm63xx_ep(9)struct bcm63xx_req(9)struct bcm63xx_udc(9)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)iudma_write(9)iudma_read(9)iudma_reset_channel(9)iudma_init_channel(9)iudma_init(9)iudma_uninit(9)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)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)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)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_data_isr(9)bcm63xx_udc_init_debugfs(9)bcm63xx_udc_cleanup_debugfs(9)bcm63xx_udc_probe(9)bcm63xx_udc_remove(9)
π
cute little sign-off: source/version is ./drivers/usb/gadget/udc, date is October 2026, and yes bestie we are still talking about struct iudma_ch(9). Stay hydrated and keep your BDs aligned! π«Άβ¨
π¦ 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