xref: /openbmc/linux/net/bluetooth/rfcomm/tty.c (revision ee89bd6b)
1 /*
2    RFCOMM implementation for Linux Bluetooth stack (BlueZ).
3    Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
4    Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
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 
34 #include <net/bluetooth/bluetooth.h>
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;
56 	u8			channel;
57 
58 	uint			modem_status;
59 
60 	struct rfcomm_dlc	*dlc;
61 	wait_queue_head_t       wait;
62 
63 	struct device		*tty_dev;
64 
65 	atomic_t		wmem_alloc;
66 
67 	struct sk_buff_head	pending;
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, "%pMR\n", &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 
309 	BUG_ON(test_and_set_bit(RFCOMM_TTY_RELEASED, &dev->flags));
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 {
389 		dlc = rfcomm_dlc_alloc(GFP_KERNEL);
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 
545 	if (!dev) {
546 		kfree_skb(skb);
547 		return;
548 	}
549 
550 	if (!skb_queue_empty(&dev->pending)) {
551 		skb_queue_tail(&dev->pending, skb);
552 		return;
553 	}
554 
555 	BT_DBG("dlc %p len %d", dlc, skb->len);
556 
557 	tty_insert_flip_string(&dev->port, skb->data, skb->len);
558 	tty_flip_buffer_push(&dev->port);
559 
560 	kfree_skb(skb);
561 }
562 
563 static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
564 {
565 	struct rfcomm_dev *dev = dlc->owner;
566 	if (!dev)
567 		return;
568 
569 	BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
570 
571 	dev->err = err;
572 	wake_up_interruptible(&dev->wait);
573 
574 	if (dlc->state == BT_CLOSED) {
575 		if (!dev->port.tty) {
576 			if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
577 				/* Drop DLC lock here to avoid deadlock
578 				 * 1. rfcomm_dev_get will take rfcomm_dev_lock
579 				 *    but in rfcomm_dev_add there's lock order:
580 				 *    rfcomm_dev_lock -> dlc lock
581 				 * 2. tty_port_put will deadlock if it's
582 				 *    the last reference
583 				 */
584 				rfcomm_dlc_unlock(dlc);
585 				if (rfcomm_dev_get(dev->id) == NULL) {
586 					rfcomm_dlc_lock(dlc);
587 					return;
588 				}
589 
590 				rfcomm_dev_del(dev);
591 				tty_port_put(&dev->port);
592 				rfcomm_dlc_lock(dlc);
593 			}
594 		} else
595 			tty_hangup(dev->port.tty);
596 	}
597 }
598 
599 static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
600 {
601 	struct rfcomm_dev *dev = dlc->owner;
602 	if (!dev)
603 		return;
604 
605 	BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
606 
607 	if ((dev->modem_status & TIOCM_CD) && !(v24_sig & RFCOMM_V24_DV)) {
608 		if (dev->port.tty && !C_CLOCAL(dev->port.tty))
609 			tty_hangup(dev->port.tty);
610 	}
611 
612 	dev->modem_status =
613 		((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
614 		((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
615 		((v24_sig & RFCOMM_V24_IC)  ? TIOCM_RI : 0) |
616 		((v24_sig & RFCOMM_V24_DV)  ? TIOCM_CD : 0);
617 }
618 
619 /* ---- TTY functions ---- */
620 static void rfcomm_tty_copy_pending(struct rfcomm_dev *dev)
621 {
622 	struct sk_buff *skb;
623 	int inserted = 0;
624 
625 	BT_DBG("dev %p", dev);
626 
627 	rfcomm_dlc_lock(dev->dlc);
628 
629 	while ((skb = skb_dequeue(&dev->pending))) {
630 		inserted += tty_insert_flip_string(&dev->port, skb->data,
631 				skb->len);
632 		kfree_skb(skb);
633 	}
634 
635 	rfcomm_dlc_unlock(dev->dlc);
636 
637 	if (inserted > 0)
638 		tty_flip_buffer_push(&dev->port);
639 }
640 
641 static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
642 {
643 	DECLARE_WAITQUEUE(wait, current);
644 	struct rfcomm_dev *dev;
645 	struct rfcomm_dlc *dlc;
646 	unsigned long flags;
647 	int err, id;
648 
649 	id = tty->index;
650 
651 	BT_DBG("tty %p id %d", tty, id);
652 
653 	/* We don't leak this refcount. For reasons which are not entirely
654 	   clear, the TTY layer will call our ->close() method even if the
655 	   open fails. We decrease the refcount there, and decreasing it
656 	   here too would cause breakage. */
657 	dev = rfcomm_dev_get(id);
658 	if (!dev)
659 		return -ENODEV;
660 
661 	BT_DBG("dev %p dst %pMR channel %d opened %d", dev, &dev->dst,
662 	       dev->channel, dev->port.count);
663 
664 	spin_lock_irqsave(&dev->port.lock, flags);
665 	if (++dev->port.count > 1) {
666 		spin_unlock_irqrestore(&dev->port.lock, flags);
667 		return 0;
668 	}
669 	spin_unlock_irqrestore(&dev->port.lock, flags);
670 
671 	dlc = dev->dlc;
672 
673 	/* Attach TTY and open DLC */
674 
675 	rfcomm_dlc_lock(dlc);
676 	tty->driver_data = dev;
677 	dev->port.tty = tty;
678 	rfcomm_dlc_unlock(dlc);
679 	set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
680 
681 	err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
682 	if (err < 0)
683 		return err;
684 
685 	/* Wait for DLC to connect */
686 	add_wait_queue(&dev->wait, &wait);
687 	while (1) {
688 		set_current_state(TASK_INTERRUPTIBLE);
689 
690 		if (dlc->state == BT_CLOSED) {
691 			err = -dev->err;
692 			break;
693 		}
694 
695 		if (dlc->state == BT_CONNECTED)
696 			break;
697 
698 		if (signal_pending(current)) {
699 			err = -EINTR;
700 			break;
701 		}
702 
703 		tty_unlock(tty);
704 		schedule();
705 		tty_lock(tty);
706 	}
707 	set_current_state(TASK_RUNNING);
708 	remove_wait_queue(&dev->wait, &wait);
709 
710 	if (err == 0)
711 		device_move(dev->tty_dev, rfcomm_get_device(dev),
712 			    DPM_ORDER_DEV_AFTER_PARENT);
713 
714 	rfcomm_tty_copy_pending(dev);
715 
716 	rfcomm_dlc_unthrottle(dev->dlc);
717 
718 	return err;
719 }
720 
721 static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
722 {
723 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
724 	unsigned long flags;
725 
726 	if (!dev)
727 		return;
728 
729 	BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc,
730 						dev->port.count);
731 
732 	spin_lock_irqsave(&dev->port.lock, flags);
733 	if (!--dev->port.count) {
734 		spin_unlock_irqrestore(&dev->port.lock, flags);
735 		if (dev->tty_dev->parent)
736 			device_move(dev->tty_dev, NULL, DPM_ORDER_DEV_LAST);
737 
738 		/* Close DLC and dettach TTY */
739 		rfcomm_dlc_close(dev->dlc, 0);
740 
741 		clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
742 
743 		rfcomm_dlc_lock(dev->dlc);
744 		tty->driver_data = NULL;
745 		dev->port.tty = NULL;
746 		rfcomm_dlc_unlock(dev->dlc);
747 
748 		if (test_bit(RFCOMM_TTY_RELEASED, &dev->flags)) {
749 			spin_lock(&rfcomm_dev_lock);
750 			list_del_init(&dev->list);
751 			spin_unlock(&rfcomm_dev_lock);
752 
753 			tty_port_put(&dev->port);
754 		}
755 	} else
756 		spin_unlock_irqrestore(&dev->port.lock, flags);
757 
758 	tty_port_put(&dev->port);
759 }
760 
761 static int rfcomm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
762 {
763 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
764 	struct rfcomm_dlc *dlc = dev->dlc;
765 	struct sk_buff *skb;
766 	int err = 0, sent = 0, size;
767 
768 	BT_DBG("tty %p count %d", tty, count);
769 
770 	while (count) {
771 		size = min_t(uint, count, dlc->mtu);
772 
773 		skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, GFP_ATOMIC);
774 
775 		if (!skb)
776 			break;
777 
778 		skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
779 
780 		memcpy(skb_put(skb, size), buf + sent, size);
781 
782 		err = rfcomm_dlc_send(dlc, skb);
783 		if (err < 0) {
784 			kfree_skb(skb);
785 			break;
786 		}
787 
788 		sent  += size;
789 		count -= size;
790 	}
791 
792 	return sent ? sent : err;
793 }
794 
795 static int rfcomm_tty_write_room(struct tty_struct *tty)
796 {
797 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
798 	int room;
799 
800 	BT_DBG("tty %p", tty);
801 
802 	if (!dev || !dev->dlc)
803 		return 0;
804 
805 	room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
806 	if (room < 0)
807 		room = 0;
808 
809 	return room;
810 }
811 
812 static int rfcomm_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
813 {
814 	BT_DBG("tty %p cmd 0x%02x", tty, cmd);
815 
816 	switch (cmd) {
817 	case TCGETS:
818 		BT_DBG("TCGETS is not supported");
819 		return -ENOIOCTLCMD;
820 
821 	case TCSETS:
822 		BT_DBG("TCSETS is not supported");
823 		return -ENOIOCTLCMD;
824 
825 	case TIOCMIWAIT:
826 		BT_DBG("TIOCMIWAIT");
827 		break;
828 
829 	case TIOCGSERIAL:
830 		BT_ERR("TIOCGSERIAL is not supported");
831 		return -ENOIOCTLCMD;
832 
833 	case TIOCSSERIAL:
834 		BT_ERR("TIOCSSERIAL is not supported");
835 		return -ENOIOCTLCMD;
836 
837 	case TIOCSERGSTRUCT:
838 		BT_ERR("TIOCSERGSTRUCT is not supported");
839 		return -ENOIOCTLCMD;
840 
841 	case TIOCSERGETLSR:
842 		BT_ERR("TIOCSERGETLSR is not supported");
843 		return -ENOIOCTLCMD;
844 
845 	case TIOCSERCONFIG:
846 		BT_ERR("TIOCSERCONFIG is not supported");
847 		return -ENOIOCTLCMD;
848 
849 	default:
850 		return -ENOIOCTLCMD;	/* ioctls which we must ignore */
851 
852 	}
853 
854 	return -ENOIOCTLCMD;
855 }
856 
857 static void rfcomm_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
858 {
859 	struct ktermios *new = &tty->termios;
860 	int old_baud_rate = tty_termios_baud_rate(old);
861 	int new_baud_rate = tty_termios_baud_rate(new);
862 
863 	u8 baud, data_bits, stop_bits, parity, x_on, x_off;
864 	u16 changes = 0;
865 
866 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
867 
868 	BT_DBG("tty %p termios %p", tty, old);
869 
870 	if (!dev || !dev->dlc || !dev->dlc->session)
871 		return;
872 
873 	/* Handle turning off CRTSCTS */
874 	if ((old->c_cflag & CRTSCTS) && !(new->c_cflag & CRTSCTS))
875 		BT_DBG("Turning off CRTSCTS unsupported");
876 
877 	/* Parity on/off and when on, odd/even */
878 	if (((old->c_cflag & PARENB) != (new->c_cflag & PARENB)) ||
879 			((old->c_cflag & PARODD) != (new->c_cflag & PARODD))) {
880 		changes |= RFCOMM_RPN_PM_PARITY;
881 		BT_DBG("Parity change detected.");
882 	}
883 
884 	/* Mark and space parity are not supported! */
885 	if (new->c_cflag & PARENB) {
886 		if (new->c_cflag & PARODD) {
887 			BT_DBG("Parity is ODD");
888 			parity = RFCOMM_RPN_PARITY_ODD;
889 		} else {
890 			BT_DBG("Parity is EVEN");
891 			parity = RFCOMM_RPN_PARITY_EVEN;
892 		}
893 	} else {
894 		BT_DBG("Parity is OFF");
895 		parity = RFCOMM_RPN_PARITY_NONE;
896 	}
897 
898 	/* Setting the x_on / x_off characters */
899 	if (old->c_cc[VSTOP] != new->c_cc[VSTOP]) {
900 		BT_DBG("XOFF custom");
901 		x_on = new->c_cc[VSTOP];
902 		changes |= RFCOMM_RPN_PM_XON;
903 	} else {
904 		BT_DBG("XOFF default");
905 		x_on = RFCOMM_RPN_XON_CHAR;
906 	}
907 
908 	if (old->c_cc[VSTART] != new->c_cc[VSTART]) {
909 		BT_DBG("XON custom");
910 		x_off = new->c_cc[VSTART];
911 		changes |= RFCOMM_RPN_PM_XOFF;
912 	} else {
913 		BT_DBG("XON default");
914 		x_off = RFCOMM_RPN_XOFF_CHAR;
915 	}
916 
917 	/* Handle setting of stop bits */
918 	if ((old->c_cflag & CSTOPB) != (new->c_cflag & CSTOPB))
919 		changes |= RFCOMM_RPN_PM_STOP;
920 
921 	/* POSIX does not support 1.5 stop bits and RFCOMM does not
922 	 * support 2 stop bits. So a request for 2 stop bits gets
923 	 * translated to 1.5 stop bits */
924 	if (new->c_cflag & CSTOPB)
925 		stop_bits = RFCOMM_RPN_STOP_15;
926 	else
927 		stop_bits = RFCOMM_RPN_STOP_1;
928 
929 	/* Handle number of data bits [5-8] */
930 	if ((old->c_cflag & CSIZE) != (new->c_cflag & CSIZE))
931 		changes |= RFCOMM_RPN_PM_DATA;
932 
933 	switch (new->c_cflag & CSIZE) {
934 	case CS5:
935 		data_bits = RFCOMM_RPN_DATA_5;
936 		break;
937 	case CS6:
938 		data_bits = RFCOMM_RPN_DATA_6;
939 		break;
940 	case CS7:
941 		data_bits = RFCOMM_RPN_DATA_7;
942 		break;
943 	case CS8:
944 		data_bits = RFCOMM_RPN_DATA_8;
945 		break;
946 	default:
947 		data_bits = RFCOMM_RPN_DATA_8;
948 		break;
949 	}
950 
951 	/* Handle baudrate settings */
952 	if (old_baud_rate != new_baud_rate)
953 		changes |= RFCOMM_RPN_PM_BITRATE;
954 
955 	switch (new_baud_rate) {
956 	case 2400:
957 		baud = RFCOMM_RPN_BR_2400;
958 		break;
959 	case 4800:
960 		baud = RFCOMM_RPN_BR_4800;
961 		break;
962 	case 7200:
963 		baud = RFCOMM_RPN_BR_7200;
964 		break;
965 	case 9600:
966 		baud = RFCOMM_RPN_BR_9600;
967 		break;
968 	case 19200:
969 		baud = RFCOMM_RPN_BR_19200;
970 		break;
971 	case 38400:
972 		baud = RFCOMM_RPN_BR_38400;
973 		break;
974 	case 57600:
975 		baud = RFCOMM_RPN_BR_57600;
976 		break;
977 	case 115200:
978 		baud = RFCOMM_RPN_BR_115200;
979 		break;
980 	case 230400:
981 		baud = RFCOMM_RPN_BR_230400;
982 		break;
983 	default:
984 		/* 9600 is standard accordinag to the RFCOMM specification */
985 		baud = RFCOMM_RPN_BR_9600;
986 		break;
987 
988 	}
989 
990 	if (changes)
991 		rfcomm_send_rpn(dev->dlc->session, 1, dev->dlc->dlci, baud,
992 				data_bits, stop_bits, parity,
993 				RFCOMM_RPN_FLOW_NONE, x_on, x_off, changes);
994 }
995 
996 static void rfcomm_tty_throttle(struct tty_struct *tty)
997 {
998 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
999 
1000 	BT_DBG("tty %p dev %p", tty, dev);
1001 
1002 	rfcomm_dlc_throttle(dev->dlc);
1003 }
1004 
1005 static void rfcomm_tty_unthrottle(struct tty_struct *tty)
1006 {
1007 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1008 
1009 	BT_DBG("tty %p dev %p", tty, dev);
1010 
1011 	rfcomm_dlc_unthrottle(dev->dlc);
1012 }
1013 
1014 static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
1015 {
1016 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1017 
1018 	BT_DBG("tty %p dev %p", tty, dev);
1019 
1020 	if (!dev || !dev->dlc)
1021 		return 0;
1022 
1023 	if (!skb_queue_empty(&dev->dlc->tx_queue))
1024 		return dev->dlc->mtu;
1025 
1026 	return 0;
1027 }
1028 
1029 static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
1030 {
1031 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1032 
1033 	BT_DBG("tty %p dev %p", tty, dev);
1034 
1035 	if (!dev || !dev->dlc)
1036 		return;
1037 
1038 	skb_queue_purge(&dev->dlc->tx_queue);
1039 	tty_wakeup(tty);
1040 }
1041 
1042 static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
1043 {
1044 	BT_DBG("tty %p ch %c", tty, ch);
1045 }
1046 
1047 static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
1048 {
1049 	BT_DBG("tty %p timeout %d", tty, timeout);
1050 }
1051 
1052 static void rfcomm_tty_hangup(struct tty_struct *tty)
1053 {
1054 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1055 
1056 	BT_DBG("tty %p dev %p", tty, dev);
1057 
1058 	if (!dev)
1059 		return;
1060 
1061 	rfcomm_tty_flush_buffer(tty);
1062 
1063 	if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
1064 		if (rfcomm_dev_get(dev->id) == NULL)
1065 			return;
1066 		rfcomm_dev_del(dev);
1067 		tty_port_put(&dev->port);
1068 	}
1069 }
1070 
1071 static int rfcomm_tty_tiocmget(struct tty_struct *tty)
1072 {
1073 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1074 
1075 	BT_DBG("tty %p dev %p", tty, dev);
1076 
1077 	return dev->modem_status;
1078 }
1079 
1080 static int rfcomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
1081 {
1082 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
1083 	struct rfcomm_dlc *dlc = dev->dlc;
1084 	u8 v24_sig;
1085 
1086 	BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty, dev, set, clear);
1087 
1088 	rfcomm_dlc_get_modem_status(dlc, &v24_sig);
1089 
1090 	if (set & TIOCM_DSR || set & TIOCM_DTR)
1091 		v24_sig |= RFCOMM_V24_RTC;
1092 	if (set & TIOCM_RTS || set & TIOCM_CTS)
1093 		v24_sig |= RFCOMM_V24_RTR;
1094 	if (set & TIOCM_RI)
1095 		v24_sig |= RFCOMM_V24_IC;
1096 	if (set & TIOCM_CD)
1097 		v24_sig |= RFCOMM_V24_DV;
1098 
1099 	if (clear & TIOCM_DSR || clear & TIOCM_DTR)
1100 		v24_sig &= ~RFCOMM_V24_RTC;
1101 	if (clear & TIOCM_RTS || clear & TIOCM_CTS)
1102 		v24_sig &= ~RFCOMM_V24_RTR;
1103 	if (clear & TIOCM_RI)
1104 		v24_sig &= ~RFCOMM_V24_IC;
1105 	if (clear & TIOCM_CD)
1106 		v24_sig &= ~RFCOMM_V24_DV;
1107 
1108 	rfcomm_dlc_set_modem_status(dlc, v24_sig);
1109 
1110 	return 0;
1111 }
1112 
1113 /* ---- TTY structure ---- */
1114 
1115 static const struct tty_operations rfcomm_ops = {
1116 	.open			= rfcomm_tty_open,
1117 	.close			= rfcomm_tty_close,
1118 	.write			= rfcomm_tty_write,
1119 	.write_room		= rfcomm_tty_write_room,
1120 	.chars_in_buffer	= rfcomm_tty_chars_in_buffer,
1121 	.flush_buffer		= rfcomm_tty_flush_buffer,
1122 	.ioctl			= rfcomm_tty_ioctl,
1123 	.throttle		= rfcomm_tty_throttle,
1124 	.unthrottle		= rfcomm_tty_unthrottle,
1125 	.set_termios		= rfcomm_tty_set_termios,
1126 	.send_xchar		= rfcomm_tty_send_xchar,
1127 	.hangup			= rfcomm_tty_hangup,
1128 	.wait_until_sent	= rfcomm_tty_wait_until_sent,
1129 	.tiocmget		= rfcomm_tty_tiocmget,
1130 	.tiocmset		= rfcomm_tty_tiocmset,
1131 };
1132 
1133 int __init rfcomm_init_ttys(void)
1134 {
1135 	int error;
1136 
1137 	rfcomm_tty_driver = alloc_tty_driver(RFCOMM_TTY_PORTS);
1138 	if (!rfcomm_tty_driver)
1139 		return -ENOMEM;
1140 
1141 	rfcomm_tty_driver->driver_name	= "rfcomm";
1142 	rfcomm_tty_driver->name		= "rfcomm";
1143 	rfcomm_tty_driver->major	= RFCOMM_TTY_MAJOR;
1144 	rfcomm_tty_driver->minor_start	= RFCOMM_TTY_MINOR;
1145 	rfcomm_tty_driver->type		= TTY_DRIVER_TYPE_SERIAL;
1146 	rfcomm_tty_driver->subtype	= SERIAL_TYPE_NORMAL;
1147 	rfcomm_tty_driver->flags	= TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1148 	rfcomm_tty_driver->init_termios	= tty_std_termios;
1149 	rfcomm_tty_driver->init_termios.c_cflag	= B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1150 	rfcomm_tty_driver->init_termios.c_lflag &= ~ICANON;
1151 	tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1152 
1153 	error = tty_register_driver(rfcomm_tty_driver);
1154 	if (error) {
1155 		BT_ERR("Can't register RFCOMM TTY driver");
1156 		put_tty_driver(rfcomm_tty_driver);
1157 		return error;
1158 	}
1159 
1160 	BT_INFO("RFCOMM TTY layer initialized");
1161 
1162 	return 0;
1163 }
1164 
1165 void rfcomm_cleanup_ttys(void)
1166 {
1167 	tty_unregister_driver(rfcomm_tty_driver);
1168 	put_tty_driver(rfcomm_tty_driver);
1169 }
1170