aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorMat Martineau <mathewm@codeaurora.org>2011-07-07 12:39:02 -0400
committerGustavo F. Padovan <padovan@profusion.mobi>2011-07-07 14:28:56 -0400
commite328140fdacbba43292a59a22fb55d9185288318 (patch)
tree43eb760529846562e6e75c25cd39a8317142eac7 /include/net
parent26f880d221302b5d061185d8a6795bb532693bf3 (diff)
Bluetooth: Use event-driven approach for handling ERTM receive buffer
This change moves most L2CAP ERTM receive buffer handling out of the L2CAP core and in to the socket code. It's up to the higher layer (the socket code, in this case) to tell the core when its buffer is full or has space available. The recv op should always accept incoming ERTM data or else the connection will go down. Within the socket layer, an skb that does not fit in the socket receive buffer will be temporarily stored. When the socket is read from, that skb will be placed in the receive buffer if possible. Once adequate buffer space becomes available, the L2CAP core is informed and the ERTM local busy state is cleared. Receive buffer management for non-ERTM modes is unchanged. Signed-off-by: Mat Martineau <mathewm@codeaurora.org> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/bluetooth/l2cap.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 9c18e555b6ed..66b8d9688d9e 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -422,6 +422,7 @@ struct l2cap_conn {
422struct l2cap_pinfo { 422struct l2cap_pinfo {
423 struct bt_sock bt; 423 struct bt_sock bt;
424 struct l2cap_chan *chan; 424 struct l2cap_chan *chan;
425 struct sk_buff *rx_busy_skb;
425}; 426};
426 427
427enum { 428enum {
@@ -498,5 +499,6 @@ void l2cap_chan_close(struct l2cap_chan *chan, int reason);
498void l2cap_chan_destroy(struct l2cap_chan *chan); 499void l2cap_chan_destroy(struct l2cap_chan *chan);
499int l2cap_chan_connect(struct l2cap_chan *chan); 500int l2cap_chan_connect(struct l2cap_chan *chan);
500int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len); 501int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
502void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
501 503
502#endif /* __L2CAP_H */ 504#endif /* __L2CAP_H */