Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tty.c
Go to the documentation of this file.
1 /*
2  RFCOMM implementation for Linux Bluetooth stack (BlueZ).
3  Copyright (C) 2002 Maxim Krasnyansky <[email protected]>
4  Copyright (C) 2002 Marcel Holtmann <[email protected]>
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License version 2 as
8  published by the Free Software Foundation;
9 
10  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14  CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 
19  ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20  COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21  SOFTWARE IS DISCLAIMED.
22 */
23 
24 /*
25  * RFCOMM TTY.
26  */
27 
28 #include <linux/module.h>
29 
30 #include <linux/tty.h>
31 #include <linux/tty_driver.h>
32 #include <linux/tty_flip.h>
33 
35 #include <net/bluetooth/hci_core.h>
36 #include <net/bluetooth/rfcomm.h>
37 
38 #define RFCOMM_TTY_MAGIC 0x6d02 /* magic number for rfcomm struct */
39 #define RFCOMM_TTY_PORTS RFCOMM_MAX_DEV /* whole lotta rfcomm devices */
40 #define RFCOMM_TTY_MAJOR 216 /* device node major id of the usb/bluetooth.c driver */
41 #define RFCOMM_TTY_MINOR 0
42 
43 static struct tty_driver *rfcomm_tty_driver;
44 
45 struct rfcomm_dev {
46  struct tty_port port;
47  struct list_head list;
48 
49  char name[12];
50  int id;
51  unsigned long flags;
52  int err;
53 
54  bdaddr_t src;
55  bdaddr_t dst;
57 
59 
60  struct rfcomm_dlc *dlc;
62 
63  struct device *tty_dev;
64 
66 
68 };
69 
70 static LIST_HEAD(rfcomm_dev_list);
71 static DEFINE_SPINLOCK(rfcomm_dev_lock);
72 
73 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb);
74 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err);
75 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig);
76 
77 /* ---- Device functions ---- */
78 
79 /*
80  * The reason this isn't actually a race, as you no doubt have a little voice
81  * screaming at you in your head, is that the refcount should never actually
82  * reach zero unless the device has already been taken off the list, in
83  * rfcomm_dev_del(). And if that's not true, we'll hit the BUG() in
84  * rfcomm_dev_destruct() anyway.
85  */
86 static void rfcomm_dev_destruct(struct tty_port *port)
87 {
88  struct rfcomm_dev *dev = container_of(port, struct rfcomm_dev, port);
89  struct rfcomm_dlc *dlc = dev->dlc;
90 
91  BT_DBG("dev %p dlc %p", dev, dlc);
92 
93  /* Refcount should only hit zero when called from rfcomm_dev_del()
94  which will have taken us off the list. Everything else are
95  refcounting bugs. */
96  BUG_ON(!list_empty(&dev->list));
97 
98  rfcomm_dlc_lock(dlc);
99  /* Detach DLC if it's owned by this dev */
100  if (dlc->owner == dev)
101  dlc->owner = NULL;
102  rfcomm_dlc_unlock(dlc);
103 
104  rfcomm_dlc_put(dlc);
105 
106  tty_unregister_device(rfcomm_tty_driver, dev->id);
107 
108  kfree(dev);
109 
110  /* It's safe to call module_put() here because socket still
111  holds reference to this module. */
112  module_put(THIS_MODULE);
113 }
114 
115 static const struct tty_port_operations rfcomm_port_ops = {
116  .destruct = rfcomm_dev_destruct,
117 };
118 
119 static struct rfcomm_dev *__rfcomm_dev_get(int id)
120 {
121  struct rfcomm_dev *dev;
122 
123  list_for_each_entry(dev, &rfcomm_dev_list, list)
124  if (dev->id == id)
125  return dev;
126 
127  return NULL;
128 }
129 
130 static struct rfcomm_dev *rfcomm_dev_get(int id)
131 {
132  struct rfcomm_dev *dev;
133 
134  spin_lock(&rfcomm_dev_lock);
135 
136  dev = __rfcomm_dev_get(id);
137 
138  if (dev) {
139  if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags))
140  dev = NULL;
141  else
142  tty_port_get(&dev->port);
143  }
144 
145  spin_unlock(&rfcomm_dev_lock);
146 
147  return dev;
148 }
149 
150 static struct device *rfcomm_get_device(struct rfcomm_dev *dev)
151 {
152  struct hci_dev *hdev;
153  struct hci_conn *conn;
154 
155  hdev = hci_get_route(&dev->dst, &dev->src);
156  if (!hdev)
157  return NULL;
158 
159  conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &dev->dst);
160 
161  hci_dev_put(hdev);
162 
163  return conn ? &conn->dev : NULL;
164 }
165 
166 static ssize_t show_address(struct device *tty_dev, struct device_attribute *attr, char *buf)
167 {
168  struct rfcomm_dev *dev = dev_get_drvdata(tty_dev);
169  return sprintf(buf, "%s\n", batostr(&dev->dst));
170 }
171 
172 static ssize_t show_channel(struct device *tty_dev, struct device_attribute *attr, char *buf)
173 {
174  struct rfcomm_dev *dev = dev_get_drvdata(tty_dev);
175  return sprintf(buf, "%d\n", dev->channel);
176 }
177 
178 static DEVICE_ATTR(address, S_IRUGO, show_address, NULL);
179 static DEVICE_ATTR(channel, S_IRUGO, show_channel, NULL);
180 
181 static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
182 {
183  struct rfcomm_dev *dev, *entry;
184  struct list_head *head = &rfcomm_dev_list;
185  int err = 0;
186 
187  BT_DBG("id %d channel %d", req->dev_id, req->channel);
188 
189  dev = kzalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
190  if (!dev)
191  return -ENOMEM;
192 
193  spin_lock(&rfcomm_dev_lock);
194 
195  if (req->dev_id < 0) {
196  dev->id = 0;
197 
198  list_for_each_entry(entry, &rfcomm_dev_list, list) {
199  if (entry->id != dev->id)
200  break;
201 
202  dev->id++;
203  head = &entry->list;
204  }
205  } else {
206  dev->id = req->dev_id;
207 
208  list_for_each_entry(entry, &rfcomm_dev_list, list) {
209  if (entry->id == dev->id) {
210  err = -EADDRINUSE;
211  goto out;
212  }
213 
214  if (entry->id > dev->id - 1)
215  break;
216 
217  head = &entry->list;
218  }
219  }
220 
221  if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
222  err = -ENFILE;
223  goto out;
224  }
225 
226  sprintf(dev->name, "rfcomm%d", dev->id);
227 
228  list_add(&dev->list, head);
229 
230  bacpy(&dev->src, &req->src);
231  bacpy(&dev->dst, &req->dst);
232  dev->channel = req->channel;
233 
234  dev->flags = req->flags &
235  ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
236 
237  tty_port_init(&dev->port);
238  dev->port.ops = &rfcomm_port_ops;
239  init_waitqueue_head(&dev->wait);
240 
241  skb_queue_head_init(&dev->pending);
242 
243  rfcomm_dlc_lock(dlc);
244 
245  if (req->flags & (1 << RFCOMM_REUSE_DLC)) {
246  struct sock *sk = dlc->owner;
247  struct sk_buff *skb;
248 
249  BUG_ON(!sk);
250 
251  rfcomm_dlc_throttle(dlc);
252 
253  while ((skb = skb_dequeue(&sk->sk_receive_queue))) {
254  skb_orphan(skb);
255  skb_queue_tail(&dev->pending, skb);
256  atomic_sub(skb->len, &sk->sk_rmem_alloc);
257  }
258  }
259 
260  dlc->data_ready = rfcomm_dev_data_ready;
261  dlc->state_change = rfcomm_dev_state_change;
262  dlc->modem_status = rfcomm_dev_modem_status;
263 
264  dlc->owner = dev;
265  dev->dlc = dlc;
266 
267  rfcomm_dev_modem_status(dlc, dlc->remote_v24_sig);
268 
269  rfcomm_dlc_unlock(dlc);
270 
271  /* It's safe to call __module_get() here because socket already
272  holds reference to this module. */
273  __module_get(THIS_MODULE);
274 
275 out:
276  spin_unlock(&rfcomm_dev_lock);
277 
278  if (err < 0)
279  goto free;
280 
281  dev->tty_dev = tty_port_register_device(&dev->port, rfcomm_tty_driver,
282  dev->id, NULL);
283  if (IS_ERR(dev->tty_dev)) {
284  err = PTR_ERR(dev->tty_dev);
285  list_del(&dev->list);
286  goto free;
287  }
288 
289  dev_set_drvdata(dev->tty_dev, dev);
290 
291  if (device_create_file(dev->tty_dev, &dev_attr_address) < 0)
292  BT_ERR("Failed to create address attribute");
293 
294  if (device_create_file(dev->tty_dev, &dev_attr_channel) < 0)
295  BT_ERR("Failed to create channel attribute");
296 
297  return dev->id;
298 
299 free:
300  kfree(dev);
301  return err;
302 }
303 
304 static void rfcomm_dev_del(struct rfcomm_dev *dev)
305 {
306  unsigned long flags;
307  BT_DBG("dev %p", dev);
308 
310 
311  spin_lock_irqsave(&dev->port.lock, flags);
312  if (dev->port.count > 0) {
313  spin_unlock_irqrestore(&dev->port.lock, flags);
314  return;
315  }
316  spin_unlock_irqrestore(&dev->port.lock, flags);
317 
318  spin_lock(&rfcomm_dev_lock);
319  list_del_init(&dev->list);
320  spin_unlock(&rfcomm_dev_lock);
321 
322  tty_port_put(&dev->port);
323 }
324 
325 /* ---- Send buffer ---- */
326 static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
327 {
328  /* We can't let it be zero, because we don't get a callback
329  when tx_credits becomes nonzero, hence we'd never wake up */
330  return dlc->mtu * (dlc->tx_credits?:1);
331 }
332 
333 static void rfcomm_wfree(struct sk_buff *skb)
334 {
335  struct rfcomm_dev *dev = (void *) skb->sk;
336  struct tty_struct *tty = dev->port.tty;
337  atomic_sub(skb->truesize, &dev->wmem_alloc);
338  if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags) && tty)
339  tty_wakeup(tty);
340  tty_port_put(&dev->port);
341 }
342 
343 static void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
344 {
345  tty_port_get(&dev->port);
346  atomic_add(skb->truesize, &dev->wmem_alloc);
347  skb->sk = (void *) dev;
348  skb->destructor = rfcomm_wfree;
349 }
350 
351 static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, gfp_t priority)
352 {
353  if (atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
354  struct sk_buff *skb = alloc_skb(size, priority);
355  if (skb) {
356  rfcomm_set_owner_w(skb, dev);
357  return skb;
358  }
359  }
360  return NULL;
361 }
362 
363 /* ---- Device IOCTLs ---- */
364 
365 #define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
366 
367 static int rfcomm_create_dev(struct sock *sk, void __user *arg)
368 {
369  struct rfcomm_dev_req req;
370  struct rfcomm_dlc *dlc;
371  int id;
372 
373  if (copy_from_user(&req, arg, sizeof(req)))
374  return -EFAULT;
375 
376  BT_DBG("sk %p dev_id %d flags 0x%x", sk, req.dev_id, req.flags);
377 
378  if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
379  return -EPERM;
380 
381  if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
382  /* Socket must be connected */
383  if (sk->sk_state != BT_CONNECTED)
384  return -EBADFD;
385 
386  dlc = rfcomm_pi(sk)->dlc;
387  rfcomm_dlc_hold(dlc);
388  } else {
390  if (!dlc)
391  return -ENOMEM;
392  }
393 
394  id = rfcomm_dev_add(&req, dlc);
395  if (id < 0) {
396  rfcomm_dlc_put(dlc);
397  return id;
398  }
399 
400  if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
401  /* DLC is now used by device.
402  * Socket must be disconnected */
403  sk->sk_state = BT_CLOSED;
404  }
405 
406  return id;
407 }
408 
409 static int rfcomm_release_dev(void __user *arg)
410 {
411  struct rfcomm_dev_req req;
412  struct rfcomm_dev *dev;
413 
414  if (copy_from_user(&req, arg, sizeof(req)))
415  return -EFAULT;
416 
417  BT_DBG("dev_id %d flags 0x%x", req.dev_id, req.flags);
418 
419  dev = rfcomm_dev_get(req.dev_id);
420  if (!dev)
421  return -ENODEV;
422 
423  if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
424  tty_port_put(&dev->port);
425  return -EPERM;
426  }
427 
428  if (req.flags & (1 << RFCOMM_HANGUP_NOW))
429  rfcomm_dlc_close(dev->dlc, 0);
430 
431  /* Shut down TTY synchronously before freeing rfcomm_dev */
432  if (dev->port.tty)
433  tty_vhangup(dev->port.tty);
434 
435  if (!test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
436  rfcomm_dev_del(dev);
437  tty_port_put(&dev->port);
438  return 0;
439 }
440 
441 static int rfcomm_get_dev_list(void __user *arg)
442 {
443  struct rfcomm_dev *dev;
444  struct rfcomm_dev_list_req *dl;
445  struct rfcomm_dev_info *di;
446  int n = 0, size, err;
447  u16 dev_num;
448 
449  BT_DBG("");
450 
451  if (get_user(dev_num, (u16 __user *) arg))
452  return -EFAULT;
453 
454  if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
455  return -EINVAL;
456 
457  size = sizeof(*dl) + dev_num * sizeof(*di);
458 
459  dl = kzalloc(size, GFP_KERNEL);
460  if (!dl)
461  return -ENOMEM;
462 
463  di = dl->dev_info;
464 
465  spin_lock(&rfcomm_dev_lock);
466 
467  list_for_each_entry(dev, &rfcomm_dev_list, list) {
468  if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags))
469  continue;
470  (di + n)->id = dev->id;
471  (di + n)->flags = dev->flags;
472  (di + n)->state = dev->dlc->state;
473  (di + n)->channel = dev->channel;
474  bacpy(&(di + n)->src, &dev->src);
475  bacpy(&(di + n)->dst, &dev->dst);
476  if (++n >= dev_num)
477  break;
478  }
479 
480  spin_unlock(&rfcomm_dev_lock);
481 
482  dl->dev_num = n;
483  size = sizeof(*dl) + n * sizeof(*di);
484 
485  err = copy_to_user(arg, dl, size);
486  kfree(dl);
487 
488  return err ? -EFAULT : 0;
489 }
490 
491 static int rfcomm_get_dev_info(void __user *arg)
492 {
493  struct rfcomm_dev *dev;
494  struct rfcomm_dev_info di;
495  int err = 0;
496 
497  BT_DBG("");
498 
499  if (copy_from_user(&di, arg, sizeof(di)))
500  return -EFAULT;
501 
502  dev = rfcomm_dev_get(di.id);
503  if (!dev)
504  return -ENODEV;
505 
506  di.flags = dev->flags;
507  di.channel = dev->channel;
508  di.state = dev->dlc->state;
509  bacpy(&di.src, &dev->src);
510  bacpy(&di.dst, &dev->dst);
511 
512  if (copy_to_user(arg, &di, sizeof(di)))
513  err = -EFAULT;
514 
515  tty_port_put(&dev->port);
516  return err;
517 }
518 
519 int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg)
520 {
521  BT_DBG("cmd %d arg %p", cmd, arg);
522 
523  switch (cmd) {
524  case RFCOMMCREATEDEV:
525  return rfcomm_create_dev(sk, arg);
526 
527  case RFCOMMRELEASEDEV:
528  return rfcomm_release_dev(arg);
529 
530  case RFCOMMGETDEVLIST:
531  return rfcomm_get_dev_list(arg);
532 
533  case RFCOMMGETDEVINFO:
534  return rfcomm_get_dev_info(arg);
535  }
536 
537  return -EINVAL;
538 }
539 
540 /* ---- DLC callbacks ---- */
541 static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
542 {
543  struct rfcomm_dev *dev = dlc->owner;
544  struct tty_struct *tty;
545 
546  if (!dev) {
547  kfree_skb(skb);
548  return;
549  }
550 
551  tty = dev->port.tty;
552  if (!tty || !skb_queue_empty(&dev->pending)) {
553  skb_queue_tail(&dev->pending, skb);
554  return;
555  }
556 
557  BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
558 
559  tty_insert_flip_string(tty, skb->data, skb->len);
561 
562  kfree_skb(skb);
563 }
564 
565 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
566 {
567  struct rfcomm_dev *dev = dlc->owner;
568  if (!dev)
569  return;
570 
571  BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
572 
573  dev->err = err;
575 
576  if (dlc->state == BT_CLOSED) {
577  if (!dev->port.tty) {
578  if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
579  /* Drop DLC lock here to avoid deadlock
580  * 1. rfcomm_dev_get will take rfcomm_dev_lock
581  * but in rfcomm_dev_add there's lock order:
582  * rfcomm_dev_lock -> dlc lock
583  * 2. tty_port_put will deadlock if it's
584  * the last reference
585  */
586  rfcomm_dlc_unlock(dlc);
587  if (rfcomm_dev_get(dev->id) == NULL) {
588  rfcomm_dlc_lock(dlc);
589  return;
590  }
591 
592  rfcomm_dev_del(dev);
593  tty_port_put(&dev->port);
594  rfcomm_dlc_lock(dlc);
595  }
596  } else
597  tty_hangup(dev->port.tty);
598  }
599 }
600 
601 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
602 {
603  struct rfcomm_dev *dev = dlc->owner;
604  if (!dev)
605  return;
606 
607  BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
608 
609  if ((dev->modem_status & TIOCM_CD) && !(v24_sig & RFCOMM_V24_DV)) {
610  if (dev->port.tty && !C_CLOCAL(dev->port.tty))
611  tty_hangup(dev->port.tty);
612  }
613 
614  dev->modem_status =
615  ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
616  ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
617  ((v24_sig & RFCOMM_V24_IC) ? TIOCM_RI : 0) |
618  ((v24_sig & RFCOMM_V24_DV) ? TIOCM_CD : 0);
619 }
620 
621 /* ---- TTY functions ---- */
622 static void rfcomm_tty_copy_pending(struct rfcomm_dev *dev)
623 {
624  struct tty_struct *tty = dev->port.tty;
625  struct sk_buff *skb;
626  int inserted = 0;
627 
628  if (!tty)
629  return;
630 
631  BT_DBG("dev %p tty %p", dev, tty);
632 
633  rfcomm_dlc_lock(dev->dlc);
634 
635  while ((skb = skb_dequeue(&dev->pending))) {
636  inserted += tty_insert_flip_string(tty, skb->data, skb->len);
637  kfree_skb(skb);
638  }
639 
640  rfcomm_dlc_unlock(dev->dlc);
641 
642  if (inserted > 0)
644 }
645 
646 static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
647 {
649  struct rfcomm_dev *dev;
650  struct rfcomm_dlc *dlc;
651  unsigned long flags;
652  int err, id;
653 
654  id = tty->index;
655 
656  BT_DBG("tty %p id %d", tty, id);
657 
658  /* We don't leak this refcount. For reasons which are not entirely
659  clear, the TTY layer will call our ->close() method even if the
660  open fails. We decrease the refcount there, and decreasing it
661  here too would cause breakage. */
662  dev = rfcomm_dev_get(id);
663  if (!dev)
664  return -ENODEV;
665 
666  BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst),
667  dev->channel, dev->port.count);
668 
669  spin_lock_irqsave(&dev->port.lock, flags);
670  if (++dev->port.count > 1) {
671  spin_unlock_irqrestore(&dev->port.lock, flags);
672  return 0;
673  }
674  spin_unlock_irqrestore(&dev->port.lock, flags);
675 
676  dlc = dev->dlc;
677 
678  /* Attach TTY and open DLC */
679 
680  rfcomm_dlc_lock(dlc);
681  tty->driver_data = dev;
682  dev->port.tty = tty;
683  rfcomm_dlc_unlock(dlc);
685 
686  err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
687  if (err < 0)
688  return err;
689 
690  /* Wait for DLC to connect */
691  add_wait_queue(&dev->wait, &wait);
692  while (1) {
694 
695  if (dlc->state == BT_CLOSED) {
696  err = -dev->err;
697  break;
698  }
699 
700  if (dlc->state == BT_CONNECTED)
701  break;
702 
703  if (signal_pending(current)) {
704  err = -EINTR;
705  break;
706  }
707 
708  tty_unlock(tty);
709  schedule();
710  tty_lock(tty);
711  }
713  remove_wait_queue(&dev->wait, &wait);
714 
715  if (err == 0)
716  device_move(dev->tty_dev, rfcomm_get_device(dev),
718 
719  rfcomm_tty_copy_pending(dev);
720 
721  rfcomm_dlc_unthrottle(dev->dlc);
722 
723  return err;
724 }
725 
726 static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
727 {
728  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
729  unsigned long flags;
730 
731  if (!dev)
732  return;
733 
734  BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc,
735  dev->port.count);
736 
737  spin_lock_irqsave(&dev->port.lock, flags);
738  if (!--dev->port.count) {
739  spin_unlock_irqrestore(&dev->port.lock, flags);
740  if (dev->tty_dev->parent)
742 
743  /* Close DLC and dettach TTY */
744  rfcomm_dlc_close(dev->dlc, 0);
745 
747 
748  rfcomm_dlc_lock(dev->dlc);
749  tty->driver_data = NULL;
750  dev->port.tty = NULL;
751  rfcomm_dlc_unlock(dev->dlc);
752 
753  if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags)) {
754  spin_lock(&rfcomm_dev_lock);
755  list_del_init(&dev->list);
756  spin_unlock(&rfcomm_dev_lock);
757 
758  tty_port_put(&dev->port);
759  }
760  } else
761  spin_unlock_irqrestore(&dev->port.lock, flags);
762 
763  tty_port_put(&dev->port);
764 }
765 
766 static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
767 {
768  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
769  struct rfcomm_dlc *dlc = dev->dlc;
770  struct sk_buff *skb;
771  int err = 0, sent = 0, size;
772 
773  BT_DBG("tty %p count %d", tty, count);
774 
775  while (count) {
776  size = min_t(uint, count, dlc->mtu);
777 
778  skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, GFP_ATOMIC);
779 
780  if (!skb)
781  break;
782 
783  skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
784 
785  memcpy(skb_put(skb, size), buf + sent, size);
786 
787  err = rfcomm_dlc_send(dlc, skb);
788  if (err < 0) {
789  kfree_skb(skb);
790  break;
791  }
792 
793  sent += size;
794  count -= size;
795  }
796 
797  return sent ? sent : err;
798 }
799 
800 static int rfcomm_tty_write_room(struct tty_struct *tty)
801 {
802  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
803  int room;
804 
805  BT_DBG("tty %p", tty);
806 
807  if (!dev || !dev->dlc)
808  return 0;
809 
810  room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
811  if (room < 0)
812  room = 0;
813 
814  return room;
815 }
816 
817 static int rfcomm_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
818 {
819  BT_DBG("tty %p cmd 0x%02x", tty, cmd);
820 
821  switch (cmd) {
822  case TCGETS:
823  BT_DBG("TCGETS is not supported");
824  return -ENOIOCTLCMD;
825 
826  case TCSETS:
827  BT_DBG("TCSETS is not supported");
828  return -ENOIOCTLCMD;
829 
830  case TIOCMIWAIT:
831  BT_DBG("TIOCMIWAIT");
832  break;
833 
834  case TIOCGSERIAL:
835  BT_ERR("TIOCGSERIAL is not supported");
836  return -ENOIOCTLCMD;
837 
838  case TIOCSSERIAL:
839  BT_ERR("TIOCSSERIAL is not supported");
840  return -ENOIOCTLCMD;
841 
842  case TIOCSERGSTRUCT:
843  BT_ERR("TIOCSERGSTRUCT is not supported");
844  return -ENOIOCTLCMD;
845 
846  case TIOCSERGETLSR:
847  BT_ERR("TIOCSERGETLSR is not supported");
848  return -ENOIOCTLCMD;
849 
850  case TIOCSERCONFIG:
851  BT_ERR("TIOCSERCONFIG is not supported");
852  return -ENOIOCTLCMD;
853 
854  default:
855  return -ENOIOCTLCMD; /* ioctls which we must ignore */
856 
857  }
858 
859  return -ENOIOCTLCMD;
860 }
861 
862 static void rfcomm_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
863 {
864  struct ktermios *new = &tty->termios;
865  int old_baud_rate = tty_termios_baud_rate(old);
866  int new_baud_rate = tty_termios_baud_rate(new);
867 
868  u8 baud, data_bits, stop_bits, parity, x_on, x_off;
869  u16 changes = 0;
870 
871  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
872 
873  BT_DBG("tty %p termios %p", tty, old);
874 
875  if (!dev || !dev->dlc || !dev->dlc->session)
876  return;
877 
878  /* Handle turning off CRTSCTS */
879  if ((old->c_cflag & CRTSCTS) && !(new->c_cflag & CRTSCTS))
880  BT_DBG("Turning off CRTSCTS unsupported");
881 
882  /* Parity on/off and when on, odd/even */
883  if (((old->c_cflag & PARENB) != (new->c_cflag & PARENB)) ||
884  ((old->c_cflag & PARODD) != (new->c_cflag & PARODD))) {
885  changes |= RFCOMM_RPN_PM_PARITY;
886  BT_DBG("Parity change detected.");
887  }
888 
889  /* Mark and space parity are not supported! */
890  if (new->c_cflag & PARENB) {
891  if (new->c_cflag & PARODD) {
892  BT_DBG("Parity is ODD");
893  parity = RFCOMM_RPN_PARITY_ODD;
894  } else {
895  BT_DBG("Parity is EVEN");
896  parity = RFCOMM_RPN_PARITY_EVEN;
897  }
898  } else {
899  BT_DBG("Parity is OFF");
900  parity = RFCOMM_RPN_PARITY_NONE;
901  }
902 
903  /* Setting the x_on / x_off characters */
904  if (old->c_cc[VSTOP] != new->c_cc[VSTOP]) {
905  BT_DBG("XOFF custom");
906  x_on = new->c_cc[VSTOP];
907  changes |= RFCOMM_RPN_PM_XON;
908  } else {
909  BT_DBG("XOFF default");
910  x_on = RFCOMM_RPN_XON_CHAR;
911  }
912 
913  if (old->c_cc[VSTART] != new->c_cc[VSTART]) {
914  BT_DBG("XON custom");
915  x_off = new->c_cc[VSTART];
916  changes |= RFCOMM_RPN_PM_XOFF;
917  } else {
918  BT_DBG("XON default");
919  x_off = RFCOMM_RPN_XOFF_CHAR;
920  }
921 
922  /* Handle setting of stop bits */
923  if ((old->c_cflag & CSTOPB) != (new->c_cflag & CSTOPB))
924  changes |= RFCOMM_RPN_PM_STOP;
925 
926  /* POSIX does not support 1.5 stop bits and RFCOMM does not
927  * support 2 stop bits. So a request for 2 stop bits gets
928  * translated to 1.5 stop bits */
929  if (new->c_cflag & CSTOPB)
930  stop_bits = RFCOMM_RPN_STOP_15;
931  else
932  stop_bits = RFCOMM_RPN_STOP_1;
933 
934  /* Handle number of data bits [5-8] */
935  if ((old->c_cflag & CSIZE) != (new->c_cflag & CSIZE))
936  changes |= RFCOMM_RPN_PM_DATA;
937 
938  switch (new->c_cflag & CSIZE) {
939  case CS5:
940  data_bits = RFCOMM_RPN_DATA_5;
941  break;
942  case CS6:
943  data_bits = RFCOMM_RPN_DATA_6;
944  break;
945  case CS7:
946  data_bits = RFCOMM_RPN_DATA_7;
947  break;
948  case CS8:
949  data_bits = RFCOMM_RPN_DATA_8;
950  break;
951  default:
952  data_bits = RFCOMM_RPN_DATA_8;
953  break;
954  }
955 
956  /* Handle baudrate settings */
957  if (old_baud_rate != new_baud_rate)
958  changes |= RFCOMM_RPN_PM_BITRATE;
959 
960  switch (new_baud_rate) {
961  case 2400:
962  baud = RFCOMM_RPN_BR_2400;
963  break;
964  case 4800:
965  baud = RFCOMM_RPN_BR_4800;
966  break;
967  case 7200:
968  baud = RFCOMM_RPN_BR_7200;
969  break;
970  case 9600:
971  baud = RFCOMM_RPN_BR_9600;
972  break;
973  case 19200:
974  baud = RFCOMM_RPN_BR_19200;
975  break;
976  case 38400:
977  baud = RFCOMM_RPN_BR_38400;
978  break;
979  case 57600:
980  baud = RFCOMM_RPN_BR_57600;
981  break;
982  case 115200:
983  baud = RFCOMM_RPN_BR_115200;
984  break;
985  case 230400:
986  baud = RFCOMM_RPN_BR_230400;
987  break;
988  default:
989  /* 9600 is standard accordinag to the RFCOMM specification */
990  baud = RFCOMM_RPN_BR_9600;
991  break;
992 
993  }
994 
995  if (changes)
996  rfcomm_send_rpn(dev->dlc->session, 1, dev->dlc->dlci, baud,
997  data_bits, stop_bits, parity,
998  RFCOMM_RPN_FLOW_NONE, x_on, x_off, changes);
999 }
1000 
1001 static void rfcomm_tty_throttle(struct tty_struct *tty)
1002 {
1003  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1004 
1005  BT_DBG("tty %p dev %p", tty, dev);
1006 
1007  rfcomm_dlc_throttle(dev->dlc);
1008 }
1009 
1010 static void rfcomm_tty_unthrottle(struct tty_struct *tty)
1011 {
1012  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1013 
1014  BT_DBG("tty %p dev %p", tty, dev);
1015 
1016  rfcomm_dlc_unthrottle(dev->dlc);
1017 }
1018 
1019 static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
1020 {
1021  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1022 
1023  BT_DBG("tty %p dev %p", tty, dev);
1024 
1025  if (!dev || !dev->dlc)
1026  return 0;
1027 
1028  if (!skb_queue_empty(&dev->dlc->tx_queue))
1029  return dev->dlc->mtu;
1030 
1031  return 0;
1032 }
1033 
1034 static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
1035 {
1036  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1037 
1038  BT_DBG("tty %p dev %p", tty, dev);
1039 
1040  if (!dev || !dev->dlc)
1041  return;
1042 
1043  skb_queue_purge(&dev->dlc->tx_queue);
1044  tty_wakeup(tty);
1045 }
1046 
1047 static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
1048 {
1049  BT_DBG("tty %p ch %c", tty, ch);
1050 }
1051 
1052 static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
1053 {
1054  BT_DBG("tty %p timeout %d", tty, timeout);
1055 }
1056 
1057 static void rfcomm_tty_hangup(struct tty_struct *tty)
1058 {
1059  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1060 
1061  BT_DBG("tty %p dev %p", tty, dev);
1062 
1063  if (!dev)
1064  return;
1065 
1066  rfcomm_tty_flush_buffer(tty);
1067 
1068  if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
1069  if (rfcomm_dev_get(dev->id) == NULL)
1070  return;
1071  rfcomm_dev_del(dev);
1072  tty_port_put(&dev->port);
1073  }
1074 }
1075 
1076 static int rfcomm_tty_tiocmget(struct tty_struct *tty)
1077 {
1078  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1079 
1080  BT_DBG("tty %p dev %p", tty, dev);
1081 
1082  return dev->modem_status;
1083 }
1084 
1085 static int rfcomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
1086 {
1087  struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1088  struct rfcomm_dlc *dlc = dev->dlc;
1089  u8 v24_sig;
1090 
1091  BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty, dev, set, clear);
1092 
1093  rfcomm_dlc_get_modem_status(dlc, &v24_sig);
1094 
1095  if (set & TIOCM_DSR || set & TIOCM_DTR)
1096  v24_sig |= RFCOMM_V24_RTC;
1097  if (set & TIOCM_RTS || set & TIOCM_CTS)
1098  v24_sig |= RFCOMM_V24_RTR;
1099  if (set & TIOCM_RI)
1100  v24_sig |= RFCOMM_V24_IC;
1101  if (set & TIOCM_CD)
1102  v24_sig |= RFCOMM_V24_DV;
1103 
1104  if (clear & TIOCM_DSR || clear & TIOCM_DTR)
1105  v24_sig &= ~RFCOMM_V24_RTC;
1106  if (clear & TIOCM_RTS || clear & TIOCM_CTS)
1107  v24_sig &= ~RFCOMM_V24_RTR;
1108  if (clear & TIOCM_RI)
1109  v24_sig &= ~RFCOMM_V24_IC;
1110  if (clear & TIOCM_CD)
1111  v24_sig &= ~RFCOMM_V24_DV;
1112 
1113  rfcomm_dlc_set_modem_status(dlc, v24_sig);
1114 
1115  return 0;
1116 }
1117 
1118 /* ---- TTY structure ---- */
1119 
1120 static const struct tty_operations rfcomm_ops = {
1121  .open = rfcomm_tty_open,
1122  .close = rfcomm_tty_close,
1123  .write = rfcomm_tty_write,
1124  .write_room = rfcomm_tty_write_room,
1125  .chars_in_buffer = rfcomm_tty_chars_in_buffer,
1126  .flush_buffer = rfcomm_tty_flush_buffer,
1127  .ioctl = rfcomm_tty_ioctl,
1128  .throttle = rfcomm_tty_throttle,
1129  .unthrottle = rfcomm_tty_unthrottle,
1130  .set_termios = rfcomm_tty_set_termios,
1131  .send_xchar = rfcomm_tty_send_xchar,
1132  .hangup = rfcomm_tty_hangup,
1133  .wait_until_sent = rfcomm_tty_wait_until_sent,
1134  .tiocmget = rfcomm_tty_tiocmget,
1135  .tiocmset = rfcomm_tty_tiocmset,
1136 };
1137 
1139 {
1140  int error;
1141 
1142  rfcomm_tty_driver = alloc_tty_driver(RFCOMM_TTY_PORTS);
1143  if (!rfcomm_tty_driver)
1144  return -ENOMEM;
1145 
1146  rfcomm_tty_driver->driver_name = "rfcomm";
1147  rfcomm_tty_driver->name = "rfcomm";
1148  rfcomm_tty_driver->major = RFCOMM_TTY_MAJOR;
1149  rfcomm_tty_driver->minor_start = RFCOMM_TTY_MINOR;
1150  rfcomm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1151  rfcomm_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1152  rfcomm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1153  rfcomm_tty_driver->init_termios = tty_std_termios;
1154  rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1155  rfcomm_tty_driver->init_termios.c_lflag &= ~ICANON;
1156  tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1157 
1158  error = tty_register_driver(rfcomm_tty_driver);
1159  if (error) {
1160  BT_ERR("Can't register RFCOMM TTY driver");
1161  put_tty_driver(rfcomm_tty_driver);
1162  return error;
1163  }
1164 
1165  BT_INFO("RFCOMM TTY layer initialized");
1166 
1167  return 0;
1168 }
1169 
1171 {
1172  tty_unregister_driver(rfcomm_tty_driver);
1173  put_tty_driver(rfcomm_tty_driver);
1174 }