From cb5fc70e9fa02e8dc4851c095eeee4a2c9e27be8 Mon Sep 17 00:00:00 2001
From: Yong Wu <yong.wu@mediatek.com>
Date: Tue, 9 Jan 2018 12:18:21 +0800
Subject: [PATCH 2/2] libion: Add MediaTek ION special heap and command

Add Mediatek ion heap and command.
ION_HEAP_TYPE_MULTIMEDIA: mm heap which hook the iommu drivers.

Also, we add a custom ioctl to get iova for the userspace buffer.
Example code about how to use this custom ioctl:
    ====================
        struct ion_custom_data custom_data;
        struct ion_sys_data sys_data = {0};
        int ret;

        sys_data.sys_cmd = ION_SYS_GET_PHYS;
        sys_data.get_phys_param.handle = ion_handle;
        /* ion handle in userspace */

        custom_data.cmd = ION_CMD_SYSTEM;
        custom_data.arg = (unsigned long) &sys_data;

        ret = ioctl(fd, ION_IOC_CUSTOM, &custom_data);
        if (ret < 0) {
            printf("ion_custom_ioctl %x failed with code %d: %s\n",
                ION_IOC_CUSTOM, ret, strerror(errno));
            return -errno;
        }
        /* Then you could get the iova in sys_data.get_phys_param.phy_addr */
        /* In order to avoid change the original libion interface, we don't
           enclose this to a new interface.*/
    ====================
And, Don't forget to "close" the shared fd.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
---
 libion/kernel-headers/linux/ion_mtk.h | 211 ++++++++++++++++++++++++++++++++++
 1 file changed, 211 insertions(+)
 create mode 100644 libion/kernel-headers/linux/ion_mtk.h

