summaryrefslogtreecommitdiff
path: root/shared/via_drm.h
diff options
context:
space:
mode:
authorErdi Chen <erdi@freedesktop.org>2004-08-24 01:44:37 +0000
committerErdi Chen <erdi@freedesktop.org>2004-08-24 01:44:37 +0000
commit25e319c1ef5b6c002ddfe55338cd920240cc1dad (patch)
tree92c13df2e866d7d70016b11cfc9316993431d420 /shared/via_drm.h
parent7fe4f607681e9a5593e91915953a9b6c45e5f08c (diff)
This patch adds three new ioctl's to the VIA Unichrome/Pro DRM driver:
DRM_IOCTL_VIA_DMA_INIT DRM_IOCTL_VIA_CMDBUFFER DRM_IOCTL_VIA_FLUSH The first ioctl sets up an area in AGP memory that will be used as the ring buffer. The second ioctl copies a command buffer from user space memory to the ring buffer. The third ioctl waits for engine idle until it returns. The motivation for this patch is to avoid the wait for engine idle call before each buffer flush in the current DRI driver. With this patch, the DRI driver can continue to flush its buffer as long as there is free space in the ring buffer. This patch adds an additional copy operation on the command buffer. This buffer copying is necessary to support multiple DRI clients rendering simultaneously. Otherwise, more CPU time will be spent in the busy loop waiting for engine idle between DRI context switch. Even in the single client case, the tradeoff is reasonable in comparision to the kernel call to check for free buffer space for the client to render directly to the ring buffer.
Diffstat (limited to 'shared/via_drm.h')
-rw-r--r--shared/via_drm.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/shared/via_drm.h b/shared/via_drm.h
index e984932c..5325f62f 100644
--- a/shared/via_drm.h
+++ b/shared/via_drm.h
@@ -66,6 +66,9 @@
#define DRM_IOCTL_VIA_FB_INIT DRM_IOWR(0x43, drm_via_fb_t)
#define DRM_IOCTL_VIA_MAP_INIT DRM_IOWR(0x44, drm_via_init_t)
#define DRM_IOCTL_VIA_DEC_FUTEX DRM_IOW(0x45, drm_via_futex_t)
+#define DRM_IOCTL_VIA_DMA_INIT DRM_IOWR(0x47, drm_via_dma_init_t)
+#define DRM_IOCTL_VIA_CMDBUFFER DRM_IOWR(0x48, drm_via_dma_init_t)
+#define DRM_IOCTL_VIA_FLUSH DRM_IO(0x49)
/* Indices into buf.Setup where various bits of state are mirrored per
* context and per buffer. These can be fired at the card as a unit,
@@ -123,6 +126,22 @@ typedef struct _drm_via_futex {
unsigned int val;
} drm_via_futex_t;
+typedef struct _drm_via_dma_init {
+ enum {
+ VIA_INIT_DMA = 0x01,
+ VIA_CLEANUP_DMA = 0x02
+ } func;
+
+ unsigned long offset;
+ unsigned long size;
+ unsigned long reg_pause_addr;
+} drm_via_dma_init_t;
+
+typedef struct _drm_via_cmdbuffer {
+ char *buf;
+ unsigned long size;
+} drm_via_cmdbuffer_t;
+
/* Warning: If you change the SAREA structure you must change the Xserver
* structure as well */
@@ -178,6 +197,9 @@ int via_mem_free( DRM_IOCTL_ARGS );
int via_agp_init( DRM_IOCTL_ARGS );
int via_map_init( DRM_IOCTL_ARGS );
int via_decoder_futex( DRM_IOCTL_ARGS );
+int via_dma_init( DRM_IOCTL_ARGS );
+int via_cmdbuffer( DRM_IOCTL_ARGS );
+int via_flush_ioctl( DRM_IOCTL_ARGS );
#endif
#endif /* _VIA_DRM_H_ */