#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/errno.h>
#include <linux/skbuff.h>
#include <linux/mmc/host.h>
#include <linux/mmc/sdio_ids.h>
#include <linux/mmc/sdio_func.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#define VERSION …
static const struct sdio_device_id btsdio_table[] = …;
MODULE_DEVICE_TABLE(sdio, btsdio_table);
struct btsdio_data { … };
#define REG_RDAT …
#define REG_TDAT …
#define REG_PC_RRT …
#define REG_PC_WRT …
#define REG_RTC_STAT …
#define REG_RTC_SET …
#define REG_INTRD …
#define REG_CL_INTRD …
#define REG_EN_INTRD …
#define REG_MD_STAT …
#define REG_MD_SET …
static int btsdio_tx_packet(struct btsdio_data *data, struct sk_buff *skb)
{ … }
static void btsdio_work(struct work_struct *work)
{ … }
static int btsdio_rx_packet(struct btsdio_data *data)
{ … }
static void btsdio_interrupt(struct sdio_func *func)
{ … }
static int btsdio_open(struct hci_dev *hdev)
{ … }
static int btsdio_close(struct hci_dev *hdev)
{ … }
static int btsdio_flush(struct hci_dev *hdev)
{ … }
static int btsdio_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{ … }
static int btsdio_probe(struct sdio_func *func,
const struct sdio_device_id *id)
{ … }
static void btsdio_remove(struct sdio_func *func)
{ … }
static struct sdio_driver btsdio_driver = …;
module_sdio_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_VERSION(…);
MODULE_LICENSE(…) …;