int radeondrm_ioctl(struct drm_device *dev, u_long cmd, caddr_t data, struct drm_file *file_priv) { if (file_priv->authenticated == 1) { switch (cmd) { case DRM_IOCTL_RADEON_CP_IDLE: return (radeon_cp_idle(dev, data, file_priv)); case DRM_IOCTL_RADEON_CP_RESUME: return (radeon_cp_resume(dev)); case DRM_IOCTL_RADEON_SWAP: return (radeon_cp_swap(dev, data, file_priv)); case DRM_IOCTL_RADEON_CLEAR: return (radeon_cp_clear(dev, data, file_priv)); case DRM_IOCTL_RADEON_TEXTURE: return (radeon_cp_texture(dev, data, file_priv)); case DRM_IOCTL_RADEON_STIPPLE: return (radeon_cp_stipple(dev, data, file_priv)); case DRM_IOCTL_RADEON_CMDBUF: return (radeon_cp_cmdbuf(dev, data, file_priv)); case DRM_IOCTL_RADEON_GETPARAM: return (radeon_cp_getparam(dev, data, file_priv)); case DRM_IOCTL_RADEON_FLIP: return (radeon_cp_flip(dev, data, file_priv)); case DRM_IOCTL_RADEON_ALLOC: return (radeon_mem_alloc(dev, data, file_priv)); case DRM_IOCTL_RADEON_FREE: return (radeon_mem_free(dev, data, file_priv)); case DRM_IOCTL_RADEON_IRQ_EMIT: return (radeon_irq_emit(dev, data, file_priv)); case DRM_IOCTL_RADEON_IRQ_WAIT: return (radeon_irq_wait(dev, data, file_priv)); case DRM_IOCTL_RADEON_SETPARAM: return (radeon_cp_setparam(dev, data, file_priv)); case DRM_IOCTL_RADEON_SURF_ALLOC: return (radeon_surface_alloc(dev, data, file_priv)); case DRM_IOCTL_RADEON_SURF_FREE: return (radeon_surface_free(dev, data, file_priv)); } } if (file_priv->master == 1) { switch (cmd) { case DRM_IOCTL_RADEON_CP_INIT: return (radeon_cp_init(dev, data, file_priv)); case DRM_IOCTL_RADEON_CP_START: return (radeon_cp_start(dev, data, file_priv)); case DRM_IOCTL_RADEON_CP_STOP: return (radeon_cp_stop(dev, data, file_priv)); case DRM_IOCTL_RADEON_CP_RESET: return (radeon_cp_reset(dev, data, file_priv)); case DRM_IOCTL_RADEON_INDIRECT: return (radeon_cp_indirect(dev, data, file_priv)); case DRM_IOCTL_RADEON_INIT_HEAP: return (radeon_mem_init_heap(dev, data, file_priv)); } } return (EINVAL); }
static bool radeondrm_resume(device_t self, const pmf_qual_t *qual) { struct drm_device *dev = device_private(self); bool rv = true; DRM_LOCK(); if (drm_find_file_by_proc(dev, curlwp->l_proc) && radeon_cp_resume(dev, NULL, NULL) != 0) rv = false; DRM_UNLOCK(); return rv; }