diff options
author | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-04-12 17:15:09 -0400 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-04-27 17:51:34 -0400 |
commit | b44500351845e4f6df0d752a8870da246be8216f (patch) | |
tree | 3f0faf668af01c72c408be1eea043c73bff2c0b9 /net/bluetooth/l2cap_core.c | |
parent | 5d41ce1dd91bce01d50aff79786dc5d5eedcfab7 (diff) |
Bluetooth: Move conf_state to struct l2cap_chan
First move of elements depending on user data.
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net/bluetooth/l2cap_core.c')
-rw-r--r-- | net/bluetooth/l2cap_core.c | 88 |
1 files changed, 45 insertions, 43 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 4b857adc5361..190b04960dae 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -236,8 +236,8 @@ void l2cap_chan_del(struct l2cap_chan *chan, int err) | |||
236 | } else | 236 | } else |
237 | sk->sk_state_change(sk); | 237 | sk->sk_state_change(sk); |
238 | 238 | ||
239 | if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE && | 239 | if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE && |
240 | l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE)) | 240 | chan->conf_state & L2CAP_CONF_INPUT_DONE)) |
241 | goto free; | 241 | goto free; |
242 | 242 | ||
243 | skb_queue_purge(&chan->tx_q); | 243 | skb_queue_purge(&chan->tx_q); |
@@ -411,9 +411,9 @@ static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u16 control) | |||
411 | l2cap_send_sframe(chan, control); | 411 | l2cap_send_sframe(chan, control); |
412 | } | 412 | } |
413 | 413 | ||
414 | static inline int __l2cap_no_conn_pending(struct sock *sk) | 414 | static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan) |
415 | { | 415 | { |
416 | return !(l2cap_pi(sk)->conf_state & L2CAP_CONF_CONNECT_PEND); | 416 | return !(chan->conf_state & L2CAP_CONF_CONNECT_PEND); |
417 | } | 417 | } |
418 | 418 | ||
419 | static void l2cap_do_start(struct l2cap_chan *chan) | 419 | static void l2cap_do_start(struct l2cap_chan *chan) |
@@ -425,13 +425,13 @@ static void l2cap_do_start(struct l2cap_chan *chan) | |||
425 | if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)) | 425 | if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)) |
426 | return; | 426 | return; |
427 | 427 | ||
428 | if (l2cap_check_security(sk) && __l2cap_no_conn_pending(sk)) { | 428 | if (l2cap_check_security(sk) && __l2cap_no_conn_pending(chan)) { |
429 | struct l2cap_conn_req req; | 429 | struct l2cap_conn_req req; |
430 | req.scid = cpu_to_le16(l2cap_pi(sk)->scid); | 430 | req.scid = cpu_to_le16(l2cap_pi(sk)->scid); |
431 | req.psm = l2cap_pi(sk)->psm; | 431 | req.psm = l2cap_pi(sk)->psm; |
432 | 432 | ||
433 | chan->ident = l2cap_get_ident(conn); | 433 | chan->ident = l2cap_get_ident(conn); |
434 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND; | 434 | chan->conf_state |= L2CAP_CONF_CONNECT_PEND; |
435 | 435 | ||
436 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, | 436 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, |
437 | sizeof(req), &req); | 437 | sizeof(req), &req); |
@@ -516,14 +516,14 @@ static void l2cap_conn_start(struct l2cap_conn *conn) | |||
516 | struct l2cap_conn_req req; | 516 | struct l2cap_conn_req req; |
517 | 517 | ||
518 | if (!l2cap_check_security(sk) || | 518 | if (!l2cap_check_security(sk) || |
519 | !__l2cap_no_conn_pending(sk)) { | 519 | !__l2cap_no_conn_pending(chan)) { |
520 | bh_unlock_sock(sk); | 520 | bh_unlock_sock(sk); |
521 | continue; | 521 | continue; |
522 | } | 522 | } |
523 | 523 | ||
524 | if (!l2cap_mode_supported(l2cap_pi(sk)->mode, | 524 | if (!l2cap_mode_supported(l2cap_pi(sk)->mode, |
525 | conn->feat_mask) | 525 | conn->feat_mask) |
526 | && l2cap_pi(sk)->conf_state & | 526 | && chan->conf_state & |
527 | L2CAP_CONF_STATE2_DEVICE) { | 527 | L2CAP_CONF_STATE2_DEVICE) { |
528 | /* __l2cap_sock_close() calls list_del(chan) | 528 | /* __l2cap_sock_close() calls list_del(chan) |
529 | * so release the lock */ | 529 | * so release the lock */ |
@@ -538,7 +538,7 @@ static void l2cap_conn_start(struct l2cap_conn *conn) | |||
538 | req.psm = l2cap_pi(sk)->psm; | 538 | req.psm = l2cap_pi(sk)->psm; |
539 | 539 | ||
540 | chan->ident = l2cap_get_ident(conn); | 540 | chan->ident = l2cap_get_ident(conn); |
541 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND; | 541 | chan->conf_state |= L2CAP_CONF_CONNECT_PEND; |
542 | 542 | ||
543 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, | 543 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, |
544 | sizeof(req), &req); | 544 | sizeof(req), &req); |
@@ -569,13 +569,13 @@ static void l2cap_conn_start(struct l2cap_conn *conn) | |||
569 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, | 569 | l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, |
570 | sizeof(rsp), &rsp); | 570 | sizeof(rsp), &rsp); |
571 | 571 | ||
572 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT || | 572 | if (chan->conf_state & L2CAP_CONF_REQ_SENT || |
573 | rsp.result != L2CAP_CR_SUCCESS) { | 573 | rsp.result != L2CAP_CR_SUCCESS) { |
574 | bh_unlock_sock(sk); | 574 | bh_unlock_sock(sk); |
575 | continue; | 575 | continue; |
576 | } | 576 | } |
577 | 577 | ||
578 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT; | 578 | chan->conf_state |= L2CAP_CONF_REQ_SENT; |
579 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, | 579 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, |
580 | l2cap_build_conf_req(chan, buf), buf); | 580 | l2cap_build_conf_req(chan, buf), buf); |
581 | chan->num_conf_req++; | 581 | chan->num_conf_req++; |
@@ -1382,10 +1382,11 @@ int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t le | |||
1382 | static void l2cap_chan_ready(struct sock *sk) | 1382 | static void l2cap_chan_ready(struct sock *sk) |
1383 | { | 1383 | { |
1384 | struct sock *parent = bt_sk(sk)->parent; | 1384 | struct sock *parent = bt_sk(sk)->parent; |
1385 | struct l2cap_chan *chan = l2cap_pi(sk)->chan; | ||
1385 | 1386 | ||
1386 | BT_DBG("sk %p, parent %p", sk, parent); | 1387 | BT_DBG("sk %p, parent %p", sk, parent); |
1387 | 1388 | ||
1388 | l2cap_pi(sk)->conf_state = 0; | 1389 | chan->conf_state = 0; |
1389 | l2cap_sock_clear_timer(sk); | 1390 | l2cap_sock_clear_timer(sk); |
1390 | 1391 | ||
1391 | if (!parent) { | 1392 | if (!parent) { |
@@ -1619,7 +1620,7 @@ static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data) | |||
1619 | switch (pi->mode) { | 1620 | switch (pi->mode) { |
1620 | case L2CAP_MODE_STREAMING: | 1621 | case L2CAP_MODE_STREAMING: |
1621 | case L2CAP_MODE_ERTM: | 1622 | case L2CAP_MODE_ERTM: |
1622 | if (pi->conf_state & L2CAP_CONF_STATE2_DEVICE) | 1623 | if (chan->conf_state & L2CAP_CONF_STATE2_DEVICE) |
1623 | break; | 1624 | break; |
1624 | 1625 | ||
1625 | /* fall through */ | 1626 | /* fall through */ |
@@ -1666,7 +1667,7 @@ done: | |||
1666 | break; | 1667 | break; |
1667 | 1668 | ||
1668 | if (pi->fcs == L2CAP_FCS_NONE || | 1669 | if (pi->fcs == L2CAP_FCS_NONE || |
1669 | pi->conf_state & L2CAP_CONF_NO_FCS_RECV) { | 1670 | chan->conf_state & L2CAP_CONF_NO_FCS_RECV) { |
1670 | pi->fcs = L2CAP_FCS_NONE; | 1671 | pi->fcs = L2CAP_FCS_NONE; |
1671 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs); | 1672 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs); |
1672 | } | 1673 | } |
@@ -1689,7 +1690,7 @@ done: | |||
1689 | break; | 1690 | break; |
1690 | 1691 | ||
1691 | if (pi->fcs == L2CAP_FCS_NONE || | 1692 | if (pi->fcs == L2CAP_FCS_NONE || |
1692 | pi->conf_state & L2CAP_CONF_NO_FCS_RECV) { | 1693 | chan->conf_state & L2CAP_CONF_NO_FCS_RECV) { |
1693 | pi->fcs = L2CAP_FCS_NONE; | 1694 | pi->fcs = L2CAP_FCS_NONE; |
1694 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs); | 1695 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs); |
1695 | } | 1696 | } |
@@ -1742,7 +1743,7 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data) | |||
1742 | 1743 | ||
1743 | case L2CAP_CONF_FCS: | 1744 | case L2CAP_CONF_FCS: |
1744 | if (val == L2CAP_FCS_NONE) | 1745 | if (val == L2CAP_FCS_NONE) |
1745 | pi->conf_state |= L2CAP_CONF_NO_FCS_RECV; | 1746 | chan->conf_state |= L2CAP_CONF_NO_FCS_RECV; |
1746 | 1747 | ||
1747 | break; | 1748 | break; |
1748 | 1749 | ||
@@ -1762,7 +1763,7 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data) | |||
1762 | switch (pi->mode) { | 1763 | switch (pi->mode) { |
1763 | case L2CAP_MODE_STREAMING: | 1764 | case L2CAP_MODE_STREAMING: |
1764 | case L2CAP_MODE_ERTM: | 1765 | case L2CAP_MODE_ERTM: |
1765 | if (!(pi->conf_state & L2CAP_CONF_STATE2_DEVICE)) { | 1766 | if (!(chan->conf_state & L2CAP_CONF_STATE2_DEVICE)) { |
1766 | pi->mode = l2cap_select_mode(rfc.mode, | 1767 | pi->mode = l2cap_select_mode(rfc.mode, |
1767 | pi->conn->feat_mask); | 1768 | pi->conn->feat_mask); |
1768 | break; | 1769 | break; |
@@ -1795,14 +1796,14 @@ done: | |||
1795 | result = L2CAP_CONF_UNACCEPT; | 1796 | result = L2CAP_CONF_UNACCEPT; |
1796 | else { | 1797 | else { |
1797 | pi->omtu = mtu; | 1798 | pi->omtu = mtu; |
1798 | pi->conf_state |= L2CAP_CONF_MTU_DONE; | 1799 | chan->conf_state |= L2CAP_CONF_MTU_DONE; |
1799 | } | 1800 | } |
1800 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu); | 1801 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu); |
1801 | 1802 | ||
1802 | switch (rfc.mode) { | 1803 | switch (rfc.mode) { |
1803 | case L2CAP_MODE_BASIC: | 1804 | case L2CAP_MODE_BASIC: |
1804 | pi->fcs = L2CAP_FCS_NONE; | 1805 | pi->fcs = L2CAP_FCS_NONE; |
1805 | pi->conf_state |= L2CAP_CONF_MODE_DONE; | 1806 | chan->conf_state |= L2CAP_CONF_MODE_DONE; |
1806 | break; | 1807 | break; |
1807 | 1808 | ||
1808 | case L2CAP_MODE_ERTM: | 1809 | case L2CAP_MODE_ERTM: |
@@ -1819,7 +1820,7 @@ done: | |||
1819 | rfc.monitor_timeout = | 1820 | rfc.monitor_timeout = |
1820 | le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO); | 1821 | le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO); |
1821 | 1822 | ||
1822 | pi->conf_state |= L2CAP_CONF_MODE_DONE; | 1823 | chan->conf_state |= L2CAP_CONF_MODE_DONE; |
1823 | 1824 | ||
1824 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, | 1825 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, |
1825 | sizeof(rfc), (unsigned long) &rfc); | 1826 | sizeof(rfc), (unsigned long) &rfc); |
@@ -1832,7 +1833,7 @@ done: | |||
1832 | 1833 | ||
1833 | chan->remote_mps = le16_to_cpu(rfc.max_pdu_size); | 1834 | chan->remote_mps = le16_to_cpu(rfc.max_pdu_size); |
1834 | 1835 | ||
1835 | pi->conf_state |= L2CAP_CONF_MODE_DONE; | 1836 | chan->conf_state |= L2CAP_CONF_MODE_DONE; |
1836 | 1837 | ||
1837 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, | 1838 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, |
1838 | sizeof(rfc), (unsigned long) &rfc); | 1839 | sizeof(rfc), (unsigned long) &rfc); |
@@ -1847,7 +1848,7 @@ done: | |||
1847 | } | 1848 | } |
1848 | 1849 | ||
1849 | if (result == L2CAP_CONF_SUCCESS) | 1850 | if (result == L2CAP_CONF_SUCCESS) |
1850 | pi->conf_state |= L2CAP_CONF_OUTPUT_DONE; | 1851 | chan->conf_state |= L2CAP_CONF_OUTPUT_DONE; |
1851 | } | 1852 | } |
1852 | rsp->scid = cpu_to_le16(pi->dcid); | 1853 | rsp->scid = cpu_to_le16(pi->dcid); |
1853 | rsp->result = cpu_to_le16(result); | 1854 | rsp->result = cpu_to_le16(result); |
@@ -1856,8 +1857,9 @@ done: | |||
1856 | return ptr - data; | 1857 | return ptr - data; |
1857 | } | 1858 | } |
1858 | 1859 | ||
1859 | static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, u16 *result) | 1860 | static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result) |
1860 | { | 1861 | { |
1862 | struct sock *sk = chan->sk; | ||
1861 | struct l2cap_pinfo *pi = l2cap_pi(sk); | 1863 | struct l2cap_pinfo *pi = l2cap_pi(sk); |
1862 | struct l2cap_conf_req *req = data; | 1864 | struct l2cap_conf_req *req = data; |
1863 | void *ptr = req->data; | 1865 | void *ptr = req->data; |
@@ -1890,7 +1892,7 @@ static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, | |||
1890 | if (olen == sizeof(rfc)) | 1892 | if (olen == sizeof(rfc)) |
1891 | memcpy(&rfc, (void *)val, olen); | 1893 | memcpy(&rfc, (void *)val, olen); |
1892 | 1894 | ||
1893 | if ((pi->conf_state & L2CAP_CONF_STATE2_DEVICE) && | 1895 | if ((chan->conf_state & L2CAP_CONF_STATE2_DEVICE) && |
1894 | rfc.mode != pi->mode) | 1896 | rfc.mode != pi->mode) |
1895 | return -ECONNREFUSED; | 1897 | return -ECONNREFUSED; |
1896 | 1898 | ||
@@ -1955,10 +1957,10 @@ void __l2cap_connect_rsp_defer(struct sock *sk) | |||
1955 | l2cap_send_cmd(conn, chan->ident, | 1957 | l2cap_send_cmd(conn, chan->ident, |
1956 | L2CAP_CONN_RSP, sizeof(rsp), &rsp); | 1958 | L2CAP_CONN_RSP, sizeof(rsp), &rsp); |
1957 | 1959 | ||
1958 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT) | 1960 | if (chan->conf_state & L2CAP_CONF_REQ_SENT) |
1959 | return; | 1961 | return; |
1960 | 1962 | ||
1961 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT; | 1963 | chan->conf_state |= L2CAP_CONF_REQ_SENT; |
1962 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, | 1964 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, |
1963 | l2cap_build_conf_req(chan, buf), buf); | 1965 | l2cap_build_conf_req(chan, buf), buf); |
1964 | chan->num_conf_req++; | 1966 | chan->num_conf_req++; |
@@ -2146,10 +2148,10 @@ sendresp: | |||
2146 | L2CAP_INFO_REQ, sizeof(info), &info); | 2148 | L2CAP_INFO_REQ, sizeof(info), &info); |
2147 | } | 2149 | } |
2148 | 2150 | ||
2149 | if (chan && !(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT) && | 2151 | if (chan && !(chan->conf_state & L2CAP_CONF_REQ_SENT) && |
2150 | result == L2CAP_CR_SUCCESS) { | 2152 | result == L2CAP_CR_SUCCESS) { |
2151 | u8 buf[128]; | 2153 | u8 buf[128]; |
2152 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT; | 2154 | chan->conf_state |= L2CAP_CONF_REQ_SENT; |
2153 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, | 2155 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, |
2154 | l2cap_build_conf_req(chan, buf), buf); | 2156 | l2cap_build_conf_req(chan, buf), buf); |
2155 | chan->num_conf_req++; | 2157 | chan->num_conf_req++; |
@@ -2190,12 +2192,12 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd | |||
2190 | sk->sk_state = BT_CONFIG; | 2192 | sk->sk_state = BT_CONFIG; |
2191 | chan->ident = 0; | 2193 | chan->ident = 0; |
2192 | l2cap_pi(sk)->dcid = dcid; | 2194 | l2cap_pi(sk)->dcid = dcid; |
2193 | l2cap_pi(sk)->conf_state &= ~L2CAP_CONF_CONNECT_PEND; | 2195 | chan->conf_state &= ~L2CAP_CONF_CONNECT_PEND; |
2194 | 2196 | ||
2195 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT) | 2197 | if (chan->conf_state & L2CAP_CONF_REQ_SENT) |
2196 | break; | 2198 | break; |
2197 | 2199 | ||
2198 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT; | 2200 | chan->conf_state |= L2CAP_CONF_REQ_SENT; |
2199 | 2201 | ||
2200 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, | 2202 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, |
2201 | l2cap_build_conf_req(chan, req), req); | 2203 | l2cap_build_conf_req(chan, req), req); |
@@ -2203,7 +2205,7 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd | |||
2203 | break; | 2205 | break; |
2204 | 2206 | ||
2205 | case L2CAP_CR_PEND: | 2207 | case L2CAP_CR_PEND: |
2206 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND; | 2208 | chan->conf_state |= L2CAP_CONF_CONNECT_PEND; |
2207 | break; | 2209 | break; |
2208 | 2210 | ||
2209 | default: | 2211 | default: |
@@ -2230,7 +2232,7 @@ static inline void set_default_fcs(struct l2cap_pinfo *pi) | |||
2230 | */ | 2232 | */ |
2231 | if (pi->mode != L2CAP_MODE_ERTM && pi->mode != L2CAP_MODE_STREAMING) | 2233 | if (pi->mode != L2CAP_MODE_ERTM && pi->mode != L2CAP_MODE_STREAMING) |
2232 | pi->fcs = L2CAP_FCS_NONE; | 2234 | pi->fcs = L2CAP_FCS_NONE; |
2233 | else if (!(pi->conf_state & L2CAP_CONF_NO_FCS_RECV)) | 2235 | else if (!(pi->chan->conf_state & L2CAP_CONF_NO_FCS_RECV)) |
2234 | pi->fcs = L2CAP_FCS_CRC16; | 2236 | pi->fcs = L2CAP_FCS_CRC16; |
2235 | } | 2237 | } |
2236 | 2238 | ||
@@ -2297,10 +2299,10 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
2297 | /* Reset config buffer. */ | 2299 | /* Reset config buffer. */ |
2298 | chan->conf_len = 0; | 2300 | chan->conf_len = 0; |
2299 | 2301 | ||
2300 | if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE)) | 2302 | if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE)) |
2301 | goto unlock; | 2303 | goto unlock; |
2302 | 2304 | ||
2303 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) { | 2305 | if (chan->conf_state & L2CAP_CONF_INPUT_DONE) { |
2304 | set_default_fcs(l2cap_pi(sk)); | 2306 | set_default_fcs(l2cap_pi(sk)); |
2305 | 2307 | ||
2306 | sk->sk_state = BT_CONNECTED; | 2308 | sk->sk_state = BT_CONNECTED; |
@@ -2315,9 +2317,9 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
2315 | goto unlock; | 2317 | goto unlock; |
2316 | } | 2318 | } |
2317 | 2319 | ||
2318 | if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) { | 2320 | if (!(chan->conf_state & L2CAP_CONF_REQ_SENT)) { |
2319 | u8 buf[64]; | 2321 | u8 buf[64]; |
2320 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT; | 2322 | chan->conf_state |= L2CAP_CONF_REQ_SENT; |
2321 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, | 2323 | l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ, |
2322 | l2cap_build_conf_req(chan, buf), buf); | 2324 | l2cap_build_conf_req(chan, buf), buf); |
2323 | chan->num_conf_req++; | 2325 | chan->num_conf_req++; |
@@ -2365,8 +2367,8 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
2365 | 2367 | ||
2366 | /* throw out any old stored conf requests */ | 2368 | /* throw out any old stored conf requests */ |
2367 | result = L2CAP_CONF_SUCCESS; | 2369 | result = L2CAP_CONF_SUCCESS; |
2368 | len = l2cap_parse_conf_rsp(sk, rsp->data, | 2370 | len = l2cap_parse_conf_rsp(chan, rsp->data, len, |
2369 | len, req, &result); | 2371 | req, &result); |
2370 | if (len < 0) { | 2372 | if (len < 0) { |
2371 | l2cap_send_disconn_req(conn, chan, ECONNRESET); | 2373 | l2cap_send_disconn_req(conn, chan, ECONNRESET); |
2372 | goto done; | 2374 | goto done; |
@@ -2390,9 +2392,9 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
2390 | if (flags & 0x01) | 2392 | if (flags & 0x01) |
2391 | goto done; | 2393 | goto done; |
2392 | 2394 | ||
2393 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE; | 2395 | chan->conf_state |= L2CAP_CONF_INPUT_DONE; |
2394 | 2396 | ||
2395 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) { | 2397 | if (chan->conf_state & L2CAP_CONF_OUTPUT_DONE) { |
2396 | set_default_fcs(l2cap_pi(sk)); | 2398 | set_default_fcs(l2cap_pi(sk)); |
2397 | 2399 | ||
2398 | sk->sk_state = BT_CONNECTED; | 2400 | sk->sk_state = BT_CONNECTED; |
@@ -3899,7 +3901,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) | |||
3899 | 3901 | ||
3900 | bh_lock_sock(sk); | 3902 | bh_lock_sock(sk); |
3901 | 3903 | ||
3902 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_CONNECT_PEND) { | 3904 | if (chan->conf_state & L2CAP_CONF_CONNECT_PEND) { |
3903 | bh_unlock_sock(sk); | 3905 | bh_unlock_sock(sk); |
3904 | continue; | 3906 | continue; |
3905 | } | 3907 | } |
@@ -3918,7 +3920,7 @@ static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt) | |||
3918 | req.psm = l2cap_pi(sk)->psm; | 3920 | req.psm = l2cap_pi(sk)->psm; |
3919 | 3921 | ||
3920 | chan->ident = l2cap_get_ident(conn); | 3922 | chan->ident = l2cap_get_ident(conn); |
3921 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND; | 3923 | chan->conf_state |= L2CAP_CONF_CONNECT_PEND; |
3922 | 3924 | ||
3923 | l2cap_send_cmd(conn, chan->ident, | 3925 | l2cap_send_cmd(conn, chan->ident, |
3924 | L2CAP_CONN_REQ, sizeof(req), &req); | 3926 | L2CAP_CONN_REQ, sizeof(req), &req); |