i915: Add skeleton for HWZ ioctl.

This commit is contained in:
Michel Dänzer 2007-03-21 17:35:14 +01:00
parent caf0c481a6
commit a9abb4c337
3 changed files with 61 additions and 1 deletions

View file

@ -711,6 +711,45 @@ static int i915_cmdbuffer(DRM_IOCTL_ARGS)
return 0;
}
static int i915_hwz_alloc(drm_device_t *dev, drm_i915_hwz_t *hwz)
{
return 0;
}
static int i915_hwz_free(drm_device_t *dev, drm_i915_hwz_t *hwz)
{
return 0;
}
static int i915_hwz_render(drm_device_t *dev, drm_i915_hwz_t *hwz)
{
return 0;
}
static int i915_hwz(DRM_IOCTL_ARGS)
{
DRM_DEVICE;
drm_i915_hwz_t hwz;
DRM_COPY_FROM_USER_IOCTL(hwz, (drm_i915_hwz_t __user *) data,
sizeof(hwz));
switch (hwz.op) {
case DRM_I915_HWZ_RENDER:
DRM_INFO("i915 hwz render\n"
/*, batch.start, batch.used, batch.num_cliprects*/);
LOCK_TEST_WITH_RETURN(dev, filp);
return i915_hwz_render(dev, &hwz);
case DRM_I915_HWZ_ALLOC:
return i915_hwz_alloc(dev, &hwz);
case DRM_I915_HWZ_FREE:
return i915_hwz_free(dev, &hwz);
default:
DRM_ERROR("Invalid op 0x%x\n", hwz.op);
return DRM_ERR(EINVAL);
}
}
static int i915_do_cleanup_pageflip(drm_device_t * dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
@ -930,6 +969,7 @@ drm_ioctl_desc_t i915_ioctls[] = {
[DRM_IOCTL_NR(DRM_I915_GET_VBLANK_PIPE)] = { i915_vblank_pipe_get, DRM_AUTH },
[DRM_IOCTL_NR(DRM_I915_VBLANK_SWAP)] = {i915_vblank_swap, DRM_AUTH},
[DRM_IOCTL_NR(DRM_I915_MMIO)] = {i915_mmio, DRM_AUTH},
[DRM_IOCTL_NR(DRM_I915_HWZ)] = {i915_hwz, DRM_AUTH},
};
int i915_max_ioctl = DRM_ARRAY_SIZE(i915_ioctls);

View file

@ -159,6 +159,7 @@ typedef struct _drm_i915_sarea {
#define DRM_I915_GET_VBLANK_PIPE 0x0e
#define DRM_I915_VBLANK_SWAP 0x0f
#define DRM_I915_MMIO 0x10
#define DRM_I915_HWZ 0x11
#define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
#define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
@ -176,6 +177,7 @@ typedef struct _drm_i915_sarea {
#define DRM_IOCTL_I915_SET_VBLANK_PIPE DRM_IOW( DRM_COMMAND_BASE + DRM_I915_SET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
#define DRM_IOCTL_I915_GET_VBLANK_PIPE DRM_IOR( DRM_COMMAND_BASE + DRM_I915_GET_VBLANK_PIPE, drm_i915_vblank_pipe_t)
#define DRM_IOCTL_I915_VBLANK_SWAP DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_VBLANK_SWAP, drm_i915_vblank_swap_t)
#define DRM_IOCTL_I915_HWZ DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_HWZ, drm_i915_hwz_t)
/* Asynchronous page flipping:
@ -314,4 +316,14 @@ typedef struct drm_i915_mmio {
void __user *data;
} drm_i915_mmio_t;
/* Hardware Zone Rendering Support:
*/
#define DRM_I915_HWZ_RENDER 1
#define DRM_I915_HWZ_ALLOC 2
#define DRM_I915_HWZ_FREE 3
typedef struct drm_i915_hwz {
unsigned int op;
} drm_i915_hwz_t;
#endif /* _I915_DRM_H_ */

View file

@ -50,9 +50,10 @@
* - Support vertical blank on secondary display pipe
* 1.8: New ioctl for ARB_Occlusion_Query
* 1.9: Usable page flipping and triple buffering
* 1.10: Hardware Zone Rendering support
*/
#define DRIVER_MAJOR 1
#define DRIVER_MINOR 9
#define DRIVER_MINOR 10
#define DRIVER_PATCHLEVEL 0
#if defined(__linux__)
@ -298,6 +299,7 @@ extern int i915_wait_ring(drm_device_t * dev, int n, const char *caller);
#define NOPID 0x2094
#define LP_RING 0x2030
#define HP_RING 0x2040
#define HWB_RING 0x2400
#define RING_TAIL 0x00
#define TAIL_ADDR 0x001FFFF8
#define RING_HEAD 0x04
@ -316,6 +318,12 @@ extern int i915_wait_ring(drm_device_t * dev, int n, const char *caller);
#define RING_VALID 0x00000001
#define RING_INVALID 0x00000000
#define BINCTL 0x2420
#define BINSCENE 0x2428
#define BMP_BUFFER 0x2430
#define BMP_GET 0x2438
#define BMP_PUT 0x2440
#define GFX_OP_SCISSOR ((0x3<<29)|(0x1c<<24)|(0x10<<19))
#define SC_UPDATE_SCISSOR (0x1<<1)
#define SC_ENABLE_MASK (0x1<<0)