#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/mgmt.h>
#include "mgmt_util.h"
#include "msft.h"
#define MSFT_RSSI_THRESHOLD_VALUE_MIN …
#define MSFT_RSSI_THRESHOLD_VALUE_MAX …
#define MSFT_RSSI_LOW_TIMEOUT_MAX …
#define MSFT_OP_READ_SUPPORTED_FEATURES …
struct msft_cp_read_supported_features { … } __packed;
struct msft_rp_read_supported_features { … } __packed;
#define MSFT_OP_LE_MONITOR_ADVERTISEMENT …
#define MSFT_MONITOR_ADVERTISEMENT_TYPE_PATTERN …
struct msft_le_monitor_advertisement_pattern { … };
struct msft_le_monitor_advertisement_pattern_data { … };
struct msft_cp_le_monitor_advertisement { … } __packed;
struct msft_rp_le_monitor_advertisement { … } __packed;
#define MSFT_OP_LE_CANCEL_MONITOR_ADVERTISEMENT …
struct msft_cp_le_cancel_monitor_advertisement { … } __packed;
struct msft_rp_le_cancel_monitor_advertisement { … } __packed;
#define MSFT_OP_LE_SET_ADVERTISEMENT_FILTER_ENABLE …
struct msft_cp_le_set_advertisement_filter_enable { … } __packed;
struct msft_rp_le_set_advertisement_filter_enable { … } __packed;
#define MSFT_EV_LE_MONITOR_DEVICE …
struct msft_ev_le_monitor_device { … } __packed;
struct msft_monitor_advertisement_handle_data { … };
enum monitor_addr_filter_state { … };
#define MSFT_MONITOR_ADVERTISEMENT_TYPE_ADDR …
struct msft_monitor_addr_filter_data { … };
struct msft_data { … };
bool msft_monitor_supported(struct hci_dev *hdev)
{ … }
static bool read_supported_features(struct hci_dev *hdev,
struct msft_data *msft)
{ … }
static struct msft_monitor_advertisement_handle_data *msft_find_handle_data
(struct hci_dev *hdev, u16 handle, bool is_mgmt)
{ … }
static struct msft_monitor_addr_filter_data *msft_find_address_data
(struct hci_dev *hdev, u8 addr_type, bdaddr_t *addr,
u8 pattern_handle)
{ … }
static int msft_monitor_device_del(struct hci_dev *hdev, __u16 mgmt_handle,
bdaddr_t *bdaddr, __u8 addr_type,
bool notify)
{ … }
static int msft_le_monitor_advertisement_cb(struct hci_dev *hdev, u16 opcode,
struct adv_monitor *monitor,
struct sk_buff *skb)
{ … }
static void msft_remove_addr_filters_sync(struct hci_dev *hdev, u8 handle)
{ … }
static int msft_le_cancel_monitor_advertisement_cb(struct hci_dev *hdev,
u16 opcode,
struct adv_monitor *monitor,
struct sk_buff *skb)
{ … }
static int msft_remove_monitor_sync(struct hci_dev *hdev,
struct adv_monitor *monitor)
{ … }
int msft_suspend_sync(struct hci_dev *hdev)
{ … }
static bool msft_monitor_rssi_valid(struct adv_monitor *monitor)
{ … }
static bool msft_monitor_pattern_valid(struct adv_monitor *monitor)
{ … }
static int msft_add_monitor_sync(struct hci_dev *hdev,
struct adv_monitor *monitor)
{ … }
static void reregister_monitor(struct hci_dev *hdev)
{ … }
int msft_resume_sync(struct hci_dev *hdev)
{ … }
void msft_do_open(struct hci_dev *hdev)
{ … }
void msft_do_close(struct hci_dev *hdev)
{ … }
static int msft_cancel_address_filter_sync(struct hci_dev *hdev, void *data)
{ … }
void msft_register(struct hci_dev *hdev)
{ … }
void msft_release(struct hci_dev *hdev)
{ … }
static void msft_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr,
__u8 addr_type, __u16 mgmt_handle)
{ … }
static void msft_device_lost(struct hci_dev *hdev, bdaddr_t *bdaddr,
__u8 addr_type, __u16 mgmt_handle)
{ … }
static void *msft_skb_pull(struct hci_dev *hdev, struct sk_buff *skb,
u8 ev, size_t len)
{ … }
static int msft_add_address_filter_sync(struct hci_dev *hdev, void *data)
{ … }
static struct msft_monitor_addr_filter_data *msft_add_address_filter
(struct hci_dev *hdev, u8 addr_type, bdaddr_t *bdaddr,
struct msft_monitor_advertisement_handle_data *handle_data)
{ … }
static void msft_monitor_device_evt(struct hci_dev *hdev, struct sk_buff *skb)
{ … }
void msft_vendor_evt(struct hci_dev *hdev, void *data, struct sk_buff *skb)
{ … }
__u64 msft_get_features(struct hci_dev *hdev)
{ … }
static void msft_le_set_advertisement_filter_enable_cb(struct hci_dev *hdev,
void *user_data,
u8 status)
{ … }
int msft_add_monitor_pattern(struct hci_dev *hdev, struct adv_monitor *monitor)
{ … }
int msft_remove_monitor(struct hci_dev *hdev, struct adv_monitor *monitor)
{ … }
int msft_set_filter_enable(struct hci_dev *hdev, bool enable)
{ … }
bool msft_curve_validity(struct hci_dev *hdev)
{ … }