blob: 5e9536502ec50561ec29712f0cf2c8de04a79a25 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#ifndef _PCIDRIVER_DEV_H
#define _PCIDRIVER_DEV_H
typedef struct pcidriver_privdata_s pcidriver_privdata_t;
#include "kmem.h"
#include "umem.h"
/* Hold the driver private data */
struct pcidriver_privdata_s {
int devid; /* the device id */
dev_t devno; /* device number (major and minor) */
struct pci_dev *pdev; /* PCI device */
struct device *class_dev; /* Class device */
struct cdev cdev; /* char device struct */
int mmap_mode; /* current mmap mode */
int mmap_area; /* current PCI mmap area */
#ifdef ENABLE_IRQ
int irq_enabled; /* Non-zero if IRQ is enabled */
int irq_count; /* Just an IRQ counter */
wait_queue_head_t irq_queues[ PCIDRIVER_INT_MAXSOURCES ]; /* One queue per interrupt source */
atomic_t irq_outstanding[ PCIDRIVER_INT_MAXSOURCES ]; /* Outstanding interrupts per queue */
volatile unsigned int *bars_kmapped[6]; /* PCI BARs mmapped in kernel space */
#endif
spinlock_t kmemlist_lock; /* Spinlock to lock kmem list operations */
struct list_head kmem_list; /* List of 'kmem_list_entry's associated with this device */
pcidriver_kmem_entry_t *kmem_last_sync; /* Last accessed kmem entry */
atomic_t kmem_count; /* id for next kmem entry */
int kmem_cur_id; /* Currently selected kmem buffer, for mmap */
spinlock_t umemlist_lock; /* Spinlock to lock umem list operations */
struct list_head umem_list; /* List of 'umem_list_entry's associated with this device */
atomic_t umem_count; /* id for next umem entry */
int msi_mode; /* Flag specifying if interrupt have been initialized in MSI mode */
atomic_t refs; /* Reference counter */
};
const struct file_operations *pcidriver_get_fops(void);
void pcidriver_module_get(pcidriver_privdata_t *privdata);
void pcidriver_module_put(pcidriver_privdata_t *privdata);
long pcidriver_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
#endif /* _PCIDRIVER_DEV_H */
|