Skip to content

Commit

Permalink
Bluetooth: Fix command complete/status for discovery commands
Browse files Browse the repository at this point in the history
This patch adds the necessary code to send proper command status or
command complete events to the start/stop discovery management commands.
Before this patch these events were completely missing.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
  • Loading branch information
Johan Hedberg authored and Gustavo F. Padovan committed Nov 7, 2011
1 parent 262038f commit 164a6e7
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/net/bluetooth/hci_core.h
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,7 @@ int mgmt_read_local_oob_data_reply_complete(u16 index, u8 *hash, u8 *randomizer,
int mgmt_device_found(u16 index, bdaddr_t *bdaddr, u8 *dev_class, s8 rssi,
u8 *eir);
int mgmt_remote_name(u16 index, bdaddr_t *bdaddr, u8 *name);
int mgmt_inquiry_failed(u16 index, u8 status);
int mgmt_discovering(u16 index, u8 discovering);
int mgmt_device_blocked(u16 index, bdaddr_t *bdaddr);
int mgmt_device_unblocked(u16 index, bdaddr_t *bdaddr);
Expand Down
2 changes: 2 additions & 0 deletions net/bluetooth/hci_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -979,6 +979,8 @@ static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
if (status) {
hci_req_complete(hdev, HCI_OP_INQUIRY, status);
hci_conn_check_pending(hdev);
if (test_bit(HCI_MGMT, &hdev->flags))
mgmt_inquiry_failed(hdev->id, status);
return;
}

Expand Down
27 changes: 27 additions & 0 deletions net/bluetooth/mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -2339,8 +2339,35 @@ int mgmt_remote_name(u16 index, bdaddr_t *bdaddr, u8 *name)
return mgmt_event(MGMT_EV_REMOTE_NAME, index, &ev, sizeof(ev), NULL);
}

int mgmt_inquiry_failed(u16 index, u8 status)
{
struct pending_cmd *cmd;
int err;

cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, index);
if (!cmd)
return -ENOENT;

err = cmd_status(cmd->sk, index, cmd->opcode, status);
mgmt_pending_remove(cmd);

return err;
}

int mgmt_discovering(u16 index, u8 discovering)
{
struct pending_cmd *cmd;

if (discovering)
cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, index);
else
cmd = mgmt_pending_find(MGMT_OP_STOP_DISCOVERY, index);

if (cmd != NULL) {
cmd_complete(cmd->sk, index, cmd->opcode, NULL, 0);
mgmt_pending_remove(cmd);
}

return mgmt_event(MGMT_EV_DISCOVERING, index, &discovering,
sizeof(discovering), NULL);
}
Expand Down

0 comments on commit 164a6e7

Please sign in to comment.