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>
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;
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.
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.
28 #include <linux/module.h>
30 #include <linux/tty.h>
31 #include <linux/tty_driver.h>
32 #include <linux/tty_flip.h>
34 #include <net/bluetooth/bluetooth.h>
35 #include <net/bluetooth/hci_core.h>
36 #include <net/bluetooth/rfcomm.h>
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
43 static struct tty_driver
*rfcomm_tty_driver
;
47 struct list_head list
;
54 unsigned long status
; /* don't export to userspace */
62 struct rfcomm_dlc
*dlc
;
64 struct device
*tty_dev
;
68 struct sk_buff_head pending
;
71 static LIST_HEAD(rfcomm_dev_list
);
72 static DEFINE_SPINLOCK(rfcomm_dev_lock
);
74 static void rfcomm_dev_data_ready(struct rfcomm_dlc
*dlc
, struct sk_buff
*skb
);
75 static void rfcomm_dev_state_change(struct rfcomm_dlc
*dlc
, int err
);
76 static void rfcomm_dev_modem_status(struct rfcomm_dlc
*dlc
, u8 v24_sig
);
78 /* ---- Device functions ---- */
80 static void rfcomm_dev_destruct(struct tty_port
*port
)
82 struct rfcomm_dev
*dev
= container_of(port
, struct rfcomm_dev
, port
);
83 struct rfcomm_dlc
*dlc
= dev
->dlc
;
85 BT_DBG("dev %p dlc %p", dev
, dlc
);
88 /* Detach DLC if it's owned by this dev */
89 if (dlc
->owner
== dev
)
91 rfcomm_dlc_unlock(dlc
);
95 tty_unregister_device(rfcomm_tty_driver
, dev
->id
);
97 spin_lock(&rfcomm_dev_lock
);
99 spin_unlock(&rfcomm_dev_lock
);
103 /* It's safe to call module_put() here because socket still
104 holds reference to this module. */
105 module_put(THIS_MODULE
);
108 /* device-specific initialization: open the dlc */
109 static int rfcomm_dev_activate(struct tty_port
*port
, struct tty_struct
*tty
)
111 struct rfcomm_dev
*dev
= container_of(port
, struct rfcomm_dev
, port
);
113 return rfcomm_dlc_open(dev
->dlc
, &dev
->src
, &dev
->dst
, dev
->channel
);
116 /* we block the open until the dlc->state becomes BT_CONNECTED */
117 static int rfcomm_dev_carrier_raised(struct tty_port
*port
)
119 struct rfcomm_dev
*dev
= container_of(port
, struct rfcomm_dev
, port
);
121 return (dev
->dlc
->state
== BT_CONNECTED
);
124 /* device-specific cleanup: close the dlc */
125 static void rfcomm_dev_shutdown(struct tty_port
*port
)
127 struct rfcomm_dev
*dev
= container_of(port
, struct rfcomm_dev
, port
);
129 if (dev
->tty_dev
->parent
)
130 device_move(dev
->tty_dev
, NULL
, DPM_ORDER_DEV_LAST
);
133 rfcomm_dlc_close(dev
->dlc
, 0);
136 static const struct tty_port_operations rfcomm_port_ops
= {
137 .destruct
= rfcomm_dev_destruct
,
138 .activate
= rfcomm_dev_activate
,
139 .shutdown
= rfcomm_dev_shutdown
,
140 .carrier_raised
= rfcomm_dev_carrier_raised
,
143 static struct rfcomm_dev
*__rfcomm_dev_get(int id
)
145 struct rfcomm_dev
*dev
;
147 list_for_each_entry(dev
, &rfcomm_dev_list
, list
)
154 static struct rfcomm_dev
*rfcomm_dev_get(int id
)
156 struct rfcomm_dev
*dev
;
158 spin_lock(&rfcomm_dev_lock
);
160 dev
= __rfcomm_dev_get(id
);
162 if (dev
&& !tty_port_get(&dev
->port
))
165 spin_unlock(&rfcomm_dev_lock
);
170 static struct device
*rfcomm_get_device(struct rfcomm_dev
*dev
)
172 struct hci_dev
*hdev
;
173 struct hci_conn
*conn
;
175 hdev
= hci_get_route(&dev
->dst
, &dev
->src
);
179 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &dev
->dst
);
183 return conn
? &conn
->dev
: NULL
;
186 static ssize_t
show_address(struct device
*tty_dev
, struct device_attribute
*attr
, char *buf
)
188 struct rfcomm_dev
*dev
= dev_get_drvdata(tty_dev
);
189 return sprintf(buf
, "%pMR\n", &dev
->dst
);
192 static ssize_t
show_channel(struct device
*tty_dev
, struct device_attribute
*attr
, char *buf
)
194 struct rfcomm_dev
*dev
= dev_get_drvdata(tty_dev
);
195 return sprintf(buf
, "%d\n", dev
->channel
);
198 static DEVICE_ATTR(address
, S_IRUGO
, show_address
, NULL
);
199 static DEVICE_ATTR(channel
, S_IRUGO
, show_channel
, NULL
);
201 static int rfcomm_dev_add(struct rfcomm_dev_req
*req
, struct rfcomm_dlc
*dlc
)
203 struct rfcomm_dev
*dev
, *entry
;
204 struct list_head
*head
= &rfcomm_dev_list
;
207 BT_DBG("id %d channel %d", req
->dev_id
, req
->channel
);
209 dev
= kzalloc(sizeof(struct rfcomm_dev
), GFP_KERNEL
);
213 spin_lock(&rfcomm_dev_lock
);
215 if (req
->dev_id
< 0) {
218 list_for_each_entry(entry
, &rfcomm_dev_list
, list
) {
219 if (entry
->id
!= dev
->id
)
226 dev
->id
= req
->dev_id
;
228 list_for_each_entry(entry
, &rfcomm_dev_list
, list
) {
229 if (entry
->id
== dev
->id
) {
234 if (entry
->id
> dev
->id
- 1)
241 if ((dev
->id
< 0) || (dev
->id
> RFCOMM_MAX_DEV
- 1)) {
246 sprintf(dev
->name
, "rfcomm%d", dev
->id
);
248 list_add(&dev
->list
, head
);
250 bacpy(&dev
->src
, &req
->src
);
251 bacpy(&dev
->dst
, &req
->dst
);
252 dev
->channel
= req
->channel
;
254 dev
->flags
= req
->flags
&
255 ((1 << RFCOMM_RELEASE_ONHUP
) | (1 << RFCOMM_REUSE_DLC
));
257 tty_port_init(&dev
->port
);
258 dev
->port
.ops
= &rfcomm_port_ops
;
260 skb_queue_head_init(&dev
->pending
);
262 rfcomm_dlc_lock(dlc
);
264 if (req
->flags
& (1 << RFCOMM_REUSE_DLC
)) {
265 struct sock
*sk
= dlc
->owner
;
270 rfcomm_dlc_throttle(dlc
);
272 while ((skb
= skb_dequeue(&sk
->sk_receive_queue
))) {
274 skb_queue_tail(&dev
->pending
, skb
);
275 atomic_sub(skb
->len
, &sk
->sk_rmem_alloc
);
279 dlc
->data_ready
= rfcomm_dev_data_ready
;
280 dlc
->state_change
= rfcomm_dev_state_change
;
281 dlc
->modem_status
= rfcomm_dev_modem_status
;
286 rfcomm_dev_modem_status(dlc
, dlc
->remote_v24_sig
);
288 rfcomm_dlc_unlock(dlc
);
290 /* It's safe to call __module_get() here because socket already
291 holds reference to this module. */
292 __module_get(THIS_MODULE
);
295 spin_unlock(&rfcomm_dev_lock
);
300 dev
->tty_dev
= tty_port_register_device(&dev
->port
, rfcomm_tty_driver
,
302 if (IS_ERR(dev
->tty_dev
)) {
303 err
= PTR_ERR(dev
->tty_dev
);
304 spin_lock(&rfcomm_dev_lock
);
305 list_del(&dev
->list
);
306 spin_unlock(&rfcomm_dev_lock
);
310 dev_set_drvdata(dev
->tty_dev
, dev
);
312 if (device_create_file(dev
->tty_dev
, &dev_attr_address
) < 0)
313 BT_ERR("Failed to create address attribute");
315 if (device_create_file(dev
->tty_dev
, &dev_attr_channel
) < 0)
316 BT_ERR("Failed to create channel attribute");
325 /* ---- Send buffer ---- */
326 static inline unsigned int rfcomm_room(struct rfcomm_dlc
*dlc
)
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);
333 static void rfcomm_wfree(struct sk_buff
*skb
)
335 struct rfcomm_dev
*dev
= (void *) skb
->sk
;
336 atomic_sub(skb
->truesize
, &dev
->wmem_alloc
);
337 if (test_bit(RFCOMM_TTY_ATTACHED
, &dev
->flags
))
338 tty_port_tty_wakeup(&dev
->port
);
339 tty_port_put(&dev
->port
);
342 static void rfcomm_set_owner_w(struct sk_buff
*skb
, struct rfcomm_dev
*dev
)
344 tty_port_get(&dev
->port
);
345 atomic_add(skb
->truesize
, &dev
->wmem_alloc
);
346 skb
->sk
= (void *) dev
;
347 skb
->destructor
= rfcomm_wfree
;
350 static struct sk_buff
*rfcomm_wmalloc(struct rfcomm_dev
*dev
, unsigned long size
, gfp_t priority
)
352 if (atomic_read(&dev
->wmem_alloc
) < rfcomm_room(dev
->dlc
)) {
353 struct sk_buff
*skb
= alloc_skb(size
, priority
);
355 rfcomm_set_owner_w(skb
, dev
);
362 /* ---- Device IOCTLs ---- */
364 #define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
366 static int rfcomm_create_dev(struct sock
*sk
, void __user
*arg
)
368 struct rfcomm_dev_req req
;
369 struct rfcomm_dlc
*dlc
;
372 if (copy_from_user(&req
, arg
, sizeof(req
)))
375 BT_DBG("sk %p dev_id %d flags 0x%x", sk
, req
.dev_id
, req
.flags
);
377 if (req
.flags
!= NOCAP_FLAGS
&& !capable(CAP_NET_ADMIN
))
380 if (req
.flags
& (1 << RFCOMM_REUSE_DLC
)) {
381 /* Socket must be connected */
382 if (sk
->sk_state
!= BT_CONNECTED
)
385 dlc
= rfcomm_pi(sk
)->dlc
;
386 rfcomm_dlc_hold(dlc
);
388 dlc
= rfcomm_dlc_alloc(GFP_KERNEL
);
393 id
= rfcomm_dev_add(&req
, dlc
);
399 if (req
.flags
& (1 << RFCOMM_REUSE_DLC
)) {
400 /* DLC is now used by device.
401 * Socket must be disconnected */
402 sk
->sk_state
= BT_CLOSED
;
408 static int rfcomm_release_dev(void __user
*arg
)
410 struct rfcomm_dev_req req
;
411 struct rfcomm_dev
*dev
;
412 struct tty_struct
*tty
;
414 if (copy_from_user(&req
, arg
, sizeof(req
)))
417 BT_DBG("dev_id %d flags 0x%x", req
.dev_id
, req
.flags
);
419 dev
= rfcomm_dev_get(req
.dev_id
);
423 if (dev
->flags
!= NOCAP_FLAGS
&& !capable(CAP_NET_ADMIN
)) {
424 tty_port_put(&dev
->port
);
428 /* only release once */
429 if (test_and_set_bit(RFCOMM_DEV_RELEASED
, &dev
->status
)) {
430 tty_port_put(&dev
->port
);
434 if (req
.flags
& (1 << RFCOMM_HANGUP_NOW
))
435 rfcomm_dlc_close(dev
->dlc
, 0);
437 /* Shut down TTY synchronously before freeing rfcomm_dev */
438 tty
= tty_port_tty_get(&dev
->port
);
444 if (!test_bit(RFCOMM_TTY_OWNED
, &dev
->status
))
445 tty_port_put(&dev
->port
);
447 tty_port_put(&dev
->port
);
451 static int rfcomm_get_dev_list(void __user
*arg
)
453 struct rfcomm_dev
*dev
;
454 struct rfcomm_dev_list_req
*dl
;
455 struct rfcomm_dev_info
*di
;
456 int n
= 0, size
, err
;
461 if (get_user(dev_num
, (u16 __user
*) arg
))
464 if (!dev_num
|| dev_num
> (PAGE_SIZE
* 4) / sizeof(*di
))
467 size
= sizeof(*dl
) + dev_num
* sizeof(*di
);
469 dl
= kzalloc(size
, GFP_KERNEL
);
475 spin_lock(&rfcomm_dev_lock
);
477 list_for_each_entry(dev
, &rfcomm_dev_list
, list
) {
478 if (!tty_port_get(&dev
->port
))
480 (di
+ n
)->id
= dev
->id
;
481 (di
+ n
)->flags
= dev
->flags
;
482 (di
+ n
)->state
= dev
->dlc
->state
;
483 (di
+ n
)->channel
= dev
->channel
;
484 bacpy(&(di
+ n
)->src
, &dev
->src
);
485 bacpy(&(di
+ n
)->dst
, &dev
->dst
);
486 tty_port_put(&dev
->port
);
491 spin_unlock(&rfcomm_dev_lock
);
494 size
= sizeof(*dl
) + n
* sizeof(*di
);
496 err
= copy_to_user(arg
, dl
, size
);
499 return err
? -EFAULT
: 0;
502 static int rfcomm_get_dev_info(void __user
*arg
)
504 struct rfcomm_dev
*dev
;
505 struct rfcomm_dev_info di
;
510 if (copy_from_user(&di
, arg
, sizeof(di
)))
513 dev
= rfcomm_dev_get(di
.id
);
517 di
.flags
= dev
->flags
;
518 di
.channel
= dev
->channel
;
519 di
.state
= dev
->dlc
->state
;
520 bacpy(&di
.src
, &dev
->src
);
521 bacpy(&di
.dst
, &dev
->dst
);
523 if (copy_to_user(arg
, &di
, sizeof(di
)))
526 tty_port_put(&dev
->port
);
530 int rfcomm_dev_ioctl(struct sock
*sk
, unsigned int cmd
, void __user
*arg
)
532 BT_DBG("cmd %d arg %p", cmd
, arg
);
535 case RFCOMMCREATEDEV
:
536 return rfcomm_create_dev(sk
, arg
);
538 case RFCOMMRELEASEDEV
:
539 return rfcomm_release_dev(arg
);
541 case RFCOMMGETDEVLIST
:
542 return rfcomm_get_dev_list(arg
);
544 case RFCOMMGETDEVINFO
:
545 return rfcomm_get_dev_info(arg
);
551 /* ---- DLC callbacks ---- */
552 static void rfcomm_dev_data_ready(struct rfcomm_dlc
*dlc
, struct sk_buff
*skb
)
554 struct rfcomm_dev
*dev
= dlc
->owner
;
561 if (!skb_queue_empty(&dev
->pending
)) {
562 skb_queue_tail(&dev
->pending
, skb
);
566 BT_DBG("dlc %p len %d", dlc
, skb
->len
);
568 tty_insert_flip_string(&dev
->port
, skb
->data
, skb
->len
);
569 tty_flip_buffer_push(&dev
->port
);
574 static void rfcomm_dev_state_change(struct rfcomm_dlc
*dlc
, int err
)
576 struct rfcomm_dev
*dev
= dlc
->owner
;
580 BT_DBG("dlc %p dev %p err %d", dlc
, dev
, err
);
583 if (dlc
->state
== BT_CONNECTED
) {
584 device_move(dev
->tty_dev
, rfcomm_get_device(dev
),
585 DPM_ORDER_DEV_AFTER_PARENT
);
587 wake_up_interruptible(&dev
->port
.open_wait
);
588 } else if (dlc
->state
== BT_CLOSED
)
589 tty_port_tty_hangup(&dev
->port
, false);
592 static void rfcomm_dev_modem_status(struct rfcomm_dlc
*dlc
, u8 v24_sig
)
594 struct rfcomm_dev
*dev
= dlc
->owner
;
598 BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc
, dev
, v24_sig
);
600 if ((dev
->modem_status
& TIOCM_CD
) && !(v24_sig
& RFCOMM_V24_DV
))
601 tty_port_tty_hangup(&dev
->port
, true);
604 ((v24_sig
& RFCOMM_V24_RTC
) ? (TIOCM_DSR
| TIOCM_DTR
) : 0) |
605 ((v24_sig
& RFCOMM_V24_RTR
) ? (TIOCM_RTS
| TIOCM_CTS
) : 0) |
606 ((v24_sig
& RFCOMM_V24_IC
) ? TIOCM_RI
: 0) |
607 ((v24_sig
& RFCOMM_V24_DV
) ? TIOCM_CD
: 0);
610 /* ---- TTY functions ---- */
611 static void rfcomm_tty_copy_pending(struct rfcomm_dev
*dev
)
616 BT_DBG("dev %p", dev
);
618 rfcomm_dlc_lock(dev
->dlc
);
620 while ((skb
= skb_dequeue(&dev
->pending
))) {
621 inserted
+= tty_insert_flip_string(&dev
->port
, skb
->data
,
626 rfcomm_dlc_unlock(dev
->dlc
);
629 tty_flip_buffer_push(&dev
->port
);
632 /* do the reverse of install, clearing the tty fields and releasing the
633 * reference to tty_port
635 static void rfcomm_tty_cleanup(struct tty_struct
*tty
)
637 struct rfcomm_dev
*dev
= tty
->driver_data
;
639 clear_bit(RFCOMM_TTY_ATTACHED
, &dev
->flags
);
641 rfcomm_dlc_lock(dev
->dlc
);
642 tty
->driver_data
= NULL
;
643 rfcomm_dlc_unlock(dev
->dlc
);
646 * purge the dlc->tx_queue to avoid circular dependencies
647 * between dev and dlc
649 skb_queue_purge(&dev
->dlc
->tx_queue
);
651 tty_port_put(&dev
->port
);
654 /* we acquire the tty_port reference since it's here the tty is first used
655 * by setting the termios. We also populate the driver_data field and install
658 static int rfcomm_tty_install(struct tty_driver
*driver
, struct tty_struct
*tty
)
660 struct rfcomm_dev
*dev
;
661 struct rfcomm_dlc
*dlc
;
664 dev
= rfcomm_dev_get(tty
->index
);
670 /* Attach TTY and open DLC */
671 rfcomm_dlc_lock(dlc
);
672 tty
->driver_data
= dev
;
673 rfcomm_dlc_unlock(dlc
);
674 set_bit(RFCOMM_TTY_ATTACHED
, &dev
->flags
);
676 /* install the tty_port */
677 err
= tty_port_install(&dev
->port
, driver
, tty
);
679 rfcomm_tty_cleanup(tty
);
683 /* take over the tty_port reference if the port was created with the
684 * flag RFCOMM_RELEASE_ONHUP. This will force the release of the port
685 * when the last process closes the tty. The behaviour is expected by
688 if (test_bit(RFCOMM_RELEASE_ONHUP
, &dev
->flags
)) {
689 set_bit(RFCOMM_TTY_OWNED
, &dev
->status
);
690 tty_port_put(&dev
->port
);
696 static int rfcomm_tty_open(struct tty_struct
*tty
, struct file
*filp
)
698 struct rfcomm_dev
*dev
= tty
->driver_data
;
701 BT_DBG("tty %p id %d", tty
, tty
->index
);
703 BT_DBG("dev %p dst %pMR channel %d opened %d", dev
, &dev
->dst
,
704 dev
->channel
, dev
->port
.count
);
706 err
= tty_port_open(&dev
->port
, tty
, filp
);
711 * FIXME: rfcomm should use proper flow control for
712 * received data. This hack will be unnecessary and can
713 * be removed when that's implemented
715 rfcomm_tty_copy_pending(dev
);
717 rfcomm_dlc_unthrottle(dev
->dlc
);
722 static void rfcomm_tty_close(struct tty_struct
*tty
, struct file
*filp
)
724 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
726 BT_DBG("tty %p dev %p dlc %p opened %d", tty
, dev
, dev
->dlc
,
729 tty_port_close(&dev
->port
, tty
, filp
);
732 static int rfcomm_tty_write(struct tty_struct
*tty
, const unsigned char *buf
, int count
)
734 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
735 struct rfcomm_dlc
*dlc
= dev
->dlc
;
737 int err
= 0, sent
= 0, size
;
739 BT_DBG("tty %p count %d", tty
, count
);
742 size
= min_t(uint
, count
, dlc
->mtu
);
744 skb
= rfcomm_wmalloc(dev
, size
+ RFCOMM_SKB_RESERVE
, GFP_ATOMIC
);
749 skb_reserve(skb
, RFCOMM_SKB_HEAD_RESERVE
);
751 memcpy(skb_put(skb
, size
), buf
+ sent
, size
);
753 err
= rfcomm_dlc_send(dlc
, skb
);
763 return sent
? sent
: err
;
766 static int rfcomm_tty_write_room(struct tty_struct
*tty
)
768 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
771 BT_DBG("tty %p", tty
);
773 if (!dev
|| !dev
->dlc
)
776 room
= rfcomm_room(dev
->dlc
) - atomic_read(&dev
->wmem_alloc
);
783 static int rfcomm_tty_ioctl(struct tty_struct
*tty
, unsigned int cmd
, unsigned long arg
)
785 BT_DBG("tty %p cmd 0x%02x", tty
, cmd
);
789 BT_DBG("TCGETS is not supported");
793 BT_DBG("TCSETS is not supported");
797 BT_DBG("TIOCMIWAIT");
801 BT_ERR("TIOCGSERIAL is not supported");
805 BT_ERR("TIOCSSERIAL is not supported");
809 BT_ERR("TIOCSERGSTRUCT is not supported");
813 BT_ERR("TIOCSERGETLSR is not supported");
817 BT_ERR("TIOCSERCONFIG is not supported");
821 return -ENOIOCTLCMD
; /* ioctls which we must ignore */
828 static void rfcomm_tty_set_termios(struct tty_struct
*tty
, struct ktermios
*old
)
830 struct ktermios
*new = &tty
->termios
;
831 int old_baud_rate
= tty_termios_baud_rate(old
);
832 int new_baud_rate
= tty_termios_baud_rate(new);
834 u8 baud
, data_bits
, stop_bits
, parity
, x_on
, x_off
;
837 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
839 BT_DBG("tty %p termios %p", tty
, old
);
841 if (!dev
|| !dev
->dlc
|| !dev
->dlc
->session
)
844 /* Handle turning off CRTSCTS */
845 if ((old
->c_cflag
& CRTSCTS
) && !(new->c_cflag
& CRTSCTS
))
846 BT_DBG("Turning off CRTSCTS unsupported");
848 /* Parity on/off and when on, odd/even */
849 if (((old
->c_cflag
& PARENB
) != (new->c_cflag
& PARENB
)) ||
850 ((old
->c_cflag
& PARODD
) != (new->c_cflag
& PARODD
))) {
851 changes
|= RFCOMM_RPN_PM_PARITY
;
852 BT_DBG("Parity change detected.");
855 /* Mark and space parity are not supported! */
856 if (new->c_cflag
& PARENB
) {
857 if (new->c_cflag
& PARODD
) {
858 BT_DBG("Parity is ODD");
859 parity
= RFCOMM_RPN_PARITY_ODD
;
861 BT_DBG("Parity is EVEN");
862 parity
= RFCOMM_RPN_PARITY_EVEN
;
865 BT_DBG("Parity is OFF");
866 parity
= RFCOMM_RPN_PARITY_NONE
;
869 /* Setting the x_on / x_off characters */
870 if (old
->c_cc
[VSTOP
] != new->c_cc
[VSTOP
]) {
871 BT_DBG("XOFF custom");
872 x_on
= new->c_cc
[VSTOP
];
873 changes
|= RFCOMM_RPN_PM_XON
;
875 BT_DBG("XOFF default");
876 x_on
= RFCOMM_RPN_XON_CHAR
;
879 if (old
->c_cc
[VSTART
] != new->c_cc
[VSTART
]) {
880 BT_DBG("XON custom");
881 x_off
= new->c_cc
[VSTART
];
882 changes
|= RFCOMM_RPN_PM_XOFF
;
884 BT_DBG("XON default");
885 x_off
= RFCOMM_RPN_XOFF_CHAR
;
888 /* Handle setting of stop bits */
889 if ((old
->c_cflag
& CSTOPB
) != (new->c_cflag
& CSTOPB
))
890 changes
|= RFCOMM_RPN_PM_STOP
;
892 /* POSIX does not support 1.5 stop bits and RFCOMM does not
893 * support 2 stop bits. So a request for 2 stop bits gets
894 * translated to 1.5 stop bits */
895 if (new->c_cflag
& CSTOPB
)
896 stop_bits
= RFCOMM_RPN_STOP_15
;
898 stop_bits
= RFCOMM_RPN_STOP_1
;
900 /* Handle number of data bits [5-8] */
901 if ((old
->c_cflag
& CSIZE
) != (new->c_cflag
& CSIZE
))
902 changes
|= RFCOMM_RPN_PM_DATA
;
904 switch (new->c_cflag
& CSIZE
) {
906 data_bits
= RFCOMM_RPN_DATA_5
;
909 data_bits
= RFCOMM_RPN_DATA_6
;
912 data_bits
= RFCOMM_RPN_DATA_7
;
915 data_bits
= RFCOMM_RPN_DATA_8
;
918 data_bits
= RFCOMM_RPN_DATA_8
;
922 /* Handle baudrate settings */
923 if (old_baud_rate
!= new_baud_rate
)
924 changes
|= RFCOMM_RPN_PM_BITRATE
;
926 switch (new_baud_rate
) {
928 baud
= RFCOMM_RPN_BR_2400
;
931 baud
= RFCOMM_RPN_BR_4800
;
934 baud
= RFCOMM_RPN_BR_7200
;
937 baud
= RFCOMM_RPN_BR_9600
;
940 baud
= RFCOMM_RPN_BR_19200
;
943 baud
= RFCOMM_RPN_BR_38400
;
946 baud
= RFCOMM_RPN_BR_57600
;
949 baud
= RFCOMM_RPN_BR_115200
;
952 baud
= RFCOMM_RPN_BR_230400
;
955 /* 9600 is standard accordinag to the RFCOMM specification */
956 baud
= RFCOMM_RPN_BR_9600
;
962 rfcomm_send_rpn(dev
->dlc
->session
, 1, dev
->dlc
->dlci
, baud
,
963 data_bits
, stop_bits
, parity
,
964 RFCOMM_RPN_FLOW_NONE
, x_on
, x_off
, changes
);
967 static void rfcomm_tty_throttle(struct tty_struct
*tty
)
969 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
971 BT_DBG("tty %p dev %p", tty
, dev
);
973 rfcomm_dlc_throttle(dev
->dlc
);
976 static void rfcomm_tty_unthrottle(struct tty_struct
*tty
)
978 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
980 BT_DBG("tty %p dev %p", tty
, dev
);
982 rfcomm_dlc_unthrottle(dev
->dlc
);
985 static int rfcomm_tty_chars_in_buffer(struct tty_struct
*tty
)
987 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
989 BT_DBG("tty %p dev %p", tty
, dev
);
991 if (!dev
|| !dev
->dlc
)
994 if (!skb_queue_empty(&dev
->dlc
->tx_queue
))
995 return dev
->dlc
->mtu
;
1000 static void rfcomm_tty_flush_buffer(struct tty_struct
*tty
)
1002 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
1004 BT_DBG("tty %p dev %p", tty
, dev
);
1006 if (!dev
|| !dev
->dlc
)
1009 skb_queue_purge(&dev
->dlc
->tx_queue
);
1013 static void rfcomm_tty_send_xchar(struct tty_struct
*tty
, char ch
)
1015 BT_DBG("tty %p ch %c", tty
, ch
);
1018 static void rfcomm_tty_wait_until_sent(struct tty_struct
*tty
, int timeout
)
1020 BT_DBG("tty %p timeout %d", tty
, timeout
);
1023 static void rfcomm_tty_hangup(struct tty_struct
*tty
)
1025 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
1027 BT_DBG("tty %p dev %p", tty
, dev
);
1029 tty_port_hangup(&dev
->port
);
1032 static int rfcomm_tty_tiocmget(struct tty_struct
*tty
)
1034 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
1036 BT_DBG("tty %p dev %p", tty
, dev
);
1038 return dev
->modem_status
;
1041 static int rfcomm_tty_tiocmset(struct tty_struct
*tty
, unsigned int set
, unsigned int clear
)
1043 struct rfcomm_dev
*dev
= (struct rfcomm_dev
*) tty
->driver_data
;
1044 struct rfcomm_dlc
*dlc
= dev
->dlc
;
1047 BT_DBG("tty %p dev %p set 0x%02x clear 0x%02x", tty
, dev
, set
, clear
);
1049 rfcomm_dlc_get_modem_status(dlc
, &v24_sig
);
1051 if (set
& TIOCM_DSR
|| set
& TIOCM_DTR
)
1052 v24_sig
|= RFCOMM_V24_RTC
;
1053 if (set
& TIOCM_RTS
|| set
& TIOCM_CTS
)
1054 v24_sig
|= RFCOMM_V24_RTR
;
1056 v24_sig
|= RFCOMM_V24_IC
;
1058 v24_sig
|= RFCOMM_V24_DV
;
1060 if (clear
& TIOCM_DSR
|| clear
& TIOCM_DTR
)
1061 v24_sig
&= ~RFCOMM_V24_RTC
;
1062 if (clear
& TIOCM_RTS
|| clear
& TIOCM_CTS
)
1063 v24_sig
&= ~RFCOMM_V24_RTR
;
1064 if (clear
& TIOCM_RI
)
1065 v24_sig
&= ~RFCOMM_V24_IC
;
1066 if (clear
& TIOCM_CD
)
1067 v24_sig
&= ~RFCOMM_V24_DV
;
1069 rfcomm_dlc_set_modem_status(dlc
, v24_sig
);
1074 /* ---- TTY structure ---- */
1076 static const struct tty_operations rfcomm_ops
= {
1077 .open
= rfcomm_tty_open
,
1078 .close
= rfcomm_tty_close
,
1079 .write
= rfcomm_tty_write
,
1080 .write_room
= rfcomm_tty_write_room
,
1081 .chars_in_buffer
= rfcomm_tty_chars_in_buffer
,
1082 .flush_buffer
= rfcomm_tty_flush_buffer
,
1083 .ioctl
= rfcomm_tty_ioctl
,
1084 .throttle
= rfcomm_tty_throttle
,
1085 .unthrottle
= rfcomm_tty_unthrottle
,
1086 .set_termios
= rfcomm_tty_set_termios
,
1087 .send_xchar
= rfcomm_tty_send_xchar
,
1088 .hangup
= rfcomm_tty_hangup
,
1089 .wait_until_sent
= rfcomm_tty_wait_until_sent
,
1090 .tiocmget
= rfcomm_tty_tiocmget
,
1091 .tiocmset
= rfcomm_tty_tiocmset
,
1092 .install
= rfcomm_tty_install
,
1093 .cleanup
= rfcomm_tty_cleanup
,
1096 int __init
rfcomm_init_ttys(void)
1100 rfcomm_tty_driver
= alloc_tty_driver(RFCOMM_TTY_PORTS
);
1101 if (!rfcomm_tty_driver
)
1104 rfcomm_tty_driver
->driver_name
= "rfcomm";
1105 rfcomm_tty_driver
->name
= "rfcomm";
1106 rfcomm_tty_driver
->major
= RFCOMM_TTY_MAJOR
;
1107 rfcomm_tty_driver
->minor_start
= RFCOMM_TTY_MINOR
;
1108 rfcomm_tty_driver
->type
= TTY_DRIVER_TYPE_SERIAL
;
1109 rfcomm_tty_driver
->subtype
= SERIAL_TYPE_NORMAL
;
1110 rfcomm_tty_driver
->flags
= TTY_DRIVER_REAL_RAW
| TTY_DRIVER_DYNAMIC_DEV
;
1111 rfcomm_tty_driver
->init_termios
= tty_std_termios
;
1112 rfcomm_tty_driver
->init_termios
.c_cflag
= B9600
| CS8
| CREAD
| HUPCL
;
1113 rfcomm_tty_driver
->init_termios
.c_lflag
&= ~ICANON
;
1114 tty_set_operations(rfcomm_tty_driver
, &rfcomm_ops
);
1116 error
= tty_register_driver(rfcomm_tty_driver
);
1118 BT_ERR("Can't register RFCOMM TTY driver");
1119 put_tty_driver(rfcomm_tty_driver
);
1123 BT_INFO("RFCOMM TTY layer initialized");
1128 void rfcomm_cleanup_ttys(void)
1130 tty_unregister_driver(rfcomm_tty_driver
);
1131 put_tty_driver(rfcomm_tty_driver
);