• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/net/bluetooth/

Lines Matching defs:conn

80 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
219 static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
221 struct l2cap_chan_list *l = &conn->chan_list;
223 BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
226 conn->disc_reason = 0x13;
228 l2cap_pi(sk)->conn = conn;
255 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
260 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
262 if (conn) {
264 l2cap_chan_unlink(&conn->chan_list, sk);
265 l2cap_pi(sk)->conn = NULL;
266 hci_conn_put(conn->hcon);
303 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
328 return hci_conn_security(conn->hcon, l2cap_pi(sk)->sec_level,
332 static inline u8 l2cap_get_ident(struct l2cap_conn *conn)
342 spin_lock_bh(&conn->lock);
344 if (++conn->tx_ident > 128)
345 conn->tx_ident = 1;
347 id = conn->tx_ident;
349 spin_unlock_bh(&conn->lock);
354 static inline void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
356 struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
363 hci_send_acl(conn->hcon, skb, 0);
370 struct l2cap_conn *conn = pi->conn;
382 count = min_t(unsigned int, conn->mtu, hlen);
409 hci_send_acl(pi->conn->hcon, skb, 0);
432 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
434 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
435 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
443 l2cap_pi(sk)->ident = l2cap_get_ident(conn);
446 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
453 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
454 conn->info_ident = l2cap_get_ident(conn);
456 mod_timer(&conn->info_timer, jiffies +
459 l2cap_send_cmd(conn, conn->info_ident,
480 static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct sock *sk, int err)
484 if (!conn)
497 l2cap_send_cmd(conn, l2cap_get_ident(conn),
505 static void l2cap_conn_start(struct l2cap_conn *conn)
507 struct l2cap_chan_list *l = &conn->chan_list;
511 BT_DBG("conn %p", conn);
536 conn->feat_mask)
550 l2cap_pi(sk)->ident = l2cap_get_ident(conn);
553 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
579 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
589 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
608 static void l2cap_conn_ready(struct l2cap_conn *conn)
610 struct l2cap_chan_list *l = &conn->chan_list;
613 BT_DBG("conn %p", conn);
635 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
637 struct l2cap_chan_list *l = &conn->chan_list;
640 BT_DBG("conn %p", conn);
654 struct l2cap_conn *conn = (void *) arg;
656 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
657 conn->info_ident = 0;
659 l2cap_conn_start(conn);
664 struct l2cap_conn *conn = hcon->l2cap_data;
666 if (conn || status)
667 return conn;
669 conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
670 if (!conn)
673 hcon->l2cap_data = conn;
674 conn->hcon = hcon;
676 BT_DBG("hcon %p conn %p", hcon, conn);
678 conn->mtu = hcon->hdev->acl_mtu;
679 conn->src = &hcon->hdev->bdaddr;
680 conn->dst = &hcon->dst;
682 conn->feat_mask = 0;
684 spin_lock_init(&conn->lock);
685 rwlock_init(&conn->chan_list.lock);
687 setup_timer(&conn->info_timer, l2cap_info_timeout,
688 (unsigned long) conn);
690 conn->disc_reason = 0x13;
692 return conn;
697 struct l2cap_conn *conn = hcon->l2cap_data;
700 if (!conn)
703 BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
705 kfree_skb(conn->rx_skb);
708 while ((sk = conn->chan_list.head)) {
715 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
716 del_timer_sync(&conn->info_timer);
719 kfree(conn);
722 static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
724 struct l2cap_chan_list *l = &conn->chan_list;
726 __l2cap_chan_add(conn, sk, parent);
832 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
835 l2cap_send_disconn_req(conn, sk, reason);
843 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
856 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
1044 struct l2cap_conn *conn;
1100 conn = l2cap_conn_add(hcon, 0);
1101 if (!conn) {
1109 bacpy(src, conn->src);
1111 l2cap_chan_add(conn, sk, NULL);
1354 while ((l2cap_pi(sk)->unacked_frames > 0 && l2cap_pi(sk)->conn)) {
1386 l2cap_send_disconn_req(l2cap_pi(sk)->conn, sk, ECONNABORTED);
1439 hci_send_acl(pi->conn->hcon, skb, 0);
1485 l2cap_send_disconn_req(pi->conn, sk, ECONNABORTED);
1525 l2cap_send_disconn_req(pi->conn, sk, ECONNABORTED);
1621 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1634 count = min_t(unsigned int, conn->mtu, len);
1653 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1660 count = min_t(unsigned int, (conn->mtu - hlen), len);
1682 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1689 count = min_t(unsigned int, (conn->mtu - hlen), len);
1710 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1717 if (!conn)
1726 count = min_t(unsigned int, (conn->mtu - hlen), len);
1909 struct l2cap_conn *conn = l2cap_pi(sk)->conn;
1918 l2cap_send_cmd(l2cap_pi(sk)->conn, l2cap_pi(sk)->ident,
1927 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2156 cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
2157 memcpy(cinfo.dev_class, l2cap_pi(sk)->conn->hcon->dev_class, 3);
2301 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
2303 struct l2cap_chan_list *l = &conn->chan_list;
2307 BT_DBG("conn %p", conn);
2328 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
2336 BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
2337 conn, code, ident, dlen);
2340 count = min_t(unsigned int, conn->mtu, len);
2366 count = min_t(unsigned int, conn->mtu, len);
2515 pi->mode = l2cap_select_mode(rfc.mode, pi->conn->feat_mask);
2525 if (!(pi->conn->feat_mask & L2CAP_FEAT_ERTM) &&
2526 !(pi->conn->feat_mask & L2CAP_FEAT_STREAMING))
2547 if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10)
2548 rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
2553 if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
2570 if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10)
2571 rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
2576 if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
2658 pi->conn->feat_mask);
2703 if (le16_to_cpu(rfc.max_pdu_size) > pi->conn->mtu - 10)
2704 rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
2721 if (le16_to_cpu(rfc.max_pdu_size) > pi->conn->mtu - 10)
2722 rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
2868 static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2875 if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
2876 cmd->ident == conn->info_ident) {
2877 del_timer(&conn->info_timer);
2879 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2880 conn->info_ident = 0;
2882 l2cap_conn_start(conn);
2888 static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2890 struct l2cap_chan_list *list = &conn->chan_list;
2902 parent = l2cap_get_sock_by_psm(BT_LISTEN, psm, conn->src);
2910 !hci_conn_check_link_mode(conn->hcon)) {
2911 conn->disc_reason = 0x05;
2938 hci_conn_hold(conn->hcon);
2941 bacpy(&bt_sk(sk)->src, conn->src);
2942 bacpy(&bt_sk(sk)->dst, conn->dst);
2946 __l2cap_chan_add(conn, sk, parent);
2953 if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2986 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2992 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
2993 conn->info_ident = l2cap_get_ident(conn);
2995 mod_timer(&conn->info_timer, jiffies +
2998 l2cap_send_cmd(conn, conn->info_ident,
3006 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3014 static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3029 sk = l2cap_get_chan_by_scid(&conn->chan_list, scid);
3033 sk = l2cap_get_chan_by_ident(&conn->chan_list, cmd->ident);
3050 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3079 static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
3092 sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid);
3102 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3114 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3123 l2cap_send_disconn_req(conn, sk, ECONNRESET);
3127 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
3153 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3163 static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3177 sk = l2cap_get_chan_by_scid(&conn->chan_list, scid);
3191 l2cap_send_disconn_req(conn, sk, ECONNRESET);
3200 l2cap_send_disconn_req(conn, sk, ECONNRESET);
3204 l2cap_send_cmd(conn, l2cap_get_ident(conn),
3215 l2cap_send_disconn_req(conn, sk, ECONNRESET);
3242 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3254 sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid);
3260 l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
3271 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3282 sk = l2cap_get_chan_by_scid(&conn->chan_list, scid);
3293 static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3312 l2cap_send_cmd(conn, cmd->ident,
3320 l2cap_send_cmd(conn, cmd->ident,
3326 l2cap_send_cmd(conn, cmd->ident,
3333 static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3343 del_timer(&conn->info_timer);
3346 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3347 conn->info_ident = 0;
3349 l2cap_conn_start(conn);
3355 conn->feat_mask = get_unaligned_le32(rsp->data);
3357 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
3361 conn->info_ident = l2cap_get_ident(conn);
3363 l2cap_send_cmd(conn, conn->info_ident,
3366 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3367 conn->info_ident = 0;
3369 l2cap_conn_start(conn);
3372 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3373 conn->info_ident = 0;
3375 l2cap_conn_start(conn);
3381 static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
3388 l2cap_raw_recv(conn, skb);
3407 l2cap_command_rej(conn, &cmd, data);
3411 err = l2cap_connect_req(conn, &cmd, data);
3415 err = l2cap_connect_rsp(conn, &cmd, data);
3419 err = l2cap_config_req(conn, &cmd, cmd_len, data);
3423 err = l2cap_config_rsp(conn, &cmd, data);
3427 err = l2cap_disconnect_req(conn, &cmd, data);
3431 err = l2cap_disconnect_rsp(conn, &cmd, data);
3435 l2cap_send_cmd(conn, cmd.ident, L2CAP_ECHO_RSP, cmd_len, data);
3442 err = l2cap_information_req(conn, &cmd, data);
3446 err = l2cap_information_rsp(conn, &cmd, data);
3460 l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
3659 l2cap_send_disconn_req(pi->conn, sk, ECONNRESET);
3721 l2cap_send_disconn_req(pi->conn, sk, EBUSY);
3974 l2cap_send_disconn_req(pi->conn, sk, ECONNRESET);
4270 l2cap_send_disconn_req(pi->conn, sk, ECONNRESET);
4286 l2cap_send_disconn_req(pi->conn, sk, ECONNRESET);
4292 l2cap_send_disconn_req(pi->conn, sk, ECONNRESET);
4300 l2cap_send_disconn_req(pi->conn, sk, ECONNRESET);
4314 static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
4322 sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
4402 static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
4406 sk = l2cap_get_sock_by_psm(0, psm, conn->src);
4430 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
4449 l2cap_sig_channel(conn, skb);
4455 l2cap_conless_channel(conn, psm, skb);
4459 l2cap_data_channel(conn, cid, skb);
4501 struct l2cap_conn *conn;
4509 conn = l2cap_conn_add(hcon, status);
4510 if (conn)
4511 l2cap_conn_ready(conn);
4520 struct l2cap_conn *conn = hcon->l2cap_data;
4524 if (hcon->type != ACL_LINK || !conn)
4527 return conn->disc_reason;
4562 struct l2cap_conn *conn = hcon->l2cap_data;
4565 if (!conn)
4568 l = &conn->chan_list;
4570 BT_DBG("conn %p", conn);
4595 l2cap_pi(sk)->ident = l2cap_get_ident(conn);
4598 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
4621 l2cap_send_cmd(conn, l2cap_pi(sk)->ident,
4635 struct l2cap_conn *conn = hcon->l2cap_data;
4637 if (!conn && !(conn = l2cap_conn_add(hcon, 0)))
4640 BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
4646 if (conn->rx_len) {
4648 kfree_skb(conn->rx_skb);
4649 conn->rx_skb = NULL;
4650 conn->rx_len = 0;
4651 l2cap_conn_unreliable(conn, ECOMM);
4656 l2cap_conn_unreliable(conn, ECOMM);
4665 l2cap_recv_frame(conn, skb);
4674 l2cap_conn_unreliable(conn, ECOMM);
4679 conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
4680 if (!conn->rx_skb)
4683 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4685 conn->rx_len = len - skb->len;
4687 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
4689 if (!conn->rx_len) {
4691 l2cap_conn_unreliable(conn, ECOMM);
4695 if (skb->len > conn->rx_len) {
4697 skb->len, conn->rx_len);
4698 kfree_skb(conn->rx_skb);
4699 conn->rx_skb = NULL;
4700 conn->rx_len = 0;
4701 l2cap_conn_unreliable(conn, ECOMM);
4705 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4707 conn->rx_len -= skb->len;
4709 if (!conn->rx_len) {
4711 l2cap_recv_frame(conn, conn->rx_skb);
4712 conn->rx_skb = NULL;