Lines Matching +full:odd +full:- +full:parity
78 /* ---- Device functions ---- */
83 struct rfcomm_dlc *dlc = dev->dlc; in rfcomm_dev_destruct()
89 if (dlc->owner == dev) in rfcomm_dev_destruct()
90 dlc->owner = NULL; in rfcomm_dev_destruct()
95 if (dev->tty_dev) in rfcomm_dev_destruct()
96 tty_unregister_device(rfcomm_tty_driver, dev->id); in rfcomm_dev_destruct()
99 list_del(&dev->list); in rfcomm_dev_destruct()
109 /* device-specific initialization: open the dlc */
115 err = rfcomm_dlc_open(dev->dlc, &dev->src, &dev->dst, dev->channel); in rfcomm_dev_activate()
117 set_bit(TTY_IO_ERROR, &tty->flags); in rfcomm_dev_activate()
121 /* we block the open until the dlc->state becomes BT_CONNECTED */
126 return (dev->dlc->state == BT_CONNECTED); in rfcomm_dev_carrier_raised()
129 /* device-specific cleanup: close the dlc */
134 if (dev->tty_dev->parent) in rfcomm_dev_shutdown()
135 device_move(dev->tty_dev, NULL, DPM_ORDER_DEV_LAST); in rfcomm_dev_shutdown()
138 rfcomm_dlc_close(dev->dlc, 0); in rfcomm_dev_shutdown()
153 if (dev->id == id) in __rfcomm_dev_lookup()
167 if (dev && !tty_port_get(&dev->port)) in rfcomm_dev_get()
180 hdev = hci_get_route(&dev->dst, &dev->src, BDADDR_BREDR); in rfcomm_reparent_device()
188 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &dev->dst); in rfcomm_reparent_device()
193 if (conn && device_is_registered(&conn->dev)) in rfcomm_reparent_device()
194 device_move(dev->tty_dev, &conn->dev, DPM_ORDER_DEV_AFTER_PARENT); in rfcomm_reparent_device()
204 return sysfs_emit(buf, "%pMR\n", &dev->dst); in address_show()
211 return sysfs_emit(buf, "%d\n", dev->channel); in channel_show()
226 return ERR_PTR(-ENOMEM); in __rfcomm_dev_add()
230 if (req->dev_id < 0) { in __rfcomm_dev_add()
231 dev->id = 0; in __rfcomm_dev_add()
234 if (entry->id != dev->id) in __rfcomm_dev_add()
237 dev->id++; in __rfcomm_dev_add()
238 head = &entry->list; in __rfcomm_dev_add()
241 dev->id = req->dev_id; in __rfcomm_dev_add()
244 if (entry->id == dev->id) { in __rfcomm_dev_add()
245 err = -EADDRINUSE; in __rfcomm_dev_add()
249 if (entry->id > dev->id - 1) in __rfcomm_dev_add()
252 head = &entry->list; in __rfcomm_dev_add()
256 if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) { in __rfcomm_dev_add()
257 err = -ENFILE; in __rfcomm_dev_add()
261 sprintf(dev->name, "rfcomm%d", dev->id); in __rfcomm_dev_add()
263 list_add(&dev->list, head); in __rfcomm_dev_add()
265 bacpy(&dev->src, &req->src); in __rfcomm_dev_add()
266 bacpy(&dev->dst, &req->dst); in __rfcomm_dev_add()
267 dev->channel = req->channel; in __rfcomm_dev_add()
269 dev->flags = req->flags & in __rfcomm_dev_add()
272 tty_port_init(&dev->port); in __rfcomm_dev_add()
273 dev->port.ops = &rfcomm_port_ops; in __rfcomm_dev_add()
275 skb_queue_head_init(&dev->pending); in __rfcomm_dev_add()
279 if (req->flags & (1 << RFCOMM_REUSE_DLC)) { in __rfcomm_dev_add()
280 struct sock *sk = dlc->owner; in __rfcomm_dev_add()
287 while ((skb = skb_dequeue(&sk->sk_receive_queue))) { in __rfcomm_dev_add()
289 skb_queue_tail(&dev->pending, skb); in __rfcomm_dev_add()
290 atomic_sub(skb->len, &sk->sk_rmem_alloc); in __rfcomm_dev_add()
294 dlc->data_ready = rfcomm_dev_data_ready; in __rfcomm_dev_add()
295 dlc->state_change = rfcomm_dev_state_change; in __rfcomm_dev_add()
296 dlc->modem_status = rfcomm_dev_modem_status; in __rfcomm_dev_add()
298 dlc->owner = dev; in __rfcomm_dev_add()
299 dev->dlc = dlc; in __rfcomm_dev_add()
301 rfcomm_dev_modem_status(dlc, dlc->remote_v24_sig); in __rfcomm_dev_add()
323 BT_DBG("id %d channel %d", req->dev_id, req->channel); in rfcomm_dev_add()
331 tty = tty_port_register_device(&dev->port, rfcomm_tty_driver, in rfcomm_dev_add()
332 dev->id, NULL); in rfcomm_dev_add()
334 tty_port_put(&dev->port); in rfcomm_dev_add()
338 dev->tty_dev = tty; in rfcomm_dev_add()
340 dev_set_drvdata(dev->tty_dev, dev); in rfcomm_dev_add()
342 if (device_create_file(dev->tty_dev, &dev_attr_address) < 0) in rfcomm_dev_add()
345 if (device_create_file(dev->tty_dev, &dev_attr_channel) < 0) in rfcomm_dev_add()
348 return dev->id; in rfcomm_dev_add()
351 /* ---- Send buffer ---- */
354 struct rfcomm_dlc *dlc = dev->dlc; in rfcomm_room()
357 int pending = 40 - atomic_read(&dev->wmem_alloc); in rfcomm_room()
359 return max(0, pending) * dlc->mtu; in rfcomm_room()
364 struct rfcomm_dev *dev = (void *) skb->sk; in rfcomm_wfree()
365 atomic_dec(&dev->wmem_alloc); in rfcomm_wfree()
366 if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags)) in rfcomm_wfree()
367 tty_port_tty_wakeup(&dev->port); in rfcomm_wfree()
368 tty_port_put(&dev->port); in rfcomm_wfree()
373 tty_port_get(&dev->port); in rfcomm_set_owner_w()
374 atomic_inc(&dev->wmem_alloc); in rfcomm_set_owner_w()
375 skb->sk = (void *) dev; in rfcomm_set_owner_w()
376 skb->destructor = rfcomm_wfree; in rfcomm_set_owner_w()
387 /* ---- Device IOCTLs ---- */
398 return -EFAULT; in __rfcomm_create_dev()
403 return -EPERM; in __rfcomm_create_dev()
407 if (sk->sk_state != BT_CONNECTED) in __rfcomm_create_dev()
408 return -EBADFD; in __rfcomm_create_dev()
410 dlc = rfcomm_pi(sk)->dlc; in __rfcomm_create_dev()
418 return -EBUSY; in __rfcomm_create_dev()
421 return -ENOMEM; in __rfcomm_create_dev()
431 sk->sk_state = BT_CLOSED; in __rfcomm_create_dev()
443 return -EFAULT; in __rfcomm_release_dev()
449 return -ENODEV; in __rfcomm_release_dev()
451 if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) { in __rfcomm_release_dev()
452 tty_port_put(&dev->port); in __rfcomm_release_dev()
453 return -EPERM; in __rfcomm_release_dev()
457 if (test_and_set_bit(RFCOMM_DEV_RELEASED, &dev->status)) { in __rfcomm_release_dev()
458 tty_port_put(&dev->port); in __rfcomm_release_dev()
459 return -EALREADY; in __rfcomm_release_dev()
463 rfcomm_dlc_close(dev->dlc, 0); in __rfcomm_release_dev()
466 tty_port_tty_vhangup(&dev->port); in __rfcomm_release_dev()
468 if (!test_bit(RFCOMM_TTY_OWNED, &dev->status)) in __rfcomm_release_dev()
469 tty_port_put(&dev->port); in __rfcomm_release_dev()
471 tty_port_put(&dev->port); in __rfcomm_release_dev()
508 return -EFAULT; in rfcomm_get_dev_list()
511 return -EINVAL; in rfcomm_get_dev_list()
515 return -ENOMEM; in rfcomm_get_dev_list()
517 dl->dev_num = dev_num; in rfcomm_get_dev_list()
518 di = dl->dev_info; in rfcomm_get_dev_list()
523 if (!tty_port_get(&dev->port)) in rfcomm_get_dev_list()
525 di[n].id = dev->id; in rfcomm_get_dev_list()
526 di[n].flags = dev->flags; in rfcomm_get_dev_list()
527 di[n].state = dev->dlc->state; in rfcomm_get_dev_list()
528 di[n].channel = dev->channel; in rfcomm_get_dev_list()
529 bacpy(&di[n].src, &dev->src); in rfcomm_get_dev_list()
530 bacpy(&di[n].dst, &dev->dst); in rfcomm_get_dev_list()
531 tty_port_put(&dev->port); in rfcomm_get_dev_list()
538 dl->dev_num = n; in rfcomm_get_dev_list()
542 return err ? -EFAULT : 0; in rfcomm_get_dev_list()
554 return -EFAULT; in rfcomm_get_dev_info()
558 return -ENODEV; in rfcomm_get_dev_info()
560 di.flags = dev->flags; in rfcomm_get_dev_info()
561 di.channel = dev->channel; in rfcomm_get_dev_info()
562 di.state = dev->dlc->state; in rfcomm_get_dev_info()
563 bacpy(&di.src, &dev->src); in rfcomm_get_dev_info()
564 bacpy(&di.dst, &dev->dst); in rfcomm_get_dev_info()
567 err = -EFAULT; in rfcomm_get_dev_info()
569 tty_port_put(&dev->port); in rfcomm_get_dev_info()
591 return -EINVAL; in rfcomm_dev_ioctl()
594 /* ---- DLC callbacks ---- */
597 struct rfcomm_dev *dev = dlc->owner; in rfcomm_dev_data_ready()
604 if (!skb_queue_empty(&dev->pending)) { in rfcomm_dev_data_ready()
605 skb_queue_tail(&dev->pending, skb); in rfcomm_dev_data_ready()
609 BT_DBG("dlc %p len %d", dlc, skb->len); in rfcomm_dev_data_ready()
611 tty_insert_flip_string(&dev->port, skb->data, skb->len); in rfcomm_dev_data_ready()
612 tty_flip_buffer_push(&dev->port); in rfcomm_dev_data_ready()
619 struct rfcomm_dev *dev = dlc->owner; in rfcomm_dev_state_change()
625 dev->err = err; in rfcomm_dev_state_change()
626 if (dlc->state == BT_CONNECTED) { in rfcomm_dev_state_change()
629 wake_up_interruptible(&dev->port.open_wait); in rfcomm_dev_state_change()
630 } else if (dlc->state == BT_CLOSED) in rfcomm_dev_state_change()
631 tty_port_tty_hangup(&dev->port, false); in rfcomm_dev_state_change()
636 struct rfcomm_dev *dev = dlc->owner; in rfcomm_dev_modem_status()
642 if ((dev->modem_status & TIOCM_CD) && !(v24_sig & RFCOMM_V24_DV)) in rfcomm_dev_modem_status()
643 tty_port_tty_hangup(&dev->port, true); in rfcomm_dev_modem_status()
645 dev->modem_status = in rfcomm_dev_modem_status()
652 /* ---- TTY functions ---- */
660 rfcomm_dlc_lock(dev->dlc); in rfcomm_tty_copy_pending()
662 while ((skb = skb_dequeue(&dev->pending))) { in rfcomm_tty_copy_pending()
663 inserted += tty_insert_flip_string(&dev->port, skb->data, in rfcomm_tty_copy_pending()
664 skb->len); in rfcomm_tty_copy_pending()
668 rfcomm_dlc_unlock(dev->dlc); in rfcomm_tty_copy_pending()
671 tty_flip_buffer_push(&dev->port); in rfcomm_tty_copy_pending()
679 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_cleanup()
681 clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags); in rfcomm_tty_cleanup()
683 rfcomm_dlc_lock(dev->dlc); in rfcomm_tty_cleanup()
684 tty->driver_data = NULL; in rfcomm_tty_cleanup()
685 rfcomm_dlc_unlock(dev->dlc); in rfcomm_tty_cleanup()
688 * purge the dlc->tx_queue to avoid circular dependencies in rfcomm_tty_cleanup()
691 skb_queue_purge(&dev->dlc->tx_queue); in rfcomm_tty_cleanup()
693 tty_port_put(&dev->port); in rfcomm_tty_cleanup()
706 dev = rfcomm_dev_get(tty->index); in rfcomm_tty_install()
708 return -ENODEV; in rfcomm_tty_install()
710 dlc = dev->dlc; in rfcomm_tty_install()
714 tty->driver_data = dev; in rfcomm_tty_install()
716 set_bit(RFCOMM_TTY_ATTACHED, &dev->flags); in rfcomm_tty_install()
719 err = tty_port_install(&dev->port, driver, tty); in rfcomm_tty_install()
730 if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) { in rfcomm_tty_install()
731 set_bit(RFCOMM_TTY_OWNED, &dev->status); in rfcomm_tty_install()
732 tty_port_put(&dev->port); in rfcomm_tty_install()
740 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_open()
743 BT_DBG("tty %p id %d", tty, tty->index); in rfcomm_tty_open()
745 BT_DBG("dev %p dst %pMR channel %d opened %d", dev, &dev->dst, in rfcomm_tty_open()
746 dev->channel, dev->port.count); in rfcomm_tty_open()
748 err = tty_port_open(&dev->port, tty, filp); in rfcomm_tty_open()
759 rfcomm_dlc_unthrottle(dev->dlc); in rfcomm_tty_open()
766 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_close()
768 BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc, in rfcomm_tty_close()
769 dev->port.count); in rfcomm_tty_close()
771 tty_port_close(&dev->port, tty, filp); in rfcomm_tty_close()
777 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_write()
778 struct rfcomm_dlc *dlc = dev->dlc; in rfcomm_tty_write()
785 size = min_t(size_t, count, dlc->mtu); in rfcomm_tty_write()
798 count -= size; in rfcomm_tty_write()
806 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_write_room()
809 if (dev && dev->dlc) in rfcomm_tty_write_room()
824 return -ENOIOCTLCMD; in rfcomm_tty_ioctl()
828 return -ENOIOCTLCMD; in rfcomm_tty_ioctl()
836 return -ENOIOCTLCMD; in rfcomm_tty_ioctl()
840 return -ENOIOCTLCMD; in rfcomm_tty_ioctl()
843 return -ENOIOCTLCMD; /* ioctls which we must ignore */ in rfcomm_tty_ioctl()
847 return -ENOIOCTLCMD; in rfcomm_tty_ioctl()
853 struct ktermios *new = &tty->termios; in rfcomm_tty_set_termios()
857 u8 baud, data_bits, stop_bits, parity, x_on, x_off; in rfcomm_tty_set_termios() local
860 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_set_termios()
864 if (!dev || !dev->dlc || !dev->dlc->session) in rfcomm_tty_set_termios()
868 if ((old->c_cflag & CRTSCTS) && !(new->c_cflag & CRTSCTS)) in rfcomm_tty_set_termios()
871 /* Parity on/off and when on, odd/even */ in rfcomm_tty_set_termios()
872 if (((old->c_cflag & PARENB) != (new->c_cflag & PARENB)) || in rfcomm_tty_set_termios()
873 ((old->c_cflag & PARODD) != (new->c_cflag & PARODD))) { in rfcomm_tty_set_termios()
875 BT_DBG("Parity change detected."); in rfcomm_tty_set_termios()
878 /* Mark and space parity are not supported! */ in rfcomm_tty_set_termios()
879 if (new->c_cflag & PARENB) { in rfcomm_tty_set_termios()
880 if (new->c_cflag & PARODD) { in rfcomm_tty_set_termios()
881 BT_DBG("Parity is ODD"); in rfcomm_tty_set_termios()
882 parity = RFCOMM_RPN_PARITY_ODD; in rfcomm_tty_set_termios()
884 BT_DBG("Parity is EVEN"); in rfcomm_tty_set_termios()
885 parity = RFCOMM_RPN_PARITY_EVEN; in rfcomm_tty_set_termios()
888 BT_DBG("Parity is OFF"); in rfcomm_tty_set_termios()
889 parity = RFCOMM_RPN_PARITY_NONE; in rfcomm_tty_set_termios()
893 if (old->c_cc[VSTOP] != new->c_cc[VSTOP]) { in rfcomm_tty_set_termios()
895 x_on = new->c_cc[VSTOP]; in rfcomm_tty_set_termios()
902 if (old->c_cc[VSTART] != new->c_cc[VSTART]) { in rfcomm_tty_set_termios()
904 x_off = new->c_cc[VSTART]; in rfcomm_tty_set_termios()
912 if ((old->c_cflag & CSTOPB) != (new->c_cflag & CSTOPB)) in rfcomm_tty_set_termios()
918 if (new->c_cflag & CSTOPB) in rfcomm_tty_set_termios()
923 /* Handle number of data bits [5-8] */ in rfcomm_tty_set_termios()
924 if ((old->c_cflag & CSIZE) != (new->c_cflag & CSIZE)) in rfcomm_tty_set_termios()
927 switch (new->c_cflag & CSIZE) { in rfcomm_tty_set_termios()
985 rfcomm_send_rpn(dev->dlc->session, 1, dev->dlc->dlci, baud, in rfcomm_tty_set_termios()
986 data_bits, stop_bits, parity, in rfcomm_tty_set_termios()
992 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_throttle()
996 rfcomm_dlc_throttle(dev->dlc); in rfcomm_tty_throttle()
1001 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_unthrottle()
1005 rfcomm_dlc_unthrottle(dev->dlc); in rfcomm_tty_unthrottle()
1010 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_chars_in_buffer()
1014 if (!dev || !dev->dlc) in rfcomm_tty_chars_in_buffer()
1017 if (!skb_queue_empty(&dev->dlc->tx_queue)) in rfcomm_tty_chars_in_buffer()
1018 return dev->dlc->mtu; in rfcomm_tty_chars_in_buffer()
1025 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_flush_buffer()
1029 if (!dev || !dev->dlc) in rfcomm_tty_flush_buffer()
1032 skb_queue_purge(&dev->dlc->tx_queue); in rfcomm_tty_flush_buffer()
1048 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_hangup()
1052 tty_port_hangup(&dev->port); in rfcomm_tty_hangup()
1057 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_tiocmget()
1058 struct rfcomm_dlc *dlc = dev->dlc; in rfcomm_tty_tiocmget()
1065 return (v24_sig & (TIOCM_DTR | TIOCM_RTS)) | dev->modem_status; in rfcomm_tty_tiocmget()
1070 struct rfcomm_dev *dev = tty->driver_data; in rfcomm_tty_tiocmset()
1071 struct rfcomm_dlc *dlc = dev->dlc; in rfcomm_tty_tiocmset()
1093 /* ---- TTY structure ---- */
1124 rfcomm_tty_driver->driver_name = "rfcomm"; in rfcomm_init_ttys()
1125 rfcomm_tty_driver->name = "rfcomm"; in rfcomm_init_ttys()
1126 rfcomm_tty_driver->major = RFCOMM_TTY_MAJOR; in rfcomm_init_ttys()
1127 rfcomm_tty_driver->minor_start = RFCOMM_TTY_MINOR; in rfcomm_init_ttys()
1128 rfcomm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; in rfcomm_init_ttys()
1129 rfcomm_tty_driver->subtype = SERIAL_TYPE_NORMAL; in rfcomm_init_ttys()
1130 rfcomm_tty_driver->init_termios = tty_std_termios; in rfcomm_init_ttys()
1131 rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL; in rfcomm_init_ttys()
1132 rfcomm_tty_driver->init_termios.c_lflag &= ~ICANON; in rfcomm_init_ttys()