#include <linux/module.h>
#include <linux/virtio.h>
#include <linux/virtio_config.h>
#include <linux/skbuff.h>
#include <uapi/linux/virtio_ids.h>
#include <uapi/linux/virtio_bt.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#define VERSION …
enum { … };
struct virtio_bluetooth { … };
static int virtbt_add_inbuf(struct virtio_bluetooth *vbt)
{ … }
static int virtbt_open(struct hci_dev *hdev)
{ … }
static int virtbt_open_vdev(struct virtio_bluetooth *vbt)
{ … }
static int virtbt_close(struct hci_dev *hdev)
{ … }
static int virtbt_close_vdev(struct virtio_bluetooth *vbt)
{ … }
static int virtbt_flush(struct hci_dev *hdev)
{ … }
static int virtbt_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{ … }
static int virtbt_setup_zephyr(struct hci_dev *hdev)
{ … }
static int virtbt_set_bdaddr_zephyr(struct hci_dev *hdev,
const bdaddr_t *bdaddr)
{ … }
static int virtbt_setup_intel(struct hci_dev *hdev)
{ … }
static int virtbt_set_bdaddr_intel(struct hci_dev *hdev, const bdaddr_t *bdaddr)
{ … }
static int virtbt_setup_realtek(struct hci_dev *hdev)
{ … }
static int virtbt_shutdown_generic(struct hci_dev *hdev)
{ … }
static void virtbt_rx_handle(struct virtio_bluetooth *vbt, struct sk_buff *skb)
{ … }
static void virtbt_rx_work(struct work_struct *work)
{ … }
static void virtbt_tx_done(struct virtqueue *vq)
{ … }
static void virtbt_rx_done(struct virtqueue *vq)
{ … }
static int virtbt_probe(struct virtio_device *vdev)
{ … }
static void virtbt_remove(struct virtio_device *vdev)
{ … }
static struct virtio_device_id virtbt_table[] = …;
MODULE_DEVICE_TABLE(virtio, virtbt_table);
static const unsigned int virtbt_features[] = …;
static struct virtio_driver virtbt_driver = …;
module_virtio_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_VERSION(…);
MODULE_LICENSE(…) …;