Lines Matching refs:hdev
101 static int __msft_add_monitor_pattern(struct hci_dev *hdev,
103 static int __msft_remove_monitor(struct hci_dev *hdev,
106 bool msft_monitor_supported(struct hci_dev *hdev) in msft_monitor_supported() argument
108 return !!(msft_get_features(hdev) & MSFT_FEATURE_MASK_LE_ADV_MONITOR); in msft_monitor_supported()
111 static bool read_supported_features(struct hci_dev *hdev, in read_supported_features() argument
120 skb = __hci_cmd_sync(hdev, hdev->msft_opcode, sizeof(cp), &cp, in read_supported_features()
123 bt_dev_err(hdev, "Failed to read MSFT supported features (%ld)", in read_supported_features()
129 bt_dev_err(hdev, "MSFT supported features length mismatch"); in read_supported_features()
149 hdev->msft_curve_validity = true; in read_supported_features()
160 static void reregister_monitor(struct hci_dev *hdev, int handle) in reregister_monitor() argument
163 struct msft_data *msft = hdev->msft_data; in reregister_monitor()
167 monitor = idr_get_next(&hdev->adv_monitors_idr, &handle); in reregister_monitor()
171 hci_update_background_scan(hdev); in reregister_monitor()
176 err = __msft_add_monitor_pattern(hdev, monitor); in reregister_monitor()
183 hci_free_adv_monitor(hdev, monitor); in reregister_monitor()
189 static void remove_monitor_on_suspend(struct hci_dev *hdev, int handle) in remove_monitor_on_suspend() argument
192 struct msft_data *msft = hdev->msft_data; in remove_monitor_on_suspend()
196 monitor = idr_get_next(&hdev->adv_monitors_idr, &handle); in remove_monitor_on_suspend()
200 hci_update_background_scan(hdev); in remove_monitor_on_suspend()
205 err = __msft_remove_monitor(hdev, monitor, handle); in remove_monitor_on_suspend()
212 hci_free_adv_monitor(hdev, monitor); in remove_monitor_on_suspend()
218 void msft_suspend(struct hci_dev *hdev) in msft_suspend() argument
220 struct msft_data *msft = hdev->msft_data; in msft_suspend()
225 if (msft_monitor_supported(hdev)) { in msft_suspend()
230 remove_monitor_on_suspend(hdev, 0); in msft_suspend()
235 void msft_resume(struct hci_dev *hdev) in msft_resume() argument
237 struct msft_data *msft = hdev->msft_data; in msft_resume()
242 if (msft_monitor_supported(hdev)) { in msft_resume()
247 reregister_monitor(hdev, 0); in msft_resume()
251 void msft_do_open(struct hci_dev *hdev) in msft_do_open() argument
253 struct msft_data *msft = hdev->msft_data; in msft_do_open()
255 if (hdev->msft_opcode == HCI_OP_NOP) in msft_do_open()
259 bt_dev_err(hdev, "MSFT extension not registered"); in msft_do_open()
263 bt_dev_dbg(hdev, "Initialize MSFT extension"); in msft_do_open()
271 if (!read_supported_features(hdev, msft)) { in msft_do_open()
272 hdev->msft_data = NULL; in msft_do_open()
277 if (msft_monitor_supported(hdev)) { in msft_do_open()
279 msft_set_filter_enable(hdev, true); in msft_do_open()
283 reregister_monitor(hdev, 0); in msft_do_open()
287 void msft_do_close(struct hci_dev *hdev) in msft_do_close() argument
289 struct msft_data *msft = hdev->msft_data; in msft_do_close()
296 bt_dev_dbg(hdev, "Cleanup of MSFT extension"); in msft_do_close()
302 monitor = idr_find(&hdev->adv_monitors_idr, in msft_do_close()
313 void msft_register(struct hci_dev *hdev) in msft_register() argument
317 bt_dev_dbg(hdev, "Register MSFT extension"); in msft_register()
321 bt_dev_err(hdev, "Failed to register MSFT extension"); in msft_register()
326 hdev->msft_data = msft; in msft_register()
329 void msft_unregister(struct hci_dev *hdev) in msft_unregister() argument
331 struct msft_data *msft = hdev->msft_data; in msft_unregister()
336 bt_dev_dbg(hdev, "Unregister MSFT extension"); in msft_unregister()
338 hdev->msft_data = NULL; in msft_unregister()
344 void msft_vendor_evt(struct hci_dev *hdev, struct sk_buff *skb) in msft_vendor_evt() argument
346 struct msft_data *msft = hdev->msft_data; in msft_vendor_evt()
374 bt_dev_dbg(hdev, "MSFT vendor event %u", event); in msft_vendor_evt()
377 __u64 msft_get_features(struct hci_dev *hdev) in msft_get_features() argument
379 struct msft_data *msft = hdev->msft_data; in msft_get_features()
389 (struct hci_dev *hdev, u16 handle, bool is_mgmt) in msft_find_handle_data() argument
392 struct msft_data *msft = hdev->msft_data; in msft_find_handle_data()
404 static void msft_le_monitor_advertisement_cb(struct hci_dev *hdev, in msft_le_monitor_advertisement_cb() argument
411 struct msft_data *msft = hdev->msft_data; in msft_le_monitor_advertisement_cb()
413 hci_dev_lock(hdev); in msft_le_monitor_advertisement_cb()
415 monitor = idr_find(&hdev->adv_monitors_idr, msft->pending_add_handle); in msft_le_monitor_advertisement_cb()
417 bt_dev_err(hdev, "msft add advmon: monitor %u is not found!", in msft_le_monitor_advertisement_cb()
447 hci_free_adv_monitor(hdev, monitor); in msft_le_monitor_advertisement_cb()
451 reregister_monitor(hdev, msft->pending_add_handle + 1); in msft_le_monitor_advertisement_cb()
453 hci_dev_unlock(hdev); in msft_le_monitor_advertisement_cb()
456 hci_add_adv_patterns_monitor_complete(hdev, status); in msft_le_monitor_advertisement_cb()
459 static void msft_le_cancel_monitor_advertisement_cb(struct hci_dev *hdev, in msft_le_cancel_monitor_advertisement_cb() argument
467 struct msft_data *msft = hdev->msft_data; in msft_le_cancel_monitor_advertisement_cb()
480 hci_dev_lock(hdev); in msft_le_cancel_monitor_advertisement_cb()
482 cp = hci_sent_cmd_data(hdev, hdev->msft_opcode); in msft_le_cancel_monitor_advertisement_cb()
483 handle_data = msft_find_handle_data(hdev, cp->handle, false); in msft_le_cancel_monitor_advertisement_cb()
486 monitor = idr_find(&hdev->adv_monitors_idr, in msft_le_cancel_monitor_advertisement_cb()
496 hci_free_adv_monitor(hdev, monitor); in msft_le_cancel_monitor_advertisement_cb()
504 remove_monitor_on_suspend(hdev, in msft_le_cancel_monitor_advertisement_cb()
512 pending = hci_remove_all_adv_monitor(hdev, &err); in msft_le_cancel_monitor_advertisement_cb()
514 hci_dev_unlock(hdev); in msft_le_cancel_monitor_advertisement_cb()
522 hci_dev_unlock(hdev); in msft_le_cancel_monitor_advertisement_cb()
526 hci_remove_adv_monitor_complete(hdev, status); in msft_le_cancel_monitor_advertisement_cb()
529 static void msft_le_set_advertisement_filter_enable_cb(struct hci_dev *hdev, in msft_le_set_advertisement_filter_enable_cb() argument
535 struct msft_data *msft = hdev->msft_data; in msft_le_set_advertisement_filter_enable_cb()
551 hci_dev_lock(hdev); in msft_le_set_advertisement_filter_enable_cb()
553 cp = hci_sent_cmd_data(hdev, hdev->msft_opcode); in msft_le_set_advertisement_filter_enable_cb()
557 bt_dev_warn(hdev, "MSFT filter_enable is already %s", in msft_le_set_advertisement_filter_enable_cb()
560 hci_dev_unlock(hdev); in msft_le_set_advertisement_filter_enable_cb()
593 static int __msft_add_monitor_pattern(struct hci_dev *hdev, in __msft_add_monitor_pattern() argument
601 struct msft_data *msft = hdev->msft_data; in __msft_add_monitor_pattern()
640 hci_req_init(&req, hdev); in __msft_add_monitor_pattern()
641 hci_req_add(&req, hdev->msft_opcode, total_size, cp); in __msft_add_monitor_pattern()
652 int msft_add_monitor_pattern(struct hci_dev *hdev, struct adv_monitor *monitor) in msft_add_monitor_pattern() argument
654 struct msft_data *msft = hdev->msft_data; in msft_add_monitor_pattern()
662 return __msft_add_monitor_pattern(hdev, monitor); in msft_add_monitor_pattern()
666 static int __msft_remove_monitor(struct hci_dev *hdev, in __msft_remove_monitor() argument
672 struct msft_data *msft = hdev->msft_data; in __msft_remove_monitor()
675 handle_data = msft_find_handle_data(hdev, monitor->handle, true); in __msft_remove_monitor()
684 hci_req_init(&req, hdev); in __msft_remove_monitor()
685 hci_req_add(&req, hdev->msft_opcode, sizeof(cp), &cp); in __msft_remove_monitor()
695 int msft_remove_monitor(struct hci_dev *hdev, struct adv_monitor *monitor, in msft_remove_monitor() argument
698 struct msft_data *msft = hdev->msft_data; in msft_remove_monitor()
706 return __msft_remove_monitor(hdev, monitor, handle); in msft_remove_monitor()
711 struct hci_dev *hdev = req->hdev; in msft_req_add_set_filter_enable() local
717 hci_req_add(req, hdev->msft_opcode, sizeof(cp), &cp); in msft_req_add_set_filter_enable()
720 int msft_set_filter_enable(struct hci_dev *hdev, bool enable) in msft_set_filter_enable() argument
723 struct msft_data *msft = hdev->msft_data; in msft_set_filter_enable()
729 hci_req_init(&req, hdev); in msft_set_filter_enable()
736 bool msft_curve_validity(struct hci_dev *hdev) in msft_curve_validity() argument
738 return hdev->msft_curve_validity; in msft_curve_validity()