#ifndef __SVM_CMD_H__
#define __SVM_CMD_H__
#include "drv_type.h"
#include "ascend_hal_define.h"
#include "svm_define.h"
#ifdef DEVMM_UT
#define STATIC
#define INLINE
#else
#define STATIC static
#define INLINE inline
#endif
#define DEVMM_SVM_MAGIC 'M'
struct devmm_svm_process_id {
int32_t hostpid;
union {
uint16_t devid;
uint16_t vm_id;
};
uint16_t vfid;
};
struct devmm_mem_alloc_host_para {
uint64_t p;
size_t size;
};
struct devmm_mem_free_host_para {
uint64_t p;
};
struct devmm_mem_alloc_para {
uint64_t p;
size_t size;
};
struct devmm_mem_copy_para {
uint64_t dst;
uint64_t src;
size_t ByteCount;
bool is_support_dev_local_addr;
enum devmm_copy_direction direction;
};
struct devmm_mem_copy_batch_para {
uint64_t *dst;
uint64_t *src;
size_t *size;
uint32_t addr_count;
};
struct devmm_mem_async_copy_para {
uint64_t dst;
uint64_t src;
size_t byte_count;
uint64_t start_time;
volatile uint64_t cpy_state;
int task_id;
};
struct devmm_mem_convert_copy_para {
struct DMA_ADDR dmaAddr;
int sync_flag;
};
struct devmm_mem_copy2d_para {
uint64_t dst;
uint64_t src;
uint64_t dpitch;
uint64_t spitch;
uint64_t width;
uint64_t height;
enum devmm_copy_direction direction;
};
struct devmm_mem_convrt_addr_para {
uint64_t pSrc;
uint64_t pDst;
uint64_t spitch;
uint64_t dpitch;
uint64_t len;
uint64_t height;
uint64_t fixed_size;
enum devmm_copy_direction direction;
struct DMA_ADDR dmaAddr;
uint32_t dma_node_num;
uint32_t virt_id;
uint32_t dev_id;
uint32_t destroy_flag;
uint64_t convert_id;
bool need_write;
struct devmm_pa_batch *pa_batch;
};
struct devmm_mem_destroy_addr_para {
uint64_t pSrc;
uint64_t pDst;
uint64_t spitch;
uint64_t dpitch;
uint64_t len;
uint64_t height;
uint64_t fixed_size;
struct DMA_ADDR dmaAddr;
pid_t host_pid;
};
struct devmm_destroy_addr_batch_para {
struct DMA_ADDR **dmaAddr;
uint32_t num;
};
struct devmm_mem_advise_para {
uint64_t ptr;
size_t count;
uint32_t advise;
};
struct devmm_mem_managed_advise_para {
uint64_t ptr;
size_t size;
uint32_t advise;
int type;
int id;
};
struct devmm_mem_prefetch_para {
uint64_t devPtr;
size_t count;
};
struct devmm_mem_memset_para {
uint64_t dst;
uint64_t value;
uint64_t count;
uint32_t hostmapped;
};
struct devmm_mem_translate_para {
uint64_t vptr;
uint64_t pptr;
uint32_t addr_in_device;
};
#define DEVMM_MAX_NAME_SIZE 65
struct devmm_mem_ipc_create_para {
uint64_t vptr;
size_t len;
char name[DEVMM_MAX_NAME_SIZE];
uint32_t name_len;
};
#define DEVMM_SECONDARY_PROCESS_NUM (32)
struct devmm_mem_ipc_set_pid_para {
char name[DEVMM_MAX_NAME_SIZE];
int32_t set_pid[DEVMM_SECONDARY_PROCESS_NUM];
uint32_t num;
uint32_t sdid;
};
struct devmm_mem_ipc_destroy_para {
char name[DEVMM_MAX_NAME_SIZE];
};
struct devmm_mem_query_size_para {
char name[DEVMM_MAX_NAME_SIZE];
int32_t is_huge;
uint32_t phy_devid;
size_t len;
};
struct devmm_mem_ipc_open_para {
uint64_t vptr;
char name[DEVMM_MAX_NAME_SIZE];
};
struct devmm_mem_ipc_close_para {
uint64_t vptr;
};
struct devmm_mem_ipc_set_attr_para {
uint32_t type;
uint64_t attr;
char name[DEVMM_MAX_NAME_SIZE];
};
struct devmm_mem_ipc_get_attr_para {
uint32_t type;
uint64_t attr;
char name[DEVMM_MAX_NAME_SIZE];
};
struct devmm_init_process_para {
uint32_t svm_page_size;
uint32_t local_page_size;
uint32_t huge_page_size;
bool is_enable_host_giant_page;
};
struct devmm_update_heap_para {
uint32_t op;
uint32_t heap_type;
uint32_t heap_sub_type;
uint32_t heap_idx;
uint64_t heap_size;
};
struct devmm_query_process_status_para {
processType_t process_type;
processStatus_t pid_status;
uint32_t status_result;
};
struct devmm_mmap_addr_seg {
uint64_t va;
uint64_t size;
};
struct devmm_get_mmap_para {
uint32_t seg_num;
bool is_need_map_nptmv;
int32_t hostpid;
int32_t aicpupid;
struct devmm_mmap_addr_seg *segs;
};
#define DEVMM_DEFAULT_SECTION_ORDER (7)
struct devmm_free_pages_para {
uint64_t va;
};
struct devmm_dev_init_process_para {
struct devmm_svm_process_id process_id;
int32_t devpid;
};
struct devmm_dev_bind_sibling_para {
int32_t hostpid;
int32_t aicpupid;
uint32_t vfid;
uint32_t devid;
};
struct devmm_status_va_info_para {
uint64_t va;
uint32_t devid;
uint32_t mem_type;
};
struct devmm_status_va_check_para {
uint64_t va;
uint64_t count;
int32_t msg_id;
uint32_t devid;
uint32_t heap_idx;
};
struct devmm_query_device_mem_usedinfo {
uint32_t mem_type;
size_t normal_total_size;
size_t normal_free_size;
size_t huge_total_size;
size_t huge_free_size;
size_t giant_total_size;
size_t giant_free_size;
};
struct devmm_lock_cmd {
uint64_t devPtr;
uint32_t lockType;
};
struct devmm_polling_cmd {
pid_t hostpid;
pid_t devpid;
uint32_t devid;
uint32_t devnum;
uint32_t cmd;
};
struct devmm_program_load_cmd {
uint32_t devid;
int is_loaded;
};
struct devmm_set_read_count {
uint64_t addr;
size_t size;
uint32_t rc;
};
struct devmm_dbg_info {
pid_t hostpid;
pid_t user_devpid;
uint32_t user_dbg_state;
};
struct devmm_mem_remote_map_para {
uint64_t src_va;
uint64_t dst_va;
uint64_t size;
uint32_t map_type;
uint32_t proc_type;
uint32_t access;
};
struct devmm_mem_remote_unmap_para {
uint64_t src_va;
uint32_t map_type;
uint32_t proc_type;
uint64_t dst_va;
};
struct devmm_mem_map_cap_para {
uint32_t acc_module_type;
uint32_t mem_map_capability;
};
struct devmm_register_dma_para {
uint64_t vaddr;
uint64_t size;
};
struct devmm_unregister_dma_para {
uint64_t vaddr;
};
kernel mode: devid means phyid
*/
struct devmm_devid {
uint32_t logical_devid;
uint32_t devid;
uint32_t vfid;
};
#define DEVMM_DEV_ADDR_NUM_MAX 1024
struct devmm_check_mem_info {
uint64_t *va;
uint32_t cnt;
uint32_t heap_subtype_mask;
};
struct devmm_map_dev_reserve_para {
uint32_t addr_type;
uint64_t va;
uint64_t len;
};
struct devmm_setup_dev_para {
uint64_t dvpp_mem_size;
uint32_t support_bar_mem;
uint32_t support_dev_read_only;
uint32_t support_dev_mem_map_host;
uint32_t support_bar_huge_mem;
uint32_t host_support_pin_user_pages_interface;
uint32_t support_host_rw_dev_ro;
uint32_t support_host_pin_pre_register;
uint32_t support_host_mem_pool;
uint64_t double_pgtable_offset;
uint64_t mem_stats_va;
uint32_t support_agent_giant_page;
uint32_t support_remote_mmap;
uint32_t support_shmem_map_exbus;
uint32_t support_mem_host_uva;
};
struct devmm_mem_create_para {
int id;
uint32_t host_numa_id;
uint64_t size;
uint64_t flag;
uint32_t side;
uint32_t module_id;
uint32_t pg_type;
uint32_t mem_type;
uint64_t pg_num;
};
struct devmm_mem_release_para {
int id;
uint32_t side;
uint64_t pg_num;
uint32_t handle_type;
};
struct devmm_mem_map_para {
uint64_t va;
uint64_t size;
int id;
uint32_t side;
uint32_t pg_type;
uint32_t module_id;
uint64_t pg_num;
};
struct devmm_mem_unmap_para {
uint64_t va;
uint64_t unmap_size;
uint32_t side;
uint32_t logic_devid;
};
struct devmm_mem_query_owner_para {
uint64_t va;
uint64_t size;
uint32_t devid;
uint32_t local_handle_flag;
};
struct devmm_mem_set_access_para {
uint64_t va;
uint64_t size;
uint32_t logic_devid;
drv_mem_access_type type;
};
struct devmm_mem_get_access_para {
uint64_t va;
uint64_t size;
uint32_t logic_devid;
drv_mem_access_type type;
};
struct devmm_mem_export_para {
int side;
int id;
int share_id;
};
struct devmm_mem_import_para {
int share_id;
uint32_t share_sdid;
uint32_t share_devid;
uint32_t share_phy_devid;
drv_mem_handle_type handle_type;
int id;
uint32_t side;
uint32_t module_id;
uint32_t pg_type;
uint64_t pg_num;
uint32_t mem_type;
};
struct devmm_mem_set_pid_para {
int share_id;
uint32_t pid_num;
int *pid_list;
};
struct devmm_mem_set_attr_para {
int share_id;
uint32_t type;
struct ShareHandleAttr attr;
};
struct devmm_mem_get_attr_para {
int share_id;
uint32_t share_devid;
uint32_t type;
struct ShareHandleAttr attr;
};
struct devmm_mem_get_info_para {
int share_id;
uint32_t share_devid;
struct ShareHandleGetInfo info;
};
struct devmm_mem_repair_para {
uint32_t count;
struct MemRepairAddr repair_addrs[MEM_REPAIR_MAX_CNT];
};
struct devmm_resv_addr_info_query_para {
uint64_t va;
uint64_t start;
uint64_t end;
uint32_t module_id;
uint32_t devid;
};
struct devmm_ioctl_arg {
struct devmm_devid head;
union {
struct devmm_setup_dev_para setup_dev_para;
struct devmm_mem_alloc_host_para alloc_para;
struct devmm_mem_free_host_para free_para;
struct devmm_mem_alloc_para alloc_svm_para;
struct devmm_mem_copy_para copy_para;
struct devmm_mem_copy_batch_para copy_batch_para;
struct devmm_mem_copy2d_para copy2d_para;
struct devmm_mem_async_copy_para async_copy_para;
struct devmm_mem_convert_copy_para convert_copy_para;
struct devmm_mem_convrt_addr_para convrt_para;
struct devmm_mem_destroy_addr_para desty_para;
struct devmm_destroy_addr_batch_para destroy_batch_para;
struct devmm_mem_advise_para advise_para;
struct devmm_mem_advise_para prefetch_para;
struct devmm_mem_memset_para memset_para;
struct devmm_mem_translate_para translate_para;
struct devmm_mem_ipc_open_para ipc_open_para;
struct devmm_mem_ipc_close_para ipc_close_para;
struct devmm_mem_ipc_create_para ipc_create_para;
struct devmm_mem_ipc_set_pid_para ipc_set_pid_para;
struct devmm_mem_ipc_destroy_para ipc_destroy_para;
struct devmm_mem_ipc_set_attr_para ipc_set_attr_para;
struct devmm_mem_ipc_get_attr_para ipc_get_attr_para;
struct devmm_mem_query_size_para query_size_para;
struct devmm_init_process_para init_process_para;
struct devmm_update_heap_para update_heap_para;
struct devmm_query_process_status_para query_process_status_para;
struct devmm_free_pages_para free_pages_para;
struct devmm_dev_init_process_para dev_init_process_para;
struct devmm_dev_bind_sibling_para dev_bind_sibling_para;
struct devmm_status_va_info_para status_va_info_para;
struct devmm_status_va_check_para status_va_check_para;
struct devmm_query_device_mem_usedinfo query_device_mem_usedinfo_para;
struct devmm_lock_cmd lock_cmd_para;
struct devmm_program_load_cmd program_load_cmd;
struct devmm_set_read_count set_read_count;
struct devmm_dbg_info dbg_info;
struct devmm_mem_remote_map_para map_para;
struct devmm_mem_remote_unmap_para unmap_para;
struct devmm_mem_map_cap_para mem_map_cap_para;
struct devmm_register_dma_para register_dma_para;
struct devmm_unregister_dma_para unregister_dma_para;
struct devmm_check_mem_info check_meminfo_para;
struct devmm_map_dev_reserve_para map_dev_reserve_para;
struct devmm_get_mmap_para mmap_para;
struct devmm_mem_create_para mem_create_para;
struct devmm_mem_release_para mem_release_para;
struct devmm_mem_map_para mem_map_para;
struct devmm_mem_unmap_para mem_unmap_para;
struct devmm_mem_query_owner_para mem_query_owner_para;
struct devmm_mem_set_access_para mem_set_access_para;
struct devmm_mem_get_access_para mem_get_access_para;
struct devmm_mem_export_para mem_export_para;
struct devmm_mem_import_para mem_import_para;
struct devmm_mem_set_pid_para mem_set_pid_para;
struct devmm_mem_set_attr_para mem_set_attr_para;
struct devmm_mem_get_attr_para mem_get_attr_para;
struct devmm_mem_get_info_para mem_get_info_para;
struct devmm_mem_repair_para mem_repair_para;
struct devmm_resv_addr_info_query_para resv_addr_info_query_para;
} data;
};
#define DEVMM_SVM_MEM_QUERY_OWNER _IOWR(DEVMM_SVM_MAGIC, 0, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_SET_ACCESS _IOW(DEVMM_SVM_MAGIC, 1, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_GET_ACCESS _IOWR(DEVMM_SVM_MAGIC, 2, struct devmm_ioctl_arg)
#define DEVMM_SVM_ALLOC _IOW(DEVMM_SVM_MAGIC, 3, struct devmm_ioctl_arg)
#define DEVMM_SVM_FREE_PAGES _IOW(DEVMM_SVM_MAGIC, 4, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEMCPY _IOWR(DEVMM_SVM_MAGIC, 5, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEMCPY2D _IOWR(DEVMM_SVM_MAGIC, 6, struct devmm_ioctl_arg)
#define DEVMM_SVM_ASYNC_MEMCPY _IOWR(DEVMM_SVM_MAGIC, 7, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEMCPY_RESLUT_REFRESH _IOWR(DEVMM_SVM_MAGIC, 8, struct devmm_ioctl_arg)
#define DEVMM_SVM_SUMBIT_CONVERT_CPY _IOW(DEVMM_SVM_MAGIC, 9, struct devmm_ioctl_arg)
#define DEVMM_SVM_WAIT_CONVERT_CPY_RESLUT _IOW(DEVMM_SVM_MAGIC, 10, struct devmm_ioctl_arg)
#define DEVMM_SVM_CONVERT_ADDR _IOWR(DEVMM_SVM_MAGIC, 11, struct devmm_ioctl_arg)
#define DEVMM_SVM_DESTROY_ADDR _IOW(DEVMM_SVM_MAGIC, 12, struct devmm_ioctl_arg)
#define DEVMM_SVM_ADVISE _IOW(DEVMM_SVM_MAGIC, 13, struct devmm_ioctl_arg)
#define DEVMM_SVM_PREFETCH _IOW(DEVMM_SVM_MAGIC, 14, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEMSET8 _IOWR(DEVMM_SVM_MAGIC, 15, struct devmm_ioctl_arg)
#define DEVMM_SVM_DESTROY_ADDR_BATCH _IOW(DEVMM_SVM_MAGIC, 16, struct devmm_ioctl_arg)
#define DEVMM_SVM_TRANSLATE _IOWR(DEVMM_SVM_MAGIC, 17, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_OPEN _IOW(DEVMM_SVM_MAGIC, 21, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_CLOSE _IOW(DEVMM_SVM_MAGIC, 22, struct devmm_ioctl_arg)
#define DEVMM_SVM_SETUP_DEVICE _IOWR(DEVMM_SVM_MAGIC, 26, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_CREATE _IOWR(DEVMM_SVM_MAGIC, 27, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_DESTROY _IOW(DEVMM_SVM_MAGIC, 28, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_QUERY _IOWR(DEVMM_SVM_MAGIC, 29, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_SET_PID _IOW(DEVMM_SVM_MAGIC, 32, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_SET_PID_POD _IOW(DEVMM_SVM_MAGIC, 33, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_SET_ATTR _IOW(DEVMM_SVM_MAGIC, 34, struct devmm_ioctl_arg)
#define DEVMM_SVM_IPC_MEM_GET_ATTR _IOWR(DEVMM_SVM_MAGIC, 35, struct devmm_ioctl_arg)
#define DEVMM_SVM_INIT_PROCESS _IOWR(DEVMM_SVM_MAGIC, 36, struct devmm_ioctl_arg)
#define DEVMM_SVM_UPDATE_HEAP _IOW(DEVMM_SVM_MAGIC, 37, struct devmm_ioctl_arg)
#define DEVMM_SVM_GET_PROC_STATUS _IOW(DEVMM_SVM_MAGIC, 38, struct devmm_ioctl_arg)
#define DEVMM_SVM_PROCESS_STATUS_QUERY _IOWR(DEVMM_SVM_MAGIC, 39, struct devmm_ioctl_arg)
#define DEVMM_SVM_DBG_VA_STATUS _IOWR(DEVMM_SVM_MAGIC, 41, struct devmm_ioctl_arg)
#define DEVMM_SVM_CLOSE_DEVICE _IOW(DEVMM_SVM_MAGIC, 42, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_REMOTE_MAP _IOWR(DEVMM_SVM_MAGIC, 45, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_REMOTE_UNMAP _IOWR(DEVMM_SVM_MAGIC, 46, struct devmm_ioctl_arg)
#define DEVMM_SVM_QUERY_MEM_USEDINFO _IOWR(DEVMM_SVM_MAGIC, 47, struct devmm_ioctl_arg)
#define DEVMM_SVM_CHECK_MEMINFO _IOW(DEVMM_SVM_MAGIC, 48, struct devmm_ioctl_arg)
#define DEVMM_SVM_MAP_DEV_RESERVE _IOWR(DEVMM_SVM_MAGIC, 49, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_CREATE _IOWR(DEVMM_SVM_MAGIC, 50, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_RELEASE _IOWR(DEVMM_SVM_MAGIC, 51, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_MAP _IOW(DEVMM_SVM_MAGIC, 52, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_UNMAP _IOWR(DEVMM_SVM_MAGIC, 53, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_EXPORT _IOWR(DEVMM_SVM_MAGIC, 54, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_IMPORT _IOWR(DEVMM_SVM_MAGIC, 55, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_SET_PID _IOW(DEVMM_SVM_MAGIC, 56, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_SET_ATTR _IOW(DEVMM_SVM_MAGIC, 57, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_GET_ATTR _IOWR(DEVMM_SVM_MAGIC, 58, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_GET_INFO _IOWR(DEVMM_SVM_MAGIC, 59, struct devmm_ioctl_arg)
#define DEVMM_SVM_REGISTER_DMA _IOW(DEVMM_SVM_MAGIC, 60, struct devmm_ioctl_arg)
#define DEVMM_SVM_UNREGISTER_DMA _IOW(DEVMM_SVM_MAGIC, 61, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_REPLAIR _IOW(DEVMM_SVM_MAGIC, 62, struct devmm_ioctl_arg)
#define DEVMM_SVM_RESERVE_ADDR_INFO_QUERY _IOWR(DEVMM_SVM_MAGIC, 63, struct devmm_ioctl_arg)
#define DEVMM_SVM_PREPARE_CLOSE_DEVICE _IOW(DEVMM_SVM_MAGIC, 64, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEMCPY_BATCH _IOW(DEVMM_SVM_MAGIC, 65, struct devmm_ioctl_arg)
#define DEVMM_SVM_SOMA_POOL_CREATE _IOW(DEVMM_SVM_MAGIC, 66, struct devmm_ioctl_arg)
#define DEVMM_SVM_SOMA_POOL_DESTROY _IOW(DEVMM_SVM_MAGIC, 67, struct devmm_ioctl_arg)
#define DEVMM_SVM_SOMA_POOL_MALLOC _IOW(DEVMM_SVM_MAGIC, 71, struct devmm_ioctl_arg)
#define DEVMM_SVM_SOMA_POOL_FREE _IOW(DEVMM_SVM_MAGIC, 72, struct devmm_ioctl_arg)
#define DEVMM_SVM_SOMA_POOL_TRIM _IOWR(DEVMM_SVM_MAGIC, 73, struct devmm_ioctl_arg)
#define DEVMM_SVM_CMD_USE_PRIVATE_MAX_CMD 100
#define DEVMM_SVM_ALLOC_PROC_STRUCT _IOW(DEVMM_SVM_MAGIC, 101, struct devmm_ioctl_arg)
#define DEVMM_SVM_DEV_SET_SIBLING _IOW(DEVMM_SVM_MAGIC, 102, struct devmm_ioctl_arg)
#define DEVMM_SVM_DEV_BIND_SIBLING _IOW(DEVMM_SVM_MAGIC, 103, struct devmm_ioctl_arg)
#define DEVMM_SVM_GET_MMAP_INFO _IOWR(DEVMM_SVM_MAGIC, 104, struct devmm_ioctl_arg)
#define DEVMM_SVM_MEM_MAP_CAP _IOWR(DEVMM_SVM_MAGIC, 105, struct devmm_ioctl_arg)
#define DEVMM_SVM_CMD_MAX_CMD 106
#define DEVMM_SVM_GET_DEVPID_BY_HOSTPID 0
#define DEVMM_SVM_WAIT_DEVICE_PROCESS 0
#endif