lkml.org 
[lkml]   [2002]   [Sep]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [BK PATCH] USB changes for 2.5.39
    # This is a BitKeeper generated patch for the following project:
    # Project Name: Linux kernel tree
    # This patch format is intended for GNU patch command version 2.5 or higher.
    # This patch includes the following deltas:
    # ChangeSet 1.660.1.3 -> 1.660.1.4
    # drivers/usb/core/usb.c 1.88 -> 1.89
    # drivers/usb/core/Makefile 1.11 -> 1.12
    # (new) -> 1.1 drivers/usb/core/usb.h
    # (new) -> 1.1 drivers/usb/core/driverfs.c
    #
    # The following is the BitKeeper ChangeSet Log
    # --------------------------------------------
    # 02/09/30 greg@kroah.com 1.660.1.4
    # USB: add a lot more driverfs files for all usb devices.
    # --------------------------------------------
    #
    diff -Nru a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile
    --- a/drivers/usb/core/Makefile Mon Sep 30 17:25:40 2002
    +++ b/drivers/usb/core/Makefile Mon Sep 30 17:25:40 2002
    @@ -5,7 +5,7 @@
    export-objs := usb.o hcd.o hcd-pci.o urb.o message.o file.o buffer.o

    usbcore-objs := usb.o usb-debug.o hub.o hcd.o urb.o message.o \
    - config.o file.o buffer.o
    + config.o file.o buffer.o driverfs.o

    ifeq ($(CONFIG_PCI),y)
    usbcore-objs += hcd-pci.o
    diff -Nru a/drivers/usb/core/driverfs.c b/drivers/usb/core/driverfs.c
    --- /dev/null Wed Dec 31 16:00:00 1969
    +++ b/drivers/usb/core/driverfs.c Mon Sep 30 17:25:40 2002
    @@ -0,0 +1,177 @@
    +/*
    + * drivers/usb/core/driverfs.c
    + *
    + * (C) Copyright 2002 David Brownell
    + * (C) Copyright 2002 Greg Kroah-Hartman
    + * (C) Copyright 2002 IBM Corp.
    + *
    + * All of the driverfs file attributes for usb devices and interfaces.
    + *
    + */
    +
    +
    +#include <linux/config.h>
    +#include <linux/kernel.h>
    +
    +#ifdef CONFIG_USB_DEBUG
    + #define DEBUG
    +#else
    + #undef DEBUG
    +#endif
    +#include <linux/usb.h>
    +
    +#include "usb.h"
    +
    +/* Active configuration fields */
    +#define usb_actconfig_attr(field, format_string) \
    +static ssize_t \
    +show_##field (struct device *dev, char *buf, size_t count, loff_t off) \
    +{ \
    + struct usb_device *udev; \
    + \
    + if (off) \
    + return 0; \
    + \
    + udev = to_usb_device (dev); \
    + return sprintf (buf, format_string, udev->actconfig->field); \
    +} \
    +static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
    +
    +usb_actconfig_attr (bNumInterfaces, "%2d\n")
    +usb_actconfig_attr (bConfigurationValue, "%2d\n")
    +usb_actconfig_attr (bmAttributes, "%2x\n")
    +usb_actconfig_attr (MaxPower, "%3dmA\n")
    +
    +/* String fields */
    +static ssize_t show_product (struct device *dev, char *buf, size_t count, loff_t off)
    +{
    + struct usb_device *udev;
    + int len;
    +
    + if (off)
    + return 0;
    + udev = to_usb_device (dev);
    +
    + len = usb_string(udev, udev->descriptor.iProduct, buf, PAGE_SIZE);
    + if (len < 0)
    + return 0;
    + buf[len] = '\n';
    + buf[len+1] = 0;
    + return len+1;
    +}
    +static DEVICE_ATTR(product,S_IRUGO,show_product,NULL);
    +
    +static ssize_t
    +show_manufacturer (struct device *dev, char *buf, size_t count, loff_t off)
    +{
    + struct usb_device *udev;
    + int len;
    +
    + if (off)
    + return 0;
    + udev = to_usb_device (dev);
    +
    + len = usb_string(udev, udev->descriptor.iManufacturer, buf, PAGE_SIZE);
    + if (len < 0)
    + return 0;
    + buf[len] = '\n';
    + buf[len+1] = 0;
    + return len+1;
    +}
    +static DEVICE_ATTR(manufacturer,S_IRUGO,show_manufacturer,NULL);
    +
    +static ssize_t
    +show_serial (struct device *dev, char *buf, size_t count, loff_t off)
    +{
    + struct usb_device *udev;
    + int len;
    +
    + if (off)
    + return 0;
    + udev = to_usb_device (dev);
    +
    + len = usb_string(udev, udev->descriptor.iSerialNumber, buf, PAGE_SIZE);
    + if (len < 0)
    + return 0;
    + buf[len] = '\n';
    + buf[len+1] = 0;
    + return len+1;
    +}
    +static DEVICE_ATTR(serial,S_IRUGO,show_serial,NULL);
    +
    +/* Descriptor fields */
    +#define usb_descriptor_attr(field, format_string) \
    +static ssize_t \
    +show_##field (struct device *dev, char *buf, size_t count, loff_t off) \
    +{ \
    + struct usb_device *udev; \
    + \
    + if (off) \
    + return 0; \
    + \
    + udev = to_usb_device (dev); \
    + return sprintf (buf, format_string, udev->descriptor.field); \
    +} \
    +static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
    +
    +usb_descriptor_attr (idVendor, "%04x\n")
    +usb_descriptor_attr (idProduct, "%04x\n")
    +usb_descriptor_attr (bcdDevice, "%04x\n")
    +usb_descriptor_attr (bDeviceClass, "%02x\n")
    +usb_descriptor_attr (bDeviceSubClass, "%02x\n")
    +usb_descriptor_attr (bDeviceProtocol, "%02x\n")
    +
    +
    +void usb_create_driverfs_dev_files (struct usb_device *udev)
    +{
    + struct device *dev = &udev->dev;
    +
    + device_create_file (dev, &dev_attr_bNumInterfaces);
    + device_create_file (dev, &dev_attr_bConfigurationValue);
    + device_create_file (dev, &dev_attr_bmAttributes);
    + device_create_file (dev, &dev_attr_MaxPower);
    + device_create_file (dev, &dev_attr_idVendor);
    + device_create_file (dev, &dev_attr_idProduct);
    + device_create_file (dev, &dev_attr_bcdDevice);
    + device_create_file (dev, &dev_attr_bDeviceClass);
    + device_create_file (dev, &dev_attr_bDeviceSubClass);
    + device_create_file (dev, &dev_attr_bDeviceProtocol);
    +
    + if (udev->descriptor.iManufacturer)
    + device_create_file (dev, &dev_attr_manufacturer);
    + if (udev->descriptor.iProduct)
    + device_create_file (dev, &dev_attr_product);
    + if (udev->descriptor.iSerialNumber)
    + device_create_file (dev, &dev_attr_serial);
    +}
    +
    +/* Interface fields */
    +#define usb_intf_attr(field, format_string) \
    +static ssize_t \
    +show_##field (struct device *dev, char *buf, size_t count, loff_t off) \
    +{ \
    + struct usb_interface *intf; \
    + int alt; \
    + \
    + if (off) \
    + return 0; \
    + \
    + intf = to_usb_interface (dev); \
    + alt = intf->act_altsetting; \
    + \
    + return sprintf (buf, format_string, intf->altsetting[alt].field); \
    +} \
    +static DEVICE_ATTR(field, S_IRUGO, show_##field, NULL);
    +
    +usb_intf_attr (bAlternateSetting, "%2d\n")
    +usb_intf_attr (bInterfaceClass, "%02x\n")
    +usb_intf_attr (bInterfaceSubClass, "%02x\n")
    +usb_intf_attr (bInterfaceProtocol, "%02x\n")
    +
    +void usb_create_driverfs_intf_files (struct usb_interface *intf)
    +{
    + device_create_file (&intf->dev, &dev_attr_bAlternateSetting);
    + device_create_file (&intf->dev, &dev_attr_bInterfaceClass);
    + device_create_file (&intf->dev, &dev_attr_bInterfaceSubClass);
    + device_create_file (&intf->dev, &dev_attr_bInterfaceProtocol);
    +}
    diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
    --- a/drivers/usb/core/usb.c Mon Sep 30 17:25:40 2002
    +++ b/drivers/usb/core/usb.c Mon Sep 30 17:25:40 2002
    @@ -42,6 +42,7 @@
    #include <linux/usb.h>

    #include "hcd.h"
    +#include "usb.h"

    extern int usb_hub_init(void);
    extern void usb_hub_cleanup(void);
    @@ -629,98 +630,6 @@

    #endif /* CONFIG_HOTPLUG */

    -/* driverfs files */
    -
    -/* devices have one current configuration, with one
    - * or more interfaces that are used concurrently
    - */
    -static ssize_t
    -show_config (struct device *dev, char *buf, size_t count, loff_t off)
    -{
    - struct usb_device *udev;
    -
    - if (off)
    - return 0;
    - udev = to_usb_device (dev);
    - return sprintf (buf, "%u\n", udev->actconfig->bConfigurationValue);
    -}
    -
    -static DEVICE_ATTR(configuration,S_IRUGO,show_config,NULL);
    -
    -/* interfaces have one current setting; alternates
    - * can have different endpoints and class info.
    - */
    -static ssize_t
    -show_altsetting (struct device *dev, char *buf, size_t count, loff_t off)
    -{
    - struct usb_interface *interface;
    -
    - if (off)
    - return 0;
    - interface = to_usb_interface (dev);
    - return sprintf (buf, "%u\n", interface->altsetting->bAlternateSetting);
    -}
    -static DEVICE_ATTR(altsetting,S_IRUGO,show_altsetting,NULL);
    -
    -/* product driverfs file */
    -static ssize_t show_product (struct device *dev, char *buf, size_t count, loff_t off)
    -{
    - struct usb_device *udev;
    - int len;
    -
    - if (off)
    - return 0;
    - udev = to_usb_device (dev);
    -
    - len = usb_string(udev, udev->descriptor.iProduct, buf, PAGE_SIZE);
    - if (len < 0)
    - return 0;
    - buf[len] = '\n';
    - buf[len+1] = 0;
    - return len+1;
    -}
    -static DEVICE_ATTR(product,S_IRUGO,show_product,NULL);
    -
    -/* manufacturer driverfs file */
    -static ssize_t
    -show_manufacturer (struct device *dev, char *buf, size_t count, loff_t off)
    -{
    - struct usb_device *udev;
    - int len;
    -
    - if (off)
    - return 0;
    - udev = to_usb_device (dev);
    -
    - len = usb_string(udev, udev->descriptor.iManufacturer, buf, PAGE_SIZE);
    - if (len < 0)
    - return 0;
    - buf[len] = '\n';
    - buf[len+1] = 0;
    - return len+1;
    -}
    -static DEVICE_ATTR(manufacturer,S_IRUGO,show_manufacturer,NULL);
    -
    -/* serial number driverfs file */
    -static ssize_t
    -show_serial (struct device *dev, char *buf, size_t count, loff_t off)
    -{
    - struct usb_device *udev;
    - int len;
    -
    - if (off)
    - return 0;
    - udev = to_usb_device (dev);
    -
    - len = usb_string(udev, udev->descriptor.iSerialNumber, buf, PAGE_SIZE);
    - if (len < 0)
    - return 0;
    - buf[len] = '\n';
    - buf[len+1] = 0;
    - return len+1;
    -}
    -static DEVICE_ATTR(serial,S_IRUGO,show_serial,NULL);
    -
    /**
    * usb_alloc_dev - allocate a usb device structure (usbcore-internal)
    * @parent: hub to which device is connected
    @@ -1133,13 +1042,7 @@
    return err;

    /* add the USB device specific driverfs files */
    - device_create_file (&dev->dev, &dev_attr_configuration);
    - if (dev->descriptor.iManufacturer)
    - device_create_file (&dev->dev, &dev_attr_manufacturer);
    - if (dev->descriptor.iProduct)
    - device_create_file (&dev->dev, &dev_attr_product);
    - if (dev->descriptor.iSerialNumber)
    - device_create_file (&dev->dev, &dev_attr_serial);
    + usb_create_driverfs_dev_files (dev);

    /* Register all of the interfaces for this device with the driver core.
    * Remember, interfaces get bound to drivers, not devices. */
    @@ -1169,7 +1072,7 @@
    }
    dbg ("%s - registering %s", __FUNCTION__, interface->dev.bus_id);
    device_register (&interface->dev);
    - device_create_file (&interface->dev, &dev_attr_altsetting);
    + usb_create_driverfs_intf_files (interface);
    }

    /* add a /proc/bus/usb entry */
    diff -Nru a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
    --- /dev/null Wed Dec 31 16:00:00 1969
    +++ b/drivers/usb/core/usb.h Mon Sep 30 17:25:40 2002
    @@ -0,0 +1,5 @@
    +/* Functions local to drivers/usb/core/ */
    +
    +extern void usb_create_driverfs_dev_files (struct usb_device *dev);
    +extern void usb_create_driverfs_intf_files (struct usb_interface *intf);
    +
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:29    [W:0.042 / U:93.672 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site