Additional reassembly buffer to keep track of stream reasembly
Signed-off-by: Suraj Sumangala <suraj@atheros.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
struct list_head list;
bdaddr_t bdaddr;
};
struct list_head list;
bdaddr_t bdaddr;
};
+#define NUM_REASSEMBLY 4
struct hci_dev {
struct list_head list;
spinlock_t lock;
struct hci_dev {
struct list_head list;
spinlock_t lock;
struct sk_buff_head cmd_q;
struct sk_buff *sent_cmd;
struct sk_buff_head cmd_q;
struct sk_buff *sent_cmd;
- struct sk_buff *reassembly[3];
+ struct sk_buff *reassembly[NUM_REASSEMBLY];
struct mutex req_lock;
wait_queue_head_t req_wait_q;
struct mutex req_lock;
wait_queue_head_t req_wait_q;
skb_queue_head_init(&hdev->cmd_q);
skb_queue_head_init(&hdev->raw_q);
skb_queue_head_init(&hdev->cmd_q);
skb_queue_head_init(&hdev->raw_q);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < NUM_REASSEMBLY; i++)
hdev->reassembly[i] = NULL;
init_waitqueue_head(&hdev->req_wait_q);
hdev->reassembly[i] = NULL;
init_waitqueue_head(&hdev->req_wait_q);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < NUM_REASSEMBLY; i++)
kfree_skb(hdev->reassembly[i]);
hci_notify(hdev, HCI_DEV_UNREG);
kfree_skb(hdev->reassembly[i]);
hci_notify(hdev, HCI_DEV_UNREG);
EXPORT_SYMBOL(hci_recv_frame);
/* Receive packet type fragment */
EXPORT_SYMBOL(hci_recv_frame);
/* Receive packet type fragment */
-#define __reassembly(hdev, type) ((hdev)->reassembly[(type) - 2])
+#define __reassembly(hdev, type) ((hdev)->reassembly[(type) - 1])
int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
{
int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
{