summaryrefslogtreecommitdiff
path: root/drivers/usb/usbip/vhci.h
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2014-09-24 09:11:05 +0400
committerOlof Johansson <olof@lixom.net>2014-09-24 09:11:25 +0400
commit8adc36bcd374dc7381d15e654215dd1f548ccbef (patch)
treeafc86512891f75b04efa0273694a977a77529a86 /drivers/usb/usbip/vhci.h
parent96bdd9aeb2cbc5eaae586f4d43badd072611fcb1 (diff)
parentd27704d1ec2f9ba06247b402c58a6f2febecef78 (diff)
downloadlinux-8adc36bcd374dc7381d15e654215dd1f548ccbef.tar.xz
Merge tag 'dt-for-v3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/dt
Merge "omap dts changes for v3.18 merge window" from Tony Lindgren: Changes for .dts files for omaps for v3.18 merge window: - Updates for gta04 to add gta04a3 model - Add support for Tehnexion TAO3530 boards - Regulator names for beaglebone - Pinctrl related updates for omap5, dra7 and am437 - Model name fix for sbc-t54 - Enable mailbox for various omaps * tag 'dt-for-v3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: (291 commits) ARM: dts: OMAP2+: Add sub mailboxes device node information ARM: dts: dra7-evm: Mark uart1 rxd as wakeup capable ARM: dts: OMAP5 / DRA7: switch over to interrupts-extended property for UART ARM: dts: AM437x: switch to compatible pinctrl ARM: dts: DRA7: switch to compatible pinctrl ARM: dts: OMAP5: switch to compatible pinctrl ARM: dts: am335x-boneblack: Add names for remaining regulators ARM: dts: sbc-t54: fix model property ARM: dts: omap5.dtsi: add DSS RFBI node ARM: dts: omap3: Add HEAD acoustics omap3-ha.dts and omap3-ha-lcd.dts (TAO3530 based) ARM: dts: omap3: Add Technexion Thunder support (TAO3530 SOM based) ARM: dts: omap3: Add Technexion TAO3530 SOM omap3-tao3530.dtsi ARM: OMAP2+: tao3530: Add pdata-quirk for the mmc2 internal clock ARM: OMAP2+: board-generic: add support for AM57xx family ARM: dts: dra72-evm: Add tps65917 PMIC node ARM: dts: dra72-evm: Enable I2C1 node Linux 3.17-rc3 unicore32: Fix build error vexpress/spc: fix a build warning on array bounds spi: sh-msiof: Fix transmit-only DMA transfers ... Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'drivers/usb/usbip/vhci.h')
-rw-r--r--drivers/usb/usbip/vhci.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/drivers/usb/usbip/vhci.h b/drivers/usb/usbip/vhci.h
new file mode 100644
index 000000000000..a863a98a91ce
--- /dev/null
+++ b/drivers/usb/usbip/vhci.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2003-2008 Takahiro Hirofuchi
+ *
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#ifndef __USBIP_VHCI_H
+#define __USBIP_VHCI_H
+
+#include <linux/device.h>
+#include <linux/list.h>
+#include <linux/spinlock.h>
+#include <linux/sysfs.h>
+#include <linux/types.h>
+#include <linux/usb.h>
+#include <linux/usb/hcd.h>
+#include <linux/wait.h>
+
+struct vhci_device {
+ struct usb_device *udev;
+
+ /*
+ * devid specifies a remote usb device uniquely instead
+ * of combination of busnum and devnum.
+ */
+ __u32 devid;
+
+ /* speed of a remote device */
+ enum usb_device_speed speed;
+
+ /* vhci root-hub port to which this device is attached */
+ __u32 rhport;
+
+ struct usbip_device ud;
+
+ /* lock for the below link lists */
+ spinlock_t priv_lock;
+
+ /* vhci_priv is linked to one of them. */
+ struct list_head priv_tx;
+ struct list_head priv_rx;
+
+ /* vhci_unlink is linked to one of them */
+ struct list_head unlink_tx;
+ struct list_head unlink_rx;
+
+ /* vhci_tx thread sleeps for this queue */
+ wait_queue_head_t waitq_tx;
+};
+
+/* urb->hcpriv, use container_of() */
+struct vhci_priv {
+ unsigned long seqnum;
+ struct list_head list;
+
+ struct vhci_device *vdev;
+ struct urb *urb;
+};
+
+struct vhci_unlink {
+ /* seqnum of this request */
+ unsigned long seqnum;
+
+ struct list_head list;
+
+ /* seqnum of the unlink target */
+ unsigned long unlink_seqnum;
+};
+
+/* Number of supported ports. Value has an upperbound of USB_MAXCHILDREN */
+#define VHCI_NPORTS 8
+
+/* for usb_bus.hcpriv */
+struct vhci_hcd {
+ spinlock_t lock;
+
+ u32 port_status[VHCI_NPORTS];
+
+ unsigned resuming:1;
+ unsigned long re_timeout;
+
+ atomic_t seqnum;
+
+ /*
+ * NOTE:
+ * wIndex shows the port number and begins from 1.
+ * But, the index of this array begins from 0.
+ */
+ struct vhci_device vdev[VHCI_NPORTS];
+};
+
+extern struct vhci_hcd *the_controller;
+extern const struct attribute_group dev_attr_group;
+
+/* vhci_hcd.c */
+void rh_port_connect(int rhport, enum usb_device_speed speed);
+
+/* vhci_rx.c */
+struct urb *pickup_urb_and_free_priv(struct vhci_device *vdev, __u32 seqnum);
+int vhci_rx_loop(void *data);
+
+/* vhci_tx.c */
+int vhci_tx_loop(void *data);
+
+static inline struct vhci_device *port_to_vdev(__u32 port)
+{
+ return &the_controller->vdev[port];
+}
+
+static inline struct vhci_hcd *hcd_to_vhci(struct usb_hcd *hcd)
+{
+ return (struct vhci_hcd *) (hcd->hcd_priv);
+}
+
+static inline struct usb_hcd *vhci_to_hcd(struct vhci_hcd *vhci)
+{
+ return container_of((void *) vhci, struct usb_hcd, hcd_priv);
+}
+
+static inline struct device *vhci_dev(struct vhci_hcd *vhci)
+{
+ return vhci_to_hcd(vhci)->self.controller;
+}
+
+#endif /* __USBIP_VHCI_H */