summaryrefslogtreecommitdiff
path: root/linux
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2003-04-23 23:42:29 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2003-04-23 23:42:29 +0000
commite15b0b6a1b95e4145363b15e1a581ee230b2f9a2 (patch)
tree8f596ee2d77469d27e017bdcea6bc55628d3d738 /linux
parent23a76c37594d3d423963c7b8610b64367e3ff9d8 (diff)
Install dummy/noop read & poll fops unless the driver has replacements.
Diffstat (limited to 'linux')
-rw-r--r--linux/drmP.h2
-rw-r--r--linux/drm_drv.h8
-rw-r--r--linux/drm_fops.h13
-rw-r--r--linux/gamma.h22
4 files changed, 27 insertions, 18 deletions
diff --git a/linux/drmP.h b/linux/drmP.h
index 2cdc5f09..8ebd1ec8 100644
--- a/linux/drmP.h
+++ b/linux/drmP.h
@@ -684,6 +684,8 @@ extern void DRM(vm_shm_close)(struct vm_area_struct *vma);
extern int DRM(mmap_dma)(struct file *filp,
struct vm_area_struct *vma);
extern int DRM(mmap)(struct file *filp, struct vm_area_struct *vma);
+extern unsigned int DRM(poll)(struct file *filp, struct poll_table_struct *wait);
+extern ssize_t DRM(read)(struct file *filp, char *buf, size_t count, loff_t *off);
/* Memory management support (drm_memory.h) */
extern void DRM(mem_init)(void);
diff --git a/linux/drm_drv.h b/linux/drm_drv.h
index 036cee35..dad961f8 100644
--- a/linux/drm_drv.h
+++ b/linux/drm_drv.h
@@ -84,6 +84,12 @@
#ifndef __HAVE_SG
#define __HAVE_SG 0
#endif
+#ifndef __HAVE_DRIVER_FOPS_READ
+#define __HAVE_DRIVER_FOPS_READ 0
+#endif
+#ifndef __HAVE_DRIVER_FOPS_POLL
+#define __HAVE_DRIVER_FOPS_POLL 0
+#endif
#ifndef DRIVER_PREINIT
#define DRIVER_PREINIT()
@@ -119,6 +125,8 @@ static struct file_operations DRM(fops) = { \
.ioctl = DRM(ioctl), \
.mmap = DRM(mmap), \
.fasync = DRM(fasync), \
+ .poll = DRM(poll), \
+ .read = DRM(read), \
}
#endif
diff --git a/linux/drm_fops.h b/linux/drm_fops.h
index 3baac693..fc8618e1 100644
--- a/linux/drm_fops.h
+++ b/linux/drm_fops.h
@@ -113,4 +113,17 @@ int DRM(fasync)(int fd, struct file *filp, int on)
return 0;
}
+#if !__HAVE_DRIVER_FOPS_POLL
+unsigned int DRM(poll)(struct file *filp, struct poll_table_struct *wait)
+{
+ return 0;
+}
+#endif
+
+#if !__HAVE_DRIVER_FOPS_READ
+ssize_t DRM(read)(struct file *filp, char *buf, size_t count, loff_t *off)
+{
+ return 0;
+}
+#endif
diff --git a/linux/gamma.h b/linux/gamma.h
index a5090c84..bff3f909 100644
--- a/linux/gamma.h
+++ b/linux/gamma.h
@@ -71,6 +71,9 @@
#define __HAVE_OLD_DMA 1
#define __HAVE_PCI_DMA 1
+#define __HAVE_DRIVER_FOPS_READ 1
+#define __HAVE_DRIVER_FOPS_POLL 1
+
#define __HAVE_MULTIPLE_DMA_QUEUES 1
#define __HAVE_DMA_WAITQUEUE 1
@@ -88,7 +91,7 @@
#define __HAVE_DMA_QUIESCENT 1
#define DRIVER_DMA_QUIESCENT() do { \
/* FIXME ! */ \
- gamma_dma_quiescent_single(dev); \
+ gamma_dma_quiescent_single(dev); \
return 0; \
} while (0)
@@ -98,22 +101,5 @@
#define DRIVER_AGP_BUFFERS_MAP( dev ) \
((drm_gamma_private_t *)((dev)->dev_private))->buffers
-/* Gamma makes use of a wierd mechanism to get the DDX driver to do
- * context switches on behalf of the 3d clients via a trip to the
- * kernel module. This requires read/poll functionality on the drm
- * file descriptor not normally present:
- */
-#define DRIVER_FOPS \
-static struct file_operations DRM(fops) = { \
- .owner = THIS_MODULE, \
- .open = DRM(open), \
- .flush = DRM(flush), \
- .release = DRM(release), \
- .ioctl = DRM(ioctl), \
- .mmap = DRM(mmap), \
- .read = DRM(read), \
- .fasync = DRM(fasync), \
- .poll = DRM(poll), \
-}
#endif /* __GAMMA_H__ */