1239375Skib/*- 2239375Skib * Copyright (C) Paul Mackerras 2005 3239375Skib * Copyright (C) Alan Hourihane 2005 4239375Skib * All Rights Reserved. 5239375Skib * 6239375Skib * Permission is hereby granted, free of charge, to any person obtaining a 7239375Skib * copy of this software and associated documentation files (the "Software"), 8239375Skib * to deal in the Software without restriction, including without limitation 9239375Skib * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10239375Skib * and/or sell copies of the Software, and to permit persons to whom the 11239375Skib * Software is furnished to do so, subject to the following conditions: 12239375Skib * 13239375Skib * The above copyright notice and this permission notice (including the next 14239375Skib * paragraph) shall be included in all copies or substantial portions of the 15239375Skib * Software. 16239375Skib * 17239375Skib * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18239375Skib * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19239375Skib * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20239375Skib * THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21239375Skib * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22239375Skib * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 23239375Skib * IN THE SOFTWARE. 24239375Skib * 25239375Skib * Authors: 26239375Skib * Paul Mackerras <paulus@samba.org> 27239375Skib * Alan Hourihane <alanh@fairlite.demon.co.uk> 28239375Skib */ 29239375Skib 30239375Skib#include <sys/cdefs.h> 31239375Skib__FBSDID("$FreeBSD$"); 32239375Skib 33239375Skib#include "opt_compat.h" 34239375Skib 35239375Skib#ifdef COMPAT_FREEBSD32 36239375Skib 37239375Skib/** @file i915_ioc32.c 38239375Skib * 32-bit ioctl compatibility routines for the i915 DRM. 39239375Skib */ 40239375Skib 41239375Skib#include <dev/drm2/drmP.h> 42239375Skib#include <dev/drm2/drm.h> 43239375Skib#include <dev/drm2/i915/i915_drm.h> 44239375Skib#include <dev/drm2/i915/i915_drv.h> 45239375Skib#include <dev/drm2/i915/intel_drv.h> 46239375Skib 47239375Skibtypedef struct _drm_i915_batchbuffer32 { 48239375Skib int start; /* agp offset */ 49239375Skib int used; /* nr bytes in use */ 50239375Skib int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ 51239375Skib int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ 52239375Skib int num_cliprects; /* mulitpass with multiple cliprects? */ 53239375Skib u32 cliprects; /* pointer to userspace cliprects */ 54239375Skib} drm_i915_batchbuffer32_t; 55239375Skib 56239375Skibstatic int compat_i915_batchbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv) 57239375Skib{ 58239375Skib drm_i915_batchbuffer32_t *batchbuffer32 = data; 59239375Skib drm_i915_batchbuffer_t batchbuffer; 60239375Skib 61239375Skib batchbuffer.start = batchbuffer32->start; 62239375Skib batchbuffer.used = batchbuffer32->used; 63239375Skib batchbuffer.DR1 = batchbuffer32->DR1; 64239375Skib batchbuffer.DR4 = batchbuffer32->DR4; 65239375Skib batchbuffer.num_cliprects = batchbuffer32->num_cliprects; 66239375Skib batchbuffer.cliprects = (void *)(unsigned long)batchbuffer32->cliprects; 67239375Skib 68239375Skib return i915_batchbuffer(dev, (void *)&batchbuffer, file_priv); 69239375Skib} 70239375Skib 71239375Skibtypedef struct _drm_i915_cmdbuffer32 { 72239375Skib u32 buf; /* pointer to userspace command buffer */ 73239375Skib int sz; /* nr bytes in buf */ 74239375Skib int DR1; /* hw flags for GFX_OP_DRAWRECT_INFO */ 75239375Skib int DR4; /* window origin for GFX_OP_DRAWRECT_INFO */ 76239375Skib int num_cliprects; /* mulitpass with multiple cliprects? */ 77239375Skib u32 cliprects; /* pointer to userspace cliprects */ 78239375Skib} drm_i915_cmdbuffer32_t; 79239375Skib 80239375Skibstatic int compat_i915_cmdbuffer(struct drm_device *dev, void *data, struct drm_file *file_priv) 81239375Skib{ 82239375Skib drm_i915_cmdbuffer32_t *cmdbuffer32 = data; 83239375Skib drm_i915_cmdbuffer_t cmdbuffer; 84239375Skib 85239375Skib cmdbuffer.sz = cmdbuffer32->sz; 86239375Skib cmdbuffer.DR1 = cmdbuffer32->DR1; 87239375Skib cmdbuffer.DR4 = cmdbuffer32->DR4; 88239375Skib cmdbuffer.num_cliprects = cmdbuffer32->num_cliprects; 89239375Skib cmdbuffer.cliprects = (void *)(unsigned long)cmdbuffer32->cliprects; 90239375Skib 91239375Skib return i915_cmdbuffer(dev, (void *)&cmdbuffer, file_priv); 92239375Skib} 93239375Skib 94239375Skibtypedef struct drm_i915_irq_emit32 { 95239375Skib u32 irq_seq; 96239375Skib} drm_i915_irq_emit32_t; 97239375Skib 98239375Skibstatic int compat_i915_irq_emit(struct drm_device *dev, void *data, struct drm_file *file_priv) 99239375Skib{ 100239375Skib drm_i915_irq_emit32_t *req32 = data; 101239375Skib drm_i915_irq_emit_t request; 102239375Skib 103239375Skib request.irq_seq = (int *)(unsigned long)req32->irq_seq; 104239375Skib 105239375Skib return i915_irq_emit(dev, (void *)&request, file_priv); 106239375Skib} 107239375Skibtypedef struct drm_i915_getparam32 { 108239375Skib int param; 109239375Skib u32 value; 110239375Skib} drm_i915_getparam32_t; 111239375Skib 112239375Skibstatic int compat_i915_getparam(struct drm_device *dev, void *data, struct drm_file *file_priv) 113239375Skib{ 114239375Skib drm_i915_getparam32_t *req32 = data; 115239375Skib drm_i915_getparam_t request; 116239375Skib 117239375Skib request.param = req32->param; 118239375Skib request.value = (void *)(unsigned long)req32->value; 119239375Skib 120239375Skib return i915_getparam(dev, (void *)&request, file_priv); 121239375Skib} 122239375Skib 123239375Skibtypedef struct drm_i915_mem_alloc32 { 124239375Skib int region; 125239375Skib int alignment; 126239375Skib int size; 127239375Skib u32 region_offset; /* offset from start of fb or agp */ 128239375Skib} drm_i915_mem_alloc32_t; 129239375Skib 130280183Sdumbbellstruct drm_ioctl_desc i915_compat_ioctls[] = { 131239375Skib DRM_IOCTL_DEF(DRM_I915_BATCHBUFFER, compat_i915_batchbuffer, DRM_AUTH), 132239375Skib DRM_IOCTL_DEF(DRM_I915_CMDBUFFER, compat_i915_cmdbuffer, DRM_AUTH), 133239375Skib DRM_IOCTL_DEF(DRM_I915_GETPARAM, compat_i915_getparam, DRM_AUTH), 134239375Skib DRM_IOCTL_DEF(DRM_I915_IRQ_EMIT, compat_i915_irq_emit, DRM_AUTH) 135239375Skib}; 136280183Sdumbbellint i915_compat_ioctls_nr = ARRAY_SIZE(i915_compat_ioctls); 137239375Skib 138239375Skib#endif 139