From: Tedd Ho-Jeong An <tedd.an@intel.com>
To: BlueZ development <linux-bluetooth@vger.kernel.org>
Cc: tedd.an@intel.com, Johan Hedberg <johan.hedberg@gmail.com>,
Marcel Holtmann <marcel@holtmann.org>
Subject: [PATCH] Bluetooth: btusb: fixed command length alignment for Intel 8260
Date: Thu, 7 May 2015 09:08:56 -0700 [thread overview]
Message-ID: <20150507090856.6c0eca7f@intel.com> (raw)
From: Tedd Ho-Jeong An <tedd.an@intel.com>
This patch fixes the command length alignment issue for Intel Bluetooth
8260.
The length of parameters in the firmware downloading command must be
multiplication of 4. If not, the command must append Intel_NOP command
with extra parameters, zeros, at the end and the firmware file is
already included Intel_NOP command for alignment.
This patch checks the length of the parameters and if it is not aligned,
then read the next command which is Intel_NOP command and append it to
the first read command and send to the device together.
For example, if the data from the firmware file is like this:
8E FC 03 11 22 33 02 FC 03 00 00 00
Previously, btusb sends two commands:
09 FC 06 8E FC 03 11 22 33
09 FC 06 02 FC 03 00 00 00
This will not work due to the length of parameters are 6 and the device
failed to align the data.
This patch will append them together and send one command:
09 FC 0B 8E FC 03 11 22 33 02 FC 03 00 00 00
Signed-off-by: Tedd Ho-Jeong An <tedd.an@intel.com>
---
drivers/bluetooth/btusb.c | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index d21f3b4..57f4eac 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2541,6 +2541,41 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
cmd_len = sizeof(*cmd) + cmd->plen;
+ /* The parameter length of secure send command should be a
+ * multiplication of 4. If it is not, it appends Intel_NOP
+ * command with arbitrary number of parameters (zeros) to meet
+ * the 4 byte alignment.
+ * The FW file has already aligned and appended Intel_NOP
+ * command. So it needs to read next Intel_NOP command and send
+ * them together.
+ */
+ if ((cmd_len % 4) != 0) {
+ /* Make sure the next command is Intel_NOP command.
+ */
+ struct hci_command_hdr *nop_cmd =
+ (void *)(fw_ptr + cmd_len);
+ if (nop_cmd->opcode != 0xfc02) {
+ BT_ERR("%s: Intel_NOP command is missing",
+ hdev->name);
+ err = -EBADF;
+ goto done;
+ }
+
+ /* Command data is updated to include NOP command
+ */
+ cmd_len += sizeof(*nop_cmd) + nop_cmd->plen;
+
+ /* Make sure the total length is aligned and smaller
+ * than maximum param length
+ */
+ if ((cmd_len % 4) != 0 || cmd_len > 252) {
+ BT_ERR("%s: 4 byte alignment failed",
+ hdev->name);
+ err = -EBADF;
+ goto done;
+ }
+ }
+
/* Send each command from the firmware data buffer as
* a single Data fragment.
*/
--
2.1.0
next reply other threads:[~2015-05-07 16:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-07 16:08 Tedd Ho-Jeong An [this message]
2015-05-09 11:15 ` [PATCH] Bluetooth: btusb: fixed command length alignment for Intel 8260 Tedd Ho-Jeong An
2015-05-12 15:31 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150507090856.6c0eca7f@intel.com \
--to=tedd.an@intel.com \
--cc=johan.hedberg@gmail.com \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).