12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #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 */
|