diff --git a/libion/kernel-headers/linux/ion_mtk.h b/libion/kernel-headers/linux/ion_mtk.h
new file mode 100644
index 0000000..e22c5ca
--- /dev/null
+++ b/libion/kernel-headers/linux/ion_mtk.h
@@ -0,0 +1,211 @@
+/*
+* Copyright (C) 2017 MediaTek.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _MTK_MM_ION_H
+#define _MTK_MM_ION_H
+
+enum mtk_ion_heap_type {
+	ION_HEAP_TYPE_DMA_MTK = 9,
+	ION_HEAP_TYPE_MULTIMEDIA = 10,
+	ION_HEAP_TYPE_FB = 11,
+	ION_HEAP_TYPE_MULTIMEDIA_FOR_CAMERA = 12,
+	ION_HEAP_TYPE_MULTIMEDIA_SEC = 13,
+	ION_HEAP_TYPE_MULTIMEDIA_MAP_MVA = 14,
+};
+
+#define ION_HEAP_DMA_MTK_MASK		(1 << ION_HEAP_TYPE_DMA_MTK)
+#define ION_HEAP_MULTIMEDIA_MASK	(1 << ION_HEAP_TYPE_MULTIMEDIA)
+#define ION_HEAP_FB_MASK		(1 << ION_HEAP_TYPE_FB)
+#define ION_HEAP_CAMERA_MASK		(1 << ION_HEAP_TYPE_MULTIMEDIA_FOR_CAMERA)
+#define ION_HEAP_MULTIMEDIA_SEC_MASK BIT (1 << ION_HEAP_TYPE_MULTIMEDIA_SEC)
+#define ION_HEAP_MULTIMEDIA_MAP_MVA_MASK (1 << ION_HEAP_TYPE_MULTIMEDIA_MAP_MVA)
+
+
+enum ION_CMDS {
+	ION_CMD_SYSTEM,
+	ION_CMD_MULTIMEDIA,
+	ION_CMD_MULTIMEDIA_SEC
+};
+
+enum ION_MM_CMDS {
+	ION_MM_CONFIG_BUFFER,
+	ION_MM_SET_DEBUG_INFO,
+	ION_MM_GET_DEBUG_INFO,
+	ION_MM_SET_SF_BUF_INFO,
+	ION_MM_GET_SF_BUF_INFO,
+	ION_MM_CONFIG_BUFFER_EXT
+};
+
+enum ION_SYS_CMDS {
+	ION_SYS_CACHE_SYNC,
+	ION_SYS_GET_PHYS,
+	ION_SYS_GET_CLIENT,
+	ION_SYS_SET_HANDLE_BACKTRACE,
+	ION_SYS_SET_CLIENT_NAME,
+	ION_SYS_DMA_OP,
+};
+
+enum ION_CACHE_SYNC_TYPE {
+	ION_CACHE_CLEAN_BY_RANGE,
+	ION_CACHE_INVALID_BY_RANGE,
+	ION_CACHE_FLUSH_BY_RANGE,
+	ION_CACHE_CLEAN_BY_RANGE_USE_VA,
+	ION_CACHE_INVALID_BY_RANGE_USE_VA,
+	ION_CACHE_FLUSH_BY_RANGE_USE_VA,
+	ION_CACHE_CLEAN_ALL,
+	ION_CACHE_INVALID_ALL,
+	ION_CACHE_FLUSH_ALL
+};
+
+enum ION_ERRORE {
+	ION_ERROR_CONFIG_LOCKED = 0x10000
+};
+
+/* mm or mm_sec heap flag which is do not conflist with ION_HEAP_FLAG_DEFER_FREE */
+#define ION_FLAG_MM_HEAP_INIT_ZERO (1 << 16)
+#define ION_FLAG_MM_HEAP_SEC_PA (1 << 18)
+
+#define ION_FLAG_GET_FIXED_PHYS 0x103
+
+struct ion_sys_cache_sync_param {
+	union {
+		ion_user_handle_t handle;
+		void *kernel_handle;
+	};
+	void *va;
+	unsigned int size;
+	enum ION_CACHE_SYNC_TYPE sync_type;
+};
+
+enum ION_DMA_TYPE {
+	ION_DMA_MAP_AREA,
+	ION_DMA_UNMAP_AREA,
+	ION_DMA_MAP_AREA_VA,
+	ION_DMA_UNMAP_AREA_VA,
+	ION_DMA_FLUSH_BY_RANGE,
+	ION_DMA_FLUSH_BY_RANGE_USE_VA,
+	ION_DMA_CACHE_FLUSH_ALL
+};
+
+enum ION_DMA_DIR {
+	ION_DMA_FROM_DEVICE,
+	ION_DMA_TO_DEVICE,
+	ION_DMA_BIDIRECTIONAL,
+};
+
+struct ion_dma_param {
+	union {
+		ion_user_handle_t handle;
+		void *kernel_handle;
+	};
+	void *va;
+	unsigned int size;
+	enum ION_DMA_TYPE dma_type;
+	enum ION_DMA_DIR dma_dir;
+};
+
+struct ion_sys_get_phys_param {
+	union {
+		ion_user_handle_t handle;
+		void *kernel_handle;
+	};
+	unsigned int phy_addr;
+	unsigned long len;
+};
+
+#define ION_MM_DBG_NAME_LEN 16
+#define ION_MM_SF_BUF_INFO_LEN 16
+
+struct ion_sys_client_name {
+	char name[ION_MM_DBG_NAME_LEN];
+};
+
+struct ion_sys_get_client_param {
+	unsigned int client;
+};
+
+#define BACKTRACE_SIZE 10
+
+struct ion_sys_record_param {
+	pid_t group_id;
+	pid_t pid;
+	unsigned int action;
+	unsigned int address_type;
+	unsigned int address;
+	unsigned int length;
+	unsigned int backtrace[BACKTRACE_SIZE];
+	unsigned int backtrace_num;
+	struct ion_handle *handle;
+	struct ion_client *client;
+	struct ion_buffer *buffer;
+	struct file *file;
+	int fd;
+};
+
+struct ion_sys_data {
+	enum ION_SYS_CMDS sys_cmd;
+	union {
+		struct ion_sys_cache_sync_param cache_sync_param;
+		struct ion_sys_get_phys_param get_phys_param;
+		struct ion_sys_get_client_param get_client_param;
+		struct ion_sys_client_name client_name_param;
+		struct ion_sys_record_param record_param;
+		struct ion_dma_param dma_param;
+	};
+};
+
+struct ion_mm_config_buffer_param {
+	union {
+		ion_user_handle_t handle;
+		void *kernel_handle;
+	};
+	int module_id;
+	unsigned int security;
+	unsigned int coherent;
+	unsigned int reserve_iova_start;
+	unsigned int reserve_iova_end;
+};
+
+struct ion_mm_buf_debug_info {
+	union {
+		ion_user_handle_t handle;
+		void *kernel_handle;
+	};
+	char dbg_name[ION_MM_DBG_NAME_LEN];
+	unsigned int value1;
+	unsigned int value2;
+	unsigned int value3;
+	unsigned int value4;
+};
+
+struct ion_mm_sf_buf_info {
+	union {
+		ion_user_handle_t handle;
+		void *kernel_handle;
+	};
+	unsigned int info[ION_MM_SF_BUF_INFO_LEN];
+};
+
+struct ion_mm_data {
+	enum ION_MM_CMDS mm_cmd;
+	union {
+		struct ion_mm_config_buffer_param config_buffer_param;
+		struct ion_mm_buf_debug_info buf_debug_info_param;
+		struct ion_mm_sf_buf_info sf_buf_info_param;
+	};
+};
+
+#endif
-- 
1.9.1

