Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69487371 authored by Johan Hedberg's avatar Johan Hedberg Committed by Marcel Holtmann
Browse files

Bluetooth: Convert Get Clock Info to use cmd_complete callback



This patch converts the Get Clock Information mgmt command to take
advantage of the new cmd_complete callback for pending commands.

Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 2922a94f
Loading
Loading
Loading
Loading
+35 −24
Original line number Diff line number Diff line
@@ -5287,10 +5287,40 @@ static int get_conn_info(struct sock *sk, struct hci_dev *hdev, void *data,
	return err;
}

static void get_clock_info_complete(struct hci_dev *hdev, u8 status)
static void clock_info_cmd_complete(struct pending_cmd *cmd, u8 status)
{
	struct mgmt_cp_get_clock_info *cp;
	struct hci_conn *conn = cmd->user_data;
	struct mgmt_rp_get_clock_info rp;
	struct hci_dev *hdev;

	memset(&rp, 0, sizeof(rp));
	memcpy(&rp.addr, &cmd->param, sizeof(rp.addr));

	if (status)
		goto complete;

	hdev = hci_dev_get(cmd->index);
	if (hdev) {
		rp.local_clock = cpu_to_le32(hdev->clock);
		hci_dev_put(hdev);
	}

	if (conn) {
		rp.piconet_clock = cpu_to_le32(conn->clock);
		rp.accuracy = cpu_to_le16(conn->clock_accuracy);
	}

complete:
	cmd_complete(cmd->sk, cmd->index, cmd->opcode, status, &rp, sizeof(rp));

	if (conn) {
		hci_conn_drop(conn);
		hci_conn_put(conn);
	}
}

static void get_clock_info_complete(struct hci_dev *hdev, u8 status)
{
	struct hci_cp_read_clock *hci_cp;
	struct pending_cmd *cmd;
	struct hci_conn *conn;
@@ -5314,29 +5344,8 @@ static void get_clock_info_complete(struct hci_dev *hdev, u8 status)
	if (!cmd)
		goto unlock;

	cp = cmd->param;

	memset(&rp, 0, sizeof(rp));
	memcpy(&rp.addr, &cp->addr, sizeof(rp.addr));

	if (status)
		goto send_rsp;

	rp.local_clock = cpu_to_le32(hdev->clock);

	if (conn) {
		rp.piconet_clock = cpu_to_le32(conn->clock);
		rp.accuracy = cpu_to_le16(conn->clock_accuracy);
	}

send_rsp:
	cmd_complete(cmd->sk, cmd->index, cmd->opcode, mgmt_status(status),
		     &rp, sizeof(rp));
	cmd->cmd_complete(cmd, mgmt_status(status));
	mgmt_pending_remove(cmd);
	if (conn) {
		hci_conn_drop(conn);
		hci_conn_put(conn);
	}

unlock:
	hci_dev_unlock(hdev);
@@ -5392,6 +5401,8 @@ static int get_clock_info(struct sock *sk, struct hci_dev *hdev, void *data,
		goto unlock;
	}

	cmd->cmd_complete = clock_info_cmd_complete;

	hci_req_init(&req, hdev);

	memset(&hci_cp, 0, sizeof(hci_cp));