Lines Matching +full:bt +full:- +full:sco
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
25 /* Bluetooth SCO sockets. */
34 #include <net/bluetooth/sco.h>
44 /* ---- SCO connections ---- */
57 #define sco_conn_lock(c) spin_lock(&c->lock)
58 #define sco_conn_unlock(c) spin_unlock(&c->lock)
63 /* ----- SCO socket info ----- */
67 struct bt_sock bt;
76 /* ---- SCO timers ---- */
86 if (conn->sk)
87 sco_pi(conn->sk)->conn = NULL;
89 if (conn->hcon) {
90 conn->hcon->sco_data = NULL;
91 hci_conn_drop(conn->hcon);
95 disable_delayed_work_sync(&conn->timeout_work);
105 BT_DBG("conn %p refcnt %d", conn, kref_read(&conn->ref));
107 kref_put(&conn->ref, sco_conn_free);
112 BT_DBG("conn %p refcnt %u", conn, kref_read(&conn->ref));
114 kref_get(&conn->ref);
123 BT_DBG("conn %p refcnt %u", conn, kref_read(&conn->ref));
125 if (!kref_get_unless_zero(&conn->ref))
133 if (!conn || !bt_sock_linked(&sco_sk_list, conn->sk))
136 sock_hold(conn->sk);
138 return conn->sk;
152 if (!conn->hcon) {
164 BT_DBG("sock %p state %d", sk, sk->sk_state);
167 sk->sk_err = ETIMEDOUT;
168 sk->sk_state_change(sk);
175 if (!sco_pi(sk)->conn)
178 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
179 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
180 schedule_delayed_work(&sco_pi(sk)->conn->timeout_work, timeout);
185 if (!sco_pi(sk)->conn)
188 BT_DBG("sock %p state %d", sk, sk->sk_state);
189 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
192 /* ---- SCO connections ---- */
195 struct sco_conn *conn = hcon->sco_data;
199 if (!conn->hcon) {
201 conn->hcon = hcon;
211 kref_init(&conn->ref);
212 spin_lock_init(&conn->lock);
213 INIT_DELAYED_WORK(&conn->timeout_work, sco_sock_timeout);
215 hcon->sco_data = conn;
216 conn->hcon = hcon;
217 conn->mtu = hcon->mtu;
219 if (hcon->mtu > 0)
220 conn->mtu = hcon->mtu;
222 conn->mtu = 60;
235 conn = sco_pi(sk)->conn;
236 sco_pi(sk)->conn = NULL;
242 conn->sk = NULL;
247 sk->sk_state = BT_CLOSED;
248 sk->sk_err = err;
249 sk->sk_state_change(sk);
256 struct sco_conn *conn = hcon->sco_data;
288 sco_pi(sk)->conn = conn;
289 conn->sk = sk;
301 if (conn->sk)
302 err = -EBUSY;
317 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
319 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
321 return -EHOSTUNREACH;
330 switch (sco_pi(sk)->setting & SCO_AIRMODE_MASK) {
333 err = -EOPNOTSUPP;
339 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
340 sco_pi(sk)->setting, &sco_pi(sk)->codec,
341 READ_ONCE(sk->sk_sndtimeo));
350 err = -ENOMEM;
363 bacpy(&sco_pi(sk)->src, &hcon->src);
365 if (hcon->state == BT_CONNECTED) {
367 sk->sk_state = BT_CONNECTED;
369 sk->sk_state = BT_CONNECT;
370 sco_sock_set_timer(sk, READ_ONCE(sk->sk_sndtimeo));
384 struct sco_conn *conn = sco_pi(sk)->conn;
385 int len = skb->len;
388 if (len > conn->mtu)
389 return -EINVAL;
394 hci_send_sco(conn->hcon, skb);
404 sk = conn->sk;
410 BT_DBG("sk %p len %u", sk, skb->len);
412 if (sk->sk_state != BT_CONNECTED)
422 /* -------- Socket interface ---------- */
428 if (sk->sk_state != BT_LISTEN)
431 if (!bacmp(&sco_pi(sk)->src, ba))
448 if (sk->sk_state != BT_LISTEN)
452 if (!bacmp(&sco_pi(sk)->src, src))
456 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
469 sco_conn_put(sco_pi(sk)->conn);
471 skb_queue_purge(&sk->sk_receive_queue);
472 skb_queue_purge(&sk->sk_write_queue);
487 parent->sk_state = BT_CLOSED;
496 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
499 BT_DBG("sk %p state %d", sk, sk->sk_state);
501 /* Sock is dead, so set conn->sk to NULL to avoid possible UAF */
502 if (sco_pi(sk)->conn) {
503 sco_conn_lock(sco_pi(sk)->conn);
504 sco_pi(sk)->conn->sk = NULL;
505 sco_conn_unlock(sco_pi(sk)->conn);
516 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
518 switch (sk->sk_state) {
552 sk->sk_type = parent->sk_type;
553 bt_sk(sk)->flags = bt_sk(parent)->flags;
559 .name = "SCO",
573 sk->sk_destruct = sco_sock_destruct;
574 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
576 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
577 sco_pi(sk)->codec.id = BT_CODEC_CVSD;
578 sco_pi(sk)->codec.cid = 0xffff;
579 sco_pi(sk)->codec.vid = 0xffff;
580 sco_pi(sk)->codec.data_path = 0x00;
593 sock->state = SS_UNCONNECTED;
595 if (sock->type != SOCK_SEQPACKET)
596 return -ESOCKTNOSUPPORT;
598 sock->ops = &sco_sock_ops;
602 return -ENOMEM;
612 struct sock *sk = sock->sk;
616 addr->sa_family != AF_BLUETOOTH)
617 return -EINVAL;
619 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
623 if (sk->sk_state != BT_OPEN) {
624 err = -EBADFD;
628 if (sk->sk_type != SOCK_SEQPACKET) {
629 err = -EINVAL;
633 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
635 sk->sk_state = BT_BOUND;
645 struct sock *sk = sock->sk;
651 addr->sa_family != AF_BLUETOOTH)
652 return -EINVAL;
654 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
655 return -EBADFD;
657 if (sk->sk_type != SOCK_SEQPACKET)
658 err = -EINVAL;
662 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
680 struct sock *sk = sock->sk;
681 bdaddr_t *src = &sco_pi(sk)->src;
688 if (sk->sk_state != BT_BOUND) {
689 err = -EBADFD;
693 if (sk->sk_type != SOCK_SEQPACKET) {
694 err = -EINVAL;
701 err = -EADDRINUSE;
705 sk->sk_max_ack_backlog = backlog;
706 sk->sk_ack_backlog = 0;
708 sk->sk_state = BT_LISTEN;
722 struct sock *sk = sock->sk, *ch;
728 timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK);
732 /* Wait for an incoming connection. (wake-one). */
735 if (sk->sk_state != BT_LISTEN) {
736 err = -EBADFD;
745 err = -EAGAIN;
764 newsock->state = SS_CONNECTED;
777 struct sock *sk = sock->sk;
781 addr->sa_family = AF_BLUETOOTH;
784 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
786 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
794 struct sock *sk = sock->sk;
805 if (msg->msg_flags & MSG_OOB)
806 return -EOPNOTSUPP;
810 if (msg->msg_controllen) {
822 if (sk->sk_state == BT_CONNECTED)
825 err = -ENOTCONN;
836 struct hci_dev *hdev = conn->hdev;
840 conn->state = BT_CONFIG;
845 bacpy(&cp.bdaddr, &conn->dst);
852 bacpy(&cp.bdaddr, &conn->dst);
853 cp.pkt_type = cpu_to_le16(conn->pkt_type);
861 if (conn->pkt_type & ESCO_2EV3)
886 struct sock *sk = sock->sk;
895 if (sk->sk_state == BT_CONNECT2 &&
896 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
897 sco_conn_defer_accept(pi->conn->hcon, pi->setting);
898 sk->sk_state = BT_CONFIG;
912 struct sock *sk = sock->sk;
927 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
928 err = -EINVAL;
937 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
939 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
943 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
944 sk->sk_state != BT_CONNECT2) {
945 err = -EINVAL;
949 voice.setting = sco_pi(sk)->setting;
956 sco_pi(sk)->setting = voice.setting;
957 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
960 err = -EBADFD;
964 switch (sco_pi(sk)->setting & SCO_AIRMODE_MASK) {
967 sco_pi(sk)->codec.id = BT_CODEC_TRANSPARENT;
980 set_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
982 clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
986 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
987 sk->sk_state != BT_CONNECT2) {
988 err = -EINVAL;
992 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
995 err = -EBADFD;
1001 err = -EOPNOTSUPP;
1005 if (!hdev->get_data_path_id) {
1007 err = -EOPNOTSUPP;
1014 err = -EINVAL;
1027 if (codecs->num_codecs > 1) {
1029 err = -EINVAL;
1033 sco_pi(sk)->codec = codecs->codecs[0];
1038 err = -ENOPROTOOPT;
1049 struct sock *sk = sock->sk;
1058 return -EFAULT;
1064 if (sk->sk_state != BT_CONNECTED &&
1065 !(sk->sk_state == BT_CONNECT2 &&
1066 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1067 err = -ENOTCONN;
1071 opts.mtu = sco_pi(sk)->conn->mtu;
1077 err = -EFAULT;
1082 if (sk->sk_state != BT_CONNECTED &&
1083 !(sk->sk_state == BT_CONNECT2 &&
1084 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1085 err = -ENOTCONN;
1090 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
1091 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
1095 err = -EFAULT;
1100 err = -ENOPROTOOPT;
1111 struct sock *sk = sock->sk;
1128 return -EFAULT;
1135 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1136 err = -EINVAL;
1140 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
1142 err = -EFAULT;
1147 voice.setting = sco_pi(sk)->setting;
1151 err = -EFAULT;
1156 if (sk->sk_state != BT_CONNECTED) {
1157 err = -ENOTCONN;
1161 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1164 err = -EFAULT;
1168 if (put_user(test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags),
1170 err = -EFAULT;
1175 if (sk->sk_state != BT_CONNECTED) {
1176 err = -ENOTCONN;
1180 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1181 err = -EFAULT;
1188 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
1190 err = -EBADFD;
1196 err = -EOPNOTSUPP;
1200 if (!hdev->get_data_path_id) {
1202 err = -EOPNOTSUPP;
1210 list_for_each_entry(c, &hdev->local_codecs, list) {
1211 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1214 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1215 buf_len += 1 + caps->len;
1216 caps = (void *)&caps->data[caps->len];
1225 return -ENOBUFS;
1231 return -EFAULT;
1235 /* Iterate all the codecs supported over SCO and populate
1239 list_for_each_entry(c, &hdev->local_codecs, list) {
1240 if (c->transport != HCI_TRANSPORT_SCO_ESCO)
1243 codec.id = c->id;
1244 codec.cid = c->cid;
1245 codec.vid = c->vid;
1246 err = hdev->get_data_path_id(hdev, &codec.data_path);
1249 codec.num_caps = c->num_caps;
1251 err = -EFAULT;
1258 for (i = 0, caps = c->caps; i < c->num_caps; i++) {
1259 len += 1 + caps->len;
1260 caps = (void *)&caps->data[caps->len];
1264 if (len && copy_to_user(ptr, c->caps, len)) {
1265 err = -EFAULT;
1277 err = -EFAULT;
1282 err = -ENOPROTOOPT;
1292 struct sock *sk = sock->sk;
1303 if (!sk->sk_shutdown) {
1304 sk->sk_shutdown = SHUTDOWN_MASK;
1308 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1309 !(current->flags & PF_EXITING))
1311 sk->sk_lingertime);
1322 struct sock *sk = sock->sk;
1332 if (sock_flag(sk, SOCK_LINGER) && READ_ONCE(sk->sk_lingertime) &&
1333 !(current->flags & PF_EXITING)) {
1335 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1347 struct sock *sk = conn->sk;
1354 sk->sk_state = BT_CONNECTED;
1355 sk->sk_state_change(sk);
1360 if (!conn->hcon) {
1365 parent = sco_get_sock_listen(&conn->hcon->src);
1383 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1384 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1387 hci_conn_hold(conn->hcon);
1390 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
1391 sk->sk_state = BT_CONNECT2;
1393 sk->sk_state = BT_CONNECTED;
1396 parent->sk_data_ready(parent);
1404 /* ----- SCO interface with lower layer (HCI) ----- */
1410 BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
1415 if (sk->sk_state != BT_LISTEN)
1418 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1419 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1422 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1434 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1437 BT_DBG("hcon %p bdaddr %pMR status %u", hcon, &hcon->dst, status);
1453 if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
1463 struct sco_conn *conn = hcon->sco_data;
1468 BT_DBG("conn %p len %u", conn, skb->len);
1470 if (skb->len) {
1480 .name = "SCO",
1492 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1493 &sco_pi(sk)->dst, sk->sk_state);
1544 BT_ERR("SCO socket registration failed");
1548 err = bt_procfs_init(&init_net, "sco", &sco_sk_list, NULL);
1550 BT_ERR("Failed to create SCO proc file");
1555 BT_INFO("SCO socket layer initialized");
1562 sco_debugfs = debugfs_create_file("sco", 0444, bt_debugfs,
1574 bt_procfs_cleanup(&init_net, "sco");