USB: add ep->enable
This patch (as944) adds an explicit "enabled" field to the usb_host_endpoint structure and uses it in place of the current mechanism. This is merely a time-space tradeoff; it makes checking whether URBs may be submitted to an endpoint simpler. The existing mechanism is efficient when converting urb->pipe to an endpoint pointer, but it's not so efficient when urb->ep is used instead. As a side effect, the procedure for enabling an endpoint is now a little more complicated. The ad-hoc inline code in usb.c and hub.c for enabling ep0 is now replaced with calls to usb_enable_endpoint, which is no longer static. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5b653c79c0
commit
bdd016ba64
@ -943,7 +943,6 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
|
||||
{
|
||||
int status;
|
||||
struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus);
|
||||
struct usb_host_endpoint *ep;
|
||||
unsigned long flags;
|
||||
|
||||
if (!hcd)
|
||||
@ -960,9 +959,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
|
||||
// FIXME: verify that quiescing hc works right (RH cleans up)
|
||||
|
||||
spin_lock_irqsave(&hcd_urb_list_lock, flags);
|
||||
ep = (usb_pipein(urb->pipe) ? urb->dev->ep_in : urb->dev->ep_out)
|
||||
[usb_pipeendpoint(urb->pipe)];
|
||||
if (unlikely(ep != urb->ep))
|
||||
if (unlikely(!urb->ep->enabled))
|
||||
status = -ENOENT;
|
||||
else if (unlikely (urb->reject))
|
||||
status = -EPERM;
|
||||
|
Reference in New Issue
Block a user