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:
Родитель
f963e8e9d3
Коммит
6d80dfd094
|
@ -95,6 +95,7 @@ enum {
|
|||
|
||||
HCI_LE_SCAN,
|
||||
HCI_SSP_ENABLED,
|
||||
HCI_HS_ENABLED,
|
||||
};
|
||||
|
||||
/* 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))
|
||||
settings |= MGMT_SETTING_SSP;
|
||||
|
||||
if (test_bit(HCI_HS_ENABLED, &hdev->dev_flags))
|
||||
settings |= MGMT_SETTING_HS;
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
|
@ -1093,6 +1096,41 @@ failed:
|
|||
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;
|
||||
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче