From 85b0631235beb72069a8e9689bd339baf92de529 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 16 Jul 2012 16:12:17 +0300 Subject: [PATCH] --- yaml --- r: 315697 b: refs/heads/master c: c826ed095d431c91f1d18f9b83b365569fcd977b h: refs/heads/master i: 315695: c3d259fa1979fee8b9c0849f6aca1e0d3eb0cbf7 v: v3 --- [refs] | 2 +- trunk/drivers/bluetooth/hci_h5.c | 49 +++++++++++++++----------------- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/[refs] b/[refs] index 23f27ca307b5..e4f784b80ffe 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 95c5c22097433711de93bc377af89918c6140f77 +refs/heads/master: c826ed095d431c91f1d18f9b83b365569fcd977b diff --git a/trunk/drivers/bluetooth/hci_h5.c b/trunk/drivers/bluetooth/hci_h5.c index 8819ce81ca56..f9067ce25568 100644 --- a/trunk/drivers/bluetooth/hci_h5.c +++ b/trunk/drivers/bluetooth/hci_h5.c @@ -559,14 +559,33 @@ static void h5_slip_one_byte(struct sk_buff *skb, u8 c) } } -static struct sk_buff *h5_build_pkt(struct hci_uart *hu, bool rel, u8 pkt_type, - const u8 *data, size_t len) +static bool valid_packet_type(u8 type) +{ + switch (type) { + case HCI_ACLDATA_PKT: + case HCI_COMMAND_PKT: + case HCI_SCODATA_PKT: + case HCI_3WIRE_LINK_PKT: + case HCI_3WIRE_ACK_PKT: + return true; + default: + return false; + } +} + +static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type, + const u8 *data, size_t len) { struct h5 *h5 = hu->priv; struct sk_buff *nskb; u8 hdr[4]; int i; + if (!valid_packet_type(pkt_type)) { + BT_ERR("Unknown packet type %u", pkt_type); + return NULL; + } + /* * Max len of packet: (original len + 4 (H5 hdr) + 2 (crc)) * 2 * (because bytes 0xc0 and 0xdb are escaped, worst case is when @@ -584,7 +603,8 @@ static struct sk_buff *h5_build_pkt(struct hci_uart *hu, bool rel, u8 pkt_type, hdr[0] = h5->tx_ack << 3; h5->tx_ack_req = false; - if (rel) { + /* Reliable packet? */ + if (pkt_type == HCI_ACLDATA_PKT || pkt_type == HCI_COMMAND_PKT) { hdr[0] |= 1 << 7; hdr[0] |= h5->tx_seq; h5->tx_seq = (h5->tx_seq + 1) % 8; @@ -610,29 +630,6 @@ static struct sk_buff *h5_build_pkt(struct hci_uart *hu, bool rel, u8 pkt_type, return nskb; } -static struct sk_buff *h5_prepare_pkt(struct hci_uart *hu, u8 pkt_type, - const u8 *data, size_t len) -{ - bool rel; - - switch (pkt_type) { - case HCI_ACLDATA_PKT: - case HCI_COMMAND_PKT: - rel = true; - break; - case HCI_SCODATA_PKT: - case HCI_3WIRE_LINK_PKT: - case HCI_3WIRE_ACK_PKT: - rel = false; - break; - default: - BT_ERR("Unknown packet type %u", pkt_type); - return NULL; - } - - return h5_build_pkt(hu, rel, pkt_type, data, len); -} - static struct sk_buff *h5_dequeue(struct hci_uart *hu) { struct h5 *h5 = hu->priv;