Re: [PATCH 4/7] usb: misc: usbtest: format the data pattern according to max packet size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Aug 28 2015, Peter Chen wrote:
> From: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
>
> With this change, the host and gadget doesn't need to agree with transfer
> length for comparing the data, since they doesn't know each other's
> transfer size, but know max packet size.
>
> (Fixed the 'line over 80 characters warning' by Peter Chen)
> Tested-by: Peter Chen <peter.chen@xxxxxxxxxxxxx>
> Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>

I think this requires your signed-off-by as well.

Acked-by: Michal Nazarewicz <mina86@xxxxxxxxxx>

> ---
>  drivers/usb/misc/usbtest.c | 35 ++++++++++++++++++++++++++---------
>  1 file changed, 26 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
> index 481a935..da0afd0e 100644
> --- a/drivers/usb/misc/usbtest.c
> +++ b/drivers/usb/misc/usbtest.c
> @@ -303,11 +303,20 @@ static unsigned mod_pattern;
>  module_param_named(pattern, mod_pattern, uint, S_IRUGO | S_IWUSR);
>  MODULE_PARM_DESC(mod_pattern, "i/o pattern (0 == zeroes)");
>  
> -static inline void simple_fill_buf(struct urb *urb)
> +static unsigned get_maxpacket(struct usb_device *udev, int pipe)
> +{
> +	struct usb_host_endpoint	*ep;
> +
> +	ep = usb_pipe_endpoint(udev, pipe);
> +	return le16_to_cpup(&ep->desc.wMaxPacketSize);
> +}
> +
> +static void simple_fill_buf(struct urb *urb)
>  {
>  	unsigned	i;
>  	u8		*buf = urb->transfer_buffer;
>  	unsigned	len = urb->transfer_buffer_length;
> +	unsigned	maxpacket;
>  
>  	switch (pattern) {
>  	default:
> @@ -316,8 +325,9 @@ static inline void simple_fill_buf(struct urb *urb)
>  		memset(buf, 0, len);
>  		break;
>  	case 1:			/* mod63 */
> +		maxpacket = get_maxpacket(urb->dev, urb->pipe);
>  		for (i = 0; i < len; i++)
> -			*buf++ = (u8) (i % 63);
> +			*buf++ = (u8) ((i % maxpacket) % 63);
>  		break;
>  	}
>  }
> @@ -349,6 +359,7 @@ static int simple_check_buf(struct usbtest_dev *tdev, struct urb *urb)
>  	u8		expected;
>  	u8		*buf = urb->transfer_buffer;
>  	unsigned	len = urb->actual_length;
> +	unsigned	maxpacket = get_maxpacket(urb->dev, urb->pipe);
>  
>  	int ret = check_guard_bytes(tdev, urb);
>  	if (ret)
> @@ -366,7 +377,7 @@ static int simple_check_buf(struct usbtest_dev *tdev, struct urb *urb)
>  		 * with set_interface or set_config.
>  		 */
>  		case 1:			/* mod63 */
> -			expected = i % 63;
> +			expected = (i % maxpacket) % 63;
>  			break;
>  		/* always fail unsupported patterns */
>  		default:
> @@ -478,11 +489,13 @@ static void free_sglist(struct scatterlist *sg, int nents)
>  }
>  
>  static struct scatterlist *
> -alloc_sglist(int nents, int max, int vary)
> +alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe)
>  {
>  	struct scatterlist	*sg;
>  	unsigned		i;
>  	unsigned		size = max;
> +	unsigned		maxpacket =
> +		get_maxpacket(interface_to_usbdev(dev->intf), pipe);
>  
>  	if (max == 0)
>  		return NULL;
> @@ -511,7 +524,7 @@ alloc_sglist(int nents, int max, int vary)
>  			break;
>  		case 1:
>  			for (j = 0; j < size; j++)
> -				*buf++ = (u8) (j % 63);
> +				*buf++ = (u8) ((j % maxpacket) % 63);
>  			break;
>  		}
>  
> @@ -2172,7 +2185,8 @@ usbtest_ioctl(struct usb_interface *intf, unsigned int code, void *buf)
>  			"TEST 5:  write %d sglists %d entries of %d bytes\n",
>  				param->iterations,
>  				param->sglen, param->length);
> -		sg = alloc_sglist(param->sglen, param->length, 0);
> +		sg = alloc_sglist(param->sglen, param->length,
> +				0, dev, dev->out_pipe);
>  		if (!sg) {
>  			retval = -ENOMEM;
>  			break;
> @@ -2190,7 +2204,8 @@ usbtest_ioctl(struct usb_interface *intf, unsigned int code, void *buf)
>  			"TEST 6:  read %d sglists %d entries of %d bytes\n",
>  				param->iterations,
>  				param->sglen, param->length);
> -		sg = alloc_sglist(param->sglen, param->length, 0);
> +		sg = alloc_sglist(param->sglen, param->length,
> +				0, dev, dev->in_pipe);
>  		if (!sg) {
>  			retval = -ENOMEM;
>  			break;
> @@ -2207,7 +2222,8 @@ usbtest_ioctl(struct usb_interface *intf, unsigned int code, void *buf)
>  			"TEST 7:  write/%d %d sglists %d entries 0..%d bytes\n",
>  				param->vary, param->iterations,
>  				param->sglen, param->length);
> -		sg = alloc_sglist(param->sglen, param->length, param->vary);
> +		sg = alloc_sglist(param->sglen, param->length,
> +				param->vary, dev, dev->out_pipe);
>  		if (!sg) {
>  			retval = -ENOMEM;
>  			break;
> @@ -2224,7 +2240,8 @@ usbtest_ioctl(struct usb_interface *intf, unsigned int code, void *buf)
>  			"TEST 8:  read/%d %d sglists %d entries 0..%d bytes\n",
>  				param->vary, param->iterations,
>  				param->sglen, param->length);
> -		sg = alloc_sglist(param->sglen, param->length, param->vary);
> +		sg = alloc_sglist(param->sglen, param->length,
> +				param->vary, dev, dev->in_pipe);
>  		if (!sg) {
>  			retval = -ENOMEM;
>  			break;
> -- 
> 1.9.1
>

-- 
Best regards,                                            _     _
.o. | Liege of Serenely Enlightened Majesty of         o' \,=./ `o
..o | Computer Science,  ミハウ “mina86” ナザレヴイツ  (o o)
ooo +--<mpn@xxxxxxxxxx>--<xmpp:mina86@xxxxxxxxxx>-----ooO--(_)--Ooo--
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux