diff options
| -rw-r--r-- | include/net/bluetooth/hci_core.h | 6 | ||||
| -rw-r--r-- | net/bluetooth/hci_core.c | 6 | ||||
| -rw-r--r-- | net/bluetooth/hci_event.c | 61 |
3 files changed, 73 insertions, 0 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 79724c87ab00..f20f6bd668bd 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
| @@ -220,6 +220,12 @@ struct hci_dev { | |||
| 220 | __u16 le_conn_max_interval; | 220 | __u16 le_conn_max_interval; |
| 221 | __u16 le_conn_latency; | 221 | __u16 le_conn_latency; |
| 222 | __u16 le_supv_timeout; | 222 | __u16 le_supv_timeout; |
| 223 | __u16 le_def_tx_len; | ||
| 224 | __u16 le_def_tx_time; | ||
| 225 | __u16 le_max_tx_len; | ||
| 226 | __u16 le_max_tx_time; | ||
| 227 | __u16 le_max_rx_len; | ||
| 228 | __u16 le_max_rx_time; | ||
| 223 | __u16 discov_interleaved_timeout; | 229 | __u16 discov_interleaved_timeout; |
| 224 | __u16 conn_info_min_age; | 230 | __u16 conn_info_min_age; |
| 225 | __u16 conn_info_max_age; | 231 | __u16 conn_info_max_age; |
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 01e35ef6d201..47f0311d1006 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
| @@ -2896,6 +2896,12 @@ struct hci_dev *hci_alloc_dev(void) | |||
| 2896 | hdev->le_conn_max_interval = 0x0038; | 2896 | hdev->le_conn_max_interval = 0x0038; |
| 2897 | hdev->le_conn_latency = 0x0000; | 2897 | hdev->le_conn_latency = 0x0000; |
| 2898 | hdev->le_supv_timeout = 0x002a; | 2898 | hdev->le_supv_timeout = 0x002a; |
| 2899 | hdev->le_def_tx_len = 0x001b; | ||
| 2900 | hdev->le_def_tx_time = 0x0148; | ||
| 2901 | hdev->le_max_tx_len = 0x001b; | ||
| 2902 | hdev->le_max_tx_time = 0x0148; | ||
| 2903 | hdev->le_max_rx_len = 0x001b; | ||
| 2904 | hdev->le_max_rx_time = 0x0148; | ||
| 2899 | 2905 | ||
| 2900 | hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT; | 2906 | hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT; |
| 2901 | hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT; | 2907 | hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT; |
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index a412eb1e1f61..a3055e90a5bb 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c | |||
| @@ -1280,6 +1280,55 @@ static void hci_cc_le_read_supported_states(struct hci_dev *hdev, | |||
| 1280 | memcpy(hdev->le_states, rp->le_states, 8); | 1280 | memcpy(hdev->le_states, rp->le_states, 8); |
| 1281 | } | 1281 | } |
| 1282 | 1282 | ||
| 1283 | static void hci_cc_le_read_def_data_len(struct hci_dev *hdev, | ||
| 1284 | struct sk_buff *skb) | ||
| 1285 | { | ||
| 1286 | struct hci_rp_le_read_def_data_len *rp = (void *) skb->data; | ||
| 1287 | |||
| 1288 | BT_DBG("%s status 0x%2.2x", hdev->name, rp->status); | ||
| 1289 | |||
| 1290 | if (rp->status) | ||
| 1291 | return; | ||
| 1292 | |||
| 1293 | hdev->le_def_tx_len = le16_to_cpu(rp->tx_len); | ||
| 1294 | hdev->le_def_tx_time = le16_to_cpu(rp->tx_time); | ||
| 1295 | } | ||
| 1296 | |||
| 1297 | static void hci_cc_le_write_def_data_len(struct hci_dev *hdev, | ||
| 1298 | struct sk_buff *skb) | ||
| 1299 | { | ||
| 1300 | struct hci_cp_le_write_def_data_len *sent; | ||
| 1301 | __u8 status = *((__u8 *) skb->data); | ||
| 1302 | |||
| 1303 | BT_DBG("%s status 0x%2.2x", hdev->name, status); | ||
| 1304 | |||
| 1305 | if (status) | ||
| 1306 | return; | ||
| 1307 | |||
| 1308 | sent = hci_sent_cmd_data(hdev, HCI_OP_LE_WRITE_DEF_DATA_LEN); | ||
| 1309 | if (!sent) | ||
| 1310 | return; | ||
| 1311 | |||
| 1312 | hdev->le_def_tx_len = le16_to_cpu(sent->tx_len); | ||
| 1313 | hdev->le_def_tx_time = le16_to_cpu(sent->tx_time); | ||
| 1314 | } | ||
| 1315 | |||
| 1316 | static void hci_cc_le_read_max_data_len(struct hci_dev *hdev, | ||
| 1317 | struct sk_buff *skb) | ||
| 1318 | { | ||
| 1319 | struct hci_rp_le_read_max_data_len *rp = (void *) skb->data; | ||
| 1320 | |||
| 1321 | BT_DBG("%s status 0x%2.2x", hdev->name, rp->status); | ||
| 1322 | |||
| 1323 | if (rp->status) | ||
| 1324 | return; | ||
| 1325 | |||
| 1326 | hdev->le_max_tx_len = le16_to_cpu(rp->tx_len); | ||
| 1327 | hdev->le_max_tx_time = le16_to_cpu(rp->tx_time); | ||
| 1328 | hdev->le_max_rx_len = le16_to_cpu(rp->rx_len); | ||
| 1329 | hdev->le_max_rx_time = le16_to_cpu(rp->rx_time); | ||
| 1330 | } | ||
| 1331 | |||
| 1283 | static void hci_cc_write_le_host_supported(struct hci_dev *hdev, | 1332 | static void hci_cc_write_le_host_supported(struct hci_dev *hdev, |
| 1284 | struct sk_buff *skb) | 1333 | struct sk_buff *skb) |
| 1285 | { | 1334 | { |
| @@ -2847,6 +2896,18 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb) | |||
| 2847 | hci_cc_le_read_supported_states(hdev, skb); | 2896 | hci_cc_le_read_supported_states(hdev, skb); |
| 2848 | break; | 2897 | break; |
| 2849 | 2898 | ||
| 2899 | case HCI_OP_LE_READ_DEF_DATA_LEN: | ||
| 2900 | hci_cc_le_read_def_data_len(hdev, skb); | ||
| 2901 | break; | ||
| 2902 | |||
| 2903 | case HCI_OP_LE_WRITE_DEF_DATA_LEN: | ||
| 2904 | hci_cc_le_write_def_data_len(hdev, skb); | ||
| 2905 | break; | ||
| 2906 | |||
| 2907 | case HCI_OP_LE_READ_MAX_DATA_LEN: | ||
| 2908 | hci_cc_le_read_max_data_len(hdev, skb); | ||
| 2909 | break; | ||
| 2910 | |||
| 2850 | case HCI_OP_WRITE_LE_HOST_SUPPORTED: | 2911 | case HCI_OP_WRITE_LE_HOST_SUPPORTED: |
| 2851 | hci_cc_write_le_host_supported(hdev, skb); | 2912 | hci_cc_write_le_host_supported(hdev, skb); |
| 2852 | break; | 2913 | break; |
