#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/tty.h>
#include <linux/errno.h>
#include <linux/ioctl.h>
#include <linux/skbuff.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include "hci_uart.h"
struct ath_struct { … };
#define OP_WRITE_TAG …
#define INDEX_BDADDR …
struct ath_vendor_cmd { … } __packed;
static int ath_wakeup_ar3k(struct tty_struct *tty)
{ … }
static void ath_hci_uart_work(struct work_struct *work)
{ … }
static int ath_open(struct hci_uart *hu)
{ … }
static int ath_close(struct hci_uart *hu)
{ … }
static int ath_flush(struct hci_uart *hu)
{ … }
static int ath_vendor_cmd(struct hci_dev *hdev, uint8_t opcode, uint16_t index,
const void *data, size_t dlen)
{ … }
static int ath_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
{ … }
static int ath_setup(struct hci_uart *hu)
{ … }
static const struct h4_recv_pkt ath_recv_pkts[] = …;
static int ath_recv(struct hci_uart *hu, const void *data, int count)
{ … }
#define HCI_OP_ATH_SLEEP …
static int ath_enqueue(struct hci_uart *hu, struct sk_buff *skb)
{ … }
static struct sk_buff *ath_dequeue(struct hci_uart *hu)
{ … }
static const struct hci_uart_proto athp = …;
int __init ath_init(void)
{ … }
int __exit ath_deinit(void)
{ … }