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