|
@@ -3695,7 +3695,7 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
|
|
|
/* Stand-alone HCI commands must be flagged as
|
|
|
* single-command requests.
|
|
|
*/
|
|
|
- bt_cb(skb)->hci.req_start = true;
|
|
|
+ bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
|
|
|
|
|
|
skb_queue_tail(&hdev->cmd_q, skb);
|
|
|
queue_work(hdev->workqueue, &hdev->cmd_work);
|
|
@@ -4392,7 +4392,7 @@ static bool hci_req_is_complete(struct hci_dev *hdev)
|
|
|
if (!skb)
|
|
|
return true;
|
|
|
|
|
|
- return bt_cb(skb)->hci.req_start;
|
|
|
+ return (bt_cb(skb)->hci.req_flags & HCI_REQ_START);
|
|
|
}
|
|
|
|
|
|
static void hci_resend_last(struct hci_dev *hdev)
|
|
@@ -4452,20 +4452,20 @@ void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status,
|
|
|
* callback would be found in hdev->sent_cmd instead of the
|
|
|
* command queue (hdev->cmd_q).
|
|
|
*/
|
|
|
- if (bt_cb(hdev->sent_cmd)->hci.req_complete) {
|
|
|
- *req_complete = bt_cb(hdev->sent_cmd)->hci.req_complete;
|
|
|
+ if (bt_cb(hdev->sent_cmd)->hci.req_flags & HCI_REQ_SKB) {
|
|
|
+ *req_complete_skb = bt_cb(hdev->sent_cmd)->hci.req_complete_skb;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if (bt_cb(hdev->sent_cmd)->hci.req_complete_skb) {
|
|
|
- *req_complete_skb = bt_cb(hdev->sent_cmd)->hci.req_complete_skb;
|
|
|
+ if (bt_cb(hdev->sent_cmd)->hci.req_complete) {
|
|
|
+ *req_complete = bt_cb(hdev->sent_cmd)->hci.req_complete;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/* Remove all pending commands belonging to this request */
|
|
|
spin_lock_irqsave(&hdev->cmd_q.lock, flags);
|
|
|
while ((skb = __skb_dequeue(&hdev->cmd_q))) {
|
|
|
- if (bt_cb(skb)->hci.req_start) {
|
|
|
+ if (bt_cb(skb)->hci.req_flags & HCI_REQ_START) {
|
|
|
__skb_queue_head(&hdev->cmd_q, skb);
|
|
|
break;
|
|
|
}
|