Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
stub_dev.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2003-2008 Takahiro Hirofuchi
3  *
4  * This is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17  * USA.
18  */
19 
20 #include <linux/device.h>
21 #include <linux/kthread.h>
22 #include <linux/module.h>
23 
24 #include "usbip_common.h"
25 #include "stub.h"
26 
27 /*
28  * Define device IDs here if you want to explicitly limit exportable devices.
29  * In most cases, wildcard matching will be okay because driver binding can be
30  * changed dynamically by a userland program.
31  */
32 static struct usb_device_id stub_table[] = {
33 #if 0
34  /* just an example */
35  { USB_DEVICE(0x05ac, 0x0301) }, /* Mac 1 button mouse */
36  { USB_DEVICE(0x0430, 0x0009) }, /* Plat Home Keyboard */
37  { USB_DEVICE(0x059b, 0x0001) }, /* Iomega USB Zip 100 */
38  { USB_DEVICE(0x04b3, 0x4427) }, /* IBM USB CD-ROM */
39  { USB_DEVICE(0x05a9, 0xa511) }, /* LifeView USB cam */
40  { USB_DEVICE(0x55aa, 0x0201) }, /* Imation card reader */
41  { USB_DEVICE(0x046d, 0x0870) }, /* Qcam Express(QV-30) */
42  { USB_DEVICE(0x04bb, 0x0101) }, /* IO-DATA HD 120GB */
43  { USB_DEVICE(0x04bb, 0x0904) }, /* IO-DATA USB-ET/TX */
44  { USB_DEVICE(0x04bb, 0x0201) }, /* IO-DATA USB-ET/TX */
45  { USB_DEVICE(0x08bb, 0x2702) }, /* ONKYO USB Speaker */
46  { USB_DEVICE(0x046d, 0x08b2) }, /* Logicool Qcam 4000 Pro */
47 #endif
48  /* magic for wild card */
49  { .driver_info = 1 },
50  { 0, } /* Terminating entry */
51 };
52 MODULE_DEVICE_TABLE(usb, stub_table);
53 
54 /*
55  * usbip_status shows the status of usbip-host as long as this driver is bound
56  * to the target device.
57  */
58 static ssize_t show_status(struct device *dev, struct device_attribute *attr,
59  char *buf)
60 {
61  struct stub_device *sdev = dev_get_drvdata(dev);
62  int status;
63 
64  if (!sdev) {
65  dev_err(dev, "sdev is null\n");
66  return -ENODEV;
67  }
68 
69  spin_lock(&sdev->ud.lock);
70  status = sdev->ud.status;
71  spin_unlock(&sdev->ud.lock);
72 
73  return snprintf(buf, PAGE_SIZE, "%d\n", status);
74 }
75 static DEVICE_ATTR(usbip_status, S_IRUGO, show_status, NULL);
76 
77 /*
78  * usbip_sockfd gets a socket descriptor of an established TCP connection that
79  * is used to transfer usbip requests by kernel threads. -1 is a magic number
80  * by which usbip connection is finished.
81  */
82 static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
83  const char *buf, size_t count)
84 {
85  struct stub_device *sdev = dev_get_drvdata(dev);
86  int sockfd = 0;
87  struct socket *socket;
88 
89  if (!sdev) {
90  dev_err(dev, "sdev is null\n");
91  return -ENODEV;
92  }
93 
94  sscanf(buf, "%d", &sockfd);
95 
96  if (sockfd != -1) {
97  dev_info(dev, "stub up\n");
98 
99  spin_lock(&sdev->ud.lock);
100 
101  if (sdev->ud.status != SDEV_ST_AVAILABLE) {
102  dev_err(dev, "not ready\n");
103  spin_unlock(&sdev->ud.lock);
104  return -EINVAL;
105  }
106 
107  socket = sockfd_to_socket(sockfd);
108  if (!socket) {
109  spin_unlock(&sdev->ud.lock);
110  return -EINVAL;
111  }
112  sdev->ud.tcp_socket = socket;
113 
114  spin_unlock(&sdev->ud.lock);
115 
116  sdev->ud.tcp_rx = kthread_get_run(stub_rx_loop, &sdev->ud, "stub_rx");
117  sdev->ud.tcp_tx = kthread_get_run(stub_tx_loop, &sdev->ud, "stub_tx");
118 
119  spin_lock(&sdev->ud.lock);
120  sdev->ud.status = SDEV_ST_USED;
121  spin_unlock(&sdev->ud.lock);
122 
123  } else {
124  dev_info(dev, "stub down\n");
125 
126  spin_lock(&sdev->ud.lock);
127  if (sdev->ud.status != SDEV_ST_USED) {
128  spin_unlock(&sdev->ud.lock);
129  return -EINVAL;
130  }
131  spin_unlock(&sdev->ud.lock);
132 
134  }
135 
136  return count;
137 }
138 static DEVICE_ATTR(usbip_sockfd, S_IWUSR, NULL, store_sockfd);
139 
140 static int stub_add_files(struct device *dev)
141 {
142  int err = 0;
143 
144  err = device_create_file(dev, &dev_attr_usbip_status);
145  if (err)
146  goto err_status;
147 
148  err = device_create_file(dev, &dev_attr_usbip_sockfd);
149  if (err)
150  goto err_sockfd;
151 
153  if (err)
154  goto err_debug;
155 
156  return 0;
157 
158 err_debug:
159  device_remove_file(dev, &dev_attr_usbip_sockfd);
160 err_sockfd:
161  device_remove_file(dev, &dev_attr_usbip_status);
162 err_status:
163  return err;
164 }
165 
166 static void stub_remove_files(struct device *dev)
167 {
168  device_remove_file(dev, &dev_attr_usbip_status);
169  device_remove_file(dev, &dev_attr_usbip_sockfd);
171 }
172 
173 static void stub_shutdown_connection(struct usbip_device *ud)
174 {
175  struct stub_device *sdev = container_of(ud, struct stub_device, ud);
176 
177  /*
178  * When removing an exported device, kernel panic sometimes occurred
179  * and then EIP was sk_wait_data of stub_rx thread. Is this because
180  * sk_wait_data returned though stub_rx thread was already finished by
181  * step 1?
182  */
183  if (ud->tcp_socket) {
184  dev_dbg(&sdev->udev->dev, "shutdown tcp_socket %p\n",
185  ud->tcp_socket);
187  }
188 
189  /* 1. stop threads */
190  if (ud->tcp_rx) {
192  ud->tcp_rx = NULL;
193  }
194  if (ud->tcp_tx) {
196  ud->tcp_tx = NULL;
197  }
198 
199  /*
200  * 2. close the socket
201  *
202  * tcp_socket is freed after threads are killed so that usbip_xmit does
203  * not touch NULL socket.
204  */
205  if (ud->tcp_socket) {
207  ud->tcp_socket = NULL;
208  }
209 
210  /* 3. free used data */
212 
213  /* 4. free stub_unlink */
214  {
215  unsigned long flags;
216  struct stub_unlink *unlink, *tmp;
217 
218  spin_lock_irqsave(&sdev->priv_lock, flags);
219  list_for_each_entry_safe(unlink, tmp, &sdev->unlink_tx, list) {
220  list_del(&unlink->list);
221  kfree(unlink);
222  }
223  list_for_each_entry_safe(unlink, tmp, &sdev->unlink_free,
224  list) {
225  list_del(&unlink->list);
226  kfree(unlink);
227  }
228  spin_unlock_irqrestore(&sdev->priv_lock, flags);
229  }
230 }
231 
232 static void stub_device_reset(struct usbip_device *ud)
233 {
234  struct stub_device *sdev = container_of(ud, struct stub_device, ud);
235  struct usb_device *udev = sdev->udev;
236  int ret;
237 
238  dev_dbg(&udev->dev, "device reset");
239 
240  ret = usb_lock_device_for_reset(udev, sdev->interface);
241  if (ret < 0) {
242  dev_err(&udev->dev, "lock for reset\n");
243  spin_lock(&ud->lock);
244  ud->status = SDEV_ST_ERROR;
245  spin_unlock(&ud->lock);
246  return;
247  }
248 
249  /* try to reset the device */
250  ret = usb_reset_device(udev);
251  usb_unlock_device(udev);
252 
253  spin_lock(&ud->lock);
254  if (ret) {
255  dev_err(&udev->dev, "device reset\n");
256  ud->status = SDEV_ST_ERROR;
257  } else {
258  dev_info(&udev->dev, "device reset\n");
260  }
261  spin_unlock(&ud->lock);
262 }
263 
264 static void stub_device_unusable(struct usbip_device *ud)
265 {
266  spin_lock(&ud->lock);
267  ud->status = SDEV_ST_ERROR;
268  spin_unlock(&ud->lock);
269 }
270 
277 static struct stub_device *stub_device_alloc(struct usb_device *udev,
278  struct usb_interface *interface)
279 {
280  struct stub_device *sdev;
281  int busnum = interface_to_busnum(interface);
282  int devnum = interface_to_devnum(interface);
283 
284  dev_dbg(&interface->dev, "allocating stub device");
285 
286  /* yes, it's a new device */
287  sdev = kzalloc(sizeof(struct stub_device), GFP_KERNEL);
288  if (!sdev) {
289  dev_err(&interface->dev, "no memory for stub_device\n");
290  return NULL;
291  }
292 
293  sdev->interface = usb_get_intf(interface);
294  sdev->udev = usb_get_dev(udev);
295 
296  /*
297  * devid is defined with devnum when this driver is first allocated.
298  * devnum may change later if a device is reset. However, devid never
299  * changes during a usbip connection.
300  */
301  sdev->devid = (busnum << 16) | devnum;
302  sdev->ud.side = USBIP_STUB;
303  sdev->ud.status = SDEV_ST_AVAILABLE;
304  spin_lock_init(&sdev->ud.lock);
305  sdev->ud.tcp_socket = NULL;
306 
307  INIT_LIST_HEAD(&sdev->priv_init);
308  INIT_LIST_HEAD(&sdev->priv_tx);
309  INIT_LIST_HEAD(&sdev->priv_free);
310  INIT_LIST_HEAD(&sdev->unlink_free);
311  INIT_LIST_HEAD(&sdev->unlink_tx);
312  spin_lock_init(&sdev->priv_lock);
313 
315 
316  sdev->ud.eh_ops.shutdown = stub_shutdown_connection;
317  sdev->ud.eh_ops.reset = stub_device_reset;
318  sdev->ud.eh_ops.unusable = stub_device_unusable;
319 
320  usbip_start_eh(&sdev->ud);
321 
322  dev_dbg(&interface->dev, "register new interface\n");
323 
324  return sdev;
325 }
326 
327 static int stub_device_free(struct stub_device *sdev)
328 {
329  if (!sdev)
330  return -EINVAL;
331 
332  kfree(sdev);
333  pr_debug("kfree udev ok\n");
334 
335  return 0;
336 }
337 
338 /*
339  * If a usb device has multiple active interfaces, this driver is bound to all
340  * the active interfaces. However, usbip exports *a* usb device (i.e., not *an*
341  * active interface). Currently, a userland program must ensure that it
342  * looks at the usbip's sysfs entries of only the first active interface.
343  *
344  * TODO: use "struct usb_device_driver" to bind a usb device.
345  * However, it seems it is not fully supported in mainline kernel yet
346  * (2.6.19.2).
347  */
348 static int stub_probe(struct usb_interface *interface,
349  const struct usb_device_id *id)
350 {
351  struct usb_device *udev = interface_to_usbdev(interface);
352  struct stub_device *sdev = NULL;
353  const char *udev_busid = dev_name(interface->dev.parent);
354  int err = 0;
355  struct bus_id_priv *busid_priv;
356 
357  dev_dbg(&interface->dev, "Enter\n");
358 
359  /* check we should claim or not by busid_table */
360  busid_priv = get_busid_priv(udev_busid);
361  if (!busid_priv || (busid_priv->status == STUB_BUSID_REMOV) ||
362  (busid_priv->status == STUB_BUSID_OTHER)) {
363  dev_info(&interface->dev, "%s is not in match_busid table... "
364  "skip!\n", udev_busid);
365 
366  /*
367  * Return value should be ENODEV or ENOXIO to continue trying
368  * other matched drivers by the driver core.
369  * See driver_probe_device() in driver/base/dd.c
370  */
371  return -ENODEV;
372  }
373 
374  if (udev->descriptor.bDeviceClass == USB_CLASS_HUB) {
375  dev_dbg(&udev->dev, "%s is a usb hub device... skip!\n",
376  udev_busid);
377  return -ENODEV;
378  }
379 
380  if (!strcmp(udev->bus->bus_name, "vhci_hcd")) {
381  dev_dbg(&udev->dev, "%s is attached on vhci_hcd... skip!\n",
382  udev_busid);
383  return -ENODEV;
384  }
385 
386  if (busid_priv->status == STUB_BUSID_ALLOC) {
387  sdev = busid_priv->sdev;
388  if (!sdev)
389  return -ENODEV;
390 
391  busid_priv->interf_count++;
392  dev_info(&interface->dev, "usbip-host: register new interface "
393  "(bus %u dev %u ifn %u)\n",
394  udev->bus->busnum, udev->devnum,
395  interface->cur_altsetting->desc.bInterfaceNumber);
396 
397  /* set private data to usb_interface */
398  usb_set_intfdata(interface, sdev);
399 
400  err = stub_add_files(&interface->dev);
401  if (err) {
402  dev_err(&interface->dev, "stub_add_files for %s\n",
403  udev_busid);
404  usb_set_intfdata(interface, NULL);
405  busid_priv->interf_count--;
406  return err;
407  }
408 
409  usb_get_intf(interface);
410  return 0;
411  }
412 
413  /* ok, this is my device */
414  sdev = stub_device_alloc(udev, interface);
415  if (!sdev)
416  return -ENOMEM;
417 
418  dev_info(&interface->dev, "usbip-host: register new device "
419  "(bus %u dev %u ifn %u)\n", udev->bus->busnum, udev->devnum,
420  interface->cur_altsetting->desc.bInterfaceNumber);
421 
422  busid_priv->interf_count = 0;
423  busid_priv->shutdown_busid = 0;
424 
425  /* set private data to usb_interface */
426  usb_set_intfdata(interface, sdev);
427  busid_priv->interf_count++;
428  busid_priv->sdev = sdev;
429 
430  err = stub_add_files(&interface->dev);
431  if (err) {
432  dev_err(&interface->dev, "stub_add_files for %s\n", udev_busid);
433  usb_set_intfdata(interface, NULL);
434  usb_put_intf(interface);
435 
436  busid_priv->interf_count = 0;
437  busid_priv->sdev = NULL;
438  stub_device_free(sdev);
439  return err;
440  }
441  busid_priv->status = STUB_BUSID_ALLOC;
442 
443  return 0;
444 }
445 
446 static void shutdown_busid(struct bus_id_priv *busid_priv)
447 {
448  if (busid_priv->sdev && !busid_priv->shutdown_busid) {
449  busid_priv->shutdown_busid = 1;
450  usbip_event_add(&busid_priv->sdev->ud, SDEV_EVENT_REMOVED);
451 
452  /* 2. wait for the stop of the event handler */
453  usbip_stop_eh(&busid_priv->sdev->ud);
454  }
455 }
456 
457 /*
458  * called in usb_disconnect() or usb_deregister()
459  * but only if actconfig(active configuration) exists
460  */
461 static void stub_disconnect(struct usb_interface *interface)
462 {
463  struct stub_device *sdev;
464  const char *udev_busid = dev_name(interface->dev.parent);
465  struct bus_id_priv *busid_priv;
466 
467  dev_dbg(&interface->dev, "Enter\n");
468 
469  busid_priv = get_busid_priv(udev_busid);
470  if (!busid_priv) {
471  BUG();
472  return;
473  }
474 
475  sdev = usb_get_intfdata(interface);
476 
477  /* get stub_device */
478  if (!sdev) {
479  dev_err(&interface->dev, "could not get device");
480  /* BUG(); */
481  return;
482  }
483 
484  usb_set_intfdata(interface, NULL);
485 
486  /*
487  * NOTE:
488  * rx/tx threads are invoked for each usb_device.
489  */
490  stub_remove_files(&interface->dev);
491 
492  /*If usb reset called from event handler*/
493  if (busid_priv->sdev->ud.eh == current) {
494  busid_priv->interf_count--;
495  return;
496  }
497 
498  if (busid_priv->interf_count > 1) {
499  busid_priv->interf_count--;
500  shutdown_busid(busid_priv);
501  usb_put_intf(interface);
502  return;
503  }
504 
505  busid_priv->interf_count = 0;
506 
507  /* 1. shutdown the current connection */
508  shutdown_busid(busid_priv);
509 
510  usb_put_dev(sdev->udev);
511  usb_put_intf(interface);
512 
513  /* 3. free sdev */
514  busid_priv->sdev = NULL;
515  stub_device_free(sdev);
516 
517  if (busid_priv->status == STUB_BUSID_ALLOC) {
518  busid_priv->status = STUB_BUSID_ADDED;
519  } else {
520  busid_priv->status = STUB_BUSID_OTHER;
521  del_match_busid((char *)udev_busid);
522  }
523 }
524 
525 /*
526  * Presence of pre_reset and post_reset prevents the driver from being unbound
527  * when the device is being reset
528  */
529 
530 int stub_pre_reset(struct usb_interface *interface)
531 {
532  dev_dbg(&interface->dev, "pre_reset\n");
533  return 0;
534 }
535 
536 int stub_post_reset(struct usb_interface *interface)
537 {
538  dev_dbg(&interface->dev, "post_reset\n");
539  return 0;
540 }
541 
542 struct usb_driver stub_driver = {
543  .name = "usbip-host",
544  .probe = stub_probe,
545  .disconnect = stub_disconnect,
546  .id_table = stub_table,
547  .pre_reset = stub_pre_reset,
548  .post_reset = stub_post_reset,
549 };