forcedeth: remove unnecessary carrier status check
[linux-2.6-block.git] / drivers / bluetooth / hci_h4.c
index 635597b6e1681f25e8ed6004c6960369dcae3e1b..82e5a32b87a43646cf49721e0f39a1671d498897 100644 (file)
@@ -171,9 +171,20 @@ struct sk_buff *h4_recv_buf(struct hci_dev *hdev, struct sk_buff *skb,
                            const unsigned char *buffer, int count,
                            const struct h4_recv_pkt *pkts, int pkts_count)
 {
+       struct hci_uart *hu = hci_get_drvdata(hdev);
+       u8 alignment = hu->alignment;
+
        while (count) {
                int i, len;
 
+               /* remove padding bytes from buffer */
+               for (; hu->padding && count > 0; hu->padding--) {
+                       count--;
+                       buffer++;
+               }
+               if (!count)
+                       break;
+
                if (!skb) {
                        for (i = 0; i < pkts_count; i++) {
                                if (buffer[0] != (&pkts[i])->type)
@@ -253,11 +264,17 @@ struct sk_buff *h4_recv_buf(struct hci_dev *hdev, struct sk_buff *skb,
                        }
 
                        if (!dlen) {
+                               hu->padding = (skb->len - 1) % alignment;
+                               hu->padding = (alignment - hu->padding) % alignment;
+
                                /* No more data, complete frame */
                                (&pkts[i])->recv(hdev, skb);
                                skb = NULL;
                        }
                } else {
+                       hu->padding = (skb->len - 1) % alignment;
+                       hu->padding = (alignment - hu->padding) % alignment;
+
                        /* Complete frame */
                        (&pkts[i])->recv(hdev, skb);
                        skb = NULL;