Sarah Bailey wrote: > --- a/drivers/usb/core/endpoint_fops.c > +++ b/drivers/usb/core/endpoint_fops.c [...] > @@ -21,15 +23,123 @@ int endpoint_open(struct inode *inode, struct file *filp) > return 0; > } > > +void callback(struct urb *urb)
You should declare this static.
[...]
> ssize_t control_read(struct file * filp, char __user *buff,
> size_t count, loff_t * offp)
> {
> struct ep_device *ep_dev;
> ep_dev = filp->private_data;
> - dev_dbg(&ep_dev->dev, "%s called for %s\n", __FUNCTION__,
> ep_dev->dev.bus_id);
> + dev_dbg(&ep_dev->dev, "%s called for %s\n", __FUNCTION__,
> + ep_dev->dev.bus_id);
This looks like an unrelated whitespace change.
[...]
> +ssize_t ep_read(struct file * filp, char __user *buff,
> + size_t count, loff_t * offp)
To parallel endpoint_open, how about endpoint_read, rather than ep_read?
Also, you should declare this static.
> +{
> + struct ep_device *ep_dev;
> + char *k_buff;
> + struct urb *urb;
> + unsigned int pipe;
> + int retval = -ENOMEM;
> + DECLARE_COMPLETION_ONSTACK(completion);
> +
> + ep_dev = filp->private_data;
> + dev_dbg(&ep_dev->dev, "%s called for %s\n", __FUNCTION__,
> + ep_dev->dev.bus_id);
> +
> + if(!usb_endpoint_xfer_bulk(ep_dev->desc))
> + return 0;
> +
> + k_buff = kmalloc(count, GFP_KERNEL);
> + if(k_buff == NULL)
> + goto exit;
> + urb = usb_alloc_urb(0, GFP_KERNEL);
> + if(urb == NULL)
> + goto error_urb_alloc;
> + pipe = usb_rcvbulkpipe(ep_dev->udev, ep_dev->desc->bEndpointAddress);
> + usb_fill_bulk_urb(urb, ep_dev->udev, pipe, k_buff, count,
> + callback, &completion);
> + retval = usb_submit_urb(urb, GFP_KERNEL);
> + if(retval)
> + goto error_urb_submit;
> + wait_for_completion(&completion);
> +
> + if(urb->status)
> + retval = urb->status;
> + else {
> + retval = urb->actual_length;
> + if(copy_to_user(buff, k_buff, urb->actual_length))
> + retval = -EFAULT;
> + }
> +
> +error_urb_submit:
> + usb_free_urb(urb);
> +error_urb_alloc:
> + kfree(k_buff);
> +exit:
> + return retval;
> +}
This code looks good to me.
> +ssize_t ep_write(struct file * filp, const char __user *buff,
> + size_t count, loff_t * offp)
To parallel endpoint_open, how about endpoint_write, rather than ep_write?
Also, you should declare this static.
> +{
> + struct ep_device *ep_dev;
> + char *k_buff;
> + struct urb *urb;
> + unsigned int pipe;
> + int retval;
> + DECLARE_COMPLETION_ONSTACK(completion);
> +
> + ep_dev = filp->private_data;
> + dev_dbg(&ep_dev->dev, "%s called for %s\n", __FUNCTION__,
> + ep_dev->dev.bus_id);
> +
> + if(!usb_endpoint_xfer_bulk(ep_dev->desc))
> + return 0;
> +
> + k_buff = kmalloc(count, GFP_KERNEL);
> + if(k_buff == NULL) {
> + retval = -ENOMEM;
> + goto exit;
> + }
> + if(copy_from_user(k_buff, buff, count)) {
> + retval = -EFAULT;
> + goto error_copy_buff;
> + }
> + urb = usb_alloc_urb(0, GFP_KERNEL);
> + if(urb == NULL) {
> + retval = -ENOMEM;
> + goto error_copy_buff;
> + }
> +
> + // endpoint specific init
> + pipe = usb_sndbulkpipe(ep_dev->udev, ep_dev->desc->bEndpointAddress);
> + usb_fill_bulk_urb(urb, ep_dev->udev, pipe, k_buff, count,
> + callback, &completion);
> +
> + retval = usb_submit_urb(urb, GFP_KERNEL);
> + if(retval)
> + goto error_urb_submit;
> + wait_for_completion(&completion);
> +
> + if(urb->status)
> + retval = urb->status;
> + else
> + retval = urb->actual_length;
> +
> +error_urb_submit:
> + usb_free_urb(urb);
> +error_copy_buff:
> + kfree(k_buff);
> +exit:
> + return retval;
> +}
This also looks good to me.
[...]
> @@ -39,9 +149,11 @@ struct file_operations usb_endpoint_control_fops = {
> struct file_operations usb_endpoint_in_fops = {
> .owner = THIS_MODULE,
> .open = endpoint_open,
> + .read = ep_read,
If you change the name as suggested above, you'll need to change it here too.
> };
>
> struct file_operations usb_endpoint_out_fops = {
> .owner = THIS_MODULE,
> .open = endpoint_open,
> + .write = ep_write,
> };
Likewise.
- Josh Triplett
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________ [email protected] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
