diff options
-rw-r--r-- | include/net/bluetooth/l2cap.h | 29 | ||||
-rw-r--r-- | net/bluetooth/l2cap_core.c | 5 |
2 files changed, 34 insertions, 0 deletions
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index 6e23afdf65c1..6d3615eed97c 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -434,6 +434,8 @@ struct l2cap_chan { | |||
434 | struct sock *sk; | 434 | struct sock *sk; |
435 | 435 | ||
436 | struct l2cap_conn *conn; | 436 | struct l2cap_conn *conn; |
437 | struct hci_conn *hs_hcon; | ||
438 | struct hci_chan *hs_hchan; | ||
437 | struct kref kref; | 439 | struct kref kref; |
438 | 440 | ||
439 | __u8 state; | 441 | __u8 state; |
@@ -477,6 +479,11 @@ struct l2cap_chan { | |||
477 | unsigned long conn_state; | 479 | unsigned long conn_state; |
478 | unsigned long flags; | 480 | unsigned long flags; |
479 | 481 | ||
482 | __u8 local_amp_id; | ||
483 | __u8 move_id; | ||
484 | __u8 move_state; | ||
485 | __u8 move_role; | ||
486 | |||
480 | __u16 next_tx_seq; | 487 | __u16 next_tx_seq; |
481 | __u16 expected_ack_seq; | 488 | __u16 expected_ack_seq; |
482 | __u16 expected_tx_seq; | 489 | __u16 expected_tx_seq; |
@@ -644,6 +651,9 @@ enum { | |||
644 | enum { | 651 | enum { |
645 | L2CAP_RX_STATE_RECV, | 652 | L2CAP_RX_STATE_RECV, |
646 | L2CAP_RX_STATE_SREJ_SENT, | 653 | L2CAP_RX_STATE_SREJ_SENT, |
654 | L2CAP_RX_STATE_MOVE, | ||
655 | L2CAP_RX_STATE_WAIT_P, | ||
656 | L2CAP_RX_STATE_WAIT_F, | ||
647 | }; | 657 | }; |
648 | 658 | ||
649 | enum { | 659 | enum { |
@@ -674,6 +684,25 @@ enum { | |||
674 | L2CAP_EV_RECV_FRAME, | 684 | L2CAP_EV_RECV_FRAME, |
675 | }; | 685 | }; |
676 | 686 | ||
687 | enum { | ||
688 | L2CAP_MOVE_ROLE_NONE, | ||
689 | L2CAP_MOVE_ROLE_INITIATOR, | ||
690 | L2CAP_MOVE_ROLE_RESPONDER, | ||
691 | }; | ||
692 | |||
693 | enum { | ||
694 | L2CAP_MOVE_STABLE, | ||
695 | L2CAP_MOVE_WAIT_REQ, | ||
696 | L2CAP_MOVE_WAIT_RSP, | ||
697 | L2CAP_MOVE_WAIT_RSP_SUCCESS, | ||
698 | L2CAP_MOVE_WAIT_CONFIRM, | ||
699 | L2CAP_MOVE_WAIT_CONFIRM_RSP, | ||
700 | L2CAP_MOVE_WAIT_LOGICAL_COMP, | ||
701 | L2CAP_MOVE_WAIT_LOGICAL_CFM, | ||
702 | L2CAP_MOVE_WAIT_LOCAL_BUSY, | ||
703 | L2CAP_MOVE_WAIT_PREPARE, | ||
704 | }; | ||
705 | |||
677 | void l2cap_chan_hold(struct l2cap_chan *c); | 706 | void l2cap_chan_hold(struct l2cap_chan *c); |
678 | void l2cap_chan_put(struct l2cap_chan *c); | 707 | void l2cap_chan_put(struct l2cap_chan *c); |
679 | 708 | ||
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 08efc256c931..c1b169f3ae0d 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -2788,6 +2788,11 @@ int l2cap_ertm_init(struct l2cap_chan *chan) | |||
2788 | 2788 | ||
2789 | skb_queue_head_init(&chan->tx_q); | 2789 | skb_queue_head_init(&chan->tx_q); |
2790 | 2790 | ||
2791 | chan->local_amp_id = 0; | ||
2792 | chan->move_id = 0; | ||
2793 | chan->move_state = L2CAP_MOVE_STABLE; | ||
2794 | chan->move_role = L2CAP_MOVE_ROLE_NONE; | ||
2795 | |||
2791 | if (chan->mode != L2CAP_MODE_ERTM) | 2796 | if (chan->mode != L2CAP_MODE_ERTM) |
2792 | return 0; | 2797 | return 0; |
2793 | 2798 | ||