diff options
Diffstat (limited to 'net/bluetooth/hci_request.h')
-rw-r--r-- | net/bluetooth/hci_request.h | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/net/bluetooth/hci_request.h b/net/bluetooth/hci_request.h index 25c7f1305dcb..64ff8c040d50 100644 --- a/net/bluetooth/hci_request.h +++ b/net/bluetooth/hci_request.h | |||
@@ -20,6 +20,9 @@ | |||
20 | SOFTWARE IS DISCLAIMED. | 20 | SOFTWARE IS DISCLAIMED. |
21 | */ | 21 | */ |
22 | 22 | ||
23 | #define hci_req_sync_lock(hdev) mutex_lock(&hdev->req_lock) | ||
24 | #define hci_req_sync_unlock(hdev) mutex_unlock(&hdev->req_lock) | ||
25 | |||
23 | struct hci_request { | 26 | struct hci_request { |
24 | struct hci_dev *hdev; | 27 | struct hci_dev *hdev; |
25 | struct sk_buff_head cmd_q; | 28 | struct sk_buff_head cmd_q; |
@@ -41,21 +44,61 @@ void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status, | |||
41 | hci_req_complete_t *req_complete, | 44 | hci_req_complete_t *req_complete, |
42 | hci_req_complete_skb_t *req_complete_skb); | 45 | hci_req_complete_skb_t *req_complete_skb); |
43 | 46 | ||
47 | int hci_req_sync(struct hci_dev *hdev, int (*req)(struct hci_request *req, | ||
48 | unsigned long opt), | ||
49 | unsigned long opt, u32 timeout, u8 *hci_status); | ||
50 | int __hci_req_sync(struct hci_dev *hdev, int (*func)(struct hci_request *req, | ||
51 | unsigned long opt), | ||
52 | unsigned long opt, u32 timeout, u8 *hci_status); | ||
53 | void hci_req_sync_cancel(struct hci_dev *hdev, int err); | ||
54 | |||
44 | struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode, u32 plen, | 55 | struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode, u32 plen, |
45 | const void *param); | 56 | const void *param); |
46 | 57 | ||
58 | int __hci_req_hci_power_on(struct hci_dev *hdev); | ||
59 | |||
60 | void __hci_req_write_fast_connectable(struct hci_request *req, bool enable); | ||
61 | void __hci_req_update_name(struct hci_request *req); | ||
62 | void __hci_req_update_eir(struct hci_request *req); | ||
63 | |||
47 | void hci_req_add_le_scan_disable(struct hci_request *req); | 64 | void hci_req_add_le_scan_disable(struct hci_request *req); |
48 | void hci_req_add_le_passive_scan(struct hci_request *req); | 65 | void hci_req_add_le_passive_scan(struct hci_request *req); |
49 | 66 | ||
50 | void hci_update_page_scan(struct hci_dev *hdev); | 67 | void hci_req_reenable_advertising(struct hci_dev *hdev); |
51 | void __hci_update_page_scan(struct hci_request *req); | 68 | void __hci_req_enable_advertising(struct hci_request *req); |
69 | void __hci_req_disable_advertising(struct hci_request *req); | ||
70 | void __hci_req_update_adv_data(struct hci_request *req, u8 instance); | ||
71 | int hci_req_update_adv_data(struct hci_dev *hdev, u8 instance); | ||
72 | void __hci_req_update_scan_rsp_data(struct hci_request *req, u8 instance); | ||
73 | |||
74 | int __hci_req_schedule_adv_instance(struct hci_request *req, u8 instance, | ||
75 | bool force); | ||
76 | void hci_req_clear_adv_instance(struct hci_dev *hdev, struct hci_request *req, | ||
77 | u8 instance, bool force); | ||
78 | |||
79 | void __hci_req_update_class(struct hci_request *req); | ||
80 | |||
81 | /* Returns true if HCI commands were queued */ | ||
82 | bool hci_req_stop_discovery(struct hci_request *req); | ||
83 | |||
84 | static inline void hci_req_update_scan(struct hci_dev *hdev) | ||
85 | { | ||
86 | queue_work(hdev->req_workqueue, &hdev->scan_update); | ||
87 | } | ||
88 | |||
89 | void __hci_req_update_scan(struct hci_request *req); | ||
52 | 90 | ||
53 | int hci_update_random_address(struct hci_request *req, bool require_privacy, | 91 | int hci_update_random_address(struct hci_request *req, bool require_privacy, |
54 | u8 *own_addr_type); | 92 | u8 *own_addr_type); |
55 | 93 | ||
56 | void hci_update_background_scan(struct hci_dev *hdev); | ||
57 | void __hci_update_background_scan(struct hci_request *req); | ||
58 | |||
59 | int hci_abort_conn(struct hci_conn *conn, u8 reason); | 94 | int hci_abort_conn(struct hci_conn *conn, u8 reason); |
60 | void __hci_abort_conn(struct hci_request *req, struct hci_conn *conn, | 95 | void __hci_abort_conn(struct hci_request *req, struct hci_conn *conn, |
61 | u8 reason); | 96 | u8 reason); |
97 | |||
98 | static inline void hci_update_background_scan(struct hci_dev *hdev) | ||
99 | { | ||
100 | queue_work(hdev->req_workqueue, &hdev->bg_scan_update); | ||
101 | } | ||
102 | |||
103 | void hci_request_setup(struct hci_dev *hdev); | ||
104 | void hci_request_cancel_all(struct hci_dev *hdev); | ||