Lines Matching refs:sk
49 struct sock *sk;
59 static void sco_sock_close(struct sock *sk);
60 static void sco_sock_kill(struct sock *sk);
63 #define sco_pi(sk) ((struct sco_pinfo *) sk)
83 struct sock *sk;
86 sk = conn->sk;
87 if (sk)
88 sock_hold(sk);
91 if (!sk)
94 BT_DBG("sock %p state %d", sk, sk->sk_state);
96 lock_sock(sk);
97 sk->sk_err = ETIMEDOUT;
98 sk->sk_state_change(sk);
99 release_sock(sk);
100 sock_put(sk);
103 static void sco_sock_set_timer(struct sock *sk, long timeout)
105 if (!sco_pi(sk)->conn)
108 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
109 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
110 schedule_delayed_work(&sco_pi(sk)->conn->timeout_work, timeout);
113 static void sco_sock_clear_timer(struct sock *sk)
115 if (!sco_pi(sk)->conn)
118 BT_DBG("sock %p state %d", sk, sk->sk_state);
119 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
156 static void sco_chan_del(struct sock *sk, int err)
160 conn = sco_pi(sk)->conn;
162 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
166 conn->sk = NULL;
167 sco_pi(sk)->conn = NULL;
174 sk->sk_state = BT_CLOSED;
175 sk->sk_err = err;
176 sk->sk_state_change(sk);
178 sock_set_flag(sk, SOCK_ZAPPED);
184 struct sock *sk;
193 sk = conn->sk;
194 if (sk)
195 sock_hold(sk);
198 if (sk) {
199 lock_sock(sk);
200 sco_sock_clear_timer(sk);
201 sco_chan_del(sk, err);
202 release_sock(sk);
203 sock_put(sk);
213 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
218 sco_pi(sk)->conn = conn;
219 conn->sk = sk;
222 bt_accept_enqueue(parent, sk, true);
225 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
231 if (conn->sk)
234 __sco_chan_add(conn, sk, parent);
240 static int sco_connect(struct sock *sk)
247 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
249 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
260 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
266 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
267 sco_pi(sk)->setting, &sco_pi(sk)->codec);
280 lock_sock(sk);
282 err = sco_chan_add(conn, sk, NULL);
284 release_sock(sk);
289 bacpy(&sco_pi(sk)->src, &hcon->src);
292 sco_sock_clear_timer(sk);
293 sk->sk_state = BT_CONNECTED;
295 sk->sk_state = BT_CONNECT;
296 sco_sock_set_timer(sk, sk->sk_sndtimeo);
299 release_sock(sk);
307 static int sco_send_frame(struct sock *sk, struct sk_buff *skb)
309 struct sco_conn *conn = sco_pi(sk)->conn;
316 BT_DBG("sk %p len %d", sk, len);
325 struct sock *sk;
328 sk = conn->sk;
331 if (!sk)
334 BT_DBG("sk %p len %u", sk, skb->len);
336 if (sk->sk_state != BT_CONNECTED)
339 if (!sock_queue_rcv_skb(sk, skb))
349 struct sock *sk;
351 sk_for_each(sk, &sco_sk_list.head) {
352 if (sk->sk_state != BT_LISTEN)
355 if (!bacmp(&sco_pi(sk)->src, ba))
356 return sk;
367 struct sock *sk = NULL, *sk1 = NULL;
371 sk_for_each(sk, &sco_sk_list.head) {
372 if (sk->sk_state != BT_LISTEN)
376 if (!bacmp(&sco_pi(sk)->src, src))
380 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
381 sk1 = sk;
386 return sk ? sk : sk1;
389 static void sco_sock_destruct(struct sock *sk)
391 BT_DBG("sk %p", sk);
393 skb_queue_purge(&sk->sk_receive_queue);
394 skb_queue_purge(&sk->sk_write_queue);
399 struct sock *sk;
404 while ((sk = bt_accept_dequeue(parent, NULL))) {
405 sco_sock_close(sk);
406 sco_sock_kill(sk);
416 static void sco_sock_kill(struct sock *sk)
418 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
421 BT_DBG("sk %p state %d", sk, sk->sk_state);
424 bt_sock_unlink(&sco_sk_list, sk);
425 sock_set_flag(sk, SOCK_DEAD);
426 sock_put(sk);
429 static void __sco_sock_close(struct sock *sk)
431 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
433 switch (sk->sk_state) {
435 sco_sock_cleanup_listen(sk);
440 if (sco_pi(sk)->conn->hcon) {
441 sk->sk_state = BT_DISCONN;
442 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
443 sco_conn_lock(sco_pi(sk)->conn);
444 hci_conn_drop(sco_pi(sk)->conn->hcon);
445 sco_pi(sk)->conn->hcon = NULL;
446 sco_conn_unlock(sco_pi(sk)->conn);
448 sco_chan_del(sk, ECONNRESET);
454 sco_chan_del(sk, ECONNRESET);
458 sock_set_flag(sk, SOCK_ZAPPED);
465 static void sco_sock_close(struct sock *sk)
467 lock_sock(sk);
468 sco_sock_clear_timer(sk);
469 __sco_sock_close(sk);
470 release_sock(sk);
473 static void sco_sock_init(struct sock *sk, struct sock *parent)
475 BT_DBG("sk %p", sk);
478 sk->sk_type = parent->sk_type;
479 bt_sk(sk)->flags = bt_sk(parent)->flags;
480 security_sk_clone(parent, sk);
493 struct sock *sk;
495 sk = bt_sock_alloc(net, sock, &sco_proto, proto, prio, kern);
496 if (!sk)
499 sk->sk_destruct = sco_sock_destruct;
500 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
502 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
503 sco_pi(sk)->codec.id = BT_CODEC_CVSD;
504 sco_pi(sk)->codec.cid = 0xffff;
505 sco_pi(sk)->codec.vid = 0xffff;
506 sco_pi(sk)->codec.data_path = 0x00;
508 bt_sock_link(&sco_sk_list, sk);
509 return sk;
515 struct sock *sk;
526 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
527 if (!sk)
530 sco_sock_init(sk, NULL);
538 struct sock *sk = sock->sk;
545 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
547 lock_sock(sk);
549 if (sk->sk_state != BT_OPEN) {
554 if (sk->sk_type != SOCK_SEQPACKET) {
559 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
561 sk->sk_state = BT_BOUND;
564 release_sock(sk);
571 struct sock *sk = sock->sk;
574 BT_DBG("sk %p", sk);
580 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
583 if (sk->sk_type != SOCK_SEQPACKET)
586 lock_sock(sk);
588 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
589 release_sock(sk);
591 err = sco_connect(sk);
595 lock_sock(sk);
597 err = bt_sock_wait_state(sk, BT_CONNECTED,
598 sock_sndtimeo(sk, flags & O_NONBLOCK));
600 release_sock(sk);
606 struct sock *sk = sock->sk;
607 bdaddr_t *src = &sco_pi(sk)->src;
610 BT_DBG("sk %p backlog %d", sk, backlog);
612 lock_sock(sk);
614 if (sk->sk_state != BT_BOUND) {
619 if (sk->sk_type != SOCK_SEQPACKET) {
631 sk->sk_max_ack_backlog = backlog;
632 sk->sk_ack_backlog = 0;
634 sk->sk_state = BT_LISTEN;
640 release_sock(sk);
648 struct sock *sk = sock->sk, *ch;
652 lock_sock(sk);
654 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
656 BT_DBG("sk %p timeo %ld", sk, timeo);
659 add_wait_queue_exclusive(sk_sleep(sk), &wait);
661 if (sk->sk_state != BT_LISTEN) {
666 ch = bt_accept_dequeue(sk, newsock);
680 release_sock(sk);
683 lock_sock(sk);
685 remove_wait_queue(sk_sleep(sk), &wait);
695 release_sock(sk);
703 struct sock *sk = sock->sk;
705 BT_DBG("sock %p, sk %p", sock, sk);
710 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
712 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
720 struct sock *sk = sock->sk;
724 BT_DBG("sock %p, sk %p", sock, sk);
726 err = sock_error(sk);
733 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
737 lock_sock(sk);
739 if (sk->sk_state == BT_CONNECTED)
740 err = sco_send_frame(sk, skb);
744 release_sock(sk);
803 struct sock *sk = sock->sk;
804 struct sco_pinfo *pi = sco_pi(sk);
806 lock_sock(sk);
808 if (sk->sk_state == BT_CONNECT2 &&
809 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
811 sk->sk_state = BT_CONFIG;
813 release_sock(sk);
817 release_sock(sk);
825 struct sock *sk = sock->sk;
833 BT_DBG("sk %p", sk);
835 lock_sock(sk);
840 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
851 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
853 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
857 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
858 sk->sk_state != BT_CONNECT2) {
863 voice.setting = sco_pi(sk)->setting;
878 sco_pi(sk)->setting = voice.setting;
879 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
887 sco_pi(sk)->codec.id = BT_CODEC_TRANSPARENT;
898 set_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
900 clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
904 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
905 sk->sk_state != BT_CONNECT2) {
910 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
950 sco_pi(sk)->codec = codecs->codecs[0];
959 release_sock(sk);
966 struct sock *sk = sock->sk;
971 BT_DBG("sk %p", sk);
976 lock_sock(sk);
980 if (sk->sk_state != BT_CONNECTED &&
981 !(sk->sk_state == BT_CONNECT2 &&
982 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
987 opts.mtu = sco_pi(sk)->conn->mtu;
998 if (sk->sk_state != BT_CONNECTED &&
999 !(sk->sk_state == BT_CONNECT2 &&
1000 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
1006 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
1007 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
1020 release_sock(sk);
1027 struct sock *sk = sock->sk;
1038 BT_DBG("sk %p", sk);
1046 lock_sock(sk);
1051 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
1056 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
1063 voice.setting = sco_pi(sk)->setting;
1072 if (sk->sk_state != BT_CONNECTED) {
1077 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1084 if (put_user(test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags),
1091 if (sk->sk_state != BT_CONNECTED) {
1096 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1104 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR);
1122 release_sock(sk);
1190 lock_sock(sk);
1202 release_sock(sk);
1208 struct sock *sk = sock->sk;
1211 BT_DBG("sock %p, sk %p", sock, sk);
1213 if (!sk)
1216 sock_hold(sk);
1217 lock_sock(sk);
1219 if (!sk->sk_shutdown) {
1220 sk->sk_shutdown = SHUTDOWN_MASK;
1221 sco_sock_clear_timer(sk);
1222 __sco_sock_close(sk);
1224 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1226 err = bt_sock_wait_state(sk, BT_CLOSED,
1227 sk->sk_lingertime);
1230 release_sock(sk);
1231 sock_put(sk);
1238 struct sock *sk = sock->sk;
1241 BT_DBG("sock %p, sk %p", sock, sk);
1243 if (!sk)
1246 sco_sock_close(sk);
1248 if (sock_flag(sk, SOCK_LINGER) && READ_ONCE(sk->sk_lingertime) &&
1250 lock_sock(sk);
1251 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1252 release_sock(sk);
1255 sock_orphan(sk);
1256 sco_sock_kill(sk);
1263 struct sock *sk = conn->sk;
1267 if (sk) {
1268 lock_sock(sk);
1269 sco_sock_clear_timer(sk);
1270 sk->sk_state = BT_CONNECTED;
1271 sk->sk_state_change(sk);
1272 release_sock(sk);
1289 sk = sco_sock_alloc(sock_net(parent), NULL,
1291 if (!sk) {
1297 sco_sock_init(sk, parent);
1299 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1300 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1303 __sco_chan_add(conn, sk, parent);
1306 sk->sk_state = BT_CONNECT2;
1308 sk->sk_state = BT_CONNECTED;
1322 struct sock *sk;
1329 sk_for_each(sk, &sco_sk_list.head) {
1330 if (sk->sk_state != BT_LISTEN)
1333 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1334 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1337 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1400 struct sock *sk;
1404 sk_for_each(sk, &sco_sk_list.head) {
1405 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1406 &sco_pi(sk)->dst, sk->sk_state);