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;
90 sk = conn->sk;
91 if (sk)
92 sock_hold(sk);
95 if (!sk)
98 BT_DBG("sock %p state %d", sk, sk->sk_state);
100 lock_sock(sk);
101 sk->sk_err = ETIMEDOUT;
102 sk->sk_state_change(sk);
103 release_sock(sk);
105 sock_put(sk);
108 static void sco_sock_set_timer(struct sock *sk, long timeout)
110 if (!sco_pi(sk)->conn)
113 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
114 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
115 schedule_delayed_work(&sco_pi(sk)->conn->timeout_work, timeout);
118 static void sco_sock_clear_timer(struct sock *sk)
120 if (!sco_pi(sk)->conn)
123 BT_DBG("sock %p state %d", sk, sk->sk_state);
124 cancel_delayed_work(&sco_pi(sk)->conn->timeout_work);
158 static void sco_chan_del(struct sock *sk, int err)
162 conn = sco_pi(sk)->conn;
164 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
168 conn->sk = NULL;
169 sco_pi(sk)->conn = NULL;
176 sk->sk_state = BT_CLOSED;
177 sk->sk_err = err;
178 sk->sk_state_change(sk);
180 sock_set_flag(sk, SOCK_ZAPPED);
186 struct sock *sk;
195 sk = conn->sk;
198 if (sk) {
199 sock_hold(sk);
200 lock_sock(sk);
201 sco_sock_clear_timer(sk);
202 sco_chan_del(sk, err);
203 release_sock(sk);
204 sock_put(sk);
214 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk,
219 sco_pi(sk)->conn = conn;
220 conn->sk = sk;
223 bt_accept_enqueue(parent, sk, true);
226 static int sco_chan_add(struct sco_conn *conn, struct sock *sk,
232 if (conn->sk)
235 __sco_chan_add(conn, sk, parent);
241 static int sco_connect(struct hci_dev *hdev, struct sock *sk)
247 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst);
254 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT &&
258 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
259 sco_pi(sk)->setting);
270 bacpy(&sco_pi(sk)->src, &hcon->src);
272 err = sco_chan_add(conn, sk, NULL);
277 sco_sock_clear_timer(sk);
278 sk->sk_state = BT_CONNECTED;
280 sk->sk_state = BT_CONNECT;
281 sco_sock_set_timer(sk, sk->sk_sndtimeo);
287 static int sco_send_frame(struct sock *sk, struct sk_buff *skb)
289 struct sco_conn *conn = sco_pi(sk)->conn;
296 BT_DBG("sk %p len %d", sk, len);
305 struct sock *sk;
308 sk = conn->sk;
311 if (!sk)
314 BT_DBG("sk %p len %d", sk, skb->len);
316 if (sk->sk_state != BT_CONNECTED)
319 if (!sock_queue_rcv_skb(sk, skb))
329 struct sock *sk;
331 sk_for_each(sk, &sco_sk_list.head) {
332 if (sk->sk_state != BT_LISTEN)
335 if (!bacmp(&sco_pi(sk)->src, ba))
336 return sk;
347 struct sock *sk = NULL, *sk1 = NULL;
351 sk_for_each(sk, &sco_sk_list.head) {
352 if (sk->sk_state != BT_LISTEN)
356 if (!bacmp(&sco_pi(sk)->src, src))
360 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY))
361 sk1 = sk;
366 return sk ? sk : sk1;
369 static void sco_sock_destruct(struct sock *sk)
371 BT_DBG("sk %p", sk);
373 skb_queue_purge(&sk->sk_receive_queue);
374 skb_queue_purge(&sk->sk_write_queue);
379 struct sock *sk;
384 while ((sk = bt_accept_dequeue(parent, NULL))) {
385 sco_sock_close(sk);
386 sco_sock_kill(sk);
396 static void sco_sock_kill(struct sock *sk)
398 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
401 BT_DBG("sk %p state %d", sk, sk->sk_state);
404 bt_sock_unlink(&sco_sk_list, sk);
405 sock_set_flag(sk, SOCK_DEAD);
406 sock_put(sk);
409 static void __sco_sock_close(struct sock *sk)
411 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
413 switch (sk->sk_state) {
415 sco_sock_cleanup_listen(sk);
420 if (sco_pi(sk)->conn->hcon) {
421 sk->sk_state = BT_DISCONN;
422 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
423 sco_conn_lock(sco_pi(sk)->conn);
424 hci_conn_drop(sco_pi(sk)->conn->hcon);
425 sco_pi(sk)->conn->hcon = NULL;
426 sco_conn_unlock(sco_pi(sk)->conn);
428 sco_chan_del(sk, ECONNRESET);
434 sco_chan_del(sk, ECONNRESET);
438 sock_set_flag(sk, SOCK_ZAPPED);
444 static void sco_sock_close(struct sock *sk)
446 sco_sock_clear_timer(sk);
447 lock_sock(sk);
448 __sco_sock_close(sk);
449 release_sock(sk);
453 struct sock *sk)
455 if (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS)
461 static void sco_sock_init(struct sock *sk, struct sock *parent)
463 BT_DBG("sk %p", sk);
466 sk->sk_type = parent->sk_type;
467 bt_sk(sk)->flags = bt_sk(parent)->flags;
468 security_sk_clone(parent, sk);
470 bt_sk(sk)->skb_put_cmsg = sco_skb_put_cmsg;
483 struct sock *sk;
485 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern);
486 if (!sk)
489 sock_init_data(sock, sk);
490 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
492 sk->sk_destruct = sco_sock_destruct;
493 sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
495 sock_reset_flag(sk, SOCK_ZAPPED);
497 sk->sk_protocol = proto;
498 sk->sk_state = BT_OPEN;
500 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT;
502 bt_sock_link(&sco_sk_list, sk);
503 return sk;
509 struct sock *sk;
520 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern);
521 if (!sk)
524 sco_sock_init(sk, NULL);
532 struct sock *sk = sock->sk;
539 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr);
541 lock_sock(sk);
543 if (sk->sk_state != BT_OPEN) {
548 if (sk->sk_type != SOCK_SEQPACKET) {
553 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr);
555 sk->sk_state = BT_BOUND;
558 release_sock(sk);
565 struct sock *sk = sock->sk;
569 BT_DBG("sk %p", sk);
575 lock_sock(sk);
576 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) {
581 if (sk->sk_type != SOCK_SEQPACKET) {
586 hdev = hci_get_route(&sa->sco_bdaddr, &sco_pi(sk)->src, BDADDR_BREDR);
594 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr);
596 err = sco_connect(hdev, sk);
602 err = bt_sock_wait_state(sk, BT_CONNECTED,
603 sock_sndtimeo(sk, flags & O_NONBLOCK));
606 release_sock(sk);
612 struct sock *sk = sock->sk;
613 bdaddr_t *src = &sco_pi(sk)->src;
616 BT_DBG("sk %p backlog %d", sk, backlog);
618 lock_sock(sk);
620 if (sk->sk_state != BT_BOUND) {
625 if (sk->sk_type != SOCK_SEQPACKET) {
637 sk->sk_max_ack_backlog = backlog;
638 sk->sk_ack_backlog = 0;
640 sk->sk_state = BT_LISTEN;
646 release_sock(sk);
654 struct sock *sk = sock->sk, *ch;
658 lock_sock(sk);
660 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
662 BT_DBG("sk %p timeo %ld", sk, timeo);
665 add_wait_queue_exclusive(sk_sleep(sk), &wait);
667 if (sk->sk_state != BT_LISTEN) {
672 ch = bt_accept_dequeue(sk, newsock);
686 release_sock(sk);
689 lock_sock(sk);
691 remove_wait_queue(sk_sleep(sk), &wait);
701 release_sock(sk);
709 struct sock *sk = sock->sk;
711 BT_DBG("sock %p, sk %p", sock, sk);
716 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst);
718 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src);
726 struct sock *sk = sock->sk;
730 BT_DBG("sock %p, sk %p", sock, sk);
732 err = sock_error(sk);
739 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
743 lock_sock(sk);
745 if (sk->sk_state == BT_CONNECTED)
746 err = sco_send_frame(sk, skb);
750 release_sock(sk);
809 struct sock *sk = sock->sk;
810 struct sco_pinfo *pi = sco_pi(sk);
812 lock_sock(sk);
814 if (sk->sk_state == BT_CONNECT2 &&
815 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
817 sk->sk_state = BT_CONFIG;
819 release_sock(sk);
823 release_sock(sk);
831 struct sock *sk = sock->sk;
836 BT_DBG("sk %p", sk);
838 lock_sock(sk);
843 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
853 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
855 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
859 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
860 sk->sk_state != BT_CONNECT2) {
865 voice.setting = sco_pi(sk)->setting;
879 sco_pi(sk)->setting = voice.setting;
888 sco_pi(sk)->cmsg_mask |= SCO_CMSG_PKT_STATUS;
890 sco_pi(sk)->cmsg_mask &= SCO_CMSG_PKT_STATUS;
898 release_sock(sk);
905 struct sock *sk = sock->sk;
910 BT_DBG("sk %p", sk);
915 lock_sock(sk);
919 if (sk->sk_state != BT_CONNECTED &&
920 !(sk->sk_state == BT_CONNECT2 &&
921 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
926 opts.mtu = sco_pi(sk)->conn->mtu;
937 if (sk->sk_state != BT_CONNECTED &&
938 !(sk->sk_state == BT_CONNECT2 &&
939 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
945 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
946 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
959 release_sock(sk);
966 struct sock *sk = sock->sk;
972 BT_DBG("sk %p", sk);
980 lock_sock(sk);
985 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
990 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
997 voice.setting = sco_pi(sk)->setting;
1006 if (sk->sk_state != BT_CONNECTED) {
1011 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon);
1018 pkt_status = (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS);
1026 if (sk->sk_state != BT_CONNECTED) {
1031 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
1040 release_sock(sk);
1046 struct sock *sk = sock->sk;
1049 BT_DBG("sock %p, sk %p", sock, sk);
1051 if (!sk)
1054 sock_hold(sk);
1055 lock_sock(sk);
1057 if (!sk->sk_shutdown) {
1058 sk->sk_shutdown = SHUTDOWN_MASK;
1059 sco_sock_clear_timer(sk);
1060 __sco_sock_close(sk);
1062 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1064 err = bt_sock_wait_state(sk, BT_CLOSED,
1065 sk->sk_lingertime);
1068 release_sock(sk);
1069 sock_put(sk);
1076 struct sock *sk = sock->sk;
1079 BT_DBG("sock %p, sk %p", sock, sk);
1081 if (!sk)
1084 sco_sock_close(sk);
1086 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime &&
1088 lock_sock(sk);
1089 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
1090 release_sock(sk);
1093 sock_orphan(sk);
1094 sco_sock_kill(sk);
1101 struct sock *sk = conn->sk;
1105 if (sk) {
1106 sco_sock_clear_timer(sk);
1107 lock_sock(sk);
1108 sk->sk_state = BT_CONNECTED;
1109 sk->sk_state_change(sk);
1110 release_sock(sk);
1127 sk = sco_sock_alloc(sock_net(parent), NULL,
1129 if (!sk) {
1135 sco_sock_init(sk, parent);
1137 bacpy(&sco_pi(sk)->src, &conn->hcon->src);
1138 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst);
1141 __sco_chan_add(conn, sk, parent);
1144 sk->sk_state = BT_CONNECT2;
1146 sk->sk_state = BT_CONNECTED;
1160 struct sock *sk;
1167 sk_for_each(sk, &sco_sk_list.head) {
1168 if (sk->sk_state != BT_LISTEN)
1171 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) ||
1172 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) {
1175 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
1238 struct sock *sk;
1242 sk_for_each(sk, &sco_sk_list.head) {
1243 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src,
1244 &sco_pi(sk)->dst, sk->sk_state);