aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-02-21 15:41:09 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2006-02-21 15:41:09 -0800
commit0d75dedb6f28d5c39828f4d705639a4f97698994 (patch)
tree859bb368f6b53f6d8440e16b713d332cd226bf9b /usb
parent5b693780711fb83c4ada2b9c3deece2aefdc9957 (diff)
downloadpatches-0d75dedb6f28d5c39828f4d705639a4f97698994.tar.gz
more usbfs2 fun
Diffstat (limited to 'usb')
-rw-r--r--usb/usbfs2.patch70
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)