Bluetooth: Introduce new hci_req_add function
This function is analogous to hci_send_cmd() but instead of directly queuing the command to hdev->cmd_q it adds it to the local queue of the asynchronous HCI request being build (inside struct hci_request). This is the main function used for building asynchronous requests and there should be one or more calls to it between calls to hci_req_init and hci_req_run. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
This commit is contained in:
parent
1ca3a9d06e
commit
71c76a170e
|
@ -1048,6 +1048,7 @@ struct hci_request {
|
|||
|
||||
void hci_req_init(struct hci_request *req, struct hci_dev *hdev);
|
||||
int hci_req_run(struct hci_request *req, hci_req_complete_t complete);
|
||||
int hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param);
|
||||
|
||||
int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param);
|
||||
void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
|
||||
|
|
|
@ -2517,6 +2517,28 @@ int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Queue a command to an asynchronous HCI request */
|
||||
int hci_req_add(struct hci_request *req, u16 opcode, u32 plen, void *param)
|
||||
{
|
||||
struct hci_dev *hdev = req->hdev;
|
||||
struct sk_buff *skb;
|
||||
|
||||
BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen);
|
||||
|
||||
skb = hci_prepare_cmd(hdev, opcode, plen, param);
|
||||
if (!skb) {
|
||||
BT_ERR("%s no memory for command", hdev->name);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (skb_queue_empty(&req->cmd_q))
|
||||
bt_cb(skb)->req.start = true;
|
||||
|
||||
skb_queue_tail(&req->cmd_q, skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Get data from the previously sent command */
|
||||
void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue