/* Disables the endpoint for URB submission and nukes all pending URBs. If @reset_hardware is set then also deallocates hcd/hardware state for the endpoint.  */
void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr, bool reset_hardware)
/* Disables the endpoint for URB submission and nukes all pending URBs. If @reset_hardware is set then also deallocates hcd/hardware state for the endpoint.  */
void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr, bool reset_hardware)
{
	unsigned int epnum = epaddr & USB_ENDPOINT_NUMBER_MASK;
	struct usb_host_endpoint *ep;
	if (!dev)
		return;
	if (usb_endpoint_out(epaddr)) {
		ep = dev->ep_out[epnum];
		if (reset_hardware)
			dev->ep_out[epnum] = NULL;
	} else {
		ep = dev->ep_in[epnum];
		if (reset_hardware)
			dev->ep_in[epnum] = NULL;
	}
	if (ep) {
		ep->enabled = 0;
		usb_hcd_flush_endpoint(dev, ep);
		if (reset_hardware)
			usb_hcd_disable_endpoint(dev, ep);
	}
}