• Home
  • Raw
  • Download

Lines Matching refs:req

35 void hci_req_init(struct hci_request *req, struct hci_dev *hdev)  in hci_req_init()  argument
37 skb_queue_head_init(&req->cmd_q); in hci_req_init()
38 req->hdev = hdev; in hci_req_init()
39 req->err = 0; in hci_req_init()
42 static int req_run(struct hci_request *req, hci_req_complete_t complete, in req_run() argument
45 struct hci_dev *hdev = req->hdev; in req_run()
49 BT_DBG("length %u", skb_queue_len(&req->cmd_q)); in req_run()
54 if (req->err) { in req_run()
55 skb_queue_purge(&req->cmd_q); in req_run()
56 return req->err; in req_run()
60 if (skb_queue_empty(&req->cmd_q)) in req_run()
63 skb = skb_peek_tail(&req->cmd_q); in req_run()
72 skb_queue_splice_tail(&req->cmd_q, &hdev->cmd_q); in req_run()
80 int hci_req_run(struct hci_request *req, hci_req_complete_t complete) in hci_req_run() argument
82 return req_run(req, complete, NULL); in hci_req_run()
85 int hci_req_run_skb(struct hci_request *req, hci_req_complete_skb_t complete) in hci_req_run_skb() argument
87 return req_run(req, NULL, complete); in hci_req_run_skb()
119 struct hci_request req; in __hci_cmd_sync_ev() local
125 hci_req_init(&req, hdev); in __hci_cmd_sync_ev()
127 hci_req_add_ev(&req, opcode, plen, param, event); in __hci_cmd_sync_ev()
134 err = hci_req_run_skb(&req, hci_req_sync_complete); in __hci_cmd_sync_ev()
188 int __hci_req_sync(struct hci_dev *hdev, int (*func)(struct hci_request *req, in __hci_req_sync() argument
192 struct hci_request req; in __hci_req_sync() local
198 hci_req_init(&req, hdev); in __hci_req_sync()
202 err = func(&req, opt); in __hci_req_sync()
212 err = hci_req_run_skb(&req, hci_req_sync_complete); in __hci_req_sync()
272 int hci_req_sync(struct hci_dev *hdev, int (*req)(struct hci_request *req, in hci_req_sync() argument
283 ret = __hci_req_sync(hdev, req, opt, timeout, hci_status); in hci_req_sync()
316 void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen, in hci_req_add_ev() argument
319 struct hci_dev *hdev = req->hdev; in hci_req_add_ev()
327 if (req->err) in hci_req_add_ev()
334 req->err = -ENOMEM; in hci_req_add_ev()
338 if (skb_queue_empty(&req->cmd_q)) in hci_req_add_ev()
343 skb_queue_tail(&req->cmd_q, skb); in hci_req_add_ev()
346 void hci_req_add(struct hci_request *req, u16 opcode, u32 plen, in hci_req_add() argument
349 hci_req_add_ev(req, opcode, plen, param, 0); in hci_req_add()
352 void __hci_req_write_fast_connectable(struct hci_request *req, bool enable) in __hci_req_write_fast_connectable() argument
354 struct hci_dev *hdev = req->hdev; in __hci_req_write_fast_connectable()
380 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY, in __hci_req_write_fast_connectable()
384 hci_req_add(req, HCI_OP_WRITE_PAGE_SCAN_TYPE, 1, &type); in __hci_req_write_fast_connectable()
393 static void __hci_update_background_scan(struct hci_request *req) in __hci_update_background_scan() argument
395 struct hci_dev *hdev = req->hdev; in __hci_update_background_scan()
433 hci_req_add_le_scan_disable(req); in __hci_update_background_scan()
452 hci_req_add_le_scan_disable(req); in __hci_update_background_scan()
454 hci_req_add_le_passive_scan(req); in __hci_update_background_scan()
460 void __hci_req_update_name(struct hci_request *req) in __hci_req_update_name() argument
462 struct hci_dev *hdev = req->hdev; in __hci_req_update_name()
467 hci_req_add(req, HCI_OP_WRITE_LOCAL_NAME, sizeof(cp), &cp); in __hci_req_update_name()
628 void __hci_req_update_eir(struct hci_request *req) in __hci_req_update_eir() argument
630 struct hci_dev *hdev = req->hdev; in __hci_req_update_eir()
654 hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp); in __hci_req_update_eir()
657 void hci_req_add_le_scan_disable(struct hci_request *req) in hci_req_add_le_scan_disable() argument
663 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp); in hci_req_add_le_scan_disable()
666 static void add_to_white_list(struct hci_request *req, in add_to_white_list() argument
674 hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp); in add_to_white_list()
677 static u8 update_white_list(struct hci_request *req) in update_white_list() argument
679 struct hci_dev *hdev = req->hdev; in update_white_list()
703 hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, in update_white_list()
743 add_to_white_list(req, params); in update_white_list()
767 add_to_white_list(req, params); in update_white_list()
779 void hci_req_add_le_passive_scan(struct hci_request *req) in hci_req_add_le_passive_scan() argument
783 struct hci_dev *hdev = req->hdev; in hci_req_add_le_passive_scan()
793 if (hci_update_random_address(req, false, scan_use_rpa(hdev), in hci_req_add_le_passive_scan()
801 filter_policy = update_white_list(req); in hci_req_add_le_passive_scan()
822 hci_req_add(req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp), in hci_req_add_le_passive_scan()
828 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp), in hci_req_add_le_passive_scan()
851 void __hci_req_disable_advertising(struct hci_request *req) in __hci_req_disable_advertising() argument
855 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable); in __hci_req_disable_advertising()
915 void __hci_req_enable_advertising(struct hci_request *req) in __hci_req_enable_advertising() argument
917 struct hci_dev *hdev = req->hdev; in __hci_req_enable_advertising()
927 __hci_req_disable_advertising(req); in __hci_req_enable_advertising()
948 if (hci_update_random_address(req, !connectable, in __hci_req_enable_advertising()
967 hci_req_add(req, HCI_OP_LE_SET_ADV_PARAM, sizeof(cp), &cp); in __hci_req_enable_advertising()
969 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable); in __hci_req_enable_advertising()
1053 void __hci_req_update_scan_rsp_data(struct hci_request *req, u8 instance) in __hci_req_update_scan_rsp_data() argument
1055 struct hci_dev *hdev = req->hdev; in __hci_req_update_scan_rsp_data()
1078 hci_req_add(req, HCI_OP_LE_SET_SCAN_RSP_DATA, sizeof(cp), &cp); in __hci_req_update_scan_rsp_data()
1149 void __hci_req_update_adv_data(struct hci_request *req, u8 instance) in __hci_req_update_adv_data() argument
1151 struct hci_dev *hdev = req->hdev; in __hci_req_update_adv_data()
1172 hci_req_add(req, HCI_OP_LE_SET_ADV_DATA, sizeof(cp), &cp); in __hci_req_update_adv_data()
1177 struct hci_request req; in hci_req_update_adv_data() local
1179 hci_req_init(&req, hdev); in hci_req_update_adv_data()
1180 __hci_req_update_adv_data(&req, instance); in hci_req_update_adv_data()
1182 return hci_req_run(&req, NULL); in hci_req_update_adv_data()
1192 struct hci_request req; in hci_req_reenable_advertising() local
1198 hci_req_init(&req, hdev); in hci_req_reenable_advertising()
1201 __hci_req_schedule_adv_instance(&req, hdev->cur_adv_instance, in hci_req_reenable_advertising()
1204 __hci_req_update_adv_data(&req, 0x00); in hci_req_reenable_advertising()
1205 __hci_req_update_scan_rsp_data(&req, 0x00); in hci_req_reenable_advertising()
1206 __hci_req_enable_advertising(&req); in hci_req_reenable_advertising()
1209 hci_req_run(&req, adv_enable_complete); in hci_req_reenable_advertising()
1217 struct hci_request req; in adv_timeout_expire() local
1230 hci_req_init(&req, hdev); in adv_timeout_expire()
1232 hci_req_clear_adv_instance(hdev, NULL, &req, instance, false); in adv_timeout_expire()
1235 __hci_req_disable_advertising(&req); in adv_timeout_expire()
1237 hci_req_run(&req, NULL); in adv_timeout_expire()
1243 int __hci_req_schedule_adv_instance(struct hci_request *req, u8 instance, in __hci_req_schedule_adv_instance() argument
1246 struct hci_dev *hdev = req->hdev; in __hci_req_schedule_adv_instance()
1296 __hci_req_update_adv_data(req, instance); in __hci_req_schedule_adv_instance()
1297 __hci_req_update_scan_rsp_data(req, instance); in __hci_req_schedule_adv_instance()
1298 __hci_req_enable_advertising(req); in __hci_req_schedule_adv_instance()
1323 struct hci_request *req, u8 instance, in hci_req_clear_adv_instance() argument
1368 if (!req || !hdev_is_powered(hdev) || in hci_req_clear_adv_instance()
1373 __hci_req_schedule_adv_instance(req, next_instance->instance, in hci_req_clear_adv_instance()
1377 static void set_random_addr(struct hci_request *req, bdaddr_t *rpa) in set_random_addr() argument
1379 struct hci_dev *hdev = req->hdev; in set_random_addr()
1398 hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6, rpa); in set_random_addr()
1401 int hci_update_random_address(struct hci_request *req, bool require_privacy, in hci_update_random_address() argument
1404 struct hci_dev *hdev = req->hdev; in hci_update_random_address()
1426 set_random_addr(req, &hdev->rpa); in hci_update_random_address()
1457 set_random_addr(req, &nrpa); in hci_update_random_address()
1476 hci_req_add(req, HCI_OP_LE_SET_RANDOM_ADDR, 6, in hci_update_random_address()
1507 void __hci_req_update_scan(struct hci_request *req) in __hci_req_update_scan() argument
1509 struct hci_dev *hdev = req->hdev; in __hci_req_update_scan()
1534 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); in __hci_req_update_scan()
1537 static int update_scan(struct hci_request *req, unsigned long opt) in update_scan() argument
1539 hci_dev_lock(req->hdev); in update_scan()
1540 __hci_req_update_scan(req); in update_scan()
1541 hci_dev_unlock(req->hdev); in update_scan()
1552 static int connectable_update(struct hci_request *req, unsigned long opt) in connectable_update() argument
1554 struct hci_dev *hdev = req->hdev; in connectable_update()
1558 __hci_req_update_scan(req); in connectable_update()
1565 __hci_req_update_adv_data(req, hdev->cur_adv_instance); in connectable_update()
1570 __hci_req_enable_advertising(req); in connectable_update()
1572 __hci_update_background_scan(req); in connectable_update()
1600 void __hci_req_update_class(struct hci_request *req) in __hci_req_update_class() argument
1602 struct hci_dev *hdev = req->hdev; in __hci_req_update_class()
1626 hci_req_add(req, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod); in __hci_req_update_class()
1629 static void write_iac(struct hci_request *req) in write_iac() argument
1631 struct hci_dev *hdev = req->hdev; in write_iac()
1654 hci_req_add(req, HCI_OP_WRITE_CURRENT_IAC_LAP, in write_iac()
1658 static int discoverable_update(struct hci_request *req, unsigned long opt) in discoverable_update() argument
1660 struct hci_dev *hdev = req->hdev; in discoverable_update()
1665 write_iac(req); in discoverable_update()
1666 __hci_req_update_scan(req); in discoverable_update()
1667 __hci_req_update_class(req); in discoverable_update()
1674 __hci_req_update_adv_data(req, 0x00); in discoverable_update()
1680 __hci_req_enable_advertising(req); in discoverable_update()
1698 void __hci_abort_conn(struct hci_request *req, struct hci_conn *conn, in __hci_abort_conn() argument
1709 hci_req_add(req, HCI_OP_DISCONN_PHY_LINK, sizeof(cp), in __hci_abort_conn()
1716 hci_req_add(req, HCI_OP_DISCONNECT, sizeof(dc), &dc); in __hci_abort_conn()
1726 hci_req_add(req, HCI_OP_LE_CREATE_CONN_CANCEL, in __hci_abort_conn()
1729 if (req->hdev->hci_ver < BLUETOOTH_VER_1_2) in __hci_abort_conn()
1731 hci_req_add(req, HCI_OP_CREATE_CONN_CANCEL, in __hci_abort_conn()
1742 hci_req_add(req, HCI_OP_REJECT_CONN_REQ, in __hci_abort_conn()
1757 hci_req_add(req, HCI_OP_REJECT_SYNC_CONN_REQ, in __hci_abort_conn()
1775 struct hci_request req; in hci_abort_conn() local
1778 hci_req_init(&req, conn->hdev); in hci_abort_conn()
1780 __hci_abort_conn(&req, conn, reason); in hci_abort_conn()
1782 err = hci_req_run(&req, abort_conn_complete); in hci_abort_conn()
1791 static int update_bg_scan(struct hci_request *req, unsigned long opt) in update_bg_scan() argument
1793 hci_dev_lock(req->hdev); in update_bg_scan()
1794 __hci_update_background_scan(req); in update_bg_scan()
1795 hci_dev_unlock(req->hdev); in update_bg_scan()
1820 static int le_scan_disable(struct hci_request *req, unsigned long opt) in le_scan_disable() argument
1822 hci_req_add_le_scan_disable(req); in le_scan_disable()
1826 static int bredr_inquiry(struct hci_request *req, unsigned long opt) in bredr_inquiry() argument
1833 BT_DBG("%s", req->hdev->name); in bredr_inquiry()
1835 hci_dev_lock(req->hdev); in bredr_inquiry()
1836 hci_inquiry_cache_flush(req->hdev); in bredr_inquiry()
1837 hci_dev_unlock(req->hdev); in bredr_inquiry()
1841 if (req->hdev->discovery.limited) in bredr_inquiry()
1848 hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp); in bredr_inquiry()
1911 static int le_scan_restart(struct hci_request *req, unsigned long opt) in le_scan_restart() argument
1913 struct hci_dev *hdev = req->hdev; in le_scan_restart()
1920 hci_req_add_le_scan_disable(req); in le_scan_restart()
1925 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp); in le_scan_restart()
1979 static void disable_advertising(struct hci_request *req) in disable_advertising() argument
1983 hci_req_add(req, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), &enable); in disable_advertising()
1986 static int active_scan(struct hci_request *req, unsigned long opt) in active_scan() argument
1989 struct hci_dev *hdev = req->hdev; in active_scan()
2011 disable_advertising(req); in active_scan()
2019 hci_req_add_le_scan_disable(req); in active_scan()
2025 err = hci_update_random_address(req, true, scan_use_rpa(hdev), in active_scan()
2036 hci_req_add(req, HCI_OP_LE_SET_SCAN_PARAM, sizeof(param_cp), in active_scan()
2043 hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(enable_cp), in active_scan()
2049 static int interleaved_discov(struct hci_request *req, unsigned long opt) in interleaved_discov() argument
2053 BT_DBG("%s", req->hdev->name); in interleaved_discov()
2055 err = active_scan(req, opt); in interleaved_discov()
2059 return bredr_inquiry(req, DISCOV_BREDR_INQUIRY_LEN); in interleaved_discov()
2131 bool hci_req_stop_discovery(struct hci_request *req) in hci_req_stop_discovery() argument
2133 struct hci_dev *hdev = req->hdev; in hci_req_stop_discovery()
2143 hci_req_add(req, HCI_OP_INQUIRY_CANCEL, 0, NULL); in hci_req_stop_discovery()
2147 hci_req_add_le_scan_disable(req); in hci_req_stop_discovery()
2154 hci_req_add_le_scan_disable(req); in hci_req_stop_discovery()
2170 hci_req_add(req, HCI_OP_REMOTE_NAME_REQ_CANCEL, sizeof(cp), in hci_req_stop_discovery()
2178 static int stop_discovery(struct hci_request *req, unsigned long opt) in stop_discovery() argument
2180 hci_dev_lock(req->hdev); in stop_discovery()
2181 hci_req_stop_discovery(req); in stop_discovery()
2182 hci_dev_unlock(req->hdev); in stop_discovery()
2238 static int powered_update_hci(struct hci_request *req, unsigned long opt) in powered_update_hci() argument
2240 struct hci_dev *hdev = req->hdev; in powered_update_hci()
2249 hci_req_add(req, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode); in powered_update_hci()
2254 hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT, in powered_update_hci()
2271 hci_req_add(req, HCI_OP_WRITE_LE_HOST_SUPPORTED, in powered_update_hci()
2282 __hci_req_update_adv_data(req, 0x00); in powered_update_hci()
2283 __hci_req_update_scan_rsp_data(req, 0x00); in powered_update_hci()
2286 __hci_req_enable_advertising(req); in powered_update_hci()
2292 __hci_req_schedule_adv_instance(req, in powered_update_hci()
2300 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, in powered_update_hci()
2305 __hci_req_write_fast_connectable(req, true); in powered_update_hci()
2307 __hci_req_write_fast_connectable(req, false); in powered_update_hci()
2308 __hci_req_update_scan(req); in powered_update_hci()
2309 __hci_req_update_class(req); in powered_update_hci()
2310 __hci_req_update_name(req); in powered_update_hci()
2311 __hci_req_update_eir(req); in powered_update_hci()