Re: Some restrictions when using usbtest and g_zero

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 24 Aug 2015, Peter Chen wrote:

> Thanks, that's much clear.
> 
> At udc driver:
> 
> __set_halt(struct usb_ep *ep, int value, bool may_fail)
> {
> 	if (may_fail && ep queue is not empty) {
> 		return false
> 	} else {
> 		do stall;
> 		return true;
> 	}
> }
> 
> gadget_ops:
> .set_halt      = ep_set_halt,
> 
> ep_set_halt(struct usb_ep *ep, int value)
> {
> 	__set_halt(ep, value, true);
> }
> 
> And call __set_halt(ep, value, false) at below conditions:
> - SET(CLEAR)_FEATURE for Set(Clear)-Halt
> - If ep0 request has failed

Yes, that should work.  In fact, when a control request fails, you 
could even call ep_set_halt instead of __set_halt, because the ep0 
queue will certainly be empty.

> Do we need to update kernel doc for usb_ep_set_halt that
> say it should only for bulk and interrupt endpoints?

I don't think we need to change it.  The USB spec says that isochronous 
endpoints never stall; section 5.6.5 says:

	An endpoint for isochronous transfers never halts because there 
	is no handshake to report a halt condition.

Also, Figure 8-39 does not include any STALL packets.

Lastly, usb_ep_set_halt should be called for ep0 when the gadget is
unable to respond to a request.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux