dwc2_gadget_handle_nak(9)
β¨ NAME β¨
dwc2_gadget_handle_nak β handle NAK interrupt
This is the Kernel API Manual page for dwc2_gadget_handle_nak, bestie, and it's literally all about handling that NAK interrupt. π
πΈ SYNOPSIS πΈ
void dwc2_gadget_handle_nak (struct dwc2_hsotg_ep *hs_ep );
π ARGUMENTS π
hs_epβ the endpoint on which the interrupt is asserted. That's the one throwing the interrupt vibe check.
π¦ DESCRIPTION π¦
Okay so this is the starting point for an ISOC-IN transfer, and the synchronization is done with the first IN token received from the host while the corresponding EP is disabled. π
The device does not know when the first one token will arrive from the host. On first token arrival, HW generates 2 interrupts: 'in token received while FIFO empty' and 'NAK'. For ISOC-IN, the NAK interrupt means that the token has arrived and a ZLP was sent in response to that, because there was no data in the FIFO. π
SW is basing on this interrupt to obtain the frame in which the token has come, and then, based on the interval, it calculates the next frame for transfer. Lowkey iconic interrupt bookkeeping, no cap. β¨
π SEE ALSO π
Go peek at all these, bestie β the whole squad is here:
- Kernel file:
./drivers/usb/dwc2/gadget.c using_dma(9)dwc2_gadget_incr_frame_num(9)dwc2_gadget_dec_frame_num_by_one(9)dwc2_hsotg_en_gsint(9)dwc2_hsotg_disable_gsint(9)dwc2_hsotg_ctrl_epint(9)dwc2_hsotg_tx_fifo_count(9)dwc2_hsotg_tx_fifo_total_depth(9)dwc2_gadget_wkup_alert_handler(9)dwc2_hsotg_tx_fifo_average_depth(9)dwc2_hsotg_init_fifo(9)dwc2_hsotg_ep_alloc_request(9)is_ep_periodic(9)dwc2_hsotg_unmap_dma(9)dwc2_hsotg_write_fifo(9)get_ep_limit(9)dwc2_hsotg_read_frameno(9)dwc2_gadget_get_chain_limit(9)dwc2_hsotg_start_req(9)dwc2_hsotg_map_dma(9)dwc2_gadget_target_frame_elapsed(9)dwc2_hsotg_complete_oursetup(9)ep_from_windex(9)dwc2_hsotg_set_test_mode(9)dwc2_hsotg_send_reply(9)dwc2_hsotg_process_req_status(9)get_ep_head(9)dwc2_gadget_start_next_request(9)dwc2_hsotg_process_req_feature(9)dwc2_hsotg_stall_ep0(9)dwc2_hsotg_process_control(9)dwc2_hsotg_complete_setup(9)dwc2_hsotg_enqueue_setup(9)dwc2_hsotg_complete_request(9)dwc2_hsotg_rx_data(9)dwc2_hsotg_ep0_zlp(9)dwc2_hsotg_handle_outdone(9)dwc2_hsotg_handle_rx(9)dwc2_hsotg_ep0_mps(9)dwc2_hsotg_set_ep_maxpacket(9)dwc2_hsotg_txfifo_flush(9)dwc2_hsotg_trytx(9)dwc2_hsotg_complete_in(9)dwc2_gadget_read_ep_interrupts(9)dwc2_gadget_handle_ep_disabled(9)dwc2_gadget_handle_out_token_ep_disabled(9)dwc2_hsotg_epint(9)dwc2_hsotg_irq_enumdone(9)kill_all_requests(9)dwc2_hsotg_disconnect(9)dwc2_hsotg_irq_fifoempty(9)dwc2_hsotg_core_init_disconnected(9)dwc2_gadget_handle_incomplete_isoc_in(9)dwc2_gadget_handle_incomplete_isoc_out(9)dwc2_hsotg_irq(9)dwc2_hsotg_ep_enable(9)dwc2_hsotg_ep_disable(9)on_list(9)dwc2_hsotg_ep_dequeue(9)dwc2_gadget_ep_set_wedge(9)dwc2_hsotg_ep_sethalt(9)dwc2_hsotg_ep_sethalt_lock(9)dwc2_hsotg_init(9)dwc2_hsotg_udc_start(9)dwc2_hsotg_udc_stop(9)dwc2_hsotg_gadget_getframe(9)dwc2_hsotg_set_selfpowered(9)dwc2_hsotg_pullup(9)dwc2_hsotg_vbus_draw(9)dwc2_hsotg_initep(9)dwc2_hsotg_hw_cfg(9)dwc2_hsotg_dump(9)dwc2_gadget_init(9)dwc2_hsotg_remove(9)dwc2_backup_device_registers(9)dwc2_restore_device_registers(9)dwc2_gadget_init_lpm(9)dwc2_gadget_program_ref_clk(9)dwc2_gadget_enter_hibernation(9)dwc2_gadget_exit_hibernation(9)dwc2_gadget_enter_partial_power_down(9)dwc2_gadget_enter_clock_gating(9)
And that's the whole page, bestie β it lives under ./drivers/usb/dwc2, it's dated October 2026, and it's the dwc2_gadget_handle_nak(9) manual entry. Mwah, go handle those interrupts. ππ«Ά
π¦ 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