On Sun, 31 Aug 2025 20:42:39 sc dying wrote: > If an error occurs on sending zero-length packet, or transfer is > stopped on ZLP, normal transfer and ZLP generates transfer event each. > xhci_event_transfer() would call usb_transfer_complete for same xfer, > actually, second event will be ignored since first event dequeues > xfer->ux_pipe->up_queue and event handler simply quits if pipe > is empty. > > Does this ZLP always need to be sent when FORCE_SHORT is set? > Should be only when !isread && FORCE_SHORT && (len % wMaxPacketSize) == 0 ?
I've found though testing that the ZLP is required for each xfer. This is easily seen with urtwn(4) that will otherwize timeount on transmit if the ZLP is only sent per wMaxPacketSize. I know it is done that way for ehci (which has no probems with urtwn(4)) but xhci seems to behave differently. Best regards, Nat
