#include <linux/export.h>
#include <linux/debugfs.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>
#include <net/bluetooth/iso.h>
#include <net/bluetooth/mgmt.h>
#include "smp.h"
#include "eir.h"
struct sco_param { … };
struct conn_handle_t { … };
static const struct sco_param esco_param_cvsd[] = …;
static const struct sco_param sco_param_cvsd[] = …;
static const struct sco_param esco_param_msbc[] = …;
void hci_connect_le_scan_cleanup(struct hci_conn *conn, u8 status)
{ … }
static void hci_conn_cleanup(struct hci_conn *conn)
{ … }
int hci_disconnect(struct hci_conn *conn, __u8 reason)
{ … }
static void hci_add_sco(struct hci_conn *conn, __u16 handle)
{ … }
static bool find_next_esco_param(struct hci_conn *conn,
const struct sco_param *esco_param, int size)
{ … }
static int configure_datapath_sync(struct hci_dev *hdev, struct bt_codec *codec)
{ … }
static int hci_enhanced_setup_sync(struct hci_dev *hdev, void *data)
{ … }
static bool hci_setup_sync_conn(struct hci_conn *conn, __u16 handle)
{ … }
bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
{ … }
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_sco_setup(struct hci_conn *conn, __u8 status)
{ … }
static void hci_conn_timeout(struct work_struct *work)
{ … }
static void hci_conn_idle(struct work_struct *work)
{ … }
static void hci_conn_auto_accept(struct work_struct *work)
{ … }
static void le_disable_advertising(struct hci_dev *hdev)
{ … }
static void le_conn_timeout(struct work_struct *work)
{ … }
struct iso_list_data { … };
static void bis_list(struct hci_conn *conn, void *data)
{ … }
static int terminate_big_sync(struct hci_dev *hdev, void *data)
{ … }
static void terminate_big_destroy(struct hci_dev *hdev, void *data, int err)
{ … }
static int hci_le_terminate_big(struct hci_dev *hdev, struct hci_conn *conn)
{ … }
static int big_terminate_sync(struct hci_dev *hdev, void *data)
{ … }
static void find_bis(struct hci_conn *conn, void *data)
{ … }
static int hci_le_big_terminate(struct hci_dev *hdev, u8 big, struct hci_conn *conn)
{ … }
static void bis_cleanup(struct hci_conn *conn)
{ … }
static int remove_cig_sync(struct hci_dev *hdev, void *data)
{ … }
static int hci_le_remove_cig(struct hci_dev *hdev, u8 handle)
{ … }
static void find_cis(struct hci_conn *conn, void *data)
{ … }
static void cis_cleanup(struct hci_conn *conn)
{ … }
static int hci_conn_hash_alloc_unset(struct hci_dev *hdev)
{ … }
static 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)
{ … }
struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
u8 role, u16 handle)
{ … }
static void hci_conn_cleanup_child(struct hci_conn *conn, u8 reason)
{ … }
static void hci_conn_unlink(struct hci_conn *conn)
{ … }
void hci_conn_del(struct hci_conn *conn)
{ … }
struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type)
{ … }
EXPORT_SYMBOL(…);
static void hci_le_conn_failed(struct hci_conn *conn, u8 status)
{ … }
void hci_conn_failed(struct hci_conn *conn, u8 status)
{ … }
u8 hci_conn_set_handle(struct hci_conn *conn, u16 handle)
{ … }
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)
{ … }
static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
{ … }
static int hci_explicit_conn_params_set(struct hci_dev *hdev,
bdaddr_t *addr, u8 addr_type)
{ … }
static int qos_set_big(struct hci_dev *hdev, struct bt_iso_qos *qos)
{ … }
static int qos_set_bis(struct hci_dev *hdev, struct bt_iso_qos *qos)
{ … }
static struct hci_conn *hci_add_bis(struct hci_dev *hdev, bdaddr_t *dst,
struct bt_iso_qos *qos, __u8 base_len,
__u8 *base)
{ … }
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_acl(struct hci_dev *hdev, bdaddr_t *dst,
u8 sec_level, u8 auth_type,
enum conn_reasons conn_reason, u16 timeout)
{ … }
static struct hci_link *hci_conn_link(struct hci_conn *parent,
struct hci_conn *conn)
{ … }
struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
__u16 setting, struct bt_codec *codec,
u16 timeout)
{ … }
static int hci_le_create_big(struct hci_conn *conn, struct bt_iso_qos *qos)
{ … }
static int set_cig_params_sync(struct hci_dev *hdev, void *data)
{ … }
static bool hci_le_set_cig_params(struct hci_conn *conn, struct bt_iso_qos *qos)
{ … }
struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst,
__u8 dst_type, struct bt_iso_qos *qos)
{ … }
bool hci_iso_setup_path(struct hci_conn *conn)
{ … }
int hci_conn_check_create_cis(struct hci_conn *conn)
{ … }
static int hci_create_cis_sync(struct hci_dev *hdev, void *data)
{ … }
int hci_le_create_cis_pending(struct hci_dev *hdev)
{ … }
static void hci_iso_qos_setup(struct hci_dev *hdev, struct hci_conn *conn,
struct bt_iso_io_qos *qos, __u8 phy)
{ … }
static int create_big_sync(struct hci_dev *hdev, void *data)
{ … }
static void create_pa_complete(struct hci_dev *hdev, void *data, int err)
{ … }
static int create_pa_sync(struct hci_dev *hdev, void *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[])
{ … }
static void create_big_complete(struct hci_dev *hdev, void *data, int err)
{ … }
struct hci_conn *hci_bind_bis(struct hci_dev *hdev, bdaddr_t *dst,
struct bt_iso_qos *qos,
__u8 base_len, __u8 *base)
{ … }
static void bis_mark_per_adv(struct hci_conn *conn, void *data)
{ … }
struct hci_conn *hci_connect_bis(struct hci_dev *hdev, bdaddr_t *dst,
__u8 dst_type, 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)
{ … }
int hci_conn_check_link_mode(struct hci_conn *conn)
{ … }
static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
{ … }
static void hci_conn_encrypt(struct hci_conn *conn)
{ … }
int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
bool initiator)
{ … }
EXPORT_SYMBOL(…);
int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
{ … }
EXPORT_SYMBOL(…);
int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
{ … }
EXPORT_SYMBOL(…);
void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
{ … }
void hci_conn_hash_flush(struct hci_dev *hdev)
{ … }
static u32 get_link_mode(struct hci_conn *conn)
{ … }
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)
{ … }
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)
{ … }
static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
__u16 handle)
{ … }
struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
{ … }
u32 hci_conn_get_phy(struct hci_conn *conn)
{ … }
static int abort_conn_sync(struct hci_dev *hdev, void *data)
{ … }
int hci_abort_conn(struct hci_conn *conn, u8 reason)
{ … }