usb: Add driver/usb/core/(port.c,hub.h) files
authorLan Tianyu <tianyu.lan@intel.com>
Fri, 11 Jan 2013 12:10:38 +0000 (20:10 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 Jan 2013 23:49:00 +0000 (15:49 -0800)
This patch is to create driver/usb/core/(port.c,hub.h) files and move usb
port related code into port.c.

Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/core/Makefile
drivers/usb/core/hub.c
drivers/usb/core/hub.h [new file with mode: 0644]
drivers/usb/core/port.c [new file with mode: 0644]

index 26059b93dbf4bac36e72cb580adea681436ce88f..5e847ad2f58a46ec19037e53c8a19be0b1f96f05 100644 (file)
@@ -7,6 +7,7 @@ ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG
 usbcore-y := usb.o hub.o hcd.o urb.o message.o driver.o
 usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o
 usbcore-y += devio.o notify.o generic.o quirks.o devices.o
+usbcore-y += port.o
 
 usbcore-$(CONFIG_PCI)          += hcd-pci.o
 usbcore-$(CONFIG_ACPI)         += usb-acpi.o
index dc6ebd1d88da3c534823d3ede7acba526eea0b06..f6ff1302f343b6425931d3ea74547091fa47f2da 100644 (file)
@@ -30,7 +30,7 @@
 #include <asm/uaccess.h>
 #include <asm/byteorder.h>
 
-#include "usb.h"
+#include "hub.h"
 
 /* if we are in debug mode, always announce new devices */
 #ifdef DEBUG
 #define USB_VENDOR_GENESYS_LOGIC               0x05e3
 #define HUB_QUIRK_CHECK_PORT_AUTOSUSPEND       0x01
 
-struct usb_port {
-       struct usb_device *child;
-       struct device dev;
-       struct dev_state *port_owner;
-       enum usb_port_connect_type connect_type;
-};
-
-struct usb_hub {
-       struct device           *intfdev;       /* the "interface" device */
-       struct usb_device       *hdev;
-       struct kref             kref;
-       struct urb              *urb;           /* for interrupt polling pipe */
-
-       /* buffer for urb ... with extra space in case of babble */
-       char                    (*buffer)[8];
-       union {
-               struct usb_hub_status   hub;
-               struct usb_port_status  port;
-       }                       *status;        /* buffer for status reports */
-       struct mutex            status_mutex;   /* for the status buffer */
-
-       int                     error;          /* last reported error */
-       int                     nerrors;        /* track consecutive errors */
-
-       struct list_head        event_list;     /* hubs w/data or errs ready */
-       unsigned long           event_bits[1];  /* status change bitmask */
-       unsigned long           change_bits[1]; /* ports with logical connect
-                                                       status change */
-       unsigned long           busy_bits[1];   /* ports being reset or
-                                                       resumed */
-       unsigned long           removed_bits[1]; /* ports with a "removed"
-                                                       device present */
-       unsigned long           wakeup_bits[1]; /* ports that have signaled
-                                                       remote wakeup */
-#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1 */
-#error event_bits[] is too short!
-#endif
-
-       struct usb_hub_descriptor *descriptor;  /* class descriptor */
-       struct usb_tt           tt;             /* Transaction Translator */
-
-       unsigned                mA_per_port;    /* current for each child */
-
-       unsigned                limited_power:1;
-       unsigned                quiescing:1;
-       unsigned                disconnected:1;
-
-       unsigned                quirk_check_port_auto_suspend:1;
-
-       unsigned                has_indicators:1;
-       u8                      indicator[USB_MAXCHILDREN];
-       struct delayed_work     leds;
-       struct delayed_work     init_work;
-       struct usb_port         **ports;
-};
-
 static inline int hub_is_superspeed(struct usb_device *hdev)
 {
        return (hdev->descriptor.bDeviceProtocol == USB_HUB_PR_SS);
@@ -168,9 +112,6 @@ EXPORT_SYMBOL_GPL(ehci_cf_port_reset_rwsem);
 #define HUB_DEBOUNCE_STEP        25
 #define HUB_DEBOUNCE_STABLE     100
 
-#define to_usb_port(_dev) \
-       container_of(_dev, struct usb_port, dev)
-
 static int usb_reset_and_verify_device(struct usb_device *udev);
 
 static inline char *portspeed(struct usb_hub *hub, int portstatus)
@@ -1294,52 +1235,6 @@ static int hub_post_reset(struct usb_interface *intf)
        return 0;
 }
 
-static void usb_port_device_release(struct device *dev)
-{
-       struct usb_port *port_dev = to_usb_port(dev);
-
-       kfree(port_dev);
-}
-
-static void usb_hub_remove_port_device(struct usb_hub *hub,
-                                      int port1)
-{
-       device_unregister(&hub->ports[port1 - 1]->dev);
-}
-
-struct device_type usb_port_device_type = {
-       .name =         "usb_port",
-       .release =      usb_port_device_release,
-};
-
-static int usb_hub_create_port_device(struct usb_hub *hub,
-                                     int port1)
-{
-       struct usb_port *port_dev = NULL;
-       int retval;
-
-       port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL);
-       if (!port_dev) {
-               retval = -ENOMEM;
-               goto exit;
-       }
-
-       hub->ports[port1 - 1] = port_dev;
-       port_dev->dev.parent = hub->intfdev;
-       port_dev->dev.type = &usb_port_device_type;
-       dev_set_name(&port_dev->dev, "port%d", port1);
-
-       retval = device_register(&port_dev->dev);
-       if (retval)
-               goto error_register;
-       return 0;
-
-error_register:
-       put_device(&port_dev->dev);
-exit:
-       return retval;
-}
-
 static int hub_configure(struct usb_hub *hub,
        struct usb_endpoint_descriptor *endpoint)
 {
diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h
new file mode 100644 (file)
index 0000000..d16a7c9
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * usb hub driver head file
+ *
+ * Copyright (C) 1999 Linus Torvalds
+ * Copyright (C) 1999 Johannes Erdfelt
+ * Copyright (C) 1999 Gregory P. Smith
+ * Copyright (C) 2001 Brad Hards (bhards@bigpond.net.au)
+ * Copyright (C) 2012 Intel Corp (tianyu.lan@intel.com)
+ *
+ *  move struct usb_hub to this file.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include <linux/usb.h>
+#include <linux/usb/ch11.h>
+#include <linux/usb/hcd.h>
+#include "usb.h"
+
+struct usb_hub {
+       struct device           *intfdev;       /* the "interface" device */
+       struct usb_device       *hdev;
+       struct kref             kref;
+       struct urb              *urb;           /* for interrupt polling pipe */
+
+       /* buffer for urb ... with extra space in case of babble */
+       char                    (*buffer)[8];
+       union {
+               struct usb_hub_status   hub;
+               struct usb_port_status  port;
+       }                       *status;        /* buffer for status reports */
+       struct mutex            status_mutex;   /* for the status buffer */
+
+       int                     error;          /* last reported error */
+       int                     nerrors;        /* track consecutive errors */
+
+       struct list_head        event_list;     /* hubs w/data or errs ready */
+       unsigned long           event_bits[1];  /* status change bitmask */
+       unsigned long           change_bits[1]; /* ports with logical connect
+                                                       status change */
+       unsigned long           busy_bits[1];   /* ports being reset or
+                                                       resumed */
+       unsigned long           removed_bits[1]; /* ports with a "removed"
+                                                       device present */
+       unsigned long           wakeup_bits[1]; /* ports that have signaled
+                                                       remote wakeup */
+#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1 */
+#error event_bits[] is too short!
+#endif
+
+       struct usb_hub_descriptor *descriptor;  /* class descriptor */
+       struct usb_tt           tt;             /* Transaction Translator */
+
+       unsigned                mA_per_port;    /* current for each child */
+
+       unsigned                limited_power:1;
+       unsigned                quiescing:1;
+       unsigned                disconnected:1;
+
+       unsigned                quirk_check_port_auto_suspend:1;
+
+       unsigned                has_indicators:1;
+       u8                      indicator[USB_MAXCHILDREN];
+       struct delayed_work     leds;
+       struct delayed_work     init_work;
+       struct usb_port         **ports;
+};
+
+/**
+ * struct usb port - kernel's representation of a usb port
+ * @child: usb device attatched to the port
+ * @dev: generic device interface
+ * @port_owner: port's owner
+ * @connect_type: port's connect type
+ */
+struct usb_port {
+       struct usb_device *child;
+       struct device dev;
+       struct dev_state *port_owner;
+       enum usb_port_connect_type connect_type;
+};
+
+#define to_usb_port(_dev) \
+       container_of(_dev, struct usb_port, dev)
+
+extern int usb_hub_create_port_device(struct usb_hub *hub,
+               int port1);
+extern void usb_hub_remove_port_device(struct usb_hub *hub,
+               int port1);
+
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c
new file mode 100644 (file)
index 0000000..2bc1cef
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * usb port device code
+ *
+ * Copyright (C) 2012 Intel Corp
+ *
+ * Author: Lan Tianyu <tianyu.lan@intel.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ *
+ */
+
+#include "hub.h"
+
+static void usb_port_device_release(struct device *dev)
+{
+       struct usb_port *port_dev = to_usb_port(dev);
+
+       kfree(port_dev);
+}
+
+struct device_type usb_port_device_type = {
+       .name =         "usb_port",
+       .release =      usb_port_device_release,
+};
+
+int usb_hub_create_port_device(struct usb_hub *hub, int port1)
+{
+       struct usb_port *port_dev = NULL;
+       int retval;
+
+       port_dev = kzalloc(sizeof(*port_dev), GFP_KERNEL);
+       if (!port_dev) {
+               retval = -ENOMEM;
+               goto exit;
+       }
+
+       hub->ports[port1 - 1] = port_dev;
+       port_dev->dev.parent = hub->intfdev;
+       port_dev->dev.type = &usb_port_device_type;
+       dev_set_name(&port_dev->dev, "port%d", port1);
+
+       retval = device_register(&port_dev->dev);
+       if (retval)
+               goto error_register;
+
+       return 0;
+
+error_register:
+       put_device(&port_dev->dev);
+exit:
+       return retval;
+}
+
+void usb_hub_remove_port_device(struct usb_hub *hub,
+                                      int port1)
+{
+       device_unregister(&hub->ports[port1 - 1]->dev);
+}
+