usb-host: handle guest-issued clear halt
Most important here is to update our internal endpoint state so we know the endpoint isn't in halted state any more. Without this usb-host tries to clear halt again with the next data transfer submitted. Doing this twice is (a) not correct and (b) confuses some usb devices, rendering them non-functional in the guest. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									94d1991445
								
							
						
					
					
						commit
						a2498f76b8
					
				| @ -1058,6 +1058,15 @@ static int usb_host_handle_control(USBDevice *dev, USBPacket *p, | ||||
|         ret = usb_host_set_interface(s, index, value); | ||||
|         trace_usb_host_req_emulated(s->bus_num, s->addr, p, ret); | ||||
|         return ret; | ||||
| 
 | ||||
|     case EndpointOutRequest | USB_REQ_CLEAR_FEATURE: | ||||
|         if (value == 0) { /* clear halt */ | ||||
|             int pid = (index & USB_DIR_IN) ? USB_TOKEN_IN : USB_TOKEN_OUT; | ||||
|             ioctl(s->fd, USBDEVFS_CLEAR_HALT, &index); | ||||
|             clear_halt(s, pid, index & 0x0f); | ||||
|             trace_usb_host_req_emulated(s->bus_num, s->addr, p, 0); | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /* The rest are asynchronous */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Gerd Hoffmann
						Gerd Hoffmann