Skip to content

Commit

Permalink
Bluetooth: mgmt: Add basic support for Set High Speed command
Browse files Browse the repository at this point in the history
This patch adds rudimentary support for the Set High Speed command in
the form of a new HCI dev flag (HCI_HS_ENABLED).

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Johan Hedberg committed Feb 20, 2012
1 parent f963e8e commit 6d80dfd
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/net/bluetooth/hci.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ enum {

HCI_LE_SCAN,
HCI_SSP_ENABLED,
HCI_HS_ENABLED,
};

/* HCI ioctl defines */
Expand Down
41 changes: 41 additions & 0 deletions net/bluetooth/mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,9 @@ static u32 get_current_settings(struct hci_dev *hdev)
if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
settings |= MGMT_SETTING_SSP;

if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
settings |= MGMT_SETTING_HS;

return settings;
}

Expand Down Expand Up @@ -1093,6 +1096,41 @@ static int set_ssp(struct sock *sk, u16 index, void *data, u16 len)
return err;
}

static int set_hs(struct sock *sk, u16 index, void *data, u16 len)
{
struct mgmt_mode *cp = data;
struct hci_dev *hdev;
int err;

BT_DBG("request for hci%u", index);

if (len != sizeof(*cp))
return cmd_status(sk, index, MGMT_OP_SET_HS,
MGMT_STATUS_INVALID_PARAMS);

hdev = hci_dev_get(index);
if (!hdev)
return cmd_status(sk, index, MGMT_OP_SET_HS,
MGMT_STATUS_INVALID_PARAMS);

if (!enable_hs) {
err = cmd_status(sk, index, MGMT_OP_SET_HS,
MGMT_STATUS_NOT_SUPPORTED);
goto failed;
}

if (cp->val)
set_bit(HCI_HS_ENABLED, &hdev->dev_flags);
else
clear_bit(HCI_HS_ENABLED, &hdev->dev_flags);

err = send_settings_rsp(sk, MGMT_OP_SET_HS, hdev);

failed:
hci_dev_put(hdev);
return err;
}

static int add_uuid(struct sock *sk, u16 index, void *data, u16 len)
{
struct mgmt_cp_add_uuid *cp = data;
Expand Down Expand Up @@ -2655,6 +2693,9 @@ int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
case MGMT_OP_SET_SSP:
err = set_ssp(sk, index, cp, len);
break;
case MGMT_OP_SET_HS:
err = set_hs(sk, index, cp, len);
break;
case MGMT_OP_ADD_UUID:
err = add_uuid(sk, index, cp, len);
break;
Expand Down

0 comments on commit 6d80dfd

Please sign in to comment.