#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/firmware.h>
#include <linux/pci.h>
#include <linux/wait.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <asm/unaligned.h>
#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include "btintel.h"
#include "btintel_pcie.h"
#define VERSION …
#define BTINTEL_PCI_DEVICE(dev, subdev) …
#define POLL_INTERVAL_US …
static const struct pci_device_id btintel_pcie_table[] = …;
MODULE_DEVICE_TABLE(pci, btintel_pcie_table);
#define BTINTEL_PCIE_HCI_TYPE_LEN …
#define BTINTEL_PCIE_HCI_CMD_PKT …
#define BTINTEL_PCIE_HCI_ACL_PKT …
#define BTINTEL_PCIE_HCI_SCO_PKT …
#define BTINTEL_PCIE_HCI_EVT_PKT …
static inline void ipc_print_ia_ring(struct hci_dev *hdev, struct ia *ia,
u16 queue_num)
{ … }
static inline void ipc_print_urbd1(struct hci_dev *hdev, struct urbd1 *urbd1,
u16 index)
{ … }
static int btintel_pcie_poll_bit(struct btintel_pcie_data *data, u32 offset,
u32 bits, u32 mask, int timeout_us)
{ … }
static struct btintel_pcie_data *btintel_pcie_get_data(struct msix_entry *entry)
{ … }
static void btintel_pcie_set_tx_db(struct btintel_pcie_data *data, u16 index)
{ … }
static void btintel_pcie_prepare_tx(struct txq *txq, u16 tfd_index,
struct sk_buff *skb)
{ … }
static int btintel_pcie_send_sync(struct btintel_pcie_data *data,
struct sk_buff *skb)
{ … }
static void btintel_pcie_set_rx_db(struct btintel_pcie_data *data, u16 index)
{ … }
static void btintel_pcie_prepare_rx(struct rxq *rxq, u16 frbd_index)
{ … }
static int btintel_pcie_submit_rx(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_start_rx(struct btintel_pcie_data *data)
{ … }
static void btintel_pcie_reset_ia(struct btintel_pcie_data *data)
{ … }
static void btintel_pcie_reset_bt(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_enable_bt(struct btintel_pcie_data *data)
{ … }
static void btintel_pcie_msix_gp0_handler(struct btintel_pcie_data *data)
{ … }
static void btintel_pcie_msix_tx_handle(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_recv_frame(struct btintel_pcie_data *data,
struct sk_buff *skb)
{ … }
static void btintel_pcie_rx_work(struct work_struct *work)
{ … }
static int btintel_pcie_submit_rx_work(struct btintel_pcie_data *data, u8 status,
void *buf)
{ … }
static void btintel_pcie_msix_rx_handle(struct btintel_pcie_data *data)
{ … }
static irqreturn_t btintel_pcie_msix_isr(int irq, void *data)
{ … }
static irqreturn_t btintel_pcie_irq_msix_handler(int irq, void *dev_id)
{ … }
static int btintel_pcie_setup_irq(struct btintel_pcie_data *data)
{ … }
struct btintel_pcie_causes_list { … };
static struct btintel_pcie_causes_list causes_list[] = …;
static void btintel_pcie_config_msix(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_config_pcie(struct pci_dev *pdev,
struct btintel_pcie_data *data)
{ … }
static void btintel_pcie_init_ci(struct btintel_pcie_data *data,
struct ctx_info *ci)
{ … }
static void btintel_pcie_free_txq_bufs(struct btintel_pcie_data *data,
struct txq *txq)
{ … }
static int btintel_pcie_setup_txq_bufs(struct btintel_pcie_data *data,
struct txq *txq)
{ … }
static void btintel_pcie_free_rxq_bufs(struct btintel_pcie_data *data,
struct rxq *rxq)
{ … }
static int btintel_pcie_setup_rxq_bufs(struct btintel_pcie_data *data,
struct rxq *rxq)
{ … }
static void btintel_pcie_setup_ia(struct btintel_pcie_data *data,
dma_addr_t p_addr, void *v_addr,
struct ia *ia)
{ … }
static void btintel_pcie_free(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_alloc(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_open(struct hci_dev *hdev)
{ … }
static int btintel_pcie_close(struct hci_dev *hdev)
{ … }
static int btintel_pcie_inject_cmd_complete(struct hci_dev *hdev, __u16 opcode)
{ … }
static int btintel_pcie_send_frame(struct hci_dev *hdev,
struct sk_buff *skb)
{ … }
static void btintel_pcie_release_hdev(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_setup(struct hci_dev *hdev)
{ … }
static int btintel_pcie_setup_hdev(struct btintel_pcie_data *data)
{ … }
static int btintel_pcie_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{ … }
static void btintel_pcie_remove(struct pci_dev *pdev)
{ … }
static struct pci_driver btintel_pcie_driver = …;
module_pci_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_VERSION(…);
MODULE_LICENSE(…) …;