diff --git a/sys/dev/drm2/i915/i915_ioc32.c b/sys/dev/drm2/i915/i915_ioc32.c index 26040e8..605f1cd 100644 --- a/sys/dev/drm2/i915/i915_ioc32.c +++ b/sys/dev/drm2/i915/i915_ioc32.c @@ -127,11 +127,50 @@ typedef struct drm_i915_mem_alloc32 { u32 region_offset; /* offset from start of fb or agp */ } drm_i915_mem_alloc32_t; +struct drm_i915_gem_context_create32 { + /* output: id of new context*/ + uint32_t ctx_id; + uint32_t pad; +}; + +static int +compat_i915_gem_context_create_ioctl(struct drm_device *dev, void *data, + struct drm_file *file) +{ + struct drm_i915_gem_context_create32 *req32 = data; + struct drm_i915_gem_context_create request; + + request.ctx_id = req32->ctx_id; + request.pad = req32->pad; + + return i915_gem_context_create_ioctl(dev, (void *)&request, file); +} + +struct drm_i915_gem_context_destroy { + uint32_t ctx_id; + uint32_t pad; +}; + +static int +compat_i915_gem_context_destroy_ioctl(struct drm_device *dev, void *data, + struct drm_file *file) +{ + struct drm_i915_gem_context_destroy32 *req32 = data; + struct drm_i915_gem_context_destroy request; + + request.ctx_id = req32->ctx_id; + request.pad = req32->pad; + + return i915_gem_context_destroy_ioctl(dev, (void *)&request, file); +} + drm_ioctl_desc_t i915_compat_ioctls[] = { DRM_IOCTL_DEF(DRM_I915_BATCHBUFFER, compat_i915_batchbuffer, DRM_AUTH), DRM_IOCTL_DEF(DRM_I915_CMDBUFFER, compat_i915_cmdbuffer, DRM_AUTH), DRM_IOCTL_DEF(DRM_I915_GETPARAM, compat_i915_getparam, DRM_AUTH), - DRM_IOCTL_DEF(DRM_I915_IRQ_EMIT, compat_i915_irq_emit, DRM_AUTH) + DRM_IOCTL_DEF(DRM_I915_IRQ_EMIT, compat_i915_irq_emit, DRM_AUTH), + DRM_IOCTL_DEF(DRM_I915_GEM_CONTEXT_CREATE, compat_i915_gem_context_create_ioctl, DRM_UNLOCKED), + DRM_IOCTL_DEF(DRM_I915_GEM_CONTEXT_DESTROY, compat_i915_gem_context_destroy_ioctl, DRM_UNLOCKED), }; int i915_compat_ioctls_nr = DRM_ARRAY_SIZE(i915_compat_ioctls);