Merge tag 'iio-fixes-for-4.5a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23...
[cascardo/linux.git] / drivers / bluetooth / hci_bcsp.c
1 /*
2  *
3  *  Bluetooth HCI UART driver
4  *
5  *  Copyright (C) 2002-2003  Fabrizio Gennari <fabrizio.gennari@philips.com>
6  *  Copyright (C) 2004-2005  Marcel Holtmann <marcel@holtmann.org>
7  *
8  *
9  *  This program is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License as published by
11  *  the Free Software Foundation; either version 2 of the License, or
12  *  (at your option) any later version.
13  *
14  *  This program is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  *  GNU General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License
20  *  along with this program; if not, write to the Free Software
21  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  *
23  */
24
25 #include <linux/module.h>
26
27 #include <linux/kernel.h>
28 #include <linux/init.h>
29 #include <linux/types.h>
30 #include <linux/fcntl.h>
31 #include <linux/interrupt.h>
32 #include <linux/ptrace.h>
33 #include <linux/poll.h>
34
35 #include <linux/slab.h>
36 #include <linux/tty.h>
37 #include <linux/errno.h>
38 #include <linux/string.h>
39 #include <linux/signal.h>
40 #include <linux/ioctl.h>
41 #include <linux/skbuff.h>
42 #include <linux/bitrev.h>
43 #include <asm/unaligned.h>
44
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
47
48 #include "hci_uart.h"
49
50 static bool txcrc = true;
51 static bool hciextn = true;
52
53 #define BCSP_TXWINSIZE  4
54
55 #define BCSP_ACK_PKT    0x05
56 #define BCSP_LE_PKT     0x06
57
58 struct bcsp_struct {
59         struct sk_buff_head unack;      /* Unack'ed packets queue */
60         struct sk_buff_head rel;        /* Reliable packets queue */
61         struct sk_buff_head unrel;      /* Unreliable packets queue */
62
63         unsigned long rx_count;
64         struct  sk_buff *rx_skb;
65         u8      rxseq_txack;            /* rxseq == txack. */
66         u8      rxack;                  /* Last packet sent by us that the peer ack'ed */
67         struct  timer_list tbcsp;
68
69         enum {
70                 BCSP_W4_PKT_DELIMITER,
71                 BCSP_W4_PKT_START,
72                 BCSP_W4_BCSP_HDR,
73                 BCSP_W4_DATA,
74                 BCSP_W4_CRC
75         } rx_state;
76
77         enum {
78                 BCSP_ESCSTATE_NOESC,
79                 BCSP_ESCSTATE_ESC
80         } rx_esc_state;
81
82         u8      use_crc;
83         u16     message_crc;
84         u8      txack_req;              /* Do we need to send ack's to the peer? */
85
86         /* Reliable packet sequence number - used to assign seq to each rel pkt. */
87         u8      msgq_txseq;
88 };
89
90 /* ---- BCSP CRC calculation ---- */
91
92 /* Table for calculating CRC for polynomial 0x1021, LSB processed first,
93 initial value 0xffff, bits shifted in reverse order. */
94
95 static const u16 crc_table[] = {
96         0x0000, 0x1081, 0x2102, 0x3183,
97         0x4204, 0x5285, 0x6306, 0x7387,
98         0x8408, 0x9489, 0xa50a, 0xb58b,
99         0xc60c, 0xd68d, 0xe70e, 0xf78f
100 };
101
102 /* Initialise the crc calculator */
103 #define BCSP_CRC_INIT(x) x = 0xffff
104
105 /*
106    Update crc with next data byte
107
108    Implementation note
109         The data byte is treated as two nibbles.  The crc is generated
110         in reverse, i.e., bits are fed into the register from the top.
111 */
112 static void bcsp_crc_update(u16 *crc, u8 d)
113 {
114         u16 reg = *crc;
115
116         reg = (reg >> 4) ^ crc_table[(reg ^ d) & 0x000f];
117         reg = (reg >> 4) ^ crc_table[(reg ^ (d >> 4)) & 0x000f];
118
119         *crc = reg;
120 }
121
122 /* ---- BCSP core ---- */
123
124 static void bcsp_slip_msgdelim(struct sk_buff *skb)
125 {
126         const char pkt_delim = 0xc0;
127
128         memcpy(skb_put(skb, 1), &pkt_delim, 1);
129 }
130
131 static void bcsp_slip_one_byte(struct sk_buff *skb, u8 c)
132 {
133         const char esc_c0[2] = { 0xdb, 0xdc };
134         const char esc_db[2] = { 0xdb, 0xdd };
135
136         switch (c) {
137         case 0xc0:
138                 memcpy(skb_put(skb, 2), &esc_c0, 2);
139                 break;
140         case 0xdb:
141                 memcpy(skb_put(skb, 2), &esc_db, 2);
142                 break;
143         default:
144                 memcpy(skb_put(skb, 1), &c, 1);
145         }
146 }
147
148 static int bcsp_enqueue(struct hci_uart *hu, struct sk_buff *skb)
149 {
150         struct bcsp_struct *bcsp = hu->priv;
151
152         if (skb->len > 0xFFF) {
153                 BT_ERR("Packet too long");
154                 kfree_skb(skb);
155                 return 0;
156         }
157
158         switch (hci_skb_pkt_type(skb)) {
159         case HCI_ACLDATA_PKT:
160         case HCI_COMMAND_PKT:
161                 skb_queue_tail(&bcsp->rel, skb);
162                 break;
163
164         case HCI_SCODATA_PKT:
165                 skb_queue_tail(&bcsp->unrel, skb);
166                 break;
167
168         default:
169                 BT_ERR("Unknown packet type");
170                 kfree_skb(skb);
171                 break;
172         }
173
174         return 0;
175 }
176
177 static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
178                 int len, int pkt_type)
179 {
180         struct sk_buff *nskb;
181         u8 hdr[4], chan;
182         u16 BCSP_CRC_INIT(bcsp_txmsg_crc);
183         int rel, i;
184
185         switch (pkt_type) {
186         case HCI_ACLDATA_PKT:
187                 chan = 6;       /* BCSP ACL channel */
188                 rel = 1;        /* reliable channel */
189                 break;
190         case HCI_COMMAND_PKT:
191                 chan = 5;       /* BCSP cmd/evt channel */
192                 rel = 1;        /* reliable channel */
193                 break;
194         case HCI_SCODATA_PKT:
195                 chan = 7;       /* BCSP SCO channel */
196                 rel = 0;        /* unreliable channel */
197                 break;
198         case BCSP_LE_PKT:
199                 chan = 1;       /* BCSP LE channel */
200                 rel = 0;        /* unreliable channel */
201                 break;
202         case BCSP_ACK_PKT:
203                 chan = 0;       /* BCSP internal channel */
204                 rel = 0;        /* unreliable channel */
205                 break;
206         default:
207                 BT_ERR("Unknown packet type");
208                 return NULL;
209         }
210
211         if (hciextn && chan == 5) {
212                 __le16 opcode = ((struct hci_command_hdr *)data)->opcode;
213
214                 /* Vendor specific commands */
215                 if (hci_opcode_ogf(__le16_to_cpu(opcode)) == 0x3f) {
216                         u8 desc = *(data + HCI_COMMAND_HDR_SIZE);
217                         if ((desc & 0xf0) == 0xc0) {
218                                 data += HCI_COMMAND_HDR_SIZE + 1;
219                                 len  -= HCI_COMMAND_HDR_SIZE + 1;
220                                 chan = desc & 0x0f;
221                         }
222                 }
223         }
224
225         /* Max len of packet: (original len +4(bcsp hdr) +2(crc))*2
226            (because bytes 0xc0 and 0xdb are escaped, worst case is
227            when the packet is all made of 0xc0 and 0xdb :) )
228            + 2 (0xc0 delimiters at start and end). */
229
230         nskb = alloc_skb((len + 6) * 2 + 2, GFP_ATOMIC);
231         if (!nskb)
232                 return NULL;
233
234         hci_skb_pkt_type(nskb) = pkt_type;
235
236         bcsp_slip_msgdelim(nskb);
237
238         hdr[0] = bcsp->rxseq_txack << 3;
239         bcsp->txack_req = 0;
240         BT_DBG("We request packet no %u to card", bcsp->rxseq_txack);
241
242         if (rel) {
243                 hdr[0] |= 0x80 + bcsp->msgq_txseq;
244                 BT_DBG("Sending packet with seqno %u", bcsp->msgq_txseq);
245                 bcsp->msgq_txseq = (bcsp->msgq_txseq + 1) & 0x07;
246         }
247
248         if (bcsp->use_crc)
249                 hdr[0] |= 0x40;
250
251         hdr[1] = ((len << 4) & 0xff) | chan;
252         hdr[2] = len >> 4;
253         hdr[3] = ~(hdr[0] + hdr[1] + hdr[2]);
254
255         /* Put BCSP header */
256         for (i = 0; i < 4; i++) {
257                 bcsp_slip_one_byte(nskb, hdr[i]);
258
259                 if (bcsp->use_crc)
260                         bcsp_crc_update(&bcsp_txmsg_crc, hdr[i]);
261         }
262
263         /* Put payload */
264         for (i = 0; i < len; i++) {
265                 bcsp_slip_one_byte(nskb, data[i]);
266
267                 if (bcsp->use_crc)
268                         bcsp_crc_update(&bcsp_txmsg_crc, data[i]);
269         }
270
271         /* Put CRC */
272         if (bcsp->use_crc) {
273                 bcsp_txmsg_crc = bitrev16(bcsp_txmsg_crc);
274                 bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
275                 bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
276         }
277
278         bcsp_slip_msgdelim(nskb);
279         return nskb;
280 }
281
282 /* This is a rewrite of pkt_avail in ABCSP */
283 static struct sk_buff *bcsp_dequeue(struct hci_uart *hu)
284 {
285         struct bcsp_struct *bcsp = hu->priv;
286         unsigned long flags;
287         struct sk_buff *skb;
288         
289         /* First of all, check for unreliable messages in the queue,
290            since they have priority */
291
292         skb = skb_dequeue(&bcsp->unrel);
293         if (skb != NULL) {
294                 struct sk_buff *nskb;
295
296                 nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len,
297                                         hci_skb_pkt_type(skb));
298                 if (nskb) {
299                         kfree_skb(skb);
300                         return nskb;
301                 } else {
302                         skb_queue_head(&bcsp->unrel, skb);
303                         BT_ERR("Could not dequeue pkt because alloc_skb failed");
304                 }
305         }
306
307         /* Now, try to send a reliable pkt. We can only send a
308            reliable packet if the number of packets sent but not yet ack'ed
309            is < than the winsize */
310
311         spin_lock_irqsave_nested(&bcsp->unack.lock, flags, SINGLE_DEPTH_NESTING);
312
313         if (bcsp->unack.qlen < BCSP_TXWINSIZE) {
314                 skb = skb_dequeue(&bcsp->rel);
315                 if (skb != NULL) {
316                         struct sk_buff *nskb;
317
318                         nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len,
319                                                 hci_skb_pkt_type(skb));
320                         if (nskb) {
321                                 __skb_queue_tail(&bcsp->unack, skb);
322                                 mod_timer(&bcsp->tbcsp, jiffies + HZ / 4);
323                                 spin_unlock_irqrestore(&bcsp->unack.lock, flags);
324                                 return nskb;
325                         } else {
326                                 skb_queue_head(&bcsp->rel, skb);
327                                 BT_ERR("Could not dequeue pkt because alloc_skb failed");
328                         }
329                 }
330         }
331
332         spin_unlock_irqrestore(&bcsp->unack.lock, flags);
333
334         /* We could not send a reliable packet, either because there are
335            none or because there are too many unack'ed pkts. Did we receive
336            any packets we have not acknowledged yet ? */
337
338         if (bcsp->txack_req) {
339                 /* if so, craft an empty ACK pkt and send it on BCSP unreliable
340                    channel 0 */
341                 struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, NULL, 0, BCSP_ACK_PKT);
342                 return nskb;
343         }
344
345         /* We have nothing to send */
346         return NULL;
347 }
348
349 static int bcsp_flush(struct hci_uart *hu)
350 {
351         BT_DBG("hu %p", hu);
352         return 0;
353 }
354
355 /* Remove ack'ed packets */
356 static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
357 {
358         struct sk_buff *skb, *tmp;
359         unsigned long flags;
360         int i, pkts_to_be_removed;
361         u8 seqno;
362
363         spin_lock_irqsave(&bcsp->unack.lock, flags);
364
365         pkts_to_be_removed = skb_queue_len(&bcsp->unack);
366         seqno = bcsp->msgq_txseq;
367
368         while (pkts_to_be_removed) {
369                 if (bcsp->rxack == seqno)
370                         break;
371                 pkts_to_be_removed--;
372                 seqno = (seqno - 1) & 0x07;
373         }
374
375         if (bcsp->rxack != seqno)
376                 BT_ERR("Peer acked invalid packet");
377
378         BT_DBG("Removing %u pkts out of %u, up to seqno %u",
379                pkts_to_be_removed, skb_queue_len(&bcsp->unack),
380                (seqno - 1) & 0x07);
381
382         i = 0;
383         skb_queue_walk_safe(&bcsp->unack, skb, tmp) {
384                 if (i >= pkts_to_be_removed)
385                         break;
386                 i++;
387
388                 __skb_unlink(skb, &bcsp->unack);
389                 kfree_skb(skb);
390         }
391
392         if (skb_queue_empty(&bcsp->unack))
393                 del_timer(&bcsp->tbcsp);
394
395         spin_unlock_irqrestore(&bcsp->unack.lock, flags);
396
397         if (i != pkts_to_be_removed)
398                 BT_ERR("Removed only %u out of %u pkts", i, pkts_to_be_removed);
399 }
400
401 /* Handle BCSP link-establishment packets. When we
402    detect a "sync" packet, symptom that the BT module has reset,
403    we do nothing :) (yet) */
404 static void bcsp_handle_le_pkt(struct hci_uart *hu)
405 {
406         struct bcsp_struct *bcsp = hu->priv;
407         u8 conf_pkt[4]     = { 0xad, 0xef, 0xac, 0xed };
408         u8 conf_rsp_pkt[4] = { 0xde, 0xad, 0xd0, 0xd0 };
409         u8 sync_pkt[4]     = { 0xda, 0xdc, 0xed, 0xed };
410
411         /* spot "conf" pkts and reply with a "conf rsp" pkt */
412         if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
413                         !memcmp(&bcsp->rx_skb->data[4], conf_pkt, 4)) {
414                 struct sk_buff *nskb = alloc_skb(4, GFP_ATOMIC);
415
416                 BT_DBG("Found a LE conf pkt");
417                 if (!nskb)
418                         return;
419                 memcpy(skb_put(nskb, 4), conf_rsp_pkt, 4);
420                 hci_skb_pkt_type(nskb) = BCSP_LE_PKT;
421
422                 skb_queue_head(&bcsp->unrel, nskb);
423                 hci_uart_tx_wakeup(hu);
424         }
425         /* Spot "sync" pkts. If we find one...disaster! */
426         else if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
427                         !memcmp(&bcsp->rx_skb->data[4], sync_pkt, 4)) {
428                 BT_ERR("Found a LE sync pkt, card has reset");
429         }
430 }
431
432 static inline void bcsp_unslip_one_byte(struct bcsp_struct *bcsp, unsigned char byte)
433 {
434         const u8 c0 = 0xc0, db = 0xdb;
435
436         switch (bcsp->rx_esc_state) {
437         case BCSP_ESCSTATE_NOESC:
438                 switch (byte) {
439                 case 0xdb:
440                         bcsp->rx_esc_state = BCSP_ESCSTATE_ESC;
441                         break;
442                 default:
443                         memcpy(skb_put(bcsp->rx_skb, 1), &byte, 1);
444                         if ((bcsp->rx_skb->data[0] & 0x40) != 0 &&
445                                         bcsp->rx_state != BCSP_W4_CRC)
446                                 bcsp_crc_update(&bcsp->message_crc, byte);
447                         bcsp->rx_count--;
448                 }
449                 break;
450
451         case BCSP_ESCSTATE_ESC:
452                 switch (byte) {
453                 case 0xdc:
454                         memcpy(skb_put(bcsp->rx_skb, 1), &c0, 1);
455                         if ((bcsp->rx_skb->data[0] & 0x40) != 0 &&
456                                         bcsp->rx_state != BCSP_W4_CRC)
457                                 bcsp_crc_update(&bcsp->message_crc, 0xc0);
458                         bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
459                         bcsp->rx_count--;
460                         break;
461
462                 case 0xdd:
463                         memcpy(skb_put(bcsp->rx_skb, 1), &db, 1);
464                         if ((bcsp->rx_skb->data[0] & 0x40) != 0 &&
465                                         bcsp->rx_state != BCSP_W4_CRC) 
466                                 bcsp_crc_update(&bcsp->message_crc, 0xdb);
467                         bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
468                         bcsp->rx_count--;
469                         break;
470
471                 default:
472                         BT_ERR("Invalid byte %02x after esc byte", byte);
473                         kfree_skb(bcsp->rx_skb);
474                         bcsp->rx_skb = NULL;
475                         bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
476                         bcsp->rx_count = 0;
477                 }
478         }
479 }
480
481 static void bcsp_complete_rx_pkt(struct hci_uart *hu)
482 {
483         struct bcsp_struct *bcsp = hu->priv;
484         int pass_up;
485
486         if (bcsp->rx_skb->data[0] & 0x80) {     /* reliable pkt */
487                 BT_DBG("Received seqno %u from card", bcsp->rxseq_txack);
488                 bcsp->rxseq_txack++;
489                 bcsp->rxseq_txack %= 0x8;
490                 bcsp->txack_req    = 1;
491
492                 /* If needed, transmit an ack pkt */
493                 hci_uart_tx_wakeup(hu);
494         }
495
496         bcsp->rxack = (bcsp->rx_skb->data[0] >> 3) & 0x07;
497         BT_DBG("Request for pkt %u from card", bcsp->rxack);
498
499         bcsp_pkt_cull(bcsp);
500         if ((bcsp->rx_skb->data[1] & 0x0f) == 6 &&
501                         bcsp->rx_skb->data[0] & 0x80) {
502                 hci_skb_pkt_type(bcsp->rx_skb) = HCI_ACLDATA_PKT;
503                 pass_up = 1;
504         } else if ((bcsp->rx_skb->data[1] & 0x0f) == 5 &&
505                         bcsp->rx_skb->data[0] & 0x80) {
506                 hci_skb_pkt_type(bcsp->rx_skb) = HCI_EVENT_PKT;
507                 pass_up = 1;
508         } else if ((bcsp->rx_skb->data[1] & 0x0f) == 7) {
509                 hci_skb_pkt_type(bcsp->rx_skb) = HCI_SCODATA_PKT;
510                 pass_up = 1;
511         } else if ((bcsp->rx_skb->data[1] & 0x0f) == 1 &&
512                         !(bcsp->rx_skb->data[0] & 0x80)) {
513                 bcsp_handle_le_pkt(hu);
514                 pass_up = 0;
515         } else
516                 pass_up = 0;
517
518         if (!pass_up) {
519                 struct hci_event_hdr hdr;
520                 u8 desc = (bcsp->rx_skb->data[1] & 0x0f);
521
522                 if (desc != 0 && desc != 1) {
523                         if (hciextn) {
524                                 desc |= 0xc0;
525                                 skb_pull(bcsp->rx_skb, 4);
526                                 memcpy(skb_push(bcsp->rx_skb, 1), &desc, 1);
527
528                                 hdr.evt = 0xff;
529                                 hdr.plen = bcsp->rx_skb->len;
530                                 memcpy(skb_push(bcsp->rx_skb, HCI_EVENT_HDR_SIZE), &hdr, HCI_EVENT_HDR_SIZE);
531                                 hci_skb_pkt_type(bcsp->rx_skb) = HCI_EVENT_PKT;
532
533                                 hci_recv_frame(hu->hdev, bcsp->rx_skb);
534                         } else {
535                                 BT_ERR("Packet for unknown channel (%u %s)",
536                                         bcsp->rx_skb->data[1] & 0x0f,
537                                         bcsp->rx_skb->data[0] & 0x80 ? 
538                                         "reliable" : "unreliable");
539                                 kfree_skb(bcsp->rx_skb);
540                         }
541                 } else
542                         kfree_skb(bcsp->rx_skb);
543         } else {
544                 /* Pull out BCSP hdr */
545                 skb_pull(bcsp->rx_skb, 4);
546
547                 hci_recv_frame(hu->hdev, bcsp->rx_skb);
548         }
549
550         bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
551         bcsp->rx_skb = NULL;
552 }
553
554 static u16 bscp_get_crc(struct bcsp_struct *bcsp)
555 {
556         return get_unaligned_be16(&bcsp->rx_skb->data[bcsp->rx_skb->len - 2]);
557 }
558
559 /* Recv data */
560 static int bcsp_recv(struct hci_uart *hu, const void *data, int count)
561 {
562         struct bcsp_struct *bcsp = hu->priv;
563         const unsigned char *ptr;
564
565         BT_DBG("hu %p count %d rx_state %d rx_count %ld", 
566                 hu, count, bcsp->rx_state, bcsp->rx_count);
567
568         ptr = data;
569         while (count) {
570                 if (bcsp->rx_count) {
571                         if (*ptr == 0xc0) {
572                                 BT_ERR("Short BCSP packet");
573                                 kfree_skb(bcsp->rx_skb);
574                                 bcsp->rx_state = BCSP_W4_PKT_START;
575                                 bcsp->rx_count = 0;
576                         } else
577                                 bcsp_unslip_one_byte(bcsp, *ptr);
578
579                         ptr++; count--;
580                         continue;
581                 }
582
583                 switch (bcsp->rx_state) {
584                 case BCSP_W4_BCSP_HDR:
585                         if ((0xff & (u8) ~ (bcsp->rx_skb->data[0] + bcsp->rx_skb->data[1] +
586                                         bcsp->rx_skb->data[2])) != bcsp->rx_skb->data[3]) {
587                                 BT_ERR("Error in BCSP hdr checksum");
588                                 kfree_skb(bcsp->rx_skb);
589                                 bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
590                                 bcsp->rx_count = 0;
591                                 continue;
592                         }
593                         if (bcsp->rx_skb->data[0] & 0x80        /* reliable pkt */
594                                         && (bcsp->rx_skb->data[0] & 0x07) != bcsp->rxseq_txack) {
595                                 BT_ERR("Out-of-order packet arrived, got %u expected %u",
596                                         bcsp->rx_skb->data[0] & 0x07, bcsp->rxseq_txack);
597
598                                 kfree_skb(bcsp->rx_skb);
599                                 bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
600                                 bcsp->rx_count = 0;
601                                 continue;
602                         }
603                         bcsp->rx_state = BCSP_W4_DATA;
604                         bcsp->rx_count = (bcsp->rx_skb->data[1] >> 4) + 
605                                         (bcsp->rx_skb->data[2] << 4);   /* May be 0 */
606                         continue;
607
608                 case BCSP_W4_DATA:
609                         if (bcsp->rx_skb->data[0] & 0x40) {     /* pkt with crc */
610                                 bcsp->rx_state = BCSP_W4_CRC;
611                                 bcsp->rx_count = 2;
612                         } else
613                                 bcsp_complete_rx_pkt(hu);
614                         continue;
615
616                 case BCSP_W4_CRC:
617                         if (bitrev16(bcsp->message_crc) != bscp_get_crc(bcsp)) {
618                                 BT_ERR ("Checksum failed: computed %04x received %04x",
619                                         bitrev16(bcsp->message_crc),
620                                         bscp_get_crc(bcsp));
621
622                                 kfree_skb(bcsp->rx_skb);
623                                 bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
624                                 bcsp->rx_count = 0;
625                                 continue;
626                         }
627                         skb_trim(bcsp->rx_skb, bcsp->rx_skb->len - 2);
628                         bcsp_complete_rx_pkt(hu);
629                         continue;
630
631                 case BCSP_W4_PKT_DELIMITER:
632                         switch (*ptr) {
633                         case 0xc0:
634                                 bcsp->rx_state = BCSP_W4_PKT_START;
635                                 break;
636                         default:
637                                 /*BT_ERR("Ignoring byte %02x", *ptr);*/
638                                 break;
639                         }
640                         ptr++; count--;
641                         break;
642
643                 case BCSP_W4_PKT_START:
644                         switch (*ptr) {
645                         case 0xc0:
646                                 ptr++; count--;
647                                 break;
648
649                         default:
650                                 bcsp->rx_state = BCSP_W4_BCSP_HDR;
651                                 bcsp->rx_count = 4;
652                                 bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
653                                 BCSP_CRC_INIT(bcsp->message_crc);
654
655                                 /* Do not increment ptr or decrement count
656                                  * Allocate packet. Max len of a BCSP pkt= 
657                                  * 0xFFF (payload) +4 (header) +2 (crc) */
658
659                                 bcsp->rx_skb = bt_skb_alloc(0x1005, GFP_ATOMIC);
660                                 if (!bcsp->rx_skb) {
661                                         BT_ERR("Can't allocate mem for new packet");
662                                         bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
663                                         bcsp->rx_count = 0;
664                                         return 0;
665                                 }
666                                 break;
667                         }
668                         break;
669                 }
670         }
671         return count;
672 }
673
674         /* Arrange to retransmit all messages in the relq. */
675 static void bcsp_timed_event(unsigned long arg)
676 {
677         struct hci_uart *hu = (struct hci_uart *) arg;
678         struct bcsp_struct *bcsp = hu->priv;
679         struct sk_buff *skb;
680         unsigned long flags;
681
682         BT_DBG("hu %p retransmitting %u pkts", hu, bcsp->unack.qlen);
683
684         spin_lock_irqsave_nested(&bcsp->unack.lock, flags, SINGLE_DEPTH_NESTING);
685
686         while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) {
687                 bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07;
688                 skb_queue_head(&bcsp->rel, skb);
689         }
690
691         spin_unlock_irqrestore(&bcsp->unack.lock, flags);
692
693         hci_uart_tx_wakeup(hu);
694 }
695
696 static int bcsp_open(struct hci_uart *hu)
697 {
698         struct bcsp_struct *bcsp;
699
700         BT_DBG("hu %p", hu);
701
702         bcsp = kzalloc(sizeof(*bcsp), GFP_KERNEL);
703         if (!bcsp)
704                 return -ENOMEM;
705
706         hu->priv = bcsp;
707         skb_queue_head_init(&bcsp->unack);
708         skb_queue_head_init(&bcsp->rel);
709         skb_queue_head_init(&bcsp->unrel);
710
711         init_timer(&bcsp->tbcsp);
712         bcsp->tbcsp.function = bcsp_timed_event;
713         bcsp->tbcsp.data     = (u_long) hu;
714
715         bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
716
717         if (txcrc)
718                 bcsp->use_crc = 1;
719
720         return 0;
721 }
722
723 static int bcsp_close(struct hci_uart *hu)
724 {
725         struct bcsp_struct *bcsp = hu->priv;
726
727         del_timer_sync(&bcsp->tbcsp);
728
729         hu->priv = NULL;
730
731         BT_DBG("hu %p", hu);
732
733         skb_queue_purge(&bcsp->unack);
734         skb_queue_purge(&bcsp->rel);
735         skb_queue_purge(&bcsp->unrel);
736
737         kfree(bcsp);
738         return 0;
739 }
740
741 static const struct hci_uart_proto bcsp = {
742         .id             = HCI_UART_BCSP,
743         .name           = "BCSP",
744         .open           = bcsp_open,
745         .close          = bcsp_close,
746         .enqueue        = bcsp_enqueue,
747         .dequeue        = bcsp_dequeue,
748         .recv           = bcsp_recv,
749         .flush          = bcsp_flush
750 };
751
752 int __init bcsp_init(void)
753 {
754         return hci_uart_register_proto(&bcsp);
755 }
756
757 int __exit bcsp_deinit(void)
758 {
759         return hci_uart_unregister_proto(&bcsp);
760 }
761
762 module_param(txcrc, bool, 0644);
763 MODULE_PARM_DESC(txcrc, "Transmit CRC with every BCSP packet");
764
765 module_param(hciextn, bool, 0644);
766 MODULE_PARM_DESC(hciextn, "Convert HCI Extensions into BCSP packets");