Ejemplo n.º 1
0
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));
		case DRM_IOCTL_RADEON_CS:
			return (radeon_cs_ioctl(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);
}
Ejemplo n.º 2
0
int
radeon_ioctl_kms(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_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_CP_RESUME:
			return (radeon_cp_resume_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_RESET:
			return (radeon_engine_reset_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_FULLSCREEN:
			return (radeon_fullscreen_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_SWAP:
			return (radeon_cp_swap_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_CLEAR:
			return (radeon_cp_clear_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_VERTEX:
			return (radeon_cp_vertex_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_INDICES:
			return (radeon_cp_indices_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_TEXTURE:
			return (radeon_cp_texture_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_STIPPLE:
			return (radeon_cp_stipple_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_VERTEX2:
			return (radeon_cp_vertex2_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_CMDBUF:
			return (radeon_cp_cmdbuf_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GETPARAM:
			return (radeon_cp_getparam_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_FLIP:
			return (radeon_cp_flip_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_ALLOC:
			return (radeon_mem_alloc_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_FREE:
			return (radeon_mem_free_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_IRQ_EMIT:
			return (radeon_irq_emit_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_IRQ_WAIT:
			return (radeon_irq_wait_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_SETPARAM:
			return (radeon_cp_setparam_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_SURF_ALLOC:
			return (radeon_surface_alloc_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_SURF_FREE:
			return (radeon_surface_free_kms(dev, data, file_priv));
		/* KMS */
		case DRM_IOCTL_RADEON_GEM_INFO:
			return (radeon_gem_info_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_CREATE:
			return (radeon_gem_create_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_MMAP:
			return (radeon_gem_mmap_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_SET_DOMAIN:
			return (radeon_gem_set_domain_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_PREAD:
			return (radeon_gem_pread_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_PWRITE:
			return (radeon_gem_pwrite_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_WAIT_IDLE:
			return (radeon_gem_wait_idle_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_CS:
			return (radeon_cs_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_INFO:
			return (radeon_info_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_SET_TILING:
			return (radeon_gem_set_tiling_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_GET_TILING:
			return (radeon_gem_get_tiling_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_BUSY:
			return (radeon_gem_busy_ioctl(dev, data, file_priv));
		case DRM_IOCTL_RADEON_GEM_VA:
			return (radeon_gem_va_ioctl(dev, data, file_priv));
		}
	}

	if (file_priv->master == 1) {
		switch (cmd) {
		case DRM_IOCTL_RADEON_CP_INIT:
			return (radeon_cp_init_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_CP_START:
			return (radeon_cp_start_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_CP_STOP:
			return (radeon_cp_stop_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_CP_RESET:
			return (radeon_cp_reset_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_INDIRECT:
			return (radeon_cp_indirect_kms(dev, data, file_priv));
		case DRM_IOCTL_RADEON_INIT_HEAP:
			return (radeon_mem_init_heap_kms(dev, data, file_priv));
		}
	}
	return -EINVAL;
}