#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/ptrace.h>
#include <linux/ioport.h>
#include <linux/spinlock.h>
#include <linux/moduleparam.h>
#include <linux/skbuff.h>
#include <linux/string.h>
#include <linux/serial.h>
#include <linux/serial_reg.h>
#include <linux/bitops.h>
#include <asm/io.h>
#include <linux/device.h>
#include <linux/firmware.h>
#include <pcmcia/cistpl.h>
#include <pcmcia/ciscode.h>
#include <pcmcia/ds.h>
#include <pcmcia/cisreg.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_FIRMWARE(…) …;
struct bt3c_info { … };
static int bt3c_config(struct pcmcia_device *link);
static void bt3c_release(struct pcmcia_device *link);
static void bt3c_detach(struct pcmcia_device *p_dev);
#define XMIT_SENDING …
#define XMIT_WAKEUP …
#define XMIT_WAITING …
#define RECV_WAIT_PACKET_TYPE …
#define RECV_WAIT_EVENT_HEADER …
#define RECV_WAIT_ACL_HEADER …
#define RECV_WAIT_SCO_HEADER …
#define RECV_WAIT_DATA …
#define DATA_L …
#define DATA_H …
#define ADDR_L …
#define ADDR_H …
#define CONTROL …
static inline void bt3c_address(unsigned int iobase, unsigned short addr)
{ … }
static inline void bt3c_put(unsigned int iobase, unsigned short value)
{ … }
static inline void bt3c_io_write(unsigned int iobase, unsigned short addr, unsigned short value)
{ … }
static inline unsigned short bt3c_get(unsigned int iobase)
{ … }
static inline unsigned short bt3c_read(unsigned int iobase, unsigned short addr)
{ … }
static int bt3c_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
{ … }
static void bt3c_write_wakeup(struct bt3c_info *info)
{ … }
static void bt3c_receive(struct bt3c_info *info)
{ … }
static irqreturn_t bt3c_interrupt(int irq, void *dev_inst)
{ … }
static int bt3c_hci_flush(struct hci_dev *hdev)
{ … }
static int bt3c_hci_open(struct hci_dev *hdev)
{ … }
static int bt3c_hci_close(struct hci_dev *hdev)
{ … }
static int bt3c_hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
{ … }
static int bt3c_load_firmware(struct bt3c_info *info,
const unsigned char *firmware,
int count)
{ … }
static int bt3c_open(struct bt3c_info *info)
{ … }
static int bt3c_close(struct bt3c_info *info)
{ … }
static int bt3c_probe(struct pcmcia_device *link)
{ … }
static void bt3c_detach(struct pcmcia_device *link)
{ … }
static int bt3c_check_config(struct pcmcia_device *p_dev, void *priv_data)
{ … }
static int bt3c_check_config_notpicky(struct pcmcia_device *p_dev,
void *priv_data)
{ … }
static int bt3c_config(struct pcmcia_device *link)
{ … }
static void bt3c_release(struct pcmcia_device *link)
{ … }
static const struct pcmcia_device_id bt3c_ids[] = …;
MODULE_DEVICE_TABLE(pcmcia, bt3c_ids);
static struct pcmcia_driver bt3c_driver = …;
module_pcmcia_driver(…);