STRUCT PCH_UDC_DEV(9)
π struct pch_udc_dev(9) π
okay so before we even start β this is a page from the Kernel API Manual, bestie. yes, the kernel. we're in the big leagues now. grab a lil beverage π, because this struct is the whole personality of the PCH USB device and it has a LOT going on.
β¨ NAME β¨
struct pch_udc_dev β the structure holding complete information of the PCH USB device. like, not a vibe, not a summary, the complete information. she's thorough π
πΈ SYNOPSIS πΈ
struct pch_udc_dev {
struct usb_gadget gadget;
struct usb_gadget_driver *driver;
struct pci_dev *pdev;
struct pch_udc_ep ep[PCH_UDC_EP_NUM];
spinlock_t lock;
unsigned stall:1, prot_stall:1, suspended:1, connected:1,
vbus_session:1, set_cfg_not_acked:1, waiting_zlp_ack:1;
struct dma_pool *data_requests;
struct dma_pool *stp_requests;
dma_addr_t dma_addr;
struct usb_ctrlrequest setup_data;
void __iomem *base_addr;
unsigned short bar;
struct pch_udc_cfg_data cfg_data;
struct pch_vbus_gpio_data vbus_gpio;
};
yes the indentation of that bitfield line is like that in the original. we don't touch it. we respect it. β¨
π Members π
okay so this is the part where we meet the whole cast. main character energy all around, honestly.
gadgetβ gadget driver data. the moment. the core.driverβ reference to the gadget driver bound. bound as in attached, not as in a book, bestie πpdevβ reference to the PCI device.epβ array of endpoints. plural. many of them. iconic.lockβ protects all state. literally the bouncer at the club, nobody gets through without her π₯stallβ stall requested.prot_stallβ protcol stall requested. (yes "protcol". that's how it's spelled here. we are simply reporting the facts π«Ά)suspendedβ driver in suspended state.connectedβ gadget driver associated.vbus_sessionβ requiredvbus_sessionstate.set_cfg_not_ackedβ pending acknowledgement 4 setup. (the "4" is doing a lot of work here, lowkey)waiting_zlp_ackβ pending acknowledgement 4 ZLP.data_requestsβ DMA pool for data requests.stp_requestsβ DMA pool for setup requests.dma_addrβ DMA pool for received.setup_dataβ received setup data.base_addrβ for mapped device memory.barβ PCI BAR used for mapped device memory.cfg_dataβ current cfg, intf, and alt in use.vbus_gpioβ GPIO informaton for detecting VBUS. (again: "informaton". we stan a consistent typo tbh π)
π¦ SEE ALSO π¦
starting off with the source, because duh:
Kernel file ./drivers/usb/gadget/udc/pch_udc.c struct pch_udc_data_dma_desc(9), struct pch_udc_stp_dma_desc(9), struct pch_udc_cfg_data(9), struct pch_udc_ep(9), struct pch_vbus_gpio_data(9), struct pch_udc_request(9), pch_udc_csr_busy(9), pch_udc_write_csr(9), pch_udc_read_csr(9), pch_udc_rmt_wakeup(9), pch_udc_get_frame(9), pch_udc_clear_selfpowered(9), pch_udc_set_selfpowered(9), pch_udc_set_disconnect(9), pch_udc_clear_disconnect(9), pch_udc_reconnect(9), pch_udc_vbus_session(9), pch_udc_ep_set_stall(9), pch_udc_ep_clear_stall(9), pch_udc_ep_set_trfr_type(9), pch_udc_ep_set_bufsz(9), pch_udc_ep_set_maxpkt(9), pch_udc_ep_set_subptr(9), pch_udc_ep_set_ddptr(9), pch_udc_ep_set_pd(9), pch_udc_ep_set_rrdy(9), pch_udc_ep_clear_rrdy(9), pch_udc_set_dma(9), pch_udc_clear_dma(9), pch_udc_set_csr_done(9), pch_udc_disable_interrupts(9), pch_udc_enable_interrupts(9), pch_udc_disable_ep_interrupts(9), pch_udc_enable_ep_interrupts(9), pch_udc_read_device_interrupts(9), pch_udc_write_device_interrupts(9), pch_udc_read_ep_interrupts(9), pch_udc_write_ep_interrupts(9), pch_udc_read_device_status(9), pch_udc_read_ep_control(9), pch_udc_clear_ep_control(9), pch_udc_read_ep_status(9), pch_udc_clear_ep_status(9), pch_udc_ep_set_nak(9), pch_udc_ep_clear_nak(9), pch_udc_ep_fifo_flush(9), pch_udc_ep_enable(9), pch_udc_ep_disable(9), pch_udc_wait_ep_stall(9), pch_udc_init(9), pch_udc_exit(9), pch_udc_pcd_get_frame(9), pch_udc_pcd_wakeup(9), pch_udc_pcd_selfpowered(9), pch_udc_pcd_pullup(9), pch_udc_pcd_vbus_session(9), pch_udc_pcd_vbus_draw(9), pch_vbus_gpio_get_value(9), pch_vbus_gpio_work_fall(9), pch_vbus_gpio_work_rise(9), pch_vbus_gpio_irq(9), pch_vbus_gpio_init(9), pch_vbus_gpio_free(9), complete_req(9), empty_req_queue(9), pch_udc_free_dma_chain(9), pch_udc_create_dma_chain(9), prepare_dma(9), process_zlp(9), pch_udc_start_rxrequest(9), pch_udc_pcd_ep_enable(9), pch_udc_pcd_ep_disable(9), pch_udc_alloc_request(9), pch_udc_free_request(9), pch_udc_pcd_queue(9), pch_udc_pcd_dequeue(9), pch_udc_pcd_set_halt(9), pch_udc_pcd_set_wedge(9), pch_udc_pcd_fifo_flush(9), pch_udc_init_setup_buff(9), pch_udc_start_next_txrequest(9), pch_udc_complete_transfer(9), pch_udc_complete_receiver(9), pch_udc_svc_data_in(9), pch_udc_svc_data_out(9), pch_udc_svc_control_in(9), pch_udc_svc_control_out(9), pch_udc_postsvc_epinters(9), pch_udc_read_all_epstatus(9), pch_udc_activate_control_ep(9), pch_udc_svc_ur_interrupt(9), pch_udc_svc_enum_interrupt(9), pch_udc_svc_intf_interrupt(9), pch_udc_svc_cfg_interrupt(9), pch_udc_dev_isr(9), pch_udc_isr(9), pch_udc_setup_ep0(9), pch_udc_pcd_reinit(9), pch_udc_pcd_init(9), init_dma_pools(9)
that's the whole friend group right there. go say hi. π
ngl the entire cast of this page lives in ./drivers/usb/gadget/udc β that's the directory, bestie, don't @ me.
and that's a wrap! π this slay of a page comes to you from ./drivers/usb/gadget/udc, dated October 2026, and it's filed under struct pch_udc_dev(9). mwah π π¦
π¦ 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