sandbox: usb: Allow finding a USB emulator for a device
Each USB device has an emulator. Currently this can only be found by supplying the 'pipe' value, which contains the device number. Add a way to find it directly from the emulated device. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									80438a6c71
								
							
						
					
					
						commit
						af9c7c11e9
					
				| 
						 | 
					@ -108,9 +108,8 @@ static int usb_emul_get_descriptor(struct usb_dev_platdata *plat, int value,
 | 
				
			||||||
	return upto ? upto : length ? -EIO : 0;
 | 
						return upto ? upto : length ? -EIO : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int usb_emul_find(struct udevice *bus, ulong pipe, struct udevice **emulp)
 | 
					static int usb_emul_find_devnum(int devnum, struct udevice **emulp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int devnum = usb_pipedevice(pipe);
 | 
					 | 
				
			||||||
	struct udevice *dev;
 | 
						struct udevice *dev;
 | 
				
			||||||
	struct uclass *uc;
 | 
						struct uclass *uc;
 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
| 
						 | 
					@ -134,6 +133,20 @@ int usb_emul_find(struct udevice *bus, ulong pipe, struct udevice **emulp)
 | 
				
			||||||
	return -ENOENT;
 | 
						return -ENOENT;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int usb_emul_find(struct udevice *bus, ulong pipe, struct udevice **emulp)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int devnum = usb_pipedevice(pipe);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return usb_emul_find_devnum(devnum, emulp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int usb_emul_find_for_dev(struct udevice *dev, struct udevice **emulp)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct usb_dev_platdata *udev = dev_get_parent_platdata(dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return usb_emul_find_devnum(udev->devnum, emulp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int usb_emul_control(struct udevice *emul, struct usb_device *udev,
 | 
					int usb_emul_control(struct udevice *emul, struct usb_device *udev,
 | 
				
			||||||
		     unsigned long pipe, void *buffer, int length,
 | 
							     unsigned long pipe, void *buffer, int length,
 | 
				
			||||||
		     struct devrequest *setup)
 | 
							     struct devrequest *setup)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -949,6 +949,16 @@ int usb_emul_bulk(struct udevice *emul, struct usb_device *udev,
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int usb_emul_find(struct udevice *bus, ulong pipe, struct udevice **emulp);
 | 
					int usb_emul_find(struct udevice *bus, ulong pipe, struct udevice **emulp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * usb_emul_find_for_dev() - Find an emulator for a particular device
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @bus:	USB bus (controller)
 | 
				
			||||||
 | 
					 * @dev:	USB device to check
 | 
				
			||||||
 | 
					 * @emulp:	Returns pointer to emulator, or NULL if not found
 | 
				
			||||||
 | 
					 * @return 0 if found, -ve on error
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int usb_emul_find_for_dev(struct udevice *dev, struct udevice **emulp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * usb_emul_reset() - Reset all emulators ready for use
 | 
					 * usb_emul_reset() - Reset all emulators ready for use
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue