aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/l2cap_core.c
diff options
context:
space:
mode:
authorGustavo F. Padovan <padovan@profusion.mobi>2011-05-16 16:24:37 -0400
committerGustavo F. Padovan <padovan@profusion.mobi>2011-06-13 13:55:32 -0400
commit80808e431e1ef25856457de82ce141bed6a6313a (patch)
tree021d6affd8b8f6bf81ba51fadb9951b0b9e47d27 /net/bluetooth/l2cap_core.c
parentdc50a06dac61d7ca7ddb3d9bb8921ca5d68f51b6 (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.c17
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;