diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-02-21 15:41:09 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-02-21 15:41:09 -0800 |
commit | 0d75dedb6f28d5c39828f4d705639a4f97698994 (patch) | |
tree | 859bb368f6b53f6d8440e16b713d332cd226bf9b /usb | |
parent | 5b693780711fb83c4ada2b9c3deece2aefdc9957 (diff) | |
download | patches-0d75dedb6f28d5c39828f4d705639a4f97698994.tar.gz |
more usbfs2 fun
Diffstat (limited to 'usb')
-rw-r--r-- | usb/usbfs2.patch | 70 |
1 files changed, 55 insertions, 15 deletions
diff --git a/usb/usbfs2.patch b/usb/usbfs2.patch index 06d788fd8f00a..92b5d4a5c623f 100644 --- a/usb/usbfs2.patch +++ b/usb/usbfs2.patch @@ -3,9 +3,9 @@ drivers/usb/Makefile | 2 drivers/usb/usbfs2/Kconfig | 7 drivers/usb/usbfs2/Makefile | 7 - drivers/usb/usbfs2/inode.c | 445 ++++++++++++++++++++++++++++++++++++++++++++ + drivers/usb/usbfs2/inode.c | 485 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/usb.h | 2 - 6 files changed, 465 insertions(+) + 6 files changed, 505 insertions(+) --- /dev/null +++ gregkh-2.6/drivers/usb/usbfs2/Makefile @@ -51,7 +51,7 @@ + Most users want to say Y here. --- /dev/null +++ gregkh-2.6/drivers/usb/usbfs2/inode.c -@@ -0,0 +1,445 @@ +@@ -0,0 +1,485 @@ +/* + * usbfs2.c - usbfs2 + * @@ -390,12 +390,61 @@ + } +} + ++struct ep_object { ++ struct usb_endpoint_descriptor *desc; ++ struct usb_device *udev; ++ struct dentry *dentry; ++}; ++ ++static ssize_t ep_read_file(struct file *file, char __user *buf, ++ size_t count, loff_t *ppos) ++{ ++ struct ep_object *ep_obj = file->private_data; ++ dbg("endpoint %02x read from", ep_obj->desc->bEndpointAddress); ++ return 0; ++} ++ ++static ssize_t ep_write_file(struct file *file, const char __user *buf, ++ size_t count, loff_t *ppos) ++{ ++ struct ep_object *ep_obj = file->private_data; ++ dbg("endpoint %02x written to", ep_obj->desc->bEndpointAddress); ++ return count; ++} ++ ++static int ep_open(struct inode *inode, struct file *file) ++{ ++ if (inode->u.generic_ip) ++ file->private_data = inode->u.generic_ip; ++ return 0; ++} ++ ++static struct file_operations ep_file_ops = { ++ .read = ep_read_file, ++ .write = ep_write_file, ++ .open = ep_open, ++}; ++ ++static void add_endpoint(struct dentry *parent, struct usb_host_endpoint *endpoint, struct usb_device *udev) ++{ ++ struct ep_object *ep_obj; ++ char name[8]; ++ ++ ep_obj = kzalloc(sizeof(struct ep_object), GFP_KERNEL); ++ if (!ep_obj) ++ return; ++ ++ ep_obj->desc = &endpoint->desc; ++ ep_obj->udev = udev; ++ ++ sprintf(name, "ep_%02x", endpoint->desc.bEndpointAddress); ++ ep_obj->dentry = usbfs2_create_file(name, S_IRWXU | S_IRUGO | S_IXUGO, ++ parent, ep_obj, &ep_file_ops); ++} + +static void add_device(struct usb_device *dev) +{ + char name[8]; -+ int i; -+ int i_size; + + if (!dev->bus->usbfs2_dentry) { + dev_err(&dev->dev, "no directory created for the device's bus\n"); @@ -408,17 +457,8 @@ + dev_err(&dev->dev, "error creating usbfs2 device entry"); + return; + } ++ add_endpoint(dev->usbfs2_dentry, &dev->ep0, dev); + -+ /* Set the size of the device's file to be -+ * equal to the size of the device descriptors. */ -+ i_size = sizeof(struct usb_device_descriptor); -+ for (i = 0; i < dev->descriptor.bNumConfigurations; ++i) { -+ struct usb_config_descriptor *config = -+ (struct usb_config_descriptor *)dev->rawdescriptors[i]; -+ i_size += le16_to_cpu(config->wTotalLength); -+ } -+ if (dev->usbfs2_dentry->d_inode) -+ dev->usbfs2_dentry->d_inode->i_size = i_size; +} + +static void remove_device(struct usb_device *dev) |