#include <asm/unaligned.h>
#include <linux/crypto.h>
#include <crypto/algapi.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/mgmt.h>
#include "hci_debugfs.h"
#include "hci_codec.h"
#include "smp.h"
#include "msft.h"
#include "eir.h"
#define ZERO_KEY …
#define secs_to_jiffies(_secs) …
static void *hci_ev_skb_pull(struct hci_dev *hdev, struct sk_buff *skb,
u8 ev, size_t len)
{ … }
static void *hci_cc_skb_pull(struct hci_dev *hdev, struct sk_buff *skb,
u16 op, size_t len)
{ … }
static void *hci_le_ev_skb_pull(struct hci_dev *hdev, struct sk_buff *skb,
u8 ev, size_t len)
{ … }
static u8 hci_cc_inquiry_cancel(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_periodic_inq(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_exit_periodic_inq(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_remote_name_req_cancel(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_role_discovery(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_link_policy(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_link_policy(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_def_link_policy(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_def_link_policy(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_reset(struct hci_dev *hdev, void *data, struct sk_buff *skb)
{ … }
static u8 hci_cc_read_stored_link_key(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_delete_stored_link_key(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_local_name(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_name(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_auth_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_encrypt_mode(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_scan_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_set_event_filter(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_class_of_dev(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_class_of_dev(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_voice_setting(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_voice_setting(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_num_supported_iac(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_ssp_mode(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_sc_support(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_version(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_enc_key_size(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_commands(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_auth_payload_timeout(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_auth_payload_timeout(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_features(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_ext_features(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_buffer_size(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_bd_addr(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_pairing_opts(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_page_scan_activity(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_page_scan_activity(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_page_scan_type(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_page_scan_type(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_clock(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_def_err_data_reporting(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_def_err_data_reporting(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_pin_code_reply(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_pin_code_neg_reply(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_buffer_size(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_local_features(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_adv_tx_power(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_user_confirm_reply(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_user_confirm_neg_reply(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_user_passkey_reply(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_user_passkey_neg_reply(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_oob_data(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_local_oob_ext_data(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_random_addr(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_default_phy(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_adv_set_random_addr(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_remove_adv_set(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_clear_adv_sets(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_transmit_power(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_privacy_mode(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_adv_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_ext_adv_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_scan_param(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_ext_scan_param(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static bool has_pending_adv_report(struct hci_dev *hdev)
{ … }
static void clear_pending_adv_report(struct hci_dev *hdev)
{ … }
static void store_pending_adv_report(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 bdaddr_type, s8 rssi, u32 flags,
u8 *data, u8 len)
{ … }
static void le_set_scan_enable_complete(struct hci_dev *hdev, u8 enable)
{ … }
static u8 hci_cc_le_set_scan_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_ext_scan_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_num_adv_sets(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_accept_list_size(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_clear_accept_list(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_add_to_accept_list(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_del_from_accept_list(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_supported_states(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_def_data_len(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_write_def_data_len(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_add_to_resolv_list(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_del_from_resolv_list(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_clear_resolv_list(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_resolv_list_size(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_addr_resolution_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_read_max_data_len(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_le_host_supported(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_set_adv_param(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_set_ext_adv_param(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_rssi(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_read_tx_power(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_write_ssp_debug_mode(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
{ … }
static int hci_outgoing_auth_needed(struct hci_dev *hdev,
struct hci_conn *conn)
{ … }
static int hci_resolve_name(struct hci_dev *hdev,
struct inquiry_entry *e)
{ … }
static bool hci_resolve_next_name(struct hci_dev *hdev)
{ … }
static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
bdaddr_t *bdaddr, u8 *name, u8 name_len)
{ … }
static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_setup_sync_conn_status(struct hci_dev *hdev, __u16 handle,
__u8 status)
{ … }
static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_enhanced_setup_sync_conn(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
{ … }
static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
{ … }
static u8 ev_bdaddr_type(struct hci_dev *hdev, u8 type, bool *resolved)
{ … }
static void cs_le_create_conn(struct hci_dev *hdev, bdaddr_t *peer_addr,
u8 peer_addr_type, u8 own_address_type,
u8 filter_policy)
{ … }
static void hci_cs_le_create_conn(struct hci_dev *hdev, u8 status)
{ … }
static void hci_cs_le_ext_create_conn(struct hci_dev *hdev, u8 status)
{ … }
static void hci_cs_le_read_remote_features(struct hci_dev *hdev, u8 status)
{ … }
static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
{ … }
static void hci_cs_switch_role(struct hci_dev *hdev, u8 status)
{ … }
static void hci_inquiry_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_inquiry_result_evt(struct hci_dev *hdev, void *edata,
struct sk_buff *skb)
{ … }
static void hci_conn_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_reject_conn(struct hci_dev *hdev, bdaddr_t *bdaddr)
{ … }
static void hci_conn_request_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_to_mgmt_reason(u8 err)
{ … }
static void hci_disconn_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_auth_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_remote_name_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_encrypt_change_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_change_link_key_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_remote_features_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static inline void handle_cmd_cnt_and_timer(struct hci_dev *hdev, u8 ncmd)
{ … }
static u8 hci_cc_le_read_buffer_size_v2(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_unbound_cis_failed(struct hci_dev *hdev, u8 cig, u8 status)
{ … }
static u8 hci_cc_le_set_cig_params(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_setup_iso_path(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_cs_le_create_big(struct hci_dev *hdev, u8 status)
{ … }
static u8 hci_cc_set_per_adv_param(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_cc_le_set_per_adv_enable(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
#define HCI_CC_VL(_op, _func, _min, _max) …
#define HCI_CC(_op, _func, _len) …
#define HCI_CC_STATUS(_op, _func) …
static const struct hci_cc { … } hci_cc_table[] = …;
static u8 hci_cc_func(struct hci_dev *hdev, const struct hci_cc *cc,
struct sk_buff *skb)
{ … }
static void hci_cmd_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb, u16 *opcode, u8 *status,
hci_req_complete_t *req_complete,
hci_req_complete_skb_t *req_complete_skb)
{ … }
static void hci_cs_le_create_cis(struct hci_dev *hdev, u8 status)
{ … }
#define HCI_CS(_op, _func) …
static const struct hci_cs { … } hci_cs_table[] = …;
static void hci_cmd_status_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb, u16 *opcode, u8 *status,
hci_req_complete_t *req_complete,
hci_req_complete_skb_t *req_complete_skb)
{ … }
static void hci_hardware_error_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_role_change_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_num_comp_pkts_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_mode_change_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_pin_code_request_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void conn_set_key(struct hci_conn *conn, u8 key_type, u8 pin_len)
{ … }
static void hci_link_key_request_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_link_key_notify_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_clock_offset_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_pkt_type_change_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, void *edata,
struct sk_buff *skb)
{ … }
static void hci_remote_ext_features_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_sync_conn_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static inline size_t eir_get_length(u8 *eir, size_t eir_len)
{ … }
static void hci_extended_inquiry_result_evt(struct hci_dev *hdev, void *edata,
struct sk_buff *skb)
{ … }
static void hci_key_refresh_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 hci_get_auth_req(struct hci_conn *conn)
{ … }
static u8 bredr_oob_data_present(struct hci_conn *conn)
{ … }
static void hci_io_capa_request_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_io_capa_reply_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_user_confirm_request_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_user_passkey_request_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_user_passkey_notify_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_keypress_notify_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_simple_pair_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_remote_host_features_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_remote_oob_data_request_evt(struct hci_dev *hdev, void *edata,
struct sk_buff *skb)
{ … }
static void le_conn_update_addr(struct hci_conn *conn, bdaddr_t *bdaddr,
u8 bdaddr_type, bdaddr_t *local_rpa)
{ … }
static void le_conn_complete_evt(struct hci_dev *hdev, u8 status,
bdaddr_t *bdaddr, u8 bdaddr_type,
bdaddr_t *local_rpa, u8 role, u16 handle,
u16 interval, u16 latency,
u16 supervision_timeout)
{ … }
static void hci_le_conn_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_enh_conn_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_ext_adv_term_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_conn_update_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static struct hci_conn *check_pending_le_conn(struct hci_dev *hdev,
bdaddr_t *addr,
u8 addr_type, bool addr_resolved,
u8 adv_type, u8 phy, u8 sec_phy)
{ … }
static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
u8 bdaddr_type, bdaddr_t *direct_addr,
u8 direct_addr_type, u8 phy, u8 sec_phy, s8 rssi,
u8 *data, u8 len, bool ext_adv, bool ctl_time,
u64 instant)
{ … }
static void hci_le_adv_report_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static u8 ext_evt_type_to_legacy(struct hci_dev *hdev, u16 evt_type)
{ … }
static void hci_le_ext_adv_report_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static int hci_le_pa_term_sync(struct hci_dev *hdev, __le16 handle)
{ … }
static void hci_le_pa_sync_estabilished_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_per_adv_report_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_remote_feat_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_ltk_request_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void send_conn_param_neg_reply(struct hci_dev *hdev, u16 handle,
u8 reason)
{ … }
static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_direct_adv_report_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_phy_update_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_cis_estabilished_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_reject_cis(struct hci_dev *hdev, __le16 handle)
{ … }
static void hci_le_accept_cis(struct hci_dev *hdev, __le16 handle)
{ … }
static void hci_le_cis_req_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static int hci_iso_term_big_sync(struct hci_dev *hdev, void *data)
{ … }
static void hci_le_create_big_complete_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_big_sync_established_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
static void hci_le_big_info_adv_report_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb)
{ … }
#define HCI_LE_EV_VL(_op, _func, _min_len, _max_len) …
#define HCI_LE_EV(_op, _func, _len) …
#define HCI_LE_EV_STATUS(_op, _func) …
static const struct hci_le_ev { … } hci_le_ev_table[U8_MAX + 1] = …;
static void hci_le_meta_evt(struct hci_dev *hdev, void *data,
struct sk_buff *skb, u16 *opcode, u8 *status,
hci_req_complete_t *req_complete,
hci_req_complete_skb_t *req_complete_skb)
{ … }
static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
u8 event, struct sk_buff *skb)
{ … }
static void hci_store_wake_reason(struct hci_dev *hdev, u8 event,
struct sk_buff *skb)
{ … }
#define HCI_EV_VL(_op, _func, _min_len, _max_len) …
#define HCI_EV(_op, _func, _len) …
#define HCI_EV_STATUS(_op, _func) …
#define HCI_EV_REQ_VL(_op, _func, _min_len, _max_len) …
#define HCI_EV_REQ(_op, _func, _len) …
static const struct hci_ev { … } hci_ev_table[U8_MAX + 1] = …;
static void hci_event_func(struct hci_dev *hdev, u8 event, struct sk_buff *skb,
u16 *opcode, u8 *status,
hci_req_complete_t *req_complete,
hci_req_complete_skb_t *req_complete_skb)
{ … }
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
{ … }