usb destroy API change (Lonnie Mendez)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2066 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									3b2ccc57c7
								
							
						
					
					
						commit
						059809e451
					
				
							
								
								
									
										18
									
								
								hw/usb-hid.c
								
								
								
								
							
							
						
						
									
										18
									
								
								hw/usb-hid.c
								
								
								
								
							|  | @ -323,16 +323,10 @@ static int usb_tablet_poll(USBMouseState *s, uint8_t *buf, int len) | |||
|     return l; | ||||
| } | ||||
| 
 | ||||
| static void usb_mouse_handle_reset(USBDevice *dev, int destroy) | ||||
| static void usb_mouse_handle_reset(USBDevice *dev) | ||||
| { | ||||
|     USBMouseState *s = (USBMouseState *)dev; | ||||
| 
 | ||||
|     if (destroy) { | ||||
|         qemu_add_mouse_event_handler(NULL, NULL, 0); | ||||
|         qemu_free(s); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     s->dx = 0; | ||||
|     s->dy = 0; | ||||
|     s->dz = 0; | ||||
|  | @ -506,6 +500,14 @@ static int usb_mouse_handle_data(USBDevice *dev, int pid, | |||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static void usb_mouse_handle_destroy(USBDevice *dev) | ||||
| { | ||||
|     USBMouseState *s = (USBMouseState *)dev; | ||||
| 
 | ||||
|     qemu_add_mouse_event_handler(NULL, NULL, 0); | ||||
|     qemu_free(s); | ||||
| } | ||||
| 
 | ||||
| USBDevice *usb_tablet_init(void) | ||||
| { | ||||
|     USBMouseState *s; | ||||
|  | @ -519,6 +521,7 @@ USBDevice *usb_tablet_init(void) | |||
|     s->dev.handle_reset = usb_mouse_handle_reset; | ||||
|     s->dev.handle_control = usb_mouse_handle_control; | ||||
|     s->dev.handle_data = usb_mouse_handle_data; | ||||
|     s->dev.handle_destroy = usb_mouse_handle_destroy; | ||||
|     s->kind = USB_TABLET; | ||||
| 
 | ||||
|     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Tablet"); | ||||
|  | @ -539,6 +542,7 @@ USBDevice *usb_mouse_init(void) | |||
|     s->dev.handle_reset = usb_mouse_handle_reset; | ||||
|     s->dev.handle_control = usb_mouse_handle_control; | ||||
|     s->dev.handle_data = usb_mouse_handle_data; | ||||
|     s->dev.handle_destroy = usb_mouse_handle_destroy; | ||||
|     s->kind = USB_MOUSE; | ||||
| 
 | ||||
|     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Mouse"); | ||||
|  |  | |||
							
								
								
									
										12
									
								
								hw/usb-hub.c
								
								
								
								
							
							
						
						
									
										12
									
								
								hw/usb-hub.c
								
								
								
								
							|  | @ -199,11 +199,9 @@ static void usb_hub_attach(USBPort *port1, USBDevice *dev) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| static void usb_hub_handle_reset(USBDevice *dev, int destroy) | ||||
| static void usb_hub_handle_reset(USBDevice *dev) | ||||
| { | ||||
|     /* XXX: do it */ | ||||
|     if (destroy) | ||||
|         qemu_free(dev); | ||||
| } | ||||
| 
 | ||||
| static int usb_hub_handle_control(USBDevice *dev, int request, int value, | ||||
|  | @ -525,6 +523,13 @@ static int usb_hub_handle_packet(USBDevice *dev, int pid, | |||
|     return usb_generic_handle_packet(dev, pid, devaddr, devep, data, len); | ||||
| } | ||||
| 
 | ||||
| static void usb_hub_handle_destroy(USBDevice *dev) | ||||
| { | ||||
|     USBHubState *s = (USBHubState *)dev; | ||||
| 
 | ||||
|     qemu_free(s); | ||||
| } | ||||
| 
 | ||||
| USBDevice *usb_hub_init(int nb_ports) | ||||
| { | ||||
|     USBHubState *s; | ||||
|  | @ -543,6 +548,7 @@ USBDevice *usb_hub_init(int nb_ports) | |||
|     s->dev.handle_reset = usb_hub_handle_reset; | ||||
|     s->dev.handle_control = usb_hub_handle_control; | ||||
|     s->dev.handle_data = usb_hub_handle_data; | ||||
|     s->dev.handle_destroy = usb_hub_handle_destroy; | ||||
| 
 | ||||
|     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Hub"); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										16
									
								
								hw/usb-msd.c
								
								
								
								
							
							
						
						
									
										16
									
								
								hw/usb-msd.c
								
								
								
								
							|  | @ -112,16 +112,12 @@ static void usb_msd_command_complete(void *opaque, uint32_t tag, int fail) | |||
|     s->mode = USB_MSDM_CSW; | ||||
| } | ||||
| 
 | ||||
| static void usb_msd_handle_reset(USBDevice *dev, int destroy) | ||||
| static void usb_msd_handle_reset(USBDevice *dev) | ||||
| { | ||||
|     MSDState *s = (MSDState *)dev; | ||||
| 
 | ||||
|     DPRINTF("Reset\n"); | ||||
|     s->mode = USB_MSDM_CBW; | ||||
|     if (destroy) { | ||||
|         scsi_disk_destroy(s->scsi_dev); | ||||
|         qemu_free(s); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| static int usb_msd_handle_control(USBDevice *dev, int request, int value, | ||||
|  | @ -369,6 +365,13 @@ static int usb_msd_handle_data(USBDevice *dev, int pid, uint8_t devep, | |||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static void usb_msd_handle_destroy(USBDevice *dev) | ||||
| { | ||||
|     MSDState *s = (MSDState *)dev; | ||||
| 
 | ||||
|     scsi_disk_destroy(s->scsi_dev); | ||||
|     qemu_free(s); | ||||
| } | ||||
| 
 | ||||
| USBDevice *usb_msd_init(const char *filename) | ||||
| { | ||||
|  | @ -388,11 +391,12 @@ USBDevice *usb_msd_init(const char *filename) | |||
|     s->dev.handle_reset = usb_msd_handle_reset; | ||||
|     s->dev.handle_control = usb_msd_handle_control; | ||||
|     s->dev.handle_data = usb_msd_handle_data; | ||||
|     s->dev.handle_destroy = usb_msd_handle_destroy; | ||||
| 
 | ||||
|     snprintf(s->dev.devname, sizeof(s->dev.devname), "QEMU USB MSD(%.16s)", | ||||
|              filename); | ||||
| 
 | ||||
|     s->scsi_dev = scsi_disk_init(bdrv, usb_msd_command_complete, s); | ||||
|     usb_msd_handle_reset((USBDevice *)s, 0); | ||||
|     usb_msd_handle_reset((USBDevice *)s); | ||||
|     return (USBDevice *)s; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										5
									
								
								hw/usb.c
								
								
								
								
							
							
						
						
									
										5
									
								
								hw/usb.c
								
								
								
								
							|  | @ -55,10 +55,7 @@ int usb_generic_handle_packet(USBDevice *s, int pid, | |||
|         s->remote_wakeup = 0; | ||||
|         s->addr = 0; | ||||
|         s->state = USB_STATE_DEFAULT; | ||||
|         s->handle_reset(s, 0); | ||||
|         break; | ||||
|     case USB_MSG_DESTROY: | ||||
|         s->handle_reset(s, 1); | ||||
|         s->handle_reset(s); | ||||
|         break; | ||||
|     case USB_TOKEN_SETUP: | ||||
|         if (s->state < USB_STATE_DEFAULT || devaddr != s->addr) | ||||
|  |  | |||
							
								
								
									
										5
									
								
								hw/usb.h
								
								
								
								
							
							
						
						
									
										5
									
								
								hw/usb.h
								
								
								
								
							|  | @ -29,7 +29,6 @@ | |||
| #define USB_MSG_ATTACH   0x100 | ||||
| #define USB_MSG_DETACH   0x101 | ||||
| #define USB_MSG_RESET    0x102 | ||||
| #define USB_MSG_DESTROY  0x103 | ||||
| 
 | ||||
| #define USB_RET_NODEV  (-1)  | ||||
| #define USB_RET_NAK    (-2) | ||||
|  | @ -117,12 +116,14 @@ struct USBDevice { | |||
|     int (*handle_packet)(USBDevice *dev, int pid,  | ||||
|                          uint8_t devaddr, uint8_t devep, | ||||
|                          uint8_t *data, int len); | ||||
|     void (*handle_destroy)(USBDevice *dev); | ||||
| 
 | ||||
|     int speed; | ||||
|      | ||||
|     /* The following fields are used by the generic USB device
 | ||||
|        layer. They are here just to avoid creating a new structure for | ||||
|        them. */ | ||||
|     void (*handle_reset)(USBDevice *dev, int destroy); | ||||
|     void (*handle_reset)(USBDevice *dev); | ||||
|     int (*handle_control)(USBDevice *dev, int request, int value, | ||||
|                           int index, int length, uint8_t *data); | ||||
|     int (*handle_data)(USBDevice *dev, int pid, uint8_t devep, | ||||
|  |  | |||
							
								
								
									
										20
									
								
								usb-linux.c
								
								
								
								
							
							
						
						
									
										20
									
								
								usb-linux.c
								
								
								
								
							|  | @ -58,16 +58,8 @@ typedef struct USBHostDevice { | |||
|     int fd; | ||||
| } USBHostDevice; | ||||
| 
 | ||||
| static void usb_host_handle_reset(USBDevice *dev, int destroy) | ||||
| static void usb_host_handle_reset(USBDevice *dev) | ||||
| { | ||||
|     USBHostDevice *s = (USBHostDevice *)dev; | ||||
|      | ||||
|     if (destroy) { | ||||
|         if (s->fd >= 0) | ||||
|             close(s->fd); | ||||
|         qemu_free(s); | ||||
|         return; | ||||
|     } | ||||
| #if 0 | ||||
|     USBHostDevice *s = (USBHostDevice *)dev; | ||||
|     /* USBDEVFS_RESET, but not the first time as it has already be
 | ||||
|  | @ -76,6 +68,15 @@ static void usb_host_handle_reset(USBDevice *dev, int destroy) | |||
| #endif | ||||
| }  | ||||
| 
 | ||||
| static void usb_host_handle_destroy(USBDevice *dev) | ||||
| { | ||||
|     USBHostDevice *s = (USBHostDevice *)dev; | ||||
| 
 | ||||
|     if (s->fd >= 0) | ||||
|         close(s->fd); | ||||
|     qemu_free(s); | ||||
| } | ||||
| 
 | ||||
| static int usb_host_handle_control(USBDevice *dev, | ||||
|                                    int request, | ||||
|                                    int value, | ||||
|  | @ -244,6 +245,7 @@ USBDevice *usb_host_device_open(const char *devname) | |||
|     dev->dev.handle_reset = usb_host_handle_reset; | ||||
|     dev->dev.handle_control = usb_host_handle_control; | ||||
|     dev->dev.handle_data = usb_host_handle_data; | ||||
|     dev->dev.handle_destroy = usb_host_handle_destroy; | ||||
| 
 | ||||
|     if (product_name[0] == '\0') | ||||
|         snprintf(dev->dev.devname, sizeof(dev->dev.devname), | ||||
|  |  | |||
							
								
								
									
										3
									
								
								vl.c
								
								
								
								
							
							
						
						
									
										3
									
								
								vl.c
								
								
								
								
							|  | @ -3781,6 +3781,7 @@ static int usb_device_del(const char *devname) | |||
| { | ||||
|     USBPort *port; | ||||
|     USBPort **lastp; | ||||
|     USBDevice *dev; | ||||
|     int bus_num, addr; | ||||
|     const char *p; | ||||
| 
 | ||||
|  | @ -3805,8 +3806,10 @@ static int usb_device_del(const char *devname) | |||
|     if (!port) | ||||
|         return -1; | ||||
| 
 | ||||
|     dev = port->dev; | ||||
|     *lastp = port->next; | ||||
|     usb_attach(port, NULL); | ||||
|     dev->handle_destroy(dev); | ||||
|     port->next = free_usb_ports; | ||||
|     free_usb_ports = port; | ||||
|     return 0; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 bellard
						bellard