static int mali_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
#endif
{
	int err;
	struct mali_session_data *session_data;

#ifndef HAVE_UNLOCKED_IOCTL
	/* inode not used */
	(void)inode;
#endif

	MALI_DEBUG_PRINT(7, ("Ioctl received 0x%08X 0x%08lX\n", cmd, arg));

	session_data = (struct mali_session_data *)filp->private_data;
	if (NULL == session_data)
	{
		MALI_DEBUG_PRINT(7, ("filp->private_data was NULL\n"));
		return -ENOTTY;
	}

	if (NULL == (void *)arg)
	{
		MALI_DEBUG_PRINT(7, ("arg was NULL\n"));
		return -ENOTTY;
	}

	switch(cmd)
	{
		case MALI_IOC_WAIT_FOR_NOTIFICATION:
			err = wait_for_notification_wrapper(session_data, (_mali_uk_wait_for_notification_s __user *)arg);
			break;

		case MALI_IOC_GET_API_VERSION:
			err = get_api_version_wrapper(session_data, (_mali_uk_get_api_version_s __user *)arg);
			break;

		case MALI_IOC_POST_NOTIFICATION:
			err = post_notification_wrapper(session_data, (_mali_uk_post_notification_s __user *)arg);
			break;

		case MALI_IOC_GET_USER_SETTINGS:
			err = get_user_settings_wrapper(session_data, (_mali_uk_get_user_settings_s __user *)arg);
			break;

#if MALI_TIMELINE_PROFILING_ENABLED
		case MALI_IOC_PROFILING_START:
			err = profiling_start_wrapper(session_data, (_mali_uk_profiling_start_s __user *)arg);
			break;

		case MALI_IOC_PROFILING_ADD_EVENT:
			err = profiling_add_event_wrapper(session_data, (_mali_uk_profiling_add_event_s __user *)arg);
			break;

		case MALI_IOC_PROFILING_STOP:
			err = profiling_stop_wrapper(session_data, (_mali_uk_profiling_stop_s __user *)arg);
			break;

		case MALI_IOC_PROFILING_GET_EVENT:
			err = profiling_get_event_wrapper(session_data, (_mali_uk_profiling_get_event_s __user *)arg);
			break;

		case MALI_IOC_PROFILING_CLEAR:
			err = profiling_clear_wrapper(session_data, (_mali_uk_profiling_clear_s __user *)arg);
			break;

		case MALI_IOC_PROFILING_GET_CONFIG:
			/* Deprecated: still compatible with get_user_settings */
			err = get_user_settings_wrapper(session_data, (_mali_uk_get_user_settings_s __user *)arg);
			break;

		case MALI_IOC_PROFILING_REPORT_SW_COUNTERS:
			err = profiling_report_sw_counters_wrapper(session_data, (_mali_uk_sw_counters_report_s __user *)arg);
			break;

#else

		case MALI_IOC_PROFILING_START:              /* FALL-THROUGH */
		case MALI_IOC_PROFILING_ADD_EVENT:          /* FALL-THROUGH */
		case MALI_IOC_PROFILING_STOP:               /* FALL-THROUGH */
		case MALI_IOC_PROFILING_GET_EVENT:          /* FALL-THROUGH */
		case MALI_IOC_PROFILING_CLEAR:              /* FALL-THROUGH */
		case MALI_IOC_PROFILING_GET_CONFIG:         /* FALL-THROUGH */
		case MALI_IOC_PROFILING_REPORT_SW_COUNTERS: /* FALL-THROUGH */
			MALI_DEBUG_PRINT(2, ("Profiling not supported\n"));
			err = -ENOTTY;
			break;

#endif

		case MALI_IOC_MEM_INIT:
			err = mem_init_wrapper(session_data, (_mali_uk_init_mem_s __user *)arg);
			break;

		case MALI_IOC_MEM_TERM:
			err = mem_term_wrapper(session_data, (_mali_uk_term_mem_s __user *)arg);
			break;

		case MALI_IOC_MEM_MAP_EXT:
			err = mem_map_ext_wrapper(session_data, (_mali_uk_map_external_mem_s __user *)arg);
			break;

		case MALI_IOC_MEM_UNMAP_EXT:
			err = mem_unmap_ext_wrapper(session_data, (_mali_uk_unmap_external_mem_s __user *)arg);
			break;

		case MALI_IOC_MEM_QUERY_MMU_PAGE_TABLE_DUMP_SIZE:
			err = mem_query_mmu_page_table_dump_size_wrapper(session_data, (_mali_uk_query_mmu_page_table_dump_size_s __user *)arg);
			break;

		case MALI_IOC_MEM_DUMP_MMU_PAGE_TABLE:
			err = mem_dump_mmu_page_table_wrapper(session_data, (_mali_uk_dump_mmu_page_table_s __user *)arg);
			break;

#if MALI_USE_UNIFIED_MEMORY_PROVIDER != 0

		case MALI_IOC_MEM_ATTACH_UMP:
			err = mem_attach_ump_wrapper(session_data, (_mali_uk_attach_ump_mem_s __user *)arg);
			break;

		case MALI_IOC_MEM_RELEASE_UMP:
			err = mem_release_ump_wrapper(session_data, (_mali_uk_release_ump_mem_s __user *)arg);
			break;

#else

		case MALI_IOC_MEM_ATTACH_UMP:
		case MALI_IOC_MEM_RELEASE_UMP: /* FALL-THROUGH */
			MALI_DEBUG_PRINT(2, ("UMP not supported\n"));
			err = -ENOTTY;
			break;
#endif

#ifdef CONFIG_DMA_SHARED_BUFFER
		case MALI_IOC_MEM_ATTACH_DMA_BUF:
			err = mali_attach_dma_buf(session_data, (_mali_uk_attach_dma_buf_s __user *)arg);
			break;

		case MALI_IOC_MEM_RELEASE_DMA_BUF:
			err = mali_release_dma_buf(session_data, (_mali_uk_release_dma_buf_s __user *)arg);
			break;

		case MALI_IOC_MEM_DMA_BUF_GET_SIZE:
			err = mali_dma_buf_get_size(session_data, (_mali_uk_dma_buf_get_size_s __user *)arg);
			break;
#else

		case MALI_IOC_MEM_DMA_BUF_GET_SIZE: /* FALL-THROUGH */
			MALI_DEBUG_PRINT(2, ("DMA-BUF not supported\n"));
			err = -ENOTTY;
			break;
#endif

		case MALI_IOC_PP_START_JOB:
			err = pp_start_job_wrapper(session_data, (_mali_uk_pp_start_job_s __user *)arg);
			break;

		case MALI_IOC_PP_NUMBER_OF_CORES_GET:
			err = pp_get_number_of_cores_wrapper(session_data, (_mali_uk_get_pp_number_of_cores_s __user *)arg);
			break;

		case MALI_IOC_PP_CORE_VERSION_GET:
			err = pp_get_core_version_wrapper(session_data, (_mali_uk_get_pp_core_version_s __user *)arg);
			break;

		case MALI_IOC_PP_DISABLE_WB:
			err = pp_disable_wb_wrapper(session_data, (_mali_uk_pp_disable_wb_s __user *)arg);
			break;

		case MALI_IOC_GP2_START_JOB:
			err = gp_start_job_wrapper(session_data, (_mali_uk_gp_start_job_s __user *)arg);
			break;

		case MALI_IOC_GP2_NUMBER_OF_CORES_GET:
			err = gp_get_number_of_cores_wrapper(session_data, (_mali_uk_get_gp_number_of_cores_s __user *)arg);
			break;

		case MALI_IOC_GP2_CORE_VERSION_GET:
			err = gp_get_core_version_wrapper(session_data, (_mali_uk_get_gp_core_version_s __user *)arg);
			break;

		case MALI_IOC_GP2_SUSPEND_RESPONSE:
			err = gp_suspend_response_wrapper(session_data, (_mali_uk_gp_suspend_response_s __user *)arg);
			break;

		case MALI_IOC_VSYNC_EVENT_REPORT:
			err = vsync_event_report_wrapper(session_data, (_mali_uk_vsync_event_report_s __user *)arg);
			break;

		case MALI_IOC_MEM_GET_BIG_BLOCK: /* Fallthrough */
		case MALI_IOC_MEM_FREE_BIG_BLOCK:
			MALI_PRINT_ERROR(("Non-MMU mode is no longer supported.\n"));
			err = -ENOTTY;
			break;

		default:
			MALI_DEBUG_PRINT(2, ("No handler for ioctl 0x%08X 0x%08lX\n", cmd, arg));
			err = -ENOTTY;
	};

	return err;
}
Ejemplo n.º 2
0
static int mali_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
#endif
{
    int err;
    struct mali_session_data *session_data;

#ifndef HAVE_UNLOCKED_IOCTL
    /* inode not used */
    (void)inode;
#endif

    MALI_DEBUG_PRINT(7, ("Ioctl received 0x%08X 0x%08lX\n", cmd, arg));

    session_data = (struct mali_session_data *)filp->private_data;
    if (NULL == session_data)
    {
        MALI_DEBUG_PRINT(7, ("filp->private_data was NULL\n"));
        return -ENOTTY;
    }

    if (NULL == (void *)arg)
    {
        MALI_DEBUG_PRINT(7, ("arg was NULL\n"));
        return -ENOTTY;
    }

    if (_MALI_DEVICE_SHUTDOWN == mali_dvfs_device_state)
    {
        MALI_DEBUG_PRINT(7, ("system is shutdown \n"));
        return 0;
    }

    switch(cmd)
    {
    case MALI_IOC_GET_SYSTEM_INFO_SIZE:
        err = get_system_info_size_wrapper(session_data, (_mali_uk_get_system_info_size_s __user *)arg);
        break;

    case MALI_IOC_GET_SYSTEM_INFO:
        err = get_system_info_wrapper(session_data, (_mali_uk_get_system_info_s __user *)arg);
        break;

    case MALI_IOC_WAIT_FOR_NOTIFICATION:
        err = wait_for_notification_wrapper(session_data, (_mali_uk_wait_for_notification_s __user *)arg);
        break;

    case MALI_IOC_GET_API_VERSION:
        err = get_api_version_wrapper(session_data, (_mali_uk_get_api_version_s __user *)arg);
        break;

    case MALI_IOC_POST_NOTIFICATION:
        err = post_notification_wrapper(session_data, (_mali_uk_post_notification_s __user *)arg);
        break;

#if MALI_TIMELINE_PROFILING_ENABLED
    case MALI_IOC_PROFILING_START:
        err = profiling_start_wrapper(session_data, (_mali_uk_profiling_start_s __user *)arg);
        break;

    case MALI_IOC_PROFILING_ADD_EVENT:
        err = profiling_add_event_wrapper(session_data, (_mali_uk_profiling_add_event_s __user *)arg);
        break;

    case MALI_IOC_PROFILING_STOP:
        err = profiling_stop_wrapper(session_data, (_mali_uk_profiling_stop_s __user *)arg);
        break;

    case MALI_IOC_PROFILING_GET_EVENT:
        err = profiling_get_event_wrapper(session_data, (_mali_uk_profiling_get_event_s __user *)arg);
        break;

    case MALI_IOC_PROFILING_CLEAR:
        err = profiling_clear_wrapper(session_data, (_mali_uk_profiling_clear_s __user *)arg);
        break;

    case MALI_IOC_PROFILING_GET_CONFIG:
        err = profiling_get_config_wrapper(session_data, (_mali_uk_profiling_get_config_s __user *)arg);
        break;
#endif

    case MALI_IOC_MEM_INIT:
        err = mem_init_wrapper(session_data, (_mali_uk_init_mem_s __user *)arg);
        break;

    case MALI_IOC_MEM_TERM:
        err = mem_term_wrapper(session_data, (_mali_uk_term_mem_s __user *)arg);
        break;

    case MALI_IOC_MEM_MAP_EXT:
        err = mem_map_ext_wrapper(session_data, (_mali_uk_map_external_mem_s __user *)arg);
        break;

    case MALI_IOC_MEM_UNMAP_EXT:
        err = mem_unmap_ext_wrapper(session_data, (_mali_uk_unmap_external_mem_s __user *)arg);
        break;

    case MALI_IOC_MEM_QUERY_MMU_PAGE_TABLE_DUMP_SIZE:
        err = mem_query_mmu_page_table_dump_size_wrapper(session_data, (_mali_uk_query_mmu_page_table_dump_size_s __user *)arg);
        break;

    case MALI_IOC_MEM_DUMP_MMU_PAGE_TABLE:
        err = mem_dump_mmu_page_table_wrapper(session_data, (_mali_uk_dump_mmu_page_table_s __user *)arg);
        break;

    case MALI_IOC_MEM_GET_BIG_BLOCK:
        err = mem_get_big_block_wrapper(filp, (_mali_uk_get_big_block_s __user *)arg);
        break;

    case MALI_IOC_MEM_FREE_BIG_BLOCK:
        err = mem_free_big_block_wrapper(session_data, (_mali_uk_free_big_block_s __user *)arg);
        break;

#if MALI_USE_UNIFIED_MEMORY_PROVIDER != 0

    case MALI_IOC_MEM_ATTACH_UMP:
        err = mem_attach_ump_wrapper(session_data, (_mali_uk_attach_ump_mem_s __user *)arg);
        break;

    case MALI_IOC_MEM_RELEASE_UMP:
        err = mem_release_ump_wrapper(session_data, (_mali_uk_release_ump_mem_s __user *)arg);
        break;

#else

    case MALI_IOC_MEM_ATTACH_UMP:
    case MALI_IOC_MEM_RELEASE_UMP: /* FALL-THROUGH */
        MALI_DEBUG_PRINT(2, ("UMP not supported\n"));
        err = -ENOTTY;
        break;
#endif

    case MALI_IOC_PP_START_JOB:
        err = pp_start_job_wrapper(session_data, (_mali_uk_pp_start_job_s __user *)arg);
        break;

    case MALI_IOC_PP_ABORT_JOB:
        err = pp_abort_job_wrapper(session_data, (_mali_uk_pp_abort_job_s __user *)arg);
        break;

    case MALI_IOC_PP_NUMBER_OF_CORES_GET:
        err = pp_get_number_of_cores_wrapper(session_data, (_mali_uk_get_pp_number_of_cores_s __user *)arg);
        break;

    case MALI_IOC_PP_CORE_VERSION_GET:
        err = pp_get_core_version_wrapper(session_data, (_mali_uk_get_pp_core_version_s __user *)arg);
        break;

    case MALI_IOC_GP2_START_JOB:
        err = gp_start_job_wrapper(session_data, (_mali_uk_gp_start_job_s __user *)arg);
        break;

    case MALI_IOC_GP2_ABORT_JOB:
        err = gp_abort_job_wrapper(session_data, (_mali_uk_gp_abort_job_s __user *)arg);
        break;

    case MALI_IOC_GP2_NUMBER_OF_CORES_GET:
        err = gp_get_number_of_cores_wrapper(session_data, (_mali_uk_get_gp_number_of_cores_s __user *)arg);
        break;

    case MALI_IOC_GP2_CORE_VERSION_GET:
        err = gp_get_core_version_wrapper(session_data, (_mali_uk_get_gp_core_version_s __user *)arg);
        break;

    case MALI_IOC_GP2_SUSPEND_RESPONSE:
        err = gp_suspend_response_wrapper(session_data, (_mali_uk_gp_suspend_response_s __user *)arg);
        break;

    case MALI_IOC_VSYNC_EVENT_REPORT:
        err = vsync_event_report_wrapper(session_data, (_mali_uk_vsync_event_report_s __user *)arg);
        break;
#if MALI_TRACEPOINTS_ENABLED
    case MALI_IOC_TRANSFER_SW_COUNTERS:
        err = transfer_sw_counters_wrapper(session_data, (_mali_uk_sw_counters_s __user *)arg);
#endif
        break;

    default:
        MALI_DEBUG_PRINT(2, ("No handler for ioctl 0x%08X 0x%08lX\n", cmd, arg));
        err = -ENOTTY;
    };

    return err;
}