summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2008-08-24i915: Free dev->dev_private on unload.Robert Noland
2008-08-24[FreeBSD] Move vblank bits into their own structure.vehemens
2008-08-24[FreeBSD] Fix lock leak.vehemens
2008-08-24i915: Move spinlock init / destroy to load / unload time.Robert Noland
2008-08-24libdrm: add udev support.Dave Airlie
2008-08-22drm: add gpu create scriptDave Airlie
2008-08-19Merge branch 'modesetting-gem' of git+ssh://agd5f@git.freedesktop.org/git/mes...Alex Deucher
2008-08-19radeon: fix warning from radeon_legacy_state removalAlex Deucher
2008-08-19radeon: legacy lvds updatesAlex Deucher
2008-08-19nouveau: fifo and graphics engine suspend and resume for nv04-nv4xroot
2008-08-19radeon: oops set correct scratchDave Airlie
2008-08-18Change prototype of drmIoctl to unsigned long request.Coleman Kane
2008-08-17radeon: first pass at legacy dac detectAlex Deucher
2008-08-17radeon: first pass at bios scratch regsAlex Deucher
2008-08-17radeon: remove unused legacy stateAlex Deucher
2008-08-17radeon: get primary dac adj info from bios tablesAlex Deucher
2008-08-17nouveau: make it compile under 2.6.27Maarten Maathuis
2008-08-17linux: on_each_cpu has 3 args on 2.6.27Maarten Maathuis
2008-08-16i915: finish removing TTM bitsJesse Barnes
2008-08-16Merge branch 'modesetting-gem' of ssh://git.freedesktop.org/git/mesa/drm into...Jesse Barnes
2008-08-16i915: set domain properly on fb mapping, flush out changesJesse Barnes
2008-08-15radeon: reserve 64k of VRAM for now for text mode so we don't trample itDave Airlie
2008-08-15radeon: fix LVDS modes problemDave Airlie
2008-08-14radeon: add support for memory map initDave Airlie
2008-08-14radeon: add copy/solid regs for rn50Dave Airlie
2008-08-13i915: update cursor handling to use GEM objectsJesse Barnes
2008-08-14i915: fixup from last merge hopefullyDave Airlie
2008-08-14Merge branch 'radeon-gem-cs' into modesetting-gemDave Airlie
2008-08-14Add com bios asic init bitsAlex Deucher
2008-08-14Fill in and make use of more com bios tables on legacy chipsAlex Deucher
2008-08-14Add additional quirks from ddxAlex Deucher
2008-08-14Fix warningsAlex Deucher
2008-08-14Get legacy working finallyAlex Deucher
2008-08-14set base in legacy crtc mode setAlex Deucher
2008-08-14Convert COM BIOS to table offset lookup functionAlex Deucher
2008-08-14Restructure cursor handling and add support for legacy cursorsAlex Deucher
2008-08-14atom: implement crtc lockAlex Deucher
2008-08-14LUT updatesAlex Deucher
2008-08-14various cleanupsAlex Deucher
2008-08-14Add legacy dac detect stubsAlex Deucher
2008-08-14unify connector, i2c handling for atom and legacyAlex Deucher
2008-08-14Brute force port of legacy crtc/encoder codeAlex Deucher
2008-08-14on_each_cpu() compat fixup from krhAlex Deucher
2008-08-14radeon: fix kernel_mm properlyDave Airlie
2008-08-14radeon: FEDORA: patch to make 3D driver workDave Airlie
2008-08-14radeon: remove debuggingDave Airlie
2008-08-14radeon: use mm_enabled variable to denote memory manager runningDave Airlie
2008-08-14radeon: make buffer swap for older drivers work again on GEMDave Airlie
2008-08-14radeon: add userspace call for mm support checkDave Airlie
2008-08-14radeon: FEDORA: add old DMA buffers on top of GEMDave Airlie
class="hl opt">; unsigned int texture_offset[MGA_NR_TEX_HEAPS]; unsigned int texture_size[MGA_NR_TEX_HEAPS]; u32 fb_offset; u32 mmio_offset; u32 status_offset; u32 warp_offset; u32 primary_offset; u32 buffers_offset; } drm_mga_init32_t; static int compat_mga_init(struct file *file, unsigned int cmd, unsigned long arg) { drm_mga_init32_t init32; drm_mga_init_t __user *init; int err = 0, i; if (copy_from_user(&init32, (void __user *)arg, sizeof(init32))) return -EFAULT; init = compat_alloc_user_space(sizeof(*init)); if (!access_ok(VERIFY_WRITE, init, sizeof(*init)) || __put_user(init32.func, &init->func) || __put_user(init32.sarea_priv_offset, &init->sarea_priv_offset) || __put_user(init32.chipset, &init->chipset) || __put_user(init32.sgram, &init->sgram) || __put_user(init32.maccess, &init->maccess) || __put_user(init32.fb_cpp, &init->fb_cpp) || __put_user(init32.front_offset, &init->front_offset) || __put_user(init32.front_pitch, &init->front_pitch) || __put_user(init32.back_offset, &init->back_offset) || __put_user(init32.back_pitch, &init->back_pitch) || __put_user(init32.depth_cpp, &init->depth_cpp) || __put_user(init32.depth_offset, &init->depth_offset) || __put_user(init32.depth_pitch, &init->depth_pitch) || __put_user(init32.fb_offset, &init->fb_offset) || __put_user(init32.mmio_offset, &init->mmio_offset) || __put_user(init32.status_offset, &init->status_offset) || __put_user(init32.warp_offset, &init->warp_offset) || __put_user(init32.primary_offset, &init->primary_offset) || __put_user(init32.buffers_offset, &init->buffers_offset)) return -EFAULT; for (i=0; i<MGA_NR_TEX_HEAPS; i++) { err |= __put_user(init32.texture_offset[i], &init->texture_offset[i]); err |= __put_user(init32.texture_size[i], &init->texture_size[i]); } if (err) return -EFAULT; return drm_ioctl(file->f_dentry->d_inode, file, DRM_IOCTL_MGA_INIT, (unsigned long) init); } typedef struct drm_mga_getparam32 { int param; u32 value; } drm_mga_getparam32_t; static int compat_mga_getparam(struct file *file, unsigned int cmd, unsigned long arg) { drm_mga_getparam32_t getparam32; drm_mga_getparam_t __user *getparam; if (copy_from_user(&getparam32, (void __user *)arg, sizeof(getparam32))) return -EFAULT; getparam = compat_alloc_user_space(sizeof(*getparam)); if (!access_ok(VERIFY_WRITE, getparam, sizeof(*getparam)) || __put_user(getparam32.param, &getparam->param) || __put_user((void __user *)(unsigned long)getparam32.value, &getparam->value)) return -EFAULT; return drm_ioctl(file->f_dentry->d_inode, file, DRM_IOCTL_MGA_GETPARAM, (unsigned long)getparam); } typedef struct drm_mga_drm_bootstrap32 { u32 texture_handle; u32 texture_size; u32 primary_size; u32 secondary_bin_count; u32 secondary_bin_size; u32 agp_mode; u8 agp_size; } drm_mga_dma_bootstrap32_t; static int compat_mga_dma_bootstrap(struct file *file, unsigned int cmd, unsigned long arg) { drm_mga_dma_bootstrap32_t dma_bootstrap32; drm_mga_dma_bootstrap_t __user *dma_bootstrap; int err; if (copy_from_user(&dma_bootstrap32, (void __user *)arg, sizeof(dma_bootstrap32))) return -EFAULT; dma_bootstrap = compat_alloc_user_space(sizeof(*dma_bootstrap)); if (!access_ok(VERIFY_WRITE, dma_bootstrap, sizeof(*dma_bootstrap)) || __put_user(dma_bootstrap32.texture_handle, &dma_bootstrap->texture_handle) || __put_user(dma_bootstrap32.texture_size, &dma_bootstrap->texture_size) || __put_user(dma_bootstrap32.primary_size, &dma_bootstrap->primary_size) || __put_user(dma_bootstrap32.secondary_bin_count, &dma_bootstrap->secondary_bin_count) || __put_user(dma_bootstrap32.secondary_bin_size, &dma_bootstrap->secondary_bin_size) || __put_user(dma_bootstrap32.agp_mode, &dma_bootstrap->agp_mode) || __put_user(dma_bootstrap32.agp_size, &dma_bootstrap->agp_size)) return -EFAULT; err = drm_ioctl(file->f_dentry->d_inode, file, DRM_IOCTL_MGA_DMA_BOOTSTRAP, (unsigned long)dma_bootstrap); if (err) return err; if (__get_user(dma_bootstrap32.texture_handle, &dma_bootstrap->texture_handle) || __get_user(dma_bootstrap32.texture_size, &dma_bootstrap->texture_size) || __get_user(dma_bootstrap32.primary_size, &dma_bootstrap->primary_size) || __get_user(dma_bootstrap32.secondary_bin_count, &dma_bootstrap->secondary_bin_count) || __get_user(dma_bootstrap32.secondary_bin_size, &dma_bootstrap->secondary_bin_size) || __get_user(dma_bootstrap32.agp_mode, &dma_bootstrap->agp_mode) || __get_user(dma_bootstrap32.agp_size, &dma_bootstrap->agp_size)) return -EFAULT; if (copy_to_user((void __user *)arg, &dma_bootstrap32, sizeof(dma_bootstrap32))) return -EFAULT; return 0; } drm_ioctl_compat_t *mga_compat_ioctls[] = { [DRM_MGA_INIT] = compat_mga_init, [DRM_MGA_GETPARAM] = compat_mga_getparam, [DRM_MGA_DMA_BOOTSTRAP] = compat_mga_dma_bootstrap, }; /** * Called whenever a 32-bit process running under a 64-bit kernel * performs an ioctl on /dev/dri/card<n>. * * \param filp file pointer. * \param cmd command. * \param arg user argument. * \return zero on success or negative number on failure. */ long mga_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { unsigned int nr = DRM_IOCTL_NR(cmd); drm_ioctl_compat_t *fn = NULL; int ret; if (nr < DRM_COMMAND_BASE) return drm_compat_ioctl(filp, cmd, arg); if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; lock_kernel(); /* XXX for now */ if (fn != NULL) ret = (*fn)(filp, cmd, arg); else ret = drm_ioctl(filp->f_dentry->d_inode, filp, cmd, arg); unlock_kernel(); return ret; }