summaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorMat Martineau <mathewm@codeaurora.org>2012-04-11 19:48:42 +0200
committerGustavo Padovan <gustavo@padovan.org>2012-05-09 06:40:30 +0200
commit3c588192b5e5328cdfc8e299c55477004d397208 (patch)
tree1bedbf322a6b1ded901dc00724e5f8c290098997 /include/net
parentBluetooth: Remove err parameter from alloc_skb() (diff)
downloadlinux-3c588192b5e5328cdfc8e299c55477004d397208.tar.xz
linux-3c588192b5e5328cdfc8e299c55477004d397208.zip
Bluetooth: Add the l2cap_seq_list structure for tracking frames
A sequence list is a data structure used to track frames that need to be retransmitted, and frames that have been requested for retransmission by the remote device. It can compactly represent a list of sequence numbers within the ERTM transmit window. Memory for the list is allocated once at connection time, and common operations in ERTM are O(1). Signed-off-by: Mat Martineau <mathewm@codeaurora.org> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/bluetooth/l2cap.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index a756c2406306..e33165476e83 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -407,6 +407,16 @@ struct l2cap_conn_param_update_rsp {
#define L2CAP_CONN_PARAM_REJECTED 0x0001
/* ----- L2CAP channels and connections ----- */
+struct l2cap_seq_list {
+ __u16 head;
+ __u16 tail;
+ __u16 mask;
+ __u16 *list;
+};
+
+#define L2CAP_SEQ_LIST_CLEAR 0xFFFF
+#define L2CAP_SEQ_LIST_TAIL 0x8000
+
struct srej_list {
__u16 tx_seq;
struct list_head list;
@@ -501,6 +511,8 @@ struct l2cap_chan {
struct sk_buff *tx_send_head;
struct sk_buff_head tx_q;
struct sk_buff_head srej_q;
+ struct l2cap_seq_list srej_list;
+ struct l2cap_seq_list retrans_list;
struct list_head srej_l;
struct list_head list;