mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-18 06:15:12 +00:00
Bluetooth: mgmt: Add basic support for Set High Speed command
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>
This commit is contained in:
parent
f963e8e9d3
commit
6d80dfd094
@ -95,6 +95,7 @@ enum {
|
|||||||
|
|
||||||
HCI_LE_SCAN,
|
HCI_LE_SCAN,
|
||||||
HCI_SSP_ENABLED,
|
HCI_SSP_ENABLED,
|
||||||
|
HCI_HS_ENABLED,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* HCI ioctl defines */
|
/* HCI ioctl defines */
|
||||||
|
@ -418,6 +418,9 @@ static u32 get_current_settings(struct hci_dev *hdev)
|
|||||||
if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
|
if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags))
|
||||||
settings |= MGMT_SETTING_SSP;
|
settings |= MGMT_SETTING_SSP;
|
||||||
|
|
||||||
|
if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
|
||||||
|
settings |= MGMT_SETTING_HS;
|
||||||
|
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1093,6 +1096,41 @@ failed:
|
|||||||
return err;
|
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)
|
static int add_uuid(struct sock *sk, u16 index, void *data, u16 len)
|
||||||
{
|
{
|
||||||
struct mgmt_cp_add_uuid *cp = data;
|
struct mgmt_cp_add_uuid *cp = data;
|
||||||
@ -2655,6 +2693,9 @@ int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
|
|||||||
case MGMT_OP_SET_SSP:
|
case MGMT_OP_SET_SSP:
|
||||||
err = set_ssp(sk, index, cp, len);
|
err = set_ssp(sk, index, cp, len);
|
||||||
break;
|
break;
|
||||||
|
case MGMT_OP_SET_HS:
|
||||||
|
err = set_hs(sk, index, cp, len);
|
||||||
|
break;
|
||||||
case MGMT_OP_ADD_UUID:
|
case MGMT_OP_ADD_UUID:
|
||||||
err = add_uuid(sk, index, cp, len);
|
err = add_uuid(sk, index, cp, len);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user