xref: /openbmc/linux/drivers/bluetooth/hci_bcsp.c (revision a2cce7a9)
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 (bt_cb(skb)->pkt_type) {
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 	bt_cb(nskb)->pkt_type = 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 = bcsp_prepare_pkt(bcsp, skb->data, skb->len, bt_cb(skb)->pkt_type);
295 		if (nskb) {
296 			kfree_skb(skb);
297 			return nskb;
298 		} else {
299 			skb_queue_head(&bcsp->unrel, skb);
300 			BT_ERR("Could not dequeue pkt because alloc_skb failed");
301 		}
302 	}
303 
304 	/* Now, try to send a reliable pkt. We can only send a
305 	   reliable packet if the number of packets sent but not yet ack'ed
306 	   is < than the winsize */
307 
308 	spin_lock_irqsave_nested(&bcsp->unack.lock, flags, SINGLE_DEPTH_NESTING);
309 
310 	if (bcsp->unack.qlen < BCSP_TXWINSIZE) {
311 		skb = skb_dequeue(&bcsp->rel);
312 		if (skb != NULL) {
313 			struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len,
314 								bt_cb(skb)->pkt_type);
315 			if (nskb) {
316 				__skb_queue_tail(&bcsp->unack, skb);
317 				mod_timer(&bcsp->tbcsp, jiffies + HZ / 4);
318 				spin_unlock_irqrestore(&bcsp->unack.lock, flags);
319 				return nskb;
320 			} else {
321 				skb_queue_head(&bcsp->rel, skb);
322 				BT_ERR("Could not dequeue pkt because alloc_skb failed");
323 			}
324 		}
325 	}
326 
327 	spin_unlock_irqrestore(&bcsp->unack.lock, flags);
328 
329 	/* We could not send a reliable packet, either because there are
330 	   none or because there are too many unack'ed pkts. Did we receive
331 	   any packets we have not acknowledged yet ? */
332 
333 	if (bcsp->txack_req) {
334 		/* if so, craft an empty ACK pkt and send it on BCSP unreliable
335 		   channel 0 */
336 		struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, NULL, 0, BCSP_ACK_PKT);
337 		return nskb;
338 	}
339 
340 	/* We have nothing to send */
341 	return NULL;
342 }
343 
344 static int bcsp_flush(struct hci_uart *hu)
345 {
346 	BT_DBG("hu %p", hu);
347 	return 0;
348 }
349 
350 /* Remove ack'ed packets */
351 static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
352 {
353 	struct sk_buff *skb, *tmp;
354 	unsigned long flags;
355 	int i, pkts_to_be_removed;
356 	u8 seqno;
357 
358 	spin_lock_irqsave(&bcsp->unack.lock, flags);
359 
360 	pkts_to_be_removed = skb_queue_len(&bcsp->unack);
361 	seqno = bcsp->msgq_txseq;
362 
363 	while (pkts_to_be_removed) {
364 		if (bcsp->rxack == seqno)
365 			break;
366 		pkts_to_be_removed--;
367 		seqno = (seqno - 1) & 0x07;
368 	}
369 
370 	if (bcsp->rxack != seqno)
371 		BT_ERR("Peer acked invalid packet");
372 
373 	BT_DBG("Removing %u pkts out of %u, up to seqno %u",
374 	       pkts_to_be_removed, skb_queue_len(&bcsp->unack),
375 	       (seqno - 1) & 0x07);
376 
377 	i = 0;
378 	skb_queue_walk_safe(&bcsp->unack, skb, tmp) {
379 		if (i >= pkts_to_be_removed)
380 			break;
381 		i++;
382 
383 		__skb_unlink(skb, &bcsp->unack);
384 		kfree_skb(skb);
385 	}
386 
387 	if (skb_queue_empty(&bcsp->unack))
388 		del_timer(&bcsp->tbcsp);
389 
390 	spin_unlock_irqrestore(&bcsp->unack.lock, flags);
391 
392 	if (i != pkts_to_be_removed)
393 		BT_ERR("Removed only %u out of %u pkts", i, pkts_to_be_removed);
394 }
395 
396 /* Handle BCSP link-establishment packets. When we
397    detect a "sync" packet, symptom that the BT module has reset,
398    we do nothing :) (yet) */
399 static void bcsp_handle_le_pkt(struct hci_uart *hu)
400 {
401 	struct bcsp_struct *bcsp = hu->priv;
402 	u8 conf_pkt[4]     = { 0xad, 0xef, 0xac, 0xed };
403 	u8 conf_rsp_pkt[4] = { 0xde, 0xad, 0xd0, 0xd0 };
404 	u8 sync_pkt[4]     = { 0xda, 0xdc, 0xed, 0xed };
405 
406 	/* spot "conf" pkts and reply with a "conf rsp" pkt */
407 	if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
408 			!memcmp(&bcsp->rx_skb->data[4], conf_pkt, 4)) {
409 		struct sk_buff *nskb = alloc_skb(4, GFP_ATOMIC);
410 
411 		BT_DBG("Found a LE conf pkt");
412 		if (!nskb)
413 			return;
414 		memcpy(skb_put(nskb, 4), conf_rsp_pkt, 4);
415 		bt_cb(nskb)->pkt_type = BCSP_LE_PKT;
416 
417 		skb_queue_head(&bcsp->unrel, nskb);
418 		hci_uart_tx_wakeup(hu);
419 	}
420 	/* Spot "sync" pkts. If we find one...disaster! */
421 	else if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
422 			!memcmp(&bcsp->rx_skb->data[4], sync_pkt, 4)) {
423 		BT_ERR("Found a LE sync pkt, card has reset");
424 	}
425 }
426 
427 static inline void bcsp_unslip_one_byte(struct bcsp_struct *bcsp, unsigned char byte)
428 {
429 	const u8 c0 = 0xc0, db = 0xdb;
430 
431 	switch (bcsp->rx_esc_state) {
432 	case BCSP_ESCSTATE_NOESC:
433 		switch (byte) {
434 		case 0xdb:
435 			bcsp->rx_esc_state = BCSP_ESCSTATE_ESC;
436 			break;
437 		default:
438 			memcpy(skb_put(bcsp->rx_skb, 1), &byte, 1);
439 			if ((bcsp->rx_skb->data[0] & 0x40) != 0 &&
440 					bcsp->rx_state != BCSP_W4_CRC)
441 				bcsp_crc_update(&bcsp->message_crc, byte);
442 			bcsp->rx_count--;
443 		}
444 		break;
445 
446 	case BCSP_ESCSTATE_ESC:
447 		switch (byte) {
448 		case 0xdc:
449 			memcpy(skb_put(bcsp->rx_skb, 1), &c0, 1);
450 			if ((bcsp->rx_skb->data[0] & 0x40) != 0 &&
451 					bcsp->rx_state != BCSP_W4_CRC)
452 				bcsp_crc_update(&bcsp->message_crc, 0xc0);
453 			bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
454 			bcsp->rx_count--;
455 			break;
456 
457 		case 0xdd:
458 			memcpy(skb_put(bcsp->rx_skb, 1), &db, 1);
459 			if ((bcsp->rx_skb->data[0] & 0x40) != 0 &&
460 					bcsp->rx_state != BCSP_W4_CRC)
461 				bcsp_crc_update(&bcsp->message_crc, 0xdb);
462 			bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
463 			bcsp->rx_count--;
464 			break;
465 
466 		default:
467 			BT_ERR("Invalid byte %02x after esc byte", byte);
468 			kfree_skb(bcsp->rx_skb);
469 			bcsp->rx_skb = NULL;
470 			bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
471 			bcsp->rx_count = 0;
472 		}
473 	}
474 }
475 
476 static void bcsp_complete_rx_pkt(struct hci_uart *hu)
477 {
478 	struct bcsp_struct *bcsp = hu->priv;
479 	int pass_up;
480 
481 	if (bcsp->rx_skb->data[0] & 0x80) {	/* reliable pkt */
482 		BT_DBG("Received seqno %u from card", bcsp->rxseq_txack);
483 		bcsp->rxseq_txack++;
484 		bcsp->rxseq_txack %= 0x8;
485 		bcsp->txack_req    = 1;
486 
487 		/* If needed, transmit an ack pkt */
488 		hci_uart_tx_wakeup(hu);
489 	}
490 
491 	bcsp->rxack = (bcsp->rx_skb->data[0] >> 3) & 0x07;
492 	BT_DBG("Request for pkt %u from card", bcsp->rxack);
493 
494 	bcsp_pkt_cull(bcsp);
495 	if ((bcsp->rx_skb->data[1] & 0x0f) == 6 &&
496 			bcsp->rx_skb->data[0] & 0x80) {
497 		bt_cb(bcsp->rx_skb)->pkt_type = HCI_ACLDATA_PKT;
498 		pass_up = 1;
499 	} else if ((bcsp->rx_skb->data[1] & 0x0f) == 5 &&
500 			bcsp->rx_skb->data[0] & 0x80) {
501 		bt_cb(bcsp->rx_skb)->pkt_type = HCI_EVENT_PKT;
502 		pass_up = 1;
503 	} else if ((bcsp->rx_skb->data[1] & 0x0f) == 7) {
504 		bt_cb(bcsp->rx_skb)->pkt_type = HCI_SCODATA_PKT;
505 		pass_up = 1;
506 	} else if ((bcsp->rx_skb->data[1] & 0x0f) == 1 &&
507 			!(bcsp->rx_skb->data[0] & 0x80)) {
508 		bcsp_handle_le_pkt(hu);
509 		pass_up = 0;
510 	} else
511 		pass_up = 0;
512 
513 	if (!pass_up) {
514 		struct hci_event_hdr hdr;
515 		u8 desc = (bcsp->rx_skb->data[1] & 0x0f);
516 
517 		if (desc != 0 && desc != 1) {
518 			if (hciextn) {
519 				desc |= 0xc0;
520 				skb_pull(bcsp->rx_skb, 4);
521 				memcpy(skb_push(bcsp->rx_skb, 1), &desc, 1);
522 
523 				hdr.evt = 0xff;
524 				hdr.plen = bcsp->rx_skb->len;
525 				memcpy(skb_push(bcsp->rx_skb, HCI_EVENT_HDR_SIZE), &hdr, HCI_EVENT_HDR_SIZE);
526 				bt_cb(bcsp->rx_skb)->pkt_type = HCI_EVENT_PKT;
527 
528 				hci_recv_frame(hu->hdev, bcsp->rx_skb);
529 			} else {
530 				BT_ERR("Packet for unknown channel (%u %s)",
531 					bcsp->rx_skb->data[1] & 0x0f,
532 					bcsp->rx_skb->data[0] & 0x80 ?
533 					"reliable" : "unreliable");
534 				kfree_skb(bcsp->rx_skb);
535 			}
536 		} else
537 			kfree_skb(bcsp->rx_skb);
538 	} else {
539 		/* Pull out BCSP hdr */
540 		skb_pull(bcsp->rx_skb, 4);
541 
542 		hci_recv_frame(hu->hdev, bcsp->rx_skb);
543 	}
544 
545 	bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
546 	bcsp->rx_skb = NULL;
547 }
548 
549 static u16 bscp_get_crc(struct bcsp_struct *bcsp)
550 {
551 	return get_unaligned_be16(&bcsp->rx_skb->data[bcsp->rx_skb->len - 2]);
552 }
553 
554 /* Recv data */
555 static int bcsp_recv(struct hci_uart *hu, const void *data, int count)
556 {
557 	struct bcsp_struct *bcsp = hu->priv;
558 	const unsigned char *ptr;
559 
560 	BT_DBG("hu %p count %d rx_state %d rx_count %ld",
561 		hu, count, bcsp->rx_state, bcsp->rx_count);
562 
563 	ptr = data;
564 	while (count) {
565 		if (bcsp->rx_count) {
566 			if (*ptr == 0xc0) {
567 				BT_ERR("Short BCSP packet");
568 				kfree_skb(bcsp->rx_skb);
569 				bcsp->rx_state = BCSP_W4_PKT_START;
570 				bcsp->rx_count = 0;
571 			} else
572 				bcsp_unslip_one_byte(bcsp, *ptr);
573 
574 			ptr++; count--;
575 			continue;
576 		}
577 
578 		switch (bcsp->rx_state) {
579 		case BCSP_W4_BCSP_HDR:
580 			if ((0xff & (u8) ~ (bcsp->rx_skb->data[0] + bcsp->rx_skb->data[1] +
581 					bcsp->rx_skb->data[2])) != bcsp->rx_skb->data[3]) {
582 				BT_ERR("Error in BCSP hdr checksum");
583 				kfree_skb(bcsp->rx_skb);
584 				bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
585 				bcsp->rx_count = 0;
586 				continue;
587 			}
588 			if (bcsp->rx_skb->data[0] & 0x80	/* reliable pkt */
589 			    		&& (bcsp->rx_skb->data[0] & 0x07) != bcsp->rxseq_txack) {
590 				BT_ERR("Out-of-order packet arrived, got %u expected %u",
591 					bcsp->rx_skb->data[0] & 0x07, bcsp->rxseq_txack);
592 
593 				kfree_skb(bcsp->rx_skb);
594 				bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
595 				bcsp->rx_count = 0;
596 				continue;
597 			}
598 			bcsp->rx_state = BCSP_W4_DATA;
599 			bcsp->rx_count = (bcsp->rx_skb->data[1] >> 4) +
600 					(bcsp->rx_skb->data[2] << 4);	/* May be 0 */
601 			continue;
602 
603 		case BCSP_W4_DATA:
604 			if (bcsp->rx_skb->data[0] & 0x40) {	/* pkt with crc */
605 				bcsp->rx_state = BCSP_W4_CRC;
606 				bcsp->rx_count = 2;
607 			} else
608 				bcsp_complete_rx_pkt(hu);
609 			continue;
610 
611 		case BCSP_W4_CRC:
612 			if (bitrev16(bcsp->message_crc) != bscp_get_crc(bcsp)) {
613 				BT_ERR ("Checksum failed: computed %04x received %04x",
614 					bitrev16(bcsp->message_crc),
615 					bscp_get_crc(bcsp));
616 
617 				kfree_skb(bcsp->rx_skb);
618 				bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
619 				bcsp->rx_count = 0;
620 				continue;
621 			}
622 			skb_trim(bcsp->rx_skb, bcsp->rx_skb->len - 2);
623 			bcsp_complete_rx_pkt(hu);
624 			continue;
625 
626 		case BCSP_W4_PKT_DELIMITER:
627 			switch (*ptr) {
628 			case 0xc0:
629 				bcsp->rx_state = BCSP_W4_PKT_START;
630 				break;
631 			default:
632 				/*BT_ERR("Ignoring byte %02x", *ptr);*/
633 				break;
634 			}
635 			ptr++; count--;
636 			break;
637 
638 		case BCSP_W4_PKT_START:
639 			switch (*ptr) {
640 			case 0xc0:
641 				ptr++; count--;
642 				break;
643 
644 			default:
645 				bcsp->rx_state = BCSP_W4_BCSP_HDR;
646 				bcsp->rx_count = 4;
647 				bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
648 				BCSP_CRC_INIT(bcsp->message_crc);
649 
650 				/* Do not increment ptr or decrement count
651 				 * Allocate packet. Max len of a BCSP pkt=
652 				 * 0xFFF (payload) +4 (header) +2 (crc) */
653 
654 				bcsp->rx_skb = bt_skb_alloc(0x1005, GFP_ATOMIC);
655 				if (!bcsp->rx_skb) {
656 					BT_ERR("Can't allocate mem for new packet");
657 					bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
658 					bcsp->rx_count = 0;
659 					return 0;
660 				}
661 				break;
662 			}
663 			break;
664 		}
665 	}
666 	return count;
667 }
668 
669 	/* Arrange to retransmit all messages in the relq. */
670 static void bcsp_timed_event(unsigned long arg)
671 {
672 	struct hci_uart *hu = (struct hci_uart *) arg;
673 	struct bcsp_struct *bcsp = hu->priv;
674 	struct sk_buff *skb;
675 	unsigned long flags;
676 
677 	BT_DBG("hu %p retransmitting %u pkts", hu, bcsp->unack.qlen);
678 
679 	spin_lock_irqsave_nested(&bcsp->unack.lock, flags, SINGLE_DEPTH_NESTING);
680 
681 	while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) {
682 		bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07;
683 		skb_queue_head(&bcsp->rel, skb);
684 	}
685 
686 	spin_unlock_irqrestore(&bcsp->unack.lock, flags);
687 
688 	hci_uart_tx_wakeup(hu);
689 }
690 
691 static int bcsp_open(struct hci_uart *hu)
692 {
693 	struct bcsp_struct *bcsp;
694 
695 	BT_DBG("hu %p", hu);
696 
697 	bcsp = kzalloc(sizeof(*bcsp), GFP_KERNEL);
698 	if (!bcsp)
699 		return -ENOMEM;
700 
701 	hu->priv = bcsp;
702 	skb_queue_head_init(&bcsp->unack);
703 	skb_queue_head_init(&bcsp->rel);
704 	skb_queue_head_init(&bcsp->unrel);
705 
706 	init_timer(&bcsp->tbcsp);
707 	bcsp->tbcsp.function = bcsp_timed_event;
708 	bcsp->tbcsp.data     = (u_long) hu;
709 
710 	bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
711 
712 	if (txcrc)
713 		bcsp->use_crc = 1;
714 
715 	return 0;
716 }
717 
718 static int bcsp_close(struct hci_uart *hu)
719 {
720 	struct bcsp_struct *bcsp = hu->priv;
721 
722 	del_timer_sync(&bcsp->tbcsp);
723 
724 	hu->priv = NULL;
725 
726 	BT_DBG("hu %p", hu);
727 
728 	skb_queue_purge(&bcsp->unack);
729 	skb_queue_purge(&bcsp->rel);
730 	skb_queue_purge(&bcsp->unrel);
731 
732 	kfree(bcsp);
733 	return 0;
734 }
735 
736 static const struct hci_uart_proto bcsp = {
737 	.id		= HCI_UART_BCSP,
738 	.name		= "BCSP",
739 	.open		= bcsp_open,
740 	.close		= bcsp_close,
741 	.enqueue	= bcsp_enqueue,
742 	.dequeue	= bcsp_dequeue,
743 	.recv		= bcsp_recv,
744 	.flush		= bcsp_flush
745 };
746 
747 int __init bcsp_init(void)
748 {
749 	return hci_uart_register_proto(&bcsp);
750 }
751 
752 int __exit bcsp_deinit(void)
753 {
754 	return hci_uart_unregister_proto(&bcsp);
755 }
756 
757 module_param(txcrc, bool, 0644);
758 MODULE_PARM_DESC(txcrc, "Transmit CRC with every BCSP packet");
759 
760 module_param(hciextn, bool, 0644);
761 MODULE_PARM_DESC(hciextn, "Convert HCI Extensions into BCSP packets");
762