#include "cx88.h"
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_VERSION(…);
static unsigned int debug;
module_param(debug, int, 0644);
MODULE_PARM_DESC(…) …;
#define dprintk(level, fmt, arg...) …
#if defined(CONFIG_MODULES) && defined(MODULE)
static void request_module_async(struct work_struct *work)
{
struct cx8802_dev *dev = container_of(work, struct cx8802_dev,
request_module_wk);
if (dev->core->board.mpeg & CX88_MPEG_DVB)
request_module("cx88-dvb");
if (dev->core->board.mpeg & CX88_MPEG_BLACKBIRD)
request_module("cx88-blackbird");
}
static void request_modules(struct cx8802_dev *dev)
{
INIT_WORK(&dev->request_module_wk, request_module_async);
schedule_work(&dev->request_module_wk);
}
static void flush_request_modules(struct cx8802_dev *dev)
{
flush_work(&dev->request_module_wk);
}
#else
#define request_modules(dev) …
#define flush_request_modules(dev) …
#endif
static LIST_HEAD(cx8802_devlist);
static DEFINE_MUTEX(cx8802_mutex);
int cx8802_start_dma(struct cx8802_dev *dev,
struct cx88_dmaqueue *q,
struct cx88_buffer *buf)
{ … }
EXPORT_SYMBOL(…);
static int cx8802_stop_dma(struct cx8802_dev *dev)
{ … }
static int cx8802_restart_queue(struct cx8802_dev *dev,
struct cx88_dmaqueue *q)
{ … }
int cx8802_buf_prepare(struct vb2_queue *q, struct cx8802_dev *dev,
struct cx88_buffer *buf)
{ … }
EXPORT_SYMBOL(…);
void cx8802_buf_queue(struct cx8802_dev *dev, struct cx88_buffer *buf)
{ … }
EXPORT_SYMBOL(…);
static void do_cancel_buffers(struct cx8802_dev *dev)
{ … }
void cx8802_cancel_buffers(struct cx8802_dev *dev)
{ … }
EXPORT_SYMBOL(…);
static const char *cx88_mpeg_irqs[32] = …;
static void cx8802_mpeg_irq(struct cx8802_dev *dev)
{ … }
#define MAX_IRQ_LOOP …
static irqreturn_t cx8802_irq(int irq, void *dev_id)
{ … }
static int cx8802_init_common(struct cx8802_dev *dev)
{ … }
static void cx8802_fini_common(struct cx8802_dev *dev)
{ … }
static int cx8802_suspend_common(struct pci_dev *pci_dev, pm_message_t state)
{ … }
static int cx8802_resume_common(struct pci_dev *pci_dev)
{ … }
struct cx8802_driver *cx8802_get_driver(struct cx8802_dev *dev,
enum cx88_board_type btype)
{ … }
EXPORT_SYMBOL(…);
static int cx8802_request_acquire(struct cx8802_driver *drv)
{ … }
static int cx8802_request_release(struct cx8802_driver *drv)
{ … }
static int cx8802_check_driver(struct cx8802_driver *drv)
{ … }
int cx8802_register_driver(struct cx8802_driver *drv)
{ … }
EXPORT_SYMBOL(…);
int cx8802_unregister_driver(struct cx8802_driver *drv)
{ … }
EXPORT_SYMBOL(…);
static int cx8802_probe(struct pci_dev *pci_dev,
const struct pci_device_id *pci_id)
{ … }
static void cx8802_remove(struct pci_dev *pci_dev)
{ … }
static const struct pci_device_id cx8802_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, cx8802_pci_tbl);
static struct pci_driver cx8802_pci_driver = …;
module_pci_driver(…) …;