瀏覽代碼

[Bluetooth] Remove TXCRC compile option for BCSP driver

The TXCRC compile option is not really useful and thus change it
into a module parameter.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Marcel Holtmann 19 年之前
父節點
當前提交
20dd6f59d6
共有 4 個文件被更改,包括 25 次插入28 次删除
  1. 0 8
      drivers/bluetooth/Kconfig
  2. 23 19
      drivers/bluetooth/hci_bcsp.c
  3. 1 0
      drivers/bluetooth/hci_bcsp.h
  4. 1 1
      drivers/bluetooth/hci_ldisc.c

+ 0 - 8
drivers/bluetooth/Kconfig

@@ -55,14 +55,6 @@ config BT_HCIUART_BCSP
 
 
 	  Say Y here to compile support for HCI BCSP protocol.
 	  Say Y here to compile support for HCI BCSP protocol.
 
 
-config BT_HCIUART_BCSP_TXCRC
-	bool "Transmit CRC with every BCSP packet"
-	depends on BT_HCIUART_BCSP
-	help
-	  If you say Y here, a 16-bit CRC checksum will be transmitted along with
-	  every BCSP (BlueCore Serial Protocol) packet sent to the Bluetooth chip.
-	  This increases reliability, but slightly reduces efficiency.
-
 config BT_HCIBCM203X
 config BT_HCIBCM203X
 	tristate "HCI BCM203x USB driver"
 	tristate "HCI BCM203x USB driver"
 	depends on USB
 	depends on USB

+ 23 - 19
drivers/bluetooth/hci_bcsp.c

@@ -28,7 +28,7 @@
  * $Id: hci_bcsp.c,v 1.2 2002/09/26 05:05:14 maxk Exp $
  * $Id: hci_bcsp.c,v 1.2 2002/09/26 05:05:14 maxk Exp $
  */
  */
 
 
-#define VERSION "0.2"
+#define VERSION "0.3"
 
 
 #include <linux/config.h>
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/module.h>
@@ -60,6 +60,7 @@
 #define BT_DBG( A... )
 #define BT_DBG( A... )
 #endif
 #endif
 
 
+static int txcrc = 1;
 static int hciextn = 1;
 static int hciextn = 1;
 
 
 /* ---- BCSP CRC calculation ---- */
 /* ---- BCSP CRC calculation ---- */
@@ -173,11 +174,8 @@ static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
 {
 {
 	struct sk_buff *nskb;
 	struct sk_buff *nskb;
 	u8 hdr[4], chan;
 	u8 hdr[4], chan;
-	int rel, i;
-
-#ifdef CONFIG_BT_HCIUART_BCSP_TXCRC
 	u16 BCSP_CRC_INIT(bcsp_txmsg_crc);
 	u16 BCSP_CRC_INIT(bcsp_txmsg_crc);
-#endif
+	int rel, i;
 
 
 	switch (pkt_type) {
 	switch (pkt_type) {
 	case HCI_ACLDATA_PKT:
 	case HCI_ACLDATA_PKT:
@@ -240,9 +238,9 @@ static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
 		BT_DBG("Sending packet with seqno %u", bcsp->msgq_txseq);
 		BT_DBG("Sending packet with seqno %u", bcsp->msgq_txseq);
 		bcsp->msgq_txseq = ++(bcsp->msgq_txseq) & 0x07;
 		bcsp->msgq_txseq = ++(bcsp->msgq_txseq) & 0x07;
 	}
 	}
-#ifdef CONFIG_BT_HCIUART_BCSP_TXCRC
-	hdr[0] |= 0x40;
-#endif
+
+	if (bcsp->use_crc)
+		hdr[0] |= 0x40;
 
 
 	hdr[1] = ((len << 4) & 0xff) | chan;
 	hdr[1] = ((len << 4) & 0xff) | chan;
 	hdr[2] = len >> 4;
 	hdr[2] = len >> 4;
@@ -251,25 +249,25 @@ static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
 	/* Put BCSP header */
 	/* Put BCSP header */
 	for (i = 0; i < 4; i++) {
 	for (i = 0; i < 4; i++) {
 		bcsp_slip_one_byte(nskb, hdr[i]);
 		bcsp_slip_one_byte(nskb, hdr[i]);
-#ifdef CONFIG_BT_HCIUART_BCSP_TXCRC
-		bcsp_crc_update(&bcsp_txmsg_crc, hdr[i]);
-#endif
+
+		if (bcsp->use_crc)
+			bcsp_crc_update(&bcsp_txmsg_crc, hdr[i]);
 	}
 	}
 
 
 	/* Put payload */
 	/* Put payload */
 	for (i = 0; i < len; i++) {
 	for (i = 0; i < len; i++) {
 		bcsp_slip_one_byte(nskb, data[i]);
 		bcsp_slip_one_byte(nskb, data[i]);
-#ifdef CONFIG_BT_HCIUART_BCSP_TXCRC
-		bcsp_crc_update(&bcsp_txmsg_crc, data[i]);
-#endif
+
+		if (bcsp->use_crc)
+			bcsp_crc_update(&bcsp_txmsg_crc, data[i]);
 	}
 	}
 
 
-#ifdef CONFIG_BT_HCIUART_BCSP_TXCRC
 	/* Put CRC */
 	/* Put CRC */
-	bcsp_txmsg_crc = bcsp_crc_reverse(bcsp_txmsg_crc);
-	bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
-	bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
-#endif
+	if (bcsp->use_crc) {
+		bcsp_txmsg_crc = bcsp_crc_reverse(bcsp_txmsg_crc);
+		bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
+		bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
+	}
 
 
 	bcsp_slip_msgdelim(nskb);
 	bcsp_slip_msgdelim(nskb);
 	return nskb;
 	return nskb;
@@ -698,6 +696,9 @@ static int bcsp_open(struct hci_uart *hu)
 
 
 	bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
 	bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
 
 
+	if (txcrc)
+		bcsp->use_crc = 1;
+
 	return 0;
 	return 0;
 }
 }
 
 
@@ -743,5 +744,8 @@ int bcsp_deinit(void)
 	return hci_uart_unregister_proto(&bcsp);
 	return hci_uart_unregister_proto(&bcsp);
 }
 }
 
 
+module_param(txcrc, bool, 0644);
+MODULE_PARM_DESC(txcrc, "Transmit CRC with every BCSP packet");
+
 module_param(hciextn, bool, 0644);
 module_param(hciextn, bool, 0644);
 MODULE_PARM_DESC(hciextn, "Convert HCI Extensions into BCSP packets");
 MODULE_PARM_DESC(hciextn, "Convert HCI Extensions into BCSP packets");

+ 1 - 0
drivers/bluetooth/hci_bcsp.h

@@ -60,6 +60,7 @@ struct bcsp_struct {
 		BCSP_ESCSTATE_ESC
 		BCSP_ESCSTATE_ESC
 	} rx_esc_state;
 	} rx_esc_state;
 
 
+	u8	use_crc;
 	u16     message_crc;
 	u16     message_crc;
 	u8      txack_req;		/* Do we need to send ack's to the peer? */
 	u8      txack_req;		/* Do we need to send ack's to the peer? */
 
 

+ 1 - 1
drivers/bluetooth/hci_ldisc.c

@@ -27,7 +27,7 @@
  *
  *
  * $Id: hci_ldisc.c,v 1.5 2002/10/02 18:37:20 maxk Exp $    
  * $Id: hci_ldisc.c,v 1.5 2002/10/02 18:37:20 maxk Exp $    
  */
  */
-#define VERSION "2.1"
+#define VERSION "2.2"
 
 
 #include <linux/config.h>
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/module.h>