1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef __HCI_CORE_H
26#define __HCI_CORE_H
27
28#include <linux/idr.h>
29#include <linux/leds.h>
30#include <linux/rculist.h>
31
32#include <net/bluetooth/hci.h>
33#include <net/bluetooth/hci_sock.h>
34
35
36#define HCI_PRIO_MAX 7
37
38
39struct inquiry_data {
40 bdaddr_t bdaddr;
41 __u8 pscan_rep_mode;
42 __u8 pscan_period_mode;
43 __u8 pscan_mode;
44 __u8 dev_class[3];
45 __le16 clock_offset;
46 __s8 rssi;
47 __u8 ssp_mode;
48};
49
50struct inquiry_entry {
51 struct list_head all;
52 struct list_head list;
53 enum {
54 NAME_NOT_KNOWN,
55 NAME_NEEDED,
56 NAME_PENDING,
57 NAME_KNOWN,
58 } name_state;
59 __u32 timestamp;
60 struct inquiry_data data;
61};
62
63struct discovery_state {
64 int type;
65 enum {
66 DISCOVERY_STOPPED,
67 DISCOVERY_STARTING,
68 DISCOVERY_FINDING,
69 DISCOVERY_RESOLVING,
70 DISCOVERY_STOPPING,
71 } state;
72 struct list_head all;
73 struct list_head unknown;
74 struct list_head resolve;
75 __u32 timestamp;
76 bdaddr_t last_adv_addr;
77 u8 last_adv_addr_type;
78 s8 last_adv_rssi;
79 u32 last_adv_flags;
80 u8 last_adv_data[HCI_MAX_AD_LENGTH];
81 u8 last_adv_data_len;
82 bool report_invalid_rssi;
83 bool result_filtering;
84 bool limited;
85 s8 rssi;
86 u16 uuid_count;
87 u8 (*uuids)[16];
88 unsigned long scan_start;
89 unsigned long scan_duration;
90};
91
92#define SUSPEND_NOTIFIER_TIMEOUT msecs_to_jiffies(2000)
93
94enum suspend_tasks {
95 SUSPEND_PAUSE_DISCOVERY,
96 SUSPEND_UNPAUSE_DISCOVERY,
97
98 SUSPEND_PAUSE_ADVERTISING,
99 SUSPEND_UNPAUSE_ADVERTISING,
100
101 SUSPEND_SCAN_DISABLE,
102 SUSPEND_SCAN_ENABLE,
103 SUSPEND_DISCONNECTING,
104
105 SUSPEND_POWERING_DOWN,
106
107 SUSPEND_PREPARE_NOTIFIER,
108 __SUSPEND_NUM_TASKS
109};
110
111enum suspended_state {
112 BT_RUNNING = 0,
113 BT_SUSPEND_DISCONNECT,
114 BT_SUSPEND_CONFIGURE_WAKE,
115};
116
117struct hci_conn_hash {
118 struct list_head list;
119 unsigned int acl_num;
120 unsigned int amp_num;
121 unsigned int sco_num;
122 unsigned int le_num;
123 unsigned int le_num_slave;
124};
125
126struct bdaddr_list {
127 struct list_head list;
128 bdaddr_t bdaddr;
129 u8 bdaddr_type;
130};
131
132struct bdaddr_list_with_irk {
133 struct list_head list;
134 bdaddr_t bdaddr;
135 u8 bdaddr_type;
136 u8 peer_irk[16];
137 u8 local_irk[16];
138};
139
140struct bdaddr_list_with_flags {
141 struct list_head list;
142 bdaddr_t bdaddr;
143 u8 bdaddr_type;
144 u32 current_flags;
145};
146
147enum hci_conn_flags {
148 HCI_CONN_FLAG_REMOTE_WAKEUP,
149 HCI_CONN_FLAG_MAX
150};
151
152#define hci_conn_test_flag(nr, flags) ((flags) & (1U << nr))
153
154
155static_assert(HCI_CONN_FLAG_MAX < 32);
156
157struct bt_uuid {
158 struct list_head list;
159 u8 uuid[16];
160 u8 size;
161 u8 svc_hint;
162};
163
164struct blocked_key {
165 struct list_head list;
166 struct rcu_head rcu;
167 u8 type;
168 u8 val[16];
169};
170
171struct smp_csrk {
172 bdaddr_t bdaddr;
173 u8 bdaddr_type;
174 u8 type;
175 u8 val[16];
176};
177
178struct smp_ltk {
179 struct list_head list;
180 struct rcu_head rcu;
181 bdaddr_t bdaddr;
182 u8 bdaddr_type;
183 u8 authenticated;
184 u8 type;
185 u8 enc_size;
186 __le16 ediv;
187 __le64 rand;
188 u8 val[16];
189};
190
191struct smp_irk {
192 struct list_head list;
193 struct rcu_head rcu;
194 bdaddr_t rpa;
195 bdaddr_t bdaddr;
196 u8 addr_type;
197 u8 val[16];
198};
199
200struct link_key {
201 struct list_head list;
202 struct rcu_head rcu;
203 bdaddr_t bdaddr;
204 u8 type;
205 u8 val[HCI_LINK_KEY_SIZE];
206 u8 pin_len;
207};
208
209struct oob_data {
210 struct list_head list;
211 bdaddr_t bdaddr;
212 u8 bdaddr_type;
213 u8 present;
214 u8 hash192[16];
215 u8 rand192[16];
216 u8 hash256[16];
217 u8 rand256[16];
218};
219
220struct adv_info {
221 struct list_head list;
222 bool pending;
223 __u8 instance;
224 __u32 flags;
225 __u16 timeout;
226 __u16 remaining_time;
227 __u16 duration;
228 __u16 adv_data_len;
229 __u8 adv_data[HCI_MAX_AD_LENGTH];
230 __u16 scan_rsp_len;
231 __u8 scan_rsp_data[HCI_MAX_AD_LENGTH];
232 __s8 tx_power;
233 bdaddr_t random_addr;
234 bool rpa_expired;
235 struct delayed_work rpa_expired_cb;
236};
237
238#define HCI_MAX_ADV_INSTANCES 5
239#define HCI_DEFAULT_ADV_DURATION 2
240
241struct adv_pattern {
242 struct list_head list;
243 __u8 ad_type;
244 __u8 offset;
245 __u8 length;
246 __u8 value[HCI_MAX_AD_LENGTH];
247};
248
249struct adv_monitor {
250 struct list_head patterns;
251 bool active;
252 __u16 handle;
253};
254
255#define HCI_MIN_ADV_MONITOR_HANDLE 1
256#define HCI_MAX_ADV_MONITOR_NUM_HANDLES 32
257#define HCI_MAX_ADV_MONITOR_NUM_PATTERNS 16
258
259#define HCI_MAX_SHORT_NAME_LENGTH 10
260
261
262#define HCI_MIN_ENC_KEY_SIZE 7
263
264
265#define HCI_DEFAULT_RPA_TIMEOUT (15 * 60)
266
267
268#define DEFAULT_CONN_INFO_MIN_AGE 1000
269#define DEFAULT_CONN_INFO_MAX_AGE 3000
270
271#define DEFAULT_AUTH_PAYLOAD_TIMEOUT 0x0bb8
272
273struct amp_assoc {
274 __u16 len;
275 __u16 offset;
276 __u16 rem_len;
277 __u16 len_so_far;
278 __u8 data[HCI_MAX_AMP_ASSOC_SIZE];
279};
280
281#define HCI_MAX_PAGES 3
282
283struct hci_dev {
284 struct list_head list;
285 struct mutex lock;
286
287 char name[8];
288 unsigned long flags;
289 __u16 id;
290 __u8 bus;
291 __u8 dev_type;
292 bdaddr_t bdaddr;
293 bdaddr_t setup_addr;
294 bdaddr_t public_addr;
295 bdaddr_t random_addr;
296 bdaddr_t static_addr;
297 __u8 adv_addr_type;
298 __u8 dev_name[HCI_MAX_NAME_LENGTH];
299 __u8 short_name[HCI_MAX_SHORT_NAME_LENGTH];
300 __u8 eir[HCI_MAX_EIR_LENGTH];
301 __u16 appearance;
302 __u8 dev_class[3];
303 __u8 major_class;
304 __u8 minor_class;
305 __u8 max_page;
306 __u8 features[HCI_MAX_PAGES][8];
307 __u8 le_features[8];
308 __u8 le_white_list_size;
309 __u8 le_resolv_list_size;
310 __u8 le_num_of_adv_sets;
311 __u8 le_states[8];
312 __u8 commands[64];
313 __u8 hci_ver;
314 __u16 hci_rev;
315 __u8 lmp_ver;
316 __u16 manufacturer;
317 __u16 lmp_subver;
318 __u16 voice_setting;
319 __u8 num_iac;
320 __u8 stored_max_keys;
321 __u8 stored_num_keys;
322 __u8 io_capability;
323 __s8 inq_tx_power;
324 __u8 err_data_reporting;
325 __u16 page_scan_interval;
326 __u16 page_scan_window;
327 __u8 page_scan_type;
328 __u8 le_adv_channel_map;
329 __u16 le_adv_min_interval;
330 __u16 le_adv_max_interval;
331 __u8 le_scan_type;
332 __u16 le_scan_interval;
333 __u16 le_scan_window;
334 __u16 le_scan_int_suspend;
335 __u16 le_scan_window_suspend;
336 __u16 le_scan_int_discovery;
337 __u16 le_scan_window_discovery;
338 __u16 le_scan_int_adv_monitor;
339 __u16 le_scan_window_adv_monitor;
340 __u16 le_scan_int_connect;
341 __u16 le_scan_window_connect;
342 __u16 le_conn_min_interval;
343 __u16 le_conn_max_interval;
344 __u16 le_conn_latency;
345 __u16 le_supv_timeout;
346 __u16 le_def_tx_len;
347 __u16 le_def_tx_time;
348 __u16 le_max_tx_len;
349 __u16 le_max_tx_time;
350 __u16 le_max_rx_len;
351 __u16 le_max_rx_time;
352 __u8 le_max_key_size;
353 __u8 le_min_key_size;
354 __u16 discov_interleaved_timeout;
355 __u16 conn_info_min_age;
356 __u16 conn_info_max_age;
357 __u16 auth_payload_timeout;
358 __u8 min_enc_key_size;
359 __u8 max_enc_key_size;
360 __u8 pairing_opts;
361 __u8 ssp_debug_mode;
362 __u8 hw_error_code;
363 __u32 clock;
364
365 __u16 devid_source;
366 __u16 devid_vendor;
367 __u16 devid_product;
368 __u16 devid_version;
369
370 __u8 def_page_scan_type;
371 __u16 def_page_scan_int;
372 __u16 def_page_scan_window;
373 __u8 def_inq_scan_type;
374 __u16 def_inq_scan_int;
375 __u16 def_inq_scan_window;
376 __u16 def_br_lsto;
377 __u16 def_page_timeout;
378 __u16 def_multi_adv_rotation_duration;
379 __u16 def_le_autoconnect_timeout;
380
381 __u16 pkt_type;
382 __u16 esco_type;
383 __u16 link_policy;
384 __u16 link_mode;
385
386 __u32 idle_timeout;
387 __u16 sniff_min_interval;
388 __u16 sniff_max_interval;
389
390 __u8 amp_status;
391 __u32 amp_total_bw;
392 __u32 amp_max_bw;
393 __u32 amp_min_latency;
394 __u32 amp_max_pdu;
395 __u8 amp_type;
396 __u16 amp_pal_cap;
397 __u16 amp_assoc_size;
398 __u32 amp_max_flush_to;
399 __u32 amp_be_flush_to;
400
401 struct amp_assoc loc_assoc;
402
403 __u8 flow_ctl_mode;
404
405 unsigned int auto_accept_delay;
406
407 unsigned long quirks;
408
409 atomic_t cmd_cnt;
410 unsigned int acl_cnt;
411 unsigned int sco_cnt;
412 unsigned int le_cnt;
413
414 unsigned int acl_mtu;
415 unsigned int sco_mtu;
416 unsigned int le_mtu;
417 unsigned int acl_pkts;
418 unsigned int sco_pkts;
419 unsigned int le_pkts;
420
421 __u16 block_len;
422 __u16 block_mtu;
423 __u16 num_blocks;
424 __u16 block_cnt;
425
426 unsigned long acl_last_tx;
427 unsigned long sco_last_tx;
428 unsigned long le_last_tx;
429
430 __u8 le_tx_def_phys;
431 __u8 le_rx_def_phys;
432
433 struct workqueue_struct *workqueue;
434 struct workqueue_struct *req_workqueue;
435
436 struct work_struct power_on;
437 struct delayed_work power_off;
438 struct work_struct error_reset;
439
440 __u16 discov_timeout;
441 struct delayed_work discov_off;
442
443 struct delayed_work service_cache;
444
445 struct delayed_work cmd_timer;
446
447 struct work_struct rx_work;
448 struct work_struct cmd_work;
449 struct work_struct tx_work;
450
451 struct work_struct discov_update;
452 struct work_struct bg_scan_update;
453 struct work_struct scan_update;
454 struct work_struct connectable_update;
455 struct work_struct discoverable_update;
456 struct delayed_work le_scan_disable;
457 struct delayed_work le_scan_restart;
458
459 struct sk_buff_head rx_q;
460 struct sk_buff_head raw_q;
461 struct sk_buff_head cmd_q;
462
463 struct sk_buff *sent_cmd;
464
465 struct mutex req_lock;
466 wait_queue_head_t req_wait_q;
467 __u32 req_status;
468 __u32 req_result;
469 struct sk_buff *req_skb;
470
471 void *smp_data;
472 void *smp_bredr_data;
473
474 struct discovery_state discovery;
475
476 int discovery_old_state;
477 bool discovery_paused;
478 int advertising_old_state;
479 bool advertising_paused;
480
481 struct notifier_block suspend_notifier;
482 struct work_struct suspend_prepare;
483 enum suspended_state suspend_state_next;
484 enum suspended_state suspend_state;
485 bool scanning_paused;
486 bool suspended;
487
488 wait_queue_head_t suspend_wait_q;
489 DECLARE_BITMAP(suspend_tasks, __SUSPEND_NUM_TASKS);
490
491 struct hci_conn_hash conn_hash;
492
493 struct list_head mgmt_pending;
494 struct list_head blacklist;
495 struct list_head whitelist;
496 struct list_head uuids;
497 struct list_head link_keys;
498 struct list_head long_term_keys;
499 struct list_head identity_resolving_keys;
500 struct list_head remote_oob_data;
501 struct list_head le_white_list;
502 struct list_head le_resolv_list;
503 struct list_head le_conn_params;
504 struct list_head pend_le_conns;
505 struct list_head pend_le_reports;
506 struct list_head blocked_keys;
507
508 struct hci_dev_stats stat;
509
510 atomic_t promisc;
511
512 const char *hw_info;
513 const char *fw_info;
514 struct dentry *debugfs;
515
516 struct device dev;
517
518 struct rfkill *rfkill;
519
520 DECLARE_BITMAP(dev_flags, __HCI_NUM_FLAGS);
521
522 __s8 adv_tx_power;
523 __u8 adv_data[HCI_MAX_AD_LENGTH];
524 __u8 adv_data_len;
525 __u8 scan_rsp_data[HCI_MAX_AD_LENGTH];
526 __u8 scan_rsp_data_len;
527
528 struct list_head adv_instances;
529 unsigned int adv_instance_cnt;
530 __u8 cur_adv_instance;
531 __u16 adv_instance_timeout;
532 struct delayed_work adv_instance_expire;
533
534 struct idr adv_monitors_idr;
535 unsigned int adv_monitors_cnt;
536
537 __u8 irk[16];
538 __u32 rpa_timeout;
539 struct delayed_work rpa_expired;
540 bdaddr_t rpa;
541
542#if IS_ENABLED(CONFIG_BT_LEDS)
543 struct led_trigger *power_led;
544#endif
545
546#if IS_ENABLED(CONFIG_BT_MSFTEXT)
547 __u16 msft_opcode;
548 void *msft_data;
549#endif
550
551 int (*open)(struct hci_dev *hdev);
552 int (*close)(struct hci_dev *hdev);
553 int (*flush)(struct hci_dev *hdev);
554 int (*setup)(struct hci_dev *hdev);
555 int (*shutdown)(struct hci_dev *hdev);
556 int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
557 void (*notify)(struct hci_dev *hdev, unsigned int evt);
558 void (*hw_error)(struct hci_dev *hdev, u8 code);
559 int (*post_init)(struct hci_dev *hdev);
560 int (*set_diag)(struct hci_dev *hdev, bool enable);
561 int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
562 void (*cmd_timeout)(struct hci_dev *hdev);
563 bool (*prevent_wake)(struct hci_dev *hdev);
564};
565
566#define HCI_PHY_HANDLE(handle) (handle & 0xff)
567
568enum conn_reasons {
569 CONN_REASON_PAIR_DEVICE,
570 CONN_REASON_L2CAP_CHAN,
571 CONN_REASON_SCO_CONNECT,
572};
573
574struct hci_conn {
575 struct list_head list;
576
577 atomic_t refcnt;
578
579 bdaddr_t dst;
580 __u8 dst_type;
581 bdaddr_t src;
582 __u8 src_type;
583 bdaddr_t init_addr;
584 __u8 init_addr_type;
585 bdaddr_t resp_addr;
586 __u8 resp_addr_type;
587 __u16 handle;
588 __u16 state;
589 __u8 mode;
590 __u8 type;
591 __u8 role;
592 bool out;
593 __u8 attempt;
594 __u8 dev_class[3];
595 __u8 features[HCI_MAX_PAGES][8];
596 __u16 pkt_type;
597 __u16 link_policy;
598 __u8 key_type;
599 __u8 auth_type;
600 __u8 sec_level;
601 __u8 pending_sec_level;
602 __u8 pin_length;
603 __u8 enc_key_size;
604 __u8 io_capability;
605 __u32 passkey_notify;
606 __u8 passkey_entered;
607 __u16 disc_timeout;
608 __u16 conn_timeout;
609 __u16 setting;
610 __u16 auth_payload_timeout;
611 __u16 le_conn_min_interval;
612 __u16 le_conn_max_interval;
613 __u16 le_conn_interval;
614 __u16 le_conn_latency;
615 __u16 le_supv_timeout;
616 __u8 le_adv_data[HCI_MAX_AD_LENGTH];
617 __u8 le_adv_data_len;
618 __u8 le_tx_phy;
619 __u8 le_rx_phy;
620 __s8 rssi;
621 __s8 tx_power;
622 __s8 max_tx_power;
623 unsigned long flags;
624
625 enum conn_reasons conn_reason;
626
627 __u32 clock;
628 __u16 clock_accuracy;
629
630 unsigned long conn_info_timestamp;
631
632 __u8 remote_cap;
633 __u8 remote_auth;
634 __u8 remote_id;
635
636 unsigned int sent;
637
638 struct sk_buff_head data_q;
639 struct list_head chan_list;
640
641 struct delayed_work disc_work;
642 struct delayed_work auto_accept_work;
643 struct delayed_work idle_work;
644 struct delayed_work le_conn_timeout;
645 struct work_struct le_scan_cleanup;
646
647 struct device dev;
648 struct dentry *debugfs;
649
650 struct hci_dev *hdev;
651 void *l2cap_data;
652 void *sco_data;
653 struct amp_mgr *amp_mgr;
654
655 struct hci_conn *link;
656
657 void (*connect_cfm_cb) (struct hci_conn *conn, u8 status);
658 void (*security_cfm_cb) (struct hci_conn *conn, u8 status);
659 void (*disconn_cfm_cb) (struct hci_conn *conn, u8 reason);
660};
661
662struct hci_chan {
663 struct list_head list;
664 __u16 handle;
665 struct hci_conn *conn;
666 struct sk_buff_head data_q;
667 unsigned int sent;
668 __u8 state;
669};
670
671struct hci_conn_params {
672 struct list_head list;
673 struct list_head action;
674
675 bdaddr_t addr;
676 u8 addr_type;
677
678 u16 conn_min_interval;
679 u16 conn_max_interval;
680 u16 conn_latency;
681 u16 supervision_timeout;
682
683 enum {
684 HCI_AUTO_CONN_DISABLED,
685 HCI_AUTO_CONN_REPORT,
686 HCI_AUTO_CONN_DIRECT,
687 HCI_AUTO_CONN_ALWAYS,
688 HCI_AUTO_CONN_LINK_LOSS,
689 HCI_AUTO_CONN_EXPLICIT,
690 } auto_connect;
691
692 struct hci_conn *conn;
693 bool explicit_connect;
694 u32 current_flags;
695};
696
697extern struct list_head hci_dev_list;
698extern struct list_head hci_cb_list;
699extern rwlock_t hci_dev_list_lock;
700extern struct mutex hci_cb_list_lock;
701
702#define hci_dev_set_flag(hdev, nr) set_bit((nr), (hdev)->dev_flags)
703#define hci_dev_clear_flag(hdev, nr) clear_bit((nr), (hdev)->dev_flags)
704#define hci_dev_change_flag(hdev, nr) change_bit((nr), (hdev)->dev_flags)
705#define hci_dev_test_flag(hdev, nr) test_bit((nr), (hdev)->dev_flags)
706#define hci_dev_test_and_set_flag(hdev, nr) test_and_set_bit((nr), (hdev)->dev_flags)
707#define hci_dev_test_and_clear_flag(hdev, nr) test_and_clear_bit((nr), (hdev)->dev_flags)
708#define hci_dev_test_and_change_flag(hdev, nr) test_and_change_bit((nr), (hdev)->dev_flags)
709
710#define hci_dev_clear_volatile_flags(hdev) \
711 do { \
712 hci_dev_clear_flag(hdev, HCI_LE_SCAN); \
713 hci_dev_clear_flag(hdev, HCI_LE_ADV); \
714 hci_dev_clear_flag(hdev, HCI_LL_RPA_RESOLUTION);\
715 hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ); \
716 } while (0)
717
718
719int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
720int l2cap_disconn_ind(struct hci_conn *hcon);
721void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
722
723#if IS_ENABLED(CONFIG_BT_BREDR)
724int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
725void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
726#else
727static inline int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
728 __u8 *flags)
729{
730 return 0;
731}
732
733static inline void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
734{
735}
736#endif
737
738
739#define INQUIRY_CACHE_AGE_MAX (HZ*30)
740#define INQUIRY_ENTRY_AGE_MAX (HZ*60)
741
742static inline void discovery_init(struct hci_dev *hdev)
743{
744 hdev->discovery.state = DISCOVERY_STOPPED;
745 INIT_LIST_HEAD(&hdev->discovery.all);
746 INIT_LIST_HEAD(&hdev->discovery.unknown);
747 INIT_LIST_HEAD(&hdev->discovery.resolve);
748 hdev->discovery.report_invalid_rssi = true;
749 hdev->discovery.rssi = HCI_RSSI_INVALID;
750}
751
752static inline void hci_discovery_filter_clear(struct hci_dev *hdev)
753{
754 hdev->discovery.result_filtering = false;
755 hdev->discovery.report_invalid_rssi = true;
756 hdev->discovery.rssi = HCI_RSSI_INVALID;
757 hdev->discovery.uuid_count = 0;
758 kfree(hdev->discovery.uuids);
759 hdev->discovery.uuids = NULL;
760 hdev->discovery.scan_start = 0;
761 hdev->discovery.scan_duration = 0;
762}
763
764bool hci_discovery_active(struct hci_dev *hdev);
765
766void hci_discovery_set_state(struct hci_dev *hdev, int state);
767
768static inline int inquiry_cache_empty(struct hci_dev *hdev)
769{
770 return list_empty(&hdev->discovery.all);
771}
772
773static inline long inquiry_cache_age(struct hci_dev *hdev)
774{
775 struct discovery_state *c = &hdev->discovery;
776 return jiffies - c->timestamp;
777}
778
779static inline long inquiry_entry_age(struct inquiry_entry *e)
780{
781 return jiffies - e->timestamp;
782}
783
784struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
785 bdaddr_t *bdaddr);
786struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
787 bdaddr_t *bdaddr);
788struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
789 bdaddr_t *bdaddr,
790 int state);
791void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
792 struct inquiry_entry *ie);
793u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
794 bool name_known);
795void hci_inquiry_cache_flush(struct hci_dev *hdev);
796
797
798enum {
799 HCI_CONN_AUTH_PEND,
800 HCI_CONN_REAUTH_PEND,
801 HCI_CONN_ENCRYPT_PEND,
802 HCI_CONN_RSWITCH_PEND,
803 HCI_CONN_MODE_CHANGE_PEND,
804 HCI_CONN_SCO_SETUP_PEND,
805 HCI_CONN_MGMT_CONNECTED,
806 HCI_CONN_SSP_ENABLED,
807 HCI_CONN_SC_ENABLED,
808 HCI_CONN_AES_CCM,
809 HCI_CONN_POWER_SAVE,
810 HCI_CONN_FLUSH_KEY,
811 HCI_CONN_ENCRYPT,
812 HCI_CONN_AUTH,
813 HCI_CONN_SECURE,
814 HCI_CONN_FIPS,
815 HCI_CONN_STK_ENCRYPT,
816 HCI_CONN_AUTH_INITIATOR,
817 HCI_CONN_DROP,
818 HCI_CONN_PARAM_REMOVAL_PEND,
819 HCI_CONN_NEW_LINK_KEY,
820 HCI_CONN_SCANNING,
821 HCI_CONN_AUTH_FAILURE,
822};
823
824static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
825{
826 struct hci_dev *hdev = conn->hdev;
827 return hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
828 test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
829}
830
831static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
832{
833 struct hci_dev *hdev = conn->hdev;
834 return hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
835 test_bit(HCI_CONN_SC_ENABLED, &conn->flags);
836}
837
838static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
839{
840 struct hci_conn_hash *h = &hdev->conn_hash;
841 list_add_rcu(&c->list, &h->list);
842 switch (c->type) {
843 case ACL_LINK:
844 h->acl_num++;
845 break;
846 case AMP_LINK:
847 h->amp_num++;
848 break;
849 case LE_LINK:
850 h->le_num++;
851 if (c->role == HCI_ROLE_SLAVE)
852 h->le_num_slave++;
853 break;
854 case SCO_LINK:
855 case ESCO_LINK:
856 h->sco_num++;
857 break;
858 }
859}
860
861static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
862{
863 struct hci_conn_hash *h = &hdev->conn_hash;
864
865 list_del_rcu(&c->list);
866 synchronize_rcu();
867
868 switch (c->type) {
869 case ACL_LINK:
870 h->acl_num--;
871 break;
872 case AMP_LINK:
873 h->amp_num--;
874 break;
875 case LE_LINK:
876 h->le_num--;
877 if (c->role == HCI_ROLE_SLAVE)
878 h->le_num_slave--;
879 break;
880 case SCO_LINK:
881 case ESCO_LINK:
882 h->sco_num--;
883 break;
884 }
885}
886
887static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
888{
889 struct hci_conn_hash *h = &hdev->conn_hash;
890 switch (type) {
891 case ACL_LINK:
892 return h->acl_num;
893 case AMP_LINK:
894 return h->amp_num;
895 case LE_LINK:
896 return h->le_num;
897 case SCO_LINK:
898 case ESCO_LINK:
899 return h->sco_num;
900 default:
901 return 0;
902 }
903}
904
905static inline unsigned int hci_conn_count(struct hci_dev *hdev)
906{
907 struct hci_conn_hash *c = &hdev->conn_hash;
908
909 return c->acl_num + c->amp_num + c->sco_num + c->le_num;
910}
911
912static inline __u8 hci_conn_lookup_type(struct hci_dev *hdev, __u16 handle)
913{
914 struct hci_conn_hash *h = &hdev->conn_hash;
915 struct hci_conn *c;
916 __u8 type = INVALID_LINK;
917
918 rcu_read_lock();
919
920 list_for_each_entry_rcu(c, &h->list, list) {
921 if (c->handle == handle) {
922 type = c->type;
923 break;
924 }
925 }
926
927 rcu_read_unlock();
928
929 return type;
930}
931
932static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
933 __u16 handle)
934{
935 struct hci_conn_hash *h = &hdev->conn_hash;
936 struct hci_conn *c;
937
938 rcu_read_lock();
939
940 list_for_each_entry_rcu(c, &h->list, list) {
941 if (c->handle == handle) {
942 rcu_read_unlock();
943 return c;
944 }
945 }
946 rcu_read_unlock();
947
948 return NULL;
949}
950
951static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
952 __u8 type, bdaddr_t *ba)
953{
954 struct hci_conn_hash *h = &hdev->conn_hash;
955 struct hci_conn *c;
956
957 rcu_read_lock();
958
959 list_for_each_entry_rcu(c, &h->list, list) {
960 if (c->type == type && !bacmp(&c->dst, ba)) {
961 rcu_read_unlock();
962 return c;
963 }
964 }
965
966 rcu_read_unlock();
967
968 return NULL;
969}
970
971static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev,
972 bdaddr_t *ba,
973 __u8 ba_type)
974{
975 struct hci_conn_hash *h = &hdev->conn_hash;
976 struct hci_conn *c;
977
978 rcu_read_lock();
979
980 list_for_each_entry_rcu(c, &h->list, list) {
981 if (c->type != LE_LINK)
982 continue;
983
984 if (ba_type == c->dst_type && !bacmp(&c->dst, ba)) {
985 rcu_read_unlock();
986 return c;
987 }
988 }
989
990 rcu_read_unlock();
991
992 return NULL;
993}
994
995static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
996 __u8 type, __u16 state)
997{
998 struct hci_conn_hash *h = &hdev->conn_hash;
999 struct hci_conn *c;
1000
1001 rcu_read_lock();
1002
1003 list_for_each_entry_rcu(c, &h->list, list) {
1004 if (c->type == type && c->state == state) {
1005 rcu_read_unlock();
1006 return c;
1007 }
1008 }
1009
1010 rcu_read_unlock();
1011
1012 return NULL;
1013}
1014
1015static inline struct hci_conn *hci_lookup_le_connect(struct hci_dev *hdev)
1016{
1017 struct hci_conn_hash *h = &hdev->conn_hash;
1018 struct hci_conn *c;
1019
1020 rcu_read_lock();
1021
1022 list_for_each_entry_rcu(c, &h->list, list) {
1023 if (c->type == LE_LINK && c->state == BT_CONNECT &&
1024 !test_bit(HCI_CONN_SCANNING, &c->flags)) {
1025 rcu_read_unlock();
1026 return c;
1027 }
1028 }
1029
1030 rcu_read_unlock();
1031
1032 return NULL;
1033}
1034
1035int hci_disconnect(struct hci_conn *conn, __u8 reason);
1036bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
1037void hci_sco_setup(struct hci_conn *conn, __u8 status);
1038
1039struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
1040 u8 role);
1041int hci_conn_del(struct hci_conn *conn);
1042void hci_conn_hash_flush(struct hci_dev *hdev);
1043void hci_conn_check_pending(struct hci_dev *hdev);
1044
1045struct hci_chan *hci_chan_create(struct hci_conn *conn);
1046void hci_chan_del(struct hci_chan *chan);
1047void hci_chan_list_flush(struct hci_conn *conn);
1048struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle);
1049
1050struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
1051 u8 dst_type, u8 sec_level,
1052 u16 conn_timeout,
1053 enum conn_reasons conn_reason);
1054struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
1055 u8 dst_type, u8 sec_level, u16 conn_timeout,
1056 u8 role, bdaddr_t *direct_rpa);
1057struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
1058 u8 sec_level, u8 auth_type,
1059 enum conn_reasons conn_reason);
1060struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
1061 __u16 setting);
1062int hci_conn_check_link_mode(struct hci_conn *conn);
1063int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
1064int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
1065 bool initiator);
1066int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
1067
1068void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
1069
1070void hci_le_conn_failed(struct hci_conn *conn, u8 status);
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093static inline struct hci_conn *hci_conn_get(struct hci_conn *conn)
1094{
1095 get_device(&conn->dev);
1096 return conn;
1097}
1098
1099static inline void hci_conn_put(struct hci_conn *conn)
1100{
1101 put_device(&conn->dev);
1102}
1103
1104static inline void hci_conn_hold(struct hci_conn *conn)
1105{
1106 BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
1107
1108 atomic_inc(&conn->refcnt);
1109 cancel_delayed_work(&conn->disc_work);
1110}
1111
1112static inline void hci_conn_drop(struct hci_conn *conn)
1113{
1114 BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
1115
1116 if (atomic_dec_and_test(&conn->refcnt)) {
1117 unsigned long timeo;
1118
1119 switch (conn->type) {
1120 case ACL_LINK:
1121 case LE_LINK:
1122 cancel_delayed_work(&conn->idle_work);
1123 if (conn->state == BT_CONNECTED) {
1124 timeo = conn->disc_timeout;
1125 if (!conn->out)
1126 timeo *= 2;
1127 } else {
1128 timeo = 0;
1129 }
1130 break;
1131
1132 case AMP_LINK:
1133 timeo = conn->disc_timeout;
1134 break;
1135
1136 default:
1137 timeo = 0;
1138 break;
1139 }
1140
1141 cancel_delayed_work(&conn->disc_work);
1142 queue_delayed_work(conn->hdev->workqueue,
1143 &conn->disc_work, timeo);
1144 }
1145}
1146
1147
1148static inline void hci_dev_put(struct hci_dev *d)
1149{
1150 BT_DBG("%s orig refcnt %d", d->name,
1151 kref_read(&d->dev.kobj.kref));
1152
1153 put_device(&d->dev);
1154}
1155
1156static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
1157{
1158 BT_DBG("%s orig refcnt %d", d->name,
1159 kref_read(&d->dev.kobj.kref));
1160
1161 get_device(&d->dev);
1162 return d;
1163}
1164
1165#define hci_dev_lock(d) mutex_lock(&d->lock)
1166#define hci_dev_unlock(d) mutex_unlock(&d->lock)
1167
1168#define to_hci_dev(d) container_of(d, struct hci_dev, dev)
1169#define to_hci_conn(c) container_of(c, struct hci_conn, dev)
1170
1171static inline void *hci_get_drvdata(struct hci_dev *hdev)
1172{
1173 return dev_get_drvdata(&hdev->dev);
1174}
1175
1176static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
1177{
1178 dev_set_drvdata(&hdev->dev, data);
1179}
1180
1181struct hci_dev *hci_dev_get(int index);
1182struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, u8 src_type);
1183
1184struct hci_dev *hci_alloc_dev(void);
1185void hci_free_dev(struct hci_dev *hdev);
1186int hci_register_dev(struct hci_dev *hdev);
1187void hci_unregister_dev(struct hci_dev *hdev);
1188int hci_suspend_dev(struct hci_dev *hdev);
1189int hci_resume_dev(struct hci_dev *hdev);
1190int hci_reset_dev(struct hci_dev *hdev);
1191int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
1192int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb);
1193__printf(2, 3) void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...);
1194__printf(2, 3) void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...);
1195
1196static inline void hci_set_msft_opcode(struct hci_dev *hdev, __u16 opcode)
1197{
1198#if IS_ENABLED(CONFIG_BT_MSFTEXT)
1199 hdev->msft_opcode = opcode;
1200#endif
1201}
1202
1203int hci_dev_open(__u16 dev);
1204int hci_dev_close(__u16 dev);
1205int hci_dev_do_close(struct hci_dev *hdev);
1206int hci_dev_reset(__u16 dev);
1207int hci_dev_reset_stat(__u16 dev);
1208int hci_dev_cmd(unsigned int cmd, void __user *arg);
1209int hci_get_dev_list(void __user *arg);
1210int hci_get_dev_info(void __user *arg);
1211int hci_get_conn_list(void __user *arg);
1212int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
1213int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
1214int hci_inquiry(void __user *arg);
1215
1216struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *list,
1217 bdaddr_t *bdaddr, u8 type);
1218struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
1219 struct list_head *list, bdaddr_t *bdaddr,
1220 u8 type);
1221struct bdaddr_list_with_flags *
1222hci_bdaddr_list_lookup_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1223 u8 type);
1224int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1225int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1226 u8 type, u8 *peer_irk, u8 *local_irk);
1227int hci_bdaddr_list_add_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1228 u8 type, u32 flags);
1229int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1230int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1231 u8 type);
1232int hci_bdaddr_list_del_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1233 u8 type);
1234void hci_bdaddr_list_clear(struct list_head *list);
1235
1236struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
1237 bdaddr_t *addr, u8 addr_type);
1238struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
1239 bdaddr_t *addr, u8 addr_type);
1240void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
1241void hci_conn_params_clear_disabled(struct hci_dev *hdev);
1242
1243struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
1244 bdaddr_t *addr,
1245 u8 addr_type);
1246
1247void hci_uuids_clear(struct hci_dev *hdev);
1248
1249void hci_link_keys_clear(struct hci_dev *hdev);
1250struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1251struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
1252 bdaddr_t *bdaddr, u8 *val, u8 type,
1253 u8 pin_len, bool *persistent);
1254struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1255 u8 addr_type, u8 type, u8 authenticated,
1256 u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand);
1257struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1258 u8 addr_type, u8 role);
1259int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
1260void hci_smp_ltks_clear(struct hci_dev *hdev);
1261int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1262
1263struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
1264struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1265 u8 addr_type);
1266struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1267 u8 addr_type, u8 val[16], bdaddr_t *rpa);
1268void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
1269bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16]);
1270void hci_blocked_keys_clear(struct hci_dev *hdev);
1271void hci_smp_irks_clear(struct hci_dev *hdev);
1272
1273bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
1274
1275void hci_remote_oob_data_clear(struct hci_dev *hdev);
1276struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1277 bdaddr_t *bdaddr, u8 bdaddr_type);
1278int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1279 u8 bdaddr_type, u8 *hash192, u8 *rand192,
1280 u8 *hash256, u8 *rand256);
1281int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1282 u8 bdaddr_type);
1283
1284void hci_adv_instances_clear(struct hci_dev *hdev);
1285struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance);
1286struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance);
1287int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
1288 u16 adv_data_len, u8 *adv_data,
1289 u16 scan_rsp_len, u8 *scan_rsp_data,
1290 u16 timeout, u16 duration);
1291int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance);
1292void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired);
1293
1294void hci_adv_monitors_clear(struct hci_dev *hdev);
1295void hci_free_adv_monitor(struct adv_monitor *monitor);
1296int hci_add_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor);
1297int hci_remove_adv_monitor(struct hci_dev *hdev, u16 handle);
1298bool hci_is_adv_monitoring(struct hci_dev *hdev);
1299
1300void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
1301
1302void hci_init_sysfs(struct hci_dev *hdev);
1303void hci_conn_init_sysfs(struct hci_conn *conn);
1304void hci_conn_add_sysfs(struct hci_conn *conn);
1305void hci_conn_del_sysfs(struct hci_conn *conn);
1306
1307#define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev))
1308
1309
1310#define lmp_encrypt_capable(dev) ((dev)->features[0][0] & LMP_ENCRYPT)
1311#define lmp_rswitch_capable(dev) ((dev)->features[0][0] & LMP_RSWITCH)
1312#define lmp_hold_capable(dev) ((dev)->features[0][0] & LMP_HOLD)
1313#define lmp_sniff_capable(dev) ((dev)->features[0][0] & LMP_SNIFF)
1314#define lmp_park_capable(dev) ((dev)->features[0][1] & LMP_PARK)
1315#define lmp_inq_rssi_capable(dev) ((dev)->features[0][3] & LMP_RSSI_INQ)
1316#define lmp_esco_capable(dev) ((dev)->features[0][3] & LMP_ESCO)
1317#define lmp_bredr_capable(dev) (!((dev)->features[0][4] & LMP_NO_BREDR))
1318#define lmp_le_capable(dev) ((dev)->features[0][4] & LMP_LE)
1319#define lmp_sniffsubr_capable(dev) ((dev)->features[0][5] & LMP_SNIFF_SUBR)
1320#define lmp_pause_enc_capable(dev) ((dev)->features[0][5] & LMP_PAUSE_ENC)
1321#define lmp_ext_inq_capable(dev) ((dev)->features[0][6] & LMP_EXT_INQ)
1322#define lmp_le_br_capable(dev) (!!((dev)->features[0][6] & LMP_SIMUL_LE_BR))
1323#define lmp_ssp_capable(dev) ((dev)->features[0][6] & LMP_SIMPLE_PAIR)
1324#define lmp_no_flush_capable(dev) ((dev)->features[0][6] & LMP_NO_FLUSH)
1325#define lmp_lsto_capable(dev) ((dev)->features[0][7] & LMP_LSTO)
1326#define lmp_inq_tx_pwr_capable(dev) ((dev)->features[0][7] & LMP_INQ_TX_PWR)
1327#define lmp_ext_feat_capable(dev) ((dev)->features[0][7] & LMP_EXTFEATURES)
1328#define lmp_transp_capable(dev) ((dev)->features[0][2] & LMP_TRANSPARENT)
1329#define lmp_edr_2m_capable(dev) ((dev)->features[0][3] & LMP_EDR_2M)
1330#define lmp_edr_3m_capable(dev) ((dev)->features[0][3] & LMP_EDR_3M)
1331#define lmp_edr_3slot_capable(dev) ((dev)->features[0][4] & LMP_EDR_3SLOT)
1332#define lmp_edr_5slot_capable(dev) ((dev)->features[0][5] & LMP_EDR_5SLOT)
1333
1334
1335#define lmp_csb_master_capable(dev) ((dev)->features[2][0] & LMP_CSB_MASTER)
1336#define lmp_csb_slave_capable(dev) ((dev)->features[2][0] & LMP_CSB_SLAVE)
1337#define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
1338#define lmp_sync_scan_capable(dev) ((dev)->features[2][0] & LMP_SYNC_SCAN)
1339#define lmp_sc_capable(dev) ((dev)->features[2][1] & LMP_SC)
1340#define lmp_ping_capable(dev) ((dev)->features[2][1] & LMP_PING)
1341
1342
1343#define lmp_host_ssp_capable(dev) ((dev)->features[1][0] & LMP_HOST_SSP)
1344#define lmp_host_sc_capable(dev) ((dev)->features[1][0] & LMP_HOST_SC)
1345#define lmp_host_le_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE))
1346#define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
1347
1348#define hdev_is_powered(dev) (test_bit(HCI_UP, &(dev)->flags) && \
1349 !hci_dev_test_flag(dev, HCI_AUTO_OFF))
1350#define bredr_sc_enabled(dev) (lmp_sc_capable(dev) && \
1351 hci_dev_test_flag(dev, HCI_SC_ENABLED))
1352
1353#define scan_1m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_1M) || \
1354 ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_1M))
1355
1356#define scan_2m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_2M) || \
1357 ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_2M))
1358
1359#define scan_coded(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_CODED) || \
1360 ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_CODED))
1361
1362
1363#define use_ll_privacy(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)
1364
1365
1366#define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \
1367 ((dev)->commands[37] & 0x40))
1368
1369#define use_ext_conn(dev) ((dev)->commands[37] & 0x80)
1370
1371
1372#define ext_adv_capable(dev) (((dev)->le_features[1] & HCI_LE_EXT_ADV))
1373
1374
1375#define HCI_PROTO_DEFER 0x01
1376
1377static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
1378 __u8 type, __u8 *flags)
1379{
1380 switch (type) {
1381 case ACL_LINK:
1382 return l2cap_connect_ind(hdev, bdaddr);
1383
1384 case SCO_LINK:
1385 case ESCO_LINK:
1386 return sco_connect_ind(hdev, bdaddr, flags);
1387
1388 default:
1389 BT_ERR("unknown link type %d", type);
1390 return -EINVAL;
1391 }
1392}
1393
1394static inline int hci_proto_disconn_ind(struct hci_conn *conn)
1395{
1396 if (conn->type != ACL_LINK && conn->type != LE_LINK)
1397 return HCI_ERROR_REMOTE_USER_TERM;
1398
1399 return l2cap_disconn_ind(conn);
1400}
1401
1402
1403struct hci_cb {
1404 struct list_head list;
1405
1406 char *name;
1407
1408 void (*connect_cfm) (struct hci_conn *conn, __u8 status);
1409 void (*disconn_cfm) (struct hci_conn *conn, __u8 status);
1410 void (*security_cfm) (struct hci_conn *conn, __u8 status,
1411 __u8 encrypt);
1412 void (*key_change_cfm) (struct hci_conn *conn, __u8 status);
1413 void (*role_switch_cfm) (struct hci_conn *conn, __u8 status, __u8 role);
1414};
1415
1416static inline void hci_connect_cfm(struct hci_conn *conn, __u8 status)
1417{
1418 struct hci_cb *cb;
1419
1420 mutex_lock(&hci_cb_list_lock);
1421 list_for_each_entry(cb, &hci_cb_list, list) {
1422 if (cb->connect_cfm)
1423 cb->connect_cfm(conn, status);
1424 }
1425 mutex_unlock(&hci_cb_list_lock);
1426
1427 if (conn->connect_cfm_cb)
1428 conn->connect_cfm_cb(conn, status);
1429}
1430
1431static inline void hci_disconn_cfm(struct hci_conn *conn, __u8 reason)
1432{
1433 struct hci_cb *cb;
1434
1435 mutex_lock(&hci_cb_list_lock);
1436 list_for_each_entry(cb, &hci_cb_list, list) {
1437 if (cb->disconn_cfm)
1438 cb->disconn_cfm(conn, reason);
1439 }
1440 mutex_unlock(&hci_cb_list_lock);
1441
1442 if (conn->disconn_cfm_cb)
1443 conn->disconn_cfm_cb(conn, reason);
1444}
1445
1446static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
1447{
1448 struct hci_cb *cb;
1449 __u8 encrypt;
1450
1451 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1452 return;
1453
1454 encrypt = test_bit(HCI_CONN_ENCRYPT, &conn->flags) ? 0x01 : 0x00;
1455
1456 mutex_lock(&hci_cb_list_lock);
1457 list_for_each_entry(cb, &hci_cb_list, list) {
1458 if (cb->security_cfm)
1459 cb->security_cfm(conn, status, encrypt);
1460 }
1461 mutex_unlock(&hci_cb_list_lock);
1462
1463 if (conn->security_cfm_cb)
1464 conn->security_cfm_cb(conn, status);
1465}
1466
1467static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status)
1468{
1469 struct hci_cb *cb;
1470 __u8 encrypt;
1471
1472 if (conn->state == BT_CONFIG) {
1473 if (!status)
1474 conn->state = BT_CONNECTED;
1475
1476 hci_connect_cfm(conn, status);
1477 hci_conn_drop(conn);
1478 return;
1479 }
1480
1481 if (!test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1482 encrypt = 0x00;
1483 else if (test_bit(HCI_CONN_AES_CCM, &conn->flags))
1484 encrypt = 0x02;
1485 else
1486 encrypt = 0x01;
1487
1488 if (!status) {
1489 if (conn->sec_level == BT_SECURITY_SDP)
1490 conn->sec_level = BT_SECURITY_LOW;
1491
1492 if (conn->pending_sec_level > conn->sec_level)
1493 conn->sec_level = conn->pending_sec_level;
1494 }
1495
1496 mutex_lock(&hci_cb_list_lock);
1497 list_for_each_entry(cb, &hci_cb_list, list) {
1498 if (cb->security_cfm)
1499 cb->security_cfm(conn, status, encrypt);
1500 }
1501 mutex_unlock(&hci_cb_list_lock);
1502
1503 if (conn->security_cfm_cb)
1504 conn->security_cfm_cb(conn, status);
1505}
1506
1507static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
1508{
1509 struct hci_cb *cb;
1510
1511 mutex_lock(&hci_cb_list_lock);
1512 list_for_each_entry(cb, &hci_cb_list, list) {
1513 if (cb->key_change_cfm)
1514 cb->key_change_cfm(conn, status);
1515 }
1516 mutex_unlock(&hci_cb_list_lock);
1517}
1518
1519static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
1520 __u8 role)
1521{
1522 struct hci_cb *cb;
1523
1524 mutex_lock(&hci_cb_list_lock);
1525 list_for_each_entry(cb, &hci_cb_list, list) {
1526 if (cb->role_switch_cfm)
1527 cb->role_switch_cfm(conn, status, role);
1528 }
1529 mutex_unlock(&hci_cb_list_lock);
1530}
1531
1532static inline void *eir_get_data(u8 *eir, size_t eir_len, u8 type,
1533 size_t *data_len)
1534{
1535 size_t parsed = 0;
1536
1537 if (eir_len < 2)
1538 return NULL;
1539
1540 while (parsed < eir_len - 1) {
1541 u8 field_len = eir[0];
1542
1543 if (field_len == 0)
1544 break;
1545
1546 parsed += field_len + 1;
1547
1548 if (parsed > eir_len)
1549 break;
1550
1551 if (eir[1] != type) {
1552 eir += field_len + 1;
1553 continue;
1554 }
1555
1556
1557 if (field_len == 1)
1558 return NULL;
1559
1560 if (data_len)
1561 *data_len = field_len - 1;
1562
1563 return &eir[2];
1564 }
1565
1566 return NULL;
1567}
1568
1569static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
1570{
1571 if (addr_type != ADDR_LE_DEV_RANDOM)
1572 return false;
1573
1574 if ((bdaddr->b[5] & 0xc0) == 0x40)
1575 return true;
1576
1577 return false;
1578}
1579
1580static inline bool hci_is_identity_address(bdaddr_t *addr, u8 addr_type)
1581{
1582 if (addr_type == ADDR_LE_DEV_PUBLIC)
1583 return true;
1584
1585
1586 if ((addr->b[5] & 0xc0) == 0xc0)
1587 return true;
1588
1589 return false;
1590}
1591
1592static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
1593 bdaddr_t *bdaddr, u8 addr_type)
1594{
1595 if (!hci_bdaddr_is_rpa(bdaddr, addr_type))
1596 return NULL;
1597
1598 return hci_find_irk_by_rpa(hdev, bdaddr);
1599}
1600
1601static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
1602 u16 to_multiplier)
1603{
1604 u16 max_latency;
1605
1606 if (min > max || min < 6 || max > 3200)
1607 return -EINVAL;
1608
1609 if (to_multiplier < 10 || to_multiplier > 3200)
1610 return -EINVAL;
1611
1612 if (max >= to_multiplier * 8)
1613 return -EINVAL;
1614
1615 max_latency = (to_multiplier * 4 / max) - 1;
1616 if (latency > 499 || latency > max_latency)
1617 return -EINVAL;
1618
1619 return 0;
1620}
1621
1622int hci_register_cb(struct hci_cb *hcb);
1623int hci_unregister_cb(struct hci_cb *hcb);
1624
1625struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1626 const void *param, u32 timeout);
1627struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1628 const void *param, u8 event, u32 timeout);
1629int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
1630 const void *param);
1631
1632int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
1633 const void *param);
1634void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
1635void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
1636
1637void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
1638
1639struct sk_buff *hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1640 const void *param, u32 timeout);
1641
1642u32 hci_conn_get_phy(struct hci_conn *conn);
1643
1644
1645void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
1646void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
1647 int flag, struct sock *skip_sk);
1648void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb);
1649void hci_send_monitor_ctrl_event(struct hci_dev *hdev, u16 event,
1650 void *data, u16 data_len, ktime_t tstamp,
1651 int flag, struct sock *skip_sk);
1652
1653void hci_sock_dev_event(struct hci_dev *hdev, int event);
1654
1655#define HCI_MGMT_VAR_LEN BIT(0)
1656#define HCI_MGMT_NO_HDEV BIT(1)
1657#define HCI_MGMT_UNTRUSTED BIT(2)
1658#define HCI_MGMT_UNCONFIGURED BIT(3)
1659#define HCI_MGMT_HDEV_OPTIONAL BIT(4)
1660
1661struct hci_mgmt_handler {
1662 int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
1663 u16 data_len);
1664 size_t data_len;
1665 unsigned long flags;
1666};
1667
1668struct hci_mgmt_chan {
1669 struct list_head list;
1670 unsigned short channel;
1671 size_t handler_count;
1672 const struct hci_mgmt_handler *handlers;
1673 void (*hdev_init) (struct sock *sk, struct hci_dev *hdev);
1674};
1675
1676int hci_mgmt_chan_register(struct hci_mgmt_chan *c);
1677void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c);
1678
1679
1680#define DISCOV_TYPE_BREDR (BIT(BDADDR_BREDR))
1681#define DISCOV_TYPE_LE (BIT(BDADDR_LE_PUBLIC) | \
1682 BIT(BDADDR_LE_RANDOM))
1683#define DISCOV_TYPE_INTERLEAVED (BIT(BDADDR_BREDR) | \
1684 BIT(BDADDR_LE_PUBLIC) | \
1685 BIT(BDADDR_LE_RANDOM))
1686
1687
1688
1689
1690#define DISCOV_LE_SCAN_WIN 0x12
1691#define DISCOV_LE_SCAN_INT 0x12
1692#define DISCOV_LE_TIMEOUT 10240
1693#define DISCOV_INTERLEAVED_TIMEOUT 5120
1694#define DISCOV_INTERLEAVED_INQUIRY_LEN 0x04
1695#define DISCOV_BREDR_INQUIRY_LEN 0x08
1696#define DISCOV_LE_RESTART_DELAY msecs_to_jiffies(200)
1697#define DISCOV_LE_FAST_ADV_INT_MIN 100
1698#define DISCOV_LE_FAST_ADV_INT_MAX 150
1699
1700void mgmt_fill_version_info(void *ver);
1701int mgmt_new_settings(struct hci_dev *hdev);
1702void mgmt_index_added(struct hci_dev *hdev);
1703void mgmt_index_removed(struct hci_dev *hdev);
1704void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
1705void mgmt_power_on(struct hci_dev *hdev, int err);
1706void __mgmt_power_off(struct hci_dev *hdev);
1707void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
1708 bool persistent);
1709void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
1710 u32 flags, u8 *name, u8 name_len);
1711void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
1712 u8 link_type, u8 addr_type, u8 reason,
1713 bool mgmt_connected);
1714void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
1715 u8 link_type, u8 addr_type, u8 status);
1716void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1717 u8 addr_type, u8 status);
1718void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
1719void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1720 u8 status);
1721void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1722 u8 status);
1723int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1724 u8 link_type, u8 addr_type, u32 value,
1725 u8 confirm_hint);
1726int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1727 u8 link_type, u8 addr_type, u8 status);
1728int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1729 u8 link_type, u8 addr_type, u8 status);
1730int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1731 u8 link_type, u8 addr_type);
1732int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1733 u8 link_type, u8 addr_type, u8 status);
1734int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1735 u8 link_type, u8 addr_type, u8 status);
1736int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
1737 u8 link_type, u8 addr_type, u32 passkey,
1738 u8 entered);
1739void mgmt_auth_failed(struct hci_conn *conn, u8 status);
1740void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
1741void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1742void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
1743 u8 status);
1744void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
1745void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status);
1746void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status);
1747void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1748 u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
1749 u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len);
1750void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1751 u8 addr_type, s8 rssi, u8 *name, u8 name_len);
1752void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1753bool mgmt_powering_down(struct hci_dev *hdev);
1754void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1755void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent);
1756void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
1757 bool persistent);
1758void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
1759 u8 bdaddr_type, u8 store_hint, u16 min_interval,
1760 u16 max_interval, u16 latency, u16 timeout);
1761void mgmt_smp_complete(struct hci_conn *conn, bool complete);
1762bool mgmt_get_connectable(struct hci_dev *hdev);
1763void mgmt_set_connectable_complete(struct hci_dev *hdev, u8 status);
1764void mgmt_set_discoverable_complete(struct hci_dev *hdev, u8 status);
1765u8 mgmt_get_adv_discov_flags(struct hci_dev *hdev);
1766void mgmt_advertising_added(struct sock *sk, struct hci_dev *hdev,
1767 u8 instance);
1768void mgmt_advertising_removed(struct sock *sk, struct hci_dev *hdev,
1769 u8 instance);
1770int mgmt_phy_configuration_changed(struct hci_dev *hdev, struct sock *skip);
1771
1772u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
1773 u16 to_multiplier);
1774void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
1775 __u8 ltk[16], __u8 key_size);
1776
1777void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
1778 u8 *bdaddr_type);
1779
1780#define SCO_AIRMODE_MASK 0x0003
1781#define SCO_AIRMODE_CVSD 0x0000
1782#define SCO_AIRMODE_TRANSP 0x0003
1783
1784#endif
1785