diff options
author | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-05-16 16:24:37 -0400 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-06-13 13:55:32 -0400 |
commit | 80808e431e1ef25856457de82ce141bed6a6313a (patch) | |
tree | 021d6affd8b8f6bf81ba51fadb9951b0b9e47d27 /net/bluetooth/l2cap_core.c | |
parent | dc50a06dac61d7ca7ddb3d9bb8921ca5d68f51b6 (diff) |
Bluetooth: Add l2cap_chan_ops abstraction
Add an abstraction layer between L2CAP core and its users (only
l2cap_sock.c now). The first function implemented is new_connection() that
replaces calls to l2cap_sock_alloc() in l2cap_core.c
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 | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 49f890bce312..8369f5680391 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -842,18 +842,16 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn) | |||
842 | goto clean; | 842 | goto clean; |
843 | } | 843 | } |
844 | 844 | ||
845 | sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC); | 845 | chan = pchan->ops->new_connection(pchan->data); |
846 | if (!sk) | 846 | if (!chan) |
847 | goto clean; | 847 | goto clean; |
848 | 848 | ||
849 | chan = l2cap_pi(sk)->chan; | 849 | sk = chan->sk; |
850 | 850 | ||
851 | write_lock_bh(&conn->chan_lock); | 851 | write_lock_bh(&conn->chan_lock); |
852 | 852 | ||
853 | hci_conn_hold(conn->hcon); | 853 | hci_conn_hold(conn->hcon); |
854 | 854 | ||
855 | l2cap_sock_init(sk, parent); | ||
856 | |||
857 | bacpy(&bt_sk(sk)->src, conn->src); | 855 | bacpy(&bt_sk(sk)->src, conn->src); |
858 | bacpy(&bt_sk(sk)->dst, conn->dst); | 856 | bacpy(&bt_sk(sk)->dst, conn->dst); |
859 | 857 | ||
@@ -2329,10 +2327,12 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd | |||
2329 | goto response; | 2327 | goto response; |
2330 | } | 2328 | } |
2331 | 2329 | ||
2332 | sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC); | 2330 | chan = pchan->ops->new_connection(pchan->data); |
2333 | if (!sk) | 2331 | if (!chan) |
2334 | goto response; | 2332 | goto response; |
2335 | 2333 | ||
2334 | sk = chan->sk; | ||
2335 | |||
2336 | write_lock_bh(&conn->chan_lock); | 2336 | write_lock_bh(&conn->chan_lock); |
2337 | 2337 | ||
2338 | /* Check if we already have channel with that dcid */ | 2338 | /* Check if we already have channel with that dcid */ |
@@ -2345,9 +2345,6 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd | |||
2345 | 2345 | ||
2346 | hci_conn_hold(conn->hcon); | 2346 | hci_conn_hold(conn->hcon); |
2347 | 2347 | ||
2348 | chan = l2cap_pi(sk)->chan; | ||
2349 | |||
2350 | l2cap_sock_init(sk, parent); | ||
2351 | bacpy(&bt_sk(sk)->src, conn->src); | 2348 | bacpy(&bt_sk(sk)->src, conn->src); |
2352 | bacpy(&bt_sk(sk)->dst, conn->dst); | 2349 | bacpy(&bt_sk(sk)->dst, conn->dst); |
2353 | chan->psm = psm; | 2350 | chan->psm = psm; |