#ifndef __HCI_CORE_H
#define __HCI_CORE_H
#include <linux/idr.h>
#include <linux/leds.h>
#include <linux/rculist.h>
#include <net/bluetooth/hci.h>
#include <net/bluetooth/hci_sync.h>
#include <net/bluetooth/hci_sock.h>
#include <net/bluetooth/coredump.h>
#define HCI_PRIO_MAX …
#define HCI_MAX_ID …
struct inquiry_data { … };
struct inquiry_entry { … };
struct discovery_state { … };
#define SUSPEND_NOTIFIER_TIMEOUT …
enum suspend_tasks { … };
enum suspended_state { … };
struct hci_conn_hash { … };
struct bdaddr_list { … };
struct codec_list { … };
struct bdaddr_list_with_irk { … };
enum hci_conn_flags { … };
hci_conn_flags_t;
struct bdaddr_list_with_flags { … };
struct bt_uuid { … };
struct blocked_key { … };
struct smp_csrk { … };
struct smp_ltk { … };
struct smp_irk { … };
struct link_key { … };
struct oob_data { … };
struct adv_info { … };
#define HCI_MAX_ADV_INSTANCES …
#define HCI_DEFAULT_ADV_DURATION …
#define HCI_ADV_TX_POWER_NO_PREFERENCE …
#define DATA_CMP(_d1, _l1, _d2, _l2) …
#define ADV_DATA_CMP(_adv, _data, _len) …
#define SCAN_RSP_CMP(_adv, _data, _len) …
struct monitored_device { … };
struct adv_pattern { … };
struct adv_rssi_thresholds { … };
struct adv_monitor { … };
#define HCI_MIN_ADV_MONITOR_HANDLE …
#define HCI_MAX_ADV_MONITOR_NUM_HANDLES …
#define HCI_MAX_ADV_MONITOR_NUM_PATTERNS …
#define HCI_ADV_MONITOR_EXT_NONE …
#define HCI_ADV_MONITOR_EXT_MSFT …
#define HCI_MAX_SHORT_NAME_LENGTH …
#define HCI_CONN_HANDLE_MAX …
#define HCI_CONN_HANDLE_UNSET(_handle) …
#define HCI_MIN_ENC_KEY_SIZE …
#define HCI_DEFAULT_RPA_TIMEOUT …
#define DEFAULT_CONN_INFO_MIN_AGE …
#define DEFAULT_CONN_INFO_MAX_AGE …
#define DEFAULT_AUTH_PAYLOAD_TIMEOUT …
#define HCI_MAX_PAGES …
struct hci_dev { … };
#define HCI_PHY_HANDLE(handle) …
enum conn_reasons { … };
struct hci_conn { … };
struct hci_link { … };
struct hci_chan { … };
struct hci_conn_params { … };
extern struct list_head hci_dev_list;
extern struct list_head hci_cb_list;
extern rwlock_t hci_dev_list_lock;
extern struct mutex hci_cb_list_lock;
#define hci_dev_set_flag(hdev, nr) …
#define hci_dev_clear_flag(hdev, nr) …
#define hci_dev_change_flag(hdev, nr) …
#define hci_dev_test_flag(hdev, nr) …
#define hci_dev_test_and_set_flag(hdev, nr) …
#define hci_dev_test_and_clear_flag(hdev, nr) …
#define hci_dev_test_and_change_flag(hdev, nr) …
#define hci_dev_clear_volatile_flags(hdev) …
#define hci_dev_le_state_simultaneous(hdev) …
int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
int l2cap_disconn_ind(struct hci_conn *hcon);
void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
#if IS_ENABLED(CONFIG_BT_BREDR)
int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
#else
static inline int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
__u8 *flags)
{
return 0;
}
static inline void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
{
}
#endif
#if IS_ENABLED(CONFIG_BT_LE)
int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
#else
static inline int iso_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
__u8 *flags)
{
return 0;
}
static inline void iso_recv(struct hci_conn *hcon, struct sk_buff *skb,
u16 flags)
{
}
#endif
#define INQUIRY_CACHE_AGE_MAX …
#define INQUIRY_ENTRY_AGE_MAX …
static inline void discovery_init(struct hci_dev *hdev)
{ … }
static inline void hci_discovery_filter_clear(struct hci_dev *hdev)
{ … }
bool hci_discovery_active(struct hci_dev *hdev);
void hci_discovery_set_state(struct hci_dev *hdev, int state);
static inline int inquiry_cache_empty(struct hci_dev *hdev)
{ … }
static inline long inquiry_cache_age(struct hci_dev *hdev)
{ … }
static inline long inquiry_entry_age(struct inquiry_entry *e)
{ … }
struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
bdaddr_t *bdaddr);
struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
bdaddr_t *bdaddr);
struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
bdaddr_t *bdaddr,
int state);
void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
struct inquiry_entry *ie);
u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
bool name_known);
void hci_inquiry_cache_flush(struct hci_dev *hdev);
enum { … };
static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
{ … }
static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
{ … }
static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
{ … }
static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
{ … }
static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
{ … }
static inline unsigned int hci_conn_count(struct hci_dev *hdev)
{ … }
static inline bool hci_conn_valid(struct hci_dev *hdev, struct hci_conn *conn)
{ … }
static inline __u8 hci_conn_lookup_type(struct hci_dev *hdev, __u16 handle)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_bis(struct hci_dev *hdev,
bdaddr_t *ba, __u8 bis)
{ … }
static inline struct hci_conn *
hci_conn_hash_lookup_per_adv_bis(struct hci_dev *hdev,
bdaddr_t *ba,
__u8 big, __u8 bis)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
__u16 handle)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
__u8 type, bdaddr_t *ba)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev,
bdaddr_t *ba,
__u8 ba_type)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_cis(struct hci_dev *hdev,
bdaddr_t *ba,
__u8 ba_type,
__u8 cig,
__u8 id)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_cig(struct hci_dev *hdev,
__u8 handle)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_big(struct hci_dev *hdev,
__u8 handle)
{ … }
static inline struct hci_conn *
hci_conn_hash_lookup_big_state(struct hci_dev *hdev, __u8 handle, __u16 state)
{ … }
static inline struct hci_conn *
hci_conn_hash_lookup_pa_sync_big_handle(struct hci_dev *hdev, __u8 big)
{ … }
static inline struct hci_conn *
hci_conn_hash_lookup_pa_sync_handle(struct hci_dev *hdev, __u16 sync_handle)
{ … }
static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
__u8 type, __u16 state)
{ … }
hci_conn_func_t;
static inline void hci_conn_hash_list_state(struct hci_dev *hdev,
hci_conn_func_t func, __u8 type,
__u16 state, void *data)
{ … }
static inline void hci_conn_hash_list_flag(struct hci_dev *hdev,
hci_conn_func_t func, __u8 type,
__u8 flag, void *data)
{ … }
static inline struct hci_conn *hci_lookup_le_connect(struct hci_dev *hdev)
{ … }
static inline bool hci_is_le_conn_scanning(struct hci_dev *hdev)
{ … }
int hci_disconnect(struct hci_conn *conn, __u8 reason);
bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
void hci_sco_setup(struct hci_conn *conn, __u8 status);
bool hci_iso_setup_path(struct hci_conn *conn);
int hci_le_create_cis_pending(struct hci_dev *hdev);
int hci_conn_check_create_cis(struct hci_conn *conn);
struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
u8 role, u16 handle);
struct hci_conn *hci_conn_add_unset(struct hci_dev *hdev, int type,
bdaddr_t *dst, u8 role);
void hci_conn_del(struct hci_conn *conn);
void hci_conn_hash_flush(struct hci_dev *hdev);
struct hci_chan *hci_chan_create(struct hci_conn *conn);
void hci_chan_del(struct hci_chan *chan);
void hci_chan_list_flush(struct hci_conn *conn);
struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle);
struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
u8 dst_type, u8 sec_level,
u16 conn_timeout,
enum conn_reasons conn_reason);
struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
u8 dst_type, bool dst_resolved, u8 sec_level,
u16 conn_timeout, u8 role, u8 phy, u8 sec_phy);
void hci_connect_le_scan_cleanup(struct hci_conn *conn, u8 status);
struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
u8 sec_level, u8 auth_type,
enum conn_reasons conn_reason, u16 timeout);
struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
__u16 setting, struct bt_codec *codec,
u16 timeout);
struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst,
__u8 dst_type, struct bt_iso_qos *qos);
struct hci_conn *hci_bind_bis(struct hci_dev *hdev, bdaddr_t *dst,
struct bt_iso_qos *qos,
__u8 base_len, __u8 *base);
struct hci_conn *hci_connect_cis(struct hci_dev *hdev, bdaddr_t *dst,
__u8 dst_type, struct bt_iso_qos *qos);
struct hci_conn *hci_connect_bis(struct hci_dev *hdev, bdaddr_t *dst,
__u8 dst_type, struct bt_iso_qos *qos,
__u8 data_len, __u8 *data);
struct hci_conn *hci_pa_create_sync(struct hci_dev *hdev, bdaddr_t *dst,
__u8 dst_type, __u8 sid, struct bt_iso_qos *qos);
int hci_le_big_create_sync(struct hci_dev *hdev, struct hci_conn *hcon,
struct bt_iso_qos *qos,
__u16 sync_handle, __u8 num_bis, __u8 bis[]);
int hci_conn_check_link_mode(struct hci_conn *conn);
int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
bool initiator);
int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
void hci_conn_failed(struct hci_conn *conn, u8 status);
u8 hci_conn_set_handle(struct hci_conn *conn, u16 handle);
static inline struct hci_conn *hci_conn_get(struct hci_conn *conn)
{ … }
static inline void hci_conn_put(struct hci_conn *conn)
{ … }
static inline struct hci_conn *hci_conn_hold(struct hci_conn *conn)
{ … }
static inline void hci_conn_drop(struct hci_conn *conn)
{ … }
static inline void hci_dev_put(struct hci_dev *d)
{ … }
static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
{ … }
#define hci_dev_lock(d) …
#define hci_dev_unlock(d) …
#define to_hci_dev(d) …
#define to_hci_conn(c) …
static inline void *hci_get_drvdata(struct hci_dev *hdev)
{ … }
static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
{ … }
static inline void *hci_get_priv(struct hci_dev *hdev)
{ … }
struct hci_dev *hci_dev_get(int index);
struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, u8 src_type);
struct hci_dev *hci_alloc_dev_priv(int sizeof_priv);
static inline struct hci_dev *hci_alloc_dev(void)
{ … }
void hci_free_dev(struct hci_dev *hdev);
int hci_register_dev(struct hci_dev *hdev);
void hci_unregister_dev(struct hci_dev *hdev);
void hci_release_dev(struct hci_dev *hdev);
int hci_register_suspend_notifier(struct hci_dev *hdev);
int hci_unregister_suspend_notifier(struct hci_dev *hdev);
int hci_suspend_dev(struct hci_dev *hdev);
int hci_resume_dev(struct hci_dev *hdev);
int hci_reset_dev(struct hci_dev *hdev);
int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb);
__printf(2, 3) void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...);
__printf(2, 3) void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...);
static inline void hci_set_msft_opcode(struct hci_dev *hdev, __u16 opcode)
{ … }
static inline void hci_set_aosp_capable(struct hci_dev *hdev)
{ … }
static inline void hci_devcd_setup(struct hci_dev *hdev)
{ … }
int hci_dev_open(__u16 dev);
int hci_dev_close(__u16 dev);
int hci_dev_do_close(struct hci_dev *hdev);
int hci_dev_reset(__u16 dev);
int hci_dev_reset_stat(__u16 dev);
int hci_dev_cmd(unsigned int cmd, void __user *arg);
int hci_get_dev_list(void __user *arg);
int hci_get_dev_info(void __user *arg);
int hci_get_conn_list(void __user *arg);
int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
int hci_inquiry(void __user *arg);
struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *list,
bdaddr_t *bdaddr, u8 type);
struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
struct list_head *list, bdaddr_t *bdaddr,
u8 type);
struct bdaddr_list_with_flags *
hci_bdaddr_list_lookup_with_flags(struct list_head *list, bdaddr_t *bdaddr,
u8 type);
int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type);
int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
u8 type, u8 *peer_irk, u8 *local_irk);
int hci_bdaddr_list_add_with_flags(struct list_head *list, bdaddr_t *bdaddr,
u8 type, u32 flags);
int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type);
int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
u8 type);
int hci_bdaddr_list_del_with_flags(struct list_head *list, bdaddr_t *bdaddr,
u8 type);
void hci_bdaddr_list_clear(struct list_head *list);
struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
bdaddr_t *addr, u8 addr_type);
struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
bdaddr_t *addr, u8 addr_type);
void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
void hci_conn_params_clear_disabled(struct hci_dev *hdev);
void hci_conn_params_free(struct hci_conn_params *param);
void hci_pend_le_list_del_init(struct hci_conn_params *param);
void hci_pend_le_list_add(struct hci_conn_params *param,
struct list_head *list);
struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
bdaddr_t *addr,
u8 addr_type);
void hci_uuids_clear(struct hci_dev *hdev);
void hci_link_keys_clear(struct hci_dev *hdev);
struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
bdaddr_t *bdaddr, u8 *val, u8 type,
u8 pin_len, bool *persistent);
struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 addr_type, u8 type, u8 authenticated,
u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand);
struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 addr_type, u8 role);
int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
void hci_smp_ltks_clear(struct hci_dev *hdev);
int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 addr_type);
struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 addr_type, u8 val[16], bdaddr_t *rpa);
void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16]);
void hci_blocked_keys_clear(struct hci_dev *hdev);
void hci_smp_irks_clear(struct hci_dev *hdev);
bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
void hci_remote_oob_data_clear(struct hci_dev *hdev);
struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
bdaddr_t *bdaddr, u8 bdaddr_type);
int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 bdaddr_type, u8 *hash192, u8 *rand192,
u8 *hash256, u8 *rand256);
int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 bdaddr_type);
void hci_adv_instances_clear(struct hci_dev *hdev);
struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance);
struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance);
struct adv_info *hci_add_adv_instance(struct hci_dev *hdev, u8 instance,
u32 flags, u16 adv_data_len, u8 *adv_data,
u16 scan_rsp_len, u8 *scan_rsp_data,
u16 timeout, u16 duration, s8 tx_power,
u32 min_interval, u32 max_interval,
u8 mesh_handle);
struct adv_info *hci_add_per_instance(struct hci_dev *hdev, u8 instance,
u32 flags, u8 data_len, u8 *data,
u32 min_interval, u32 max_interval);
int hci_set_adv_instance_data(struct hci_dev *hdev, u8 instance,
u16 adv_data_len, u8 *adv_data,
u16 scan_rsp_len, u8 *scan_rsp_data);
int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance);
void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired);
u32 hci_adv_instance_flags(struct hci_dev *hdev, u8 instance);
bool hci_adv_instance_is_scannable(struct hci_dev *hdev, u8 instance);
void hci_adv_monitors_clear(struct hci_dev *hdev);
void hci_free_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor);
int hci_add_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor);
int hci_remove_single_adv_monitor(struct hci_dev *hdev, u16 handle);
int hci_remove_all_adv_monitor(struct hci_dev *hdev);
bool hci_is_adv_monitoring(struct hci_dev *hdev);
int hci_get_adv_monitor_offload_ext(struct hci_dev *hdev);
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
void hci_init_sysfs(struct hci_dev *hdev);
void hci_conn_init_sysfs(struct hci_conn *conn);
void hci_conn_add_sysfs(struct hci_conn *conn);
void hci_conn_del_sysfs(struct hci_conn *conn);
#define SET_HCIDEV_DEV(hdev, pdev) …
#define GET_HCIDEV_DEV(hdev) …
#define lmp_encrypt_capable(dev) …
#define lmp_rswitch_capable(dev) …
#define lmp_hold_capable(dev) …
#define lmp_sniff_capable(dev) …
#define lmp_park_capable(dev) …
#define lmp_inq_rssi_capable(dev) …
#define lmp_esco_capable(dev) …
#define lmp_bredr_capable(dev) …
#define lmp_le_capable(dev) …
#define lmp_sniffsubr_capable(dev) …
#define lmp_pause_enc_capable(dev) …
#define lmp_esco_2m_capable(dev) …
#define lmp_ext_inq_capable(dev) …
#define lmp_le_br_capable(dev) …
#define lmp_ssp_capable(dev) …
#define lmp_no_flush_capable(dev) …
#define lmp_lsto_capable(dev) …
#define lmp_inq_tx_pwr_capable(dev) …
#define lmp_ext_feat_capable(dev) …
#define lmp_transp_capable(dev) …
#define lmp_edr_2m_capable(dev) …
#define lmp_edr_3m_capable(dev) …
#define lmp_edr_3slot_capable(dev) …
#define lmp_edr_5slot_capable(dev) …
#define lmp_cpb_central_capable(dev) …
#define lmp_cpb_peripheral_capable(dev) …
#define lmp_sync_train_capable(dev) …
#define lmp_sync_scan_capable(dev) …
#define lmp_sc_capable(dev) …
#define lmp_ping_capable(dev) …
#define lmp_host_ssp_capable(dev) …
#define lmp_host_sc_capable(dev) …
#define lmp_host_le_capable(dev) …
#define lmp_host_le_br_capable(dev) …
#define hdev_is_powered(dev) …
#define bredr_sc_enabled(dev) …
#define rpa_valid(dev) …
#define adv_rpa_valid(adv) …
#define scan_1m(dev) …
#define le_2m_capable(dev) …
#define scan_2m(dev) …
#define le_coded_capable(dev) …
#define scan_coded(dev) …
#define ll_privacy_capable(dev) …
#define use_ll_privacy(dev) …
#define privacy_mode_capable(dev) …
#define read_key_size_capable(dev) …
#define enhanced_sync_conn_capable(dev) …
#define use_ext_scan(dev) …
#define use_ext_conn(dev) …
#define ext_adv_capable(dev) …
#define max_adv_len(dev) …
#define use_enhanced_conn_complete(dev) …
#define per_adv_capable(dev) …
#define iso_capable(dev) …
#define cis_capable(dev) …
#define cis_central_capable(dev) …
#define cis_peripheral_capable(dev) …
#define bis_capable(dev) …
#define sync_recv_capable(dev) …
#define mws_transport_config_capable(dev) …
#define HCI_PROTO_DEFER …
static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
__u8 type, __u8 *flags)
{ … }
static inline int hci_proto_disconn_ind(struct hci_conn *conn)
{ … }
struct hci_cb { … };
static inline void hci_connect_cfm(struct hci_conn *conn, __u8 status)
{ … }
static inline void hci_disconn_cfm(struct hci_conn *conn, __u8 reason)
{ … }
static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
{ … }
static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status)
{ … }
static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
{ … }
static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
__u8 role)
{ … }
static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
{ … }
static inline bool hci_is_identity_address(bdaddr_t *addr, u8 addr_type)
{ … }
static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
bdaddr_t *bdaddr, u8 addr_type)
{ … }
static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
u16 to_multiplier)
{ … }
int hci_register_cb(struct hci_cb *hcb);
int hci_unregister_cb(struct hci_cb *hcb);
int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
const void *param);
int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
const void *param);
void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
void hci_send_iso(struct hci_conn *conn, struct sk_buff *skb);
void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
void *hci_recv_event_data(struct hci_dev *hdev, __u8 event);
u32 hci_conn_get_phy(struct hci_conn *conn);
void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
int flag, struct sock *skip_sk);
void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb);
void hci_send_monitor_ctrl_event(struct hci_dev *hdev, u16 event,
void *data, u16 data_len, ktime_t tstamp,
int flag, struct sock *skip_sk);
void hci_sock_dev_event(struct hci_dev *hdev, int event);
#define HCI_MGMT_VAR_LEN …
#define HCI_MGMT_NO_HDEV …
#define HCI_MGMT_UNTRUSTED …
#define HCI_MGMT_UNCONFIGURED …
#define HCI_MGMT_HDEV_OPTIONAL …
struct hci_mgmt_handler { … };
struct hci_mgmt_chan { … };
int hci_mgmt_chan_register(struct hci_mgmt_chan *c);
void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c);
#define DISCOV_TYPE_BREDR …
#define DISCOV_TYPE_LE …
#define DISCOV_TYPE_INTERLEAVED …
#define DISCOV_LE_SCAN_WIN …
#define DISCOV_LE_SCAN_INT …
#define DISCOV_LE_SCAN_INT_FAST …
#define DISCOV_LE_SCAN_WIN_FAST …
#define DISCOV_LE_SCAN_INT_CONN …
#define DISCOV_LE_SCAN_WIN_CONN …
#define DISCOV_LE_SCAN_INT_SLOW1 …
#define DISCOV_LE_SCAN_WIN_SLOW1 …
#define DISCOV_LE_SCAN_INT_SLOW2 …
#define DISCOV_LE_SCAN_WIN_SLOW2 …
#define DISCOV_CODED_SCAN_INT_FAST …
#define DISCOV_CODED_SCAN_WIN_FAST …
#define DISCOV_CODED_SCAN_INT_SLOW1 …
#define DISCOV_CODED_SCAN_WIN_SLOW1 …
#define DISCOV_CODED_SCAN_INT_SLOW2 …
#define DISCOV_CODED_SCAN_WIN_SLOW2 …
#define DISCOV_LE_TIMEOUT …
#define DISCOV_INTERLEAVED_TIMEOUT …
#define DISCOV_INTERLEAVED_INQUIRY_LEN …
#define DISCOV_BREDR_INQUIRY_LEN …
#define DISCOV_LE_RESTART_DELAY …
#define DISCOV_LE_FAST_ADV_INT_MIN …
#define DISCOV_LE_FAST_ADV_INT_MAX …
#define DISCOV_LE_PER_ADV_INT_MIN …
#define DISCOV_LE_PER_ADV_INT_MAX …
#define DISCOV_LE_ADV_MESH_MIN …
#define DISCOV_LE_ADV_MESH_MAX …
#define INTERVAL_TO_MS(x) …
#define NAME_RESOLVE_DURATION …
void mgmt_fill_version_info(void *ver);
int mgmt_new_settings(struct hci_dev *hdev);
void mgmt_index_added(struct hci_dev *hdev);
void mgmt_index_removed(struct hci_dev *hdev);
void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
void mgmt_power_on(struct hci_dev *hdev, int err);
void __mgmt_power_off(struct hci_dev *hdev);
void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
bool persistent);
void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
u8 *name, u8 name_len);
void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u8 reason,
bool mgmt_connected);
void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u8 status);
void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
u8 addr_type, u8 status);
void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 status);
void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 status);
int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u32 value,
u8 confirm_hint);
int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u8 status);
int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u8 status);
int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type);
int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u8 status);
int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u8 status);
int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 link_type, u8 addr_type, u32 passkey,
u8 entered);
void mgmt_auth_failed(struct hci_conn *conn, u8 status);
void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
u8 status);
void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status);
void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status);
void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len,
u64 instant);
void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
u8 addr_type, s8 rssi, u8 *name, u8 name_len);
void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
void mgmt_suspending(struct hci_dev *hdev, u8 state);
void mgmt_resuming(struct hci_dev *hdev, u8 reason, bdaddr_t *bdaddr,
u8 addr_type);
bool mgmt_powering_down(struct hci_dev *hdev);
void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent);
void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
bool persistent);
void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 bdaddr_type, u8 store_hint, u16 min_interval,
u16 max_interval, u16 latency, u16 timeout);
void mgmt_smp_complete(struct hci_conn *conn, bool complete);
bool mgmt_get_connectable(struct hci_dev *hdev);
u8 mgmt_get_adv_discov_flags(struct hci_dev *hdev);
void mgmt_advertising_added(struct sock *sk, struct hci_dev *hdev,
u8 instance);
void mgmt_advertising_removed(struct sock *sk, struct hci_dev *hdev,
u8 instance);
void mgmt_adv_monitor_removed(struct hci_dev *hdev, u16 handle);
int mgmt_phy_configuration_changed(struct hci_dev *hdev, struct sock *skip);
void mgmt_adv_monitor_device_lost(struct hci_dev *hdev, u16 handle,
bdaddr_t *bdaddr, u8 addr_type);
int hci_abort_conn(struct hci_conn *conn, u8 reason);
u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
u16 to_multiplier);
void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
__u8 ltk[16], __u8 key_size);
void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 *bdaddr_type);
#define SCO_AIRMODE_MASK …
#define SCO_AIRMODE_CVSD …
#define SCO_AIRMODE_TRANSP …
#define LOCAL_CODEC_ACL_MASK …
#define LOCAL_CODEC_SCO_MASK …
#define TRANSPORT_TYPE_MAX …
#endif