* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#ifndef __DEVDRV_USER_COMMON_H
#define __DEVDRV_USER_COMMON_H
#include "devdrv_hardware_version.h"
#define DAVINCI_INTF_MODULE_DEVMNG "DEVMNG"
#ifndef pid_t
typedef int pid_t;
#endif
#define DEVDRV_TS_GROUP_NUM 4
typedef enum {
DEVDRV_TS_AICORE = 0,
DEVDRV_TS_AIVECTOR,
DEVDRV_TS_MAX,
} DEVDRV_TS_ID;
#define SOC_PLATFORM_ACEND310 ((defined CFG_SOC_PLATFORM_MINI) && (!defined CFG_SOC_PLATFORM_MINIV2))
#define MAX_DAVINCI_NUM_OF_ONE_CHIP (4)
#define DEVDRV_SRAM_TS_SHM_SIZE (0x1000)
#define DEVDRV_CACHELINE_OFFSET (6)
#define DEVDRV_CACHELINE_SIZE (64)
#define DEVDRV_CACHELINE_MASK (DEVDRV_CACHELINE_SIZE - 1)
#ifndef DEVDRV_IMU_CMD_LEN
#define DEVDRV_IMU_CMD_LEN (32U)
#endif
#define BIT_NUM_U64 (64)
#define KEY_CHIP_TYPE_INDEX (8U)
#if defined(DRV_HOST) && defined(CFG_FEATURE_SRIOV)
#ifndef DEVDRV_MAX_DAVINCI_NUM
#define DEVDRV_MAX_DAVINCI_NUM (1124)
#endif
#ifndef DEVDRV_PF_DEV_MAX_NUM
#define DEVDRV_PF_DEV_MAX_NUM (64)
#endif
#define MAX_VDEV_NUM (1024)
#define VDAVINCI_MAX_VFID_NUM (16)
#define VDAVINCI_MAX_DEVICE_COUNT (64)
#else
#ifndef DEVDRV_MAX_DAVINCI_NUM
#define DEVDRV_MAX_DAVINCI_NUM (64)
#endif
#if (defined CFG_FEATURE_SRIOV) || (defined CFG_FEATURE_VF_USE_DEVID)
#ifndef DEVDRV_PF_DEV_MAX_NUM
#define DEVDRV_PF_DEV_MAX_NUM (32)
#endif
#else
#ifndef DEVDRV_PF_DEV_MAX_NUM
#define DEVDRV_PF_DEV_MAX_NUM (64)
#endif
#endif
#if (defined CFG_FEATURE_VF_SINGLE_AICORE)
#define MAX_VDEV_NUM (4)
#define VDAVINCI_MAX_VFID_NUM (4)
#define VDAVINCI_MAX_DEVICE_COUNT (1)
#else
#define MAX_VDEV_NUM (1024)
#define VDAVINCI_MAX_VFID_NUM (16)
#define VDAVINCI_MAX_DEVICE_COUNT (64)
#endif
#endif
#define DEVDRV_MAILBOX_MAX_FEEDBACK (16)
#define DEVDRV_MAILBOX_STOP_THREAD (0x0FFFFFFF)
#define DEVDRV_BUS_DOWN (0x0F00FFFF)
#define DEVDRV_HDC_CONNECT_DOWN (0x0F0FFFFF)
#define DEVDRV_IPC_NAME_SIZE (65)
#define DEVDRV_PID_MAX_NUM (16)
#define DEVDRV_MAX_INTERRUPT_NUM (32)
#define DEVDRV_MAX_MEMORY_DUMP_SIZE (4 * 1024 * 1024)
#define DEVDRV_MAX_REG_DDR_READ_SIZE (5 * 1024 * 1024)
#define DEVDRV_USER_CONFIG_NAME_LEN (32)
#define DEVDRV_USER_CONFIG_NAME_MAX (32)
#define DEVDRV_USER_CONFIG_VALUE_LEN (128)
#define DEVDRV_BB_DEVICE_ID_INFORM (0x66020004)
#define DEVDRV_BB_DEVICE_STATE_INFORM (0x66020008)
#ifdef CFG_SOC_PLATFORM_MINIV2
#define CHIP_BASEADDR_PA_OFFSET (0x8000000000ULL)
#else
#define CHIP_BASEADDR_PA_OFFSET (0x200000000000ULL)
#endif
#define ERROR_CODE_OFFSET_IN_PAYLOAD 0
#define SAFETY_ISLAND_STATUS_OFFSET_IN_PAYLOAD 1
#define EMU_STATUS_BIT_MASK 3U
#define DEVDRV_MAX_COMPUTING_POWER_TYPE 1
#define DEVDRV_COMPUTING_VALUE_ERROR 0xFFFFFFFFFFFFFFFEull
#define DEVDRV_MAILBOX_PAYLOAD 64
#ifdef CFG_FEATURE_OLD_ALL_DEVICE_RESET_FLAG
#define ALL_DEVICE_RESET_FLAG 0xff
#else
#define ALL_DEVICE_RESET_FLAG (0xffffffffU)
#endif
struct devdrv_mailbox_user_message {
unsigned char message_payload[DEVDRV_MAILBOX_PAYLOAD];
int message_length;
int feedback_num;
unsigned char *feedback_buffer;
* if a sync message need feedback, must alloc buffer for feedback data.
* if a async message need feedback, set this to null,
* because driver will send a callback parameter to callback func,
* app has no need to free callback parameter in callback func.
*/
int sync_type;
int cmd_type;
int message_index;
int message_pid;
void (*callback)(void *data);
};
struct devdrv_mailbox_feedback {
void (*callback)(void *data);
unsigned char *buffer;
int feedback_num;
int process_result;
};
struct devdrv_user_parameter {
unsigned int devid;
unsigned int cq_slot_size;
unsigned short disable_wakelock;
};
struct devdrv_pci_info {
unsigned int dev_id;
unsigned char bus_number;
unsigned char dev_number;
unsigned char function_number;
};
struct devdrv_svm_to_devid {
unsigned int src_devid;
unsigned int dest_devid;
unsigned long src_addr;
unsigned long dest_addr;
};
struct devdrv_channel_info_devid {
char name[DEVDRV_IPC_NAME_SIZE];
unsigned int handle;
unsigned int event_id;
unsigned int src_devid;
unsigned int dest_devid;
unsigned int status;
unsigned long long timestamp;
};
#define DEVDRV_SHRID_OP_CONFIG (1 << 0)
#define DEVDRV_SHRID_OP_DECONFIG (1 << 1)
struct devdrv_notify_ioctl_info {
unsigned int dev_id;
unsigned int tsid;
unsigned int notify_id;
unsigned int id_type;
unsigned long long dev_addr;
unsigned long long host_addr;
char name[DEVDRV_IPC_NAME_SIZE];
pid_t pid[DEVDRV_PID_MAX_NUM];
unsigned int flag;
unsigned int enableFlag;
unsigned int open_devid;
};
struct devdrv_hardware_spec {
unsigned int devid;
unsigned int ai_core_num;
unsigned int first_ai_core_id;
unsigned int ai_cpu_num;
unsigned int first_ai_cpu_id;
unsigned char ai_core_num_level;
unsigned char ai_core_freq_level;
};
struct devdrv_hardware_inuse {
unsigned int devid;
unsigned int ai_core_num;
unsigned int ai_core_error_bitmap;
unsigned int ai_cpu_num;
unsigned int ai_cpu_error_bitmap;
};
struct devdrv_board_info {
unsigned int dev_id;
unsigned int board_id;
unsigned int pcb_id;
unsigned int bom_id;
unsigned int slot_id;
};
struct devdrv_manager_devids {
unsigned int num_dev;
unsigned int devids[DEVDRV_MAX_DAVINCI_NUM];
};
#define SOC_VERSION_LENGTH 32U
struct devdrv_manager_hccl_devinfo {
unsigned char env_type;
unsigned int dev_id;
unsigned int ctrl_cpu_ip;
unsigned int ctrl_cpu_id;
unsigned int ctrl_cpu_core_num;
unsigned int ctrl_cpu_occupy_bitmap;
unsigned int ctrl_cpu_endian_little;
unsigned int ts_cpu_core_num;
unsigned int ai_cpu_core_num;
unsigned int ai_core_num;
unsigned int ai_cpu_bitmap;
unsigned int ai_core_id;
unsigned int ai_cpu_core_id;
unsigned int hardware_version;
unsigned int ts_num;
unsigned long long aicore_freq;
unsigned long long cpu_system_count;
unsigned long long monotonic_raw_time_ns;
unsigned int vector_core_num;
unsigned long long vector_core_freq;
unsigned long long computing_power[DEVDRV_MAX_COMPUTING_POWER_TYPE];
unsigned int ffts_type;
unsigned int chip_id;
unsigned int die_id;
unsigned int addr_mode;
unsigned int host_device_connect_type;
unsigned int mainboard_id;
char soc_version[SOC_VERSION_LENGTH];
unsigned long long aicore_bitmap[2];
unsigned char product_type;
unsigned int resv[31];
};
#define DEVDRV_MAX_SPEC_RESERVE 8
struct devdrv_vdev_spec_info {
unsigned char core_num;
unsigned char reservesd[DEVDRV_MAX_SPEC_RESERVE];
};
struct devdrv_vdev_create_info {
unsigned int devid;
unsigned int vdev_num;
struct devdrv_vdev_spec_info spec[VDAVINCI_MAX_VFID_NUM];
unsigned int vdevid[VDAVINCI_MAX_VFID_NUM];
};
#define DSMI_VDEV_RES_NAME_LEN 16
#define DSMI_VDEV_FOR_RESERVE 32
#define DSMI_SOC_SPLIT_MAX 32
#define DSMI_UINT_SIZE sizeof(unsigned int)
struct devdrv_base_resource_vdev {
unsigned long long token;
unsigned long long token_max;
unsigned long long task_timeout;
unsigned int vfg_id;
unsigned char vip_mode;
unsigned char reserved[DSMI_VDEV_FOR_RESERVE - 1];
};
struct devdrv_computing_resource_vdev {
float aic;
float aiv;
unsigned short dsa;
unsigned short rtsq;
unsigned short acsq;
unsigned short cdqm;
unsigned short c_core;
unsigned short ffts;
unsigned short sdma;
unsigned short pcie_dma;
unsigned long long memory_size;
unsigned int event_id;
unsigned int notify_id;
unsigned int stream_id;
unsigned int model_id;
unsigned short topic_schedule_aicpu;
unsigned short host_ctrl_cpu;
unsigned short host_aicpu;
unsigned short device_aicpu;
unsigned short topic_ctrl_cpu_slot;
unsigned int vdev_aicore_utilization;
unsigned char reserved[DSMI_VDEV_FOR_RESERVE - DSMI_UINT_SIZE];
};
struct devdrv_computing_configurable_vdev {
unsigned long long memory_size;
float aic;
float aiv;
unsigned short dsa;
unsigned short rtsq;
unsigned short cdqm;
unsigned short topic_schedule_aicpu;
unsigned short host_ctrl_cpu;
unsigned short host_aicpu;
unsigned short device_aicpu;
unsigned char reserved[DSMI_VDEV_FOR_RESERVE];
};
struct devdrv_media_resource_vdev {
unsigned int jpegd;
unsigned int jpege;
unsigned int vpc;
unsigned int vdec;
unsigned int pngd;
unsigned int venc;
unsigned char reserved[DSMI_VDEV_FOR_RESERVE];
};
struct devdrv_create_vdev_res_stru_vdev {
char name[DSMI_VDEV_RES_NAME_LEN];
struct devdrv_base_resource_vdev base;
struct devdrv_computing_configurable_vdev computing;
struct devdrv_media_resource_vdev media;
};
struct vdev_create_info {
unsigned int devid;
unsigned int vdevid;
struct devdrv_vdev_spec_info spec;
struct devdrv_create_vdev_res_stru_vdev vdev_info;
unsigned int vfid;
};
struct devdrv_vdev_id_info {
unsigned int devid;
unsigned int vdevid;
};
struct vdev_info_st {
unsigned int status;
unsigned int id;
unsigned int vfid;
unsigned long long cid;
struct devdrv_vdev_spec_info spec;
};
struct devdrv_vdev_info {
unsigned int devid;
unsigned int vdev_num;
struct devdrv_vdev_spec_info spec_unused;
struct vdev_info_st vdev[VDAVINCI_MAX_VFID_NUM];
};
enum {
DEV_VMNG_SUB_CMD_GET_VDEV_RESOURCE = 0,
DEV_VMNG_SUB_CMD_GET_TOTAL_RESOURCE,
DEV_VMNG_SUB_CMD_GET_FREE_RESOURCE,
DEV_VMNG_SUB_CMD_MAX
};
struct vdev_query_info {
char name[DSMI_VDEV_RES_NAME_LEN];
unsigned int cmd_type;
unsigned int aic_total;
unsigned int aic_unused;
unsigned int devid;
unsigned int status;
unsigned int vfid;
unsigned int vfg_id;
unsigned int vfg_num;
unsigned int vfg_bitmap;
unsigned int vdev_num;
unsigned int vdev_id_single;
unsigned int is_container_used;
unsigned long long container_id;
unsigned int vdev_id[DSMI_SOC_SPLIT_MAX];
struct vdev_info_st vdev[VDAVINCI_MAX_VFID_NUM];
struct devdrv_base_resource_vdev base;
struct devdrv_computing_resource_vdev computing;
struct devdrv_media_resource_vdev media;
};
#define DEVDRV_SVM_VDEV_LEN 8
struct devdrv_svm_vdev_info {
unsigned int devid;
unsigned int type;
unsigned int buf_size;
char buf[DEVDRV_SVM_VDEV_LEN];
};
struct devdrv_sysrdy_info {
unsigned int probe_dev_num;
unsigned int rdy_dev_num;
};
struct devdrv_black_box_devids {
unsigned int dev_num;
unsigned int devids[DEVDRV_MAX_DAVINCI_NUM];
};
enum devdrv_device_state {
STATE_TO_SO = 0,
STATE_TO_SUSPEND,
STATE_TO_S3,
STATE_TO_S4,
STATE_TO_D0,
STATE_TO_D3,
STATE_TO_DISABLE_DEV,
STATE_TO_ENABLE_DEV,
STATE_TO_MAX,
};
struct devdrv_black_box_state_info {
unsigned int state;
unsigned int devId;
};
struct devdrv_black_box_user {
unsigned int devid;
unsigned int size;
unsigned long long addr_offset;
void *dst_buffer;
unsigned int thread_should_stop;
unsigned int exception_code;
unsigned long long tv_sec;
unsigned long long tv_nsec;
union {
struct devdrv_black_box_devids bbox_devids;
struct devdrv_black_box_state_info bbox_state;
} priv_data;
};
enum devdrv_dev_log_dump_type {
DEVDRV_DEV_LOG_DUMP_DEBUG_OS = 0,
DEVDRV_DEV_LOG_DUMP_SEC,
DEVDRV_DEV_LOG_DUMP_RUN_OS,
DEVDRV_DEV_LOG_DUMP_RUN_EVENT,
DEVDRV_DEV_LOG_DUMP_DEBUG_DEV,
DEVDRV_DEV_LOG_DUMP_TYPE_MAX
};
struct devdrv_bbox_logdump {
struct devdrv_black_box_user *bbox_user;
enum devdrv_dev_log_dump_type log_type;
};
struct devdrv_module_status {
unsigned int devid;
unsigned int ai_core_error_bitmap;
unsigned char lpm3_start_fail;
unsigned char lpm3_lost_heart_beat;
unsigned char ts_start_fail;
unsigned char ts_lost_heart_beat;
unsigned char ts_sram_broken;
unsigned char ts_sdma_broken;
unsigned char ts_bs_broken;
unsigned char ts_l2_buf0_broken;
unsigned char ts_l2_buf1_broken;
unsigned char ts_spcie_broken;
unsigned char ts_ai_core_broken;
unsigned char ts_hwts_broken;
unsigned char ts_doorbell_broken;
};
struct devdrv_pcie_pre_reset {
unsigned int dev_id;
};
struct devdrv_pcie_rescan {
unsigned int dev_id;
};
struct devdrv_pcie_hot_reset {
unsigned int dev_id;
};
struct devdrv_alloc_host_dma_addr_para {
unsigned int devId;
unsigned int size;
unsigned long long phyAddr;
unsigned long long virAddr;
};
struct devdrv_free_host_dma_addr_para {
unsigned int devId;
unsigned int size;
unsigned long long phyAddr;
unsigned long long virAddr;
};
struct devdrv_pcie_sram_read_para {
unsigned int devId;
unsigned int offset;
unsigned char value[512];
unsigned int len;
};
struct devdrv_pcie_ddr_read_para {
unsigned int devId;
unsigned int offset;
unsigned char value[512];
unsigned int len;
};
struct devdrv_pcie_hdr_read_para {
unsigned int devId;
unsigned int offset;
unsigned char value[512];
unsigned int len;
};
#define DEVDRV_VALUE_SIZE 512
enum devdrv_pcie_read_type {
DEVDRV_PCIE_READ_TYPE_SRAM = 0x0,
DEVDRV_PCIE_READ_TYPE_DDR,
DEVDRV_PCIE_READ_TYPE_HDR,
DEVDRV_PCIE_READ_TYPE_REG_SRAM,
DEVDRV_PCIE_READ_TYPE_HBOOT_SRAM,
DEVDRV_PCIE_READ_TYPE_VMCORE_FILE,
DEVDRV_PCIE_READ_TYPE_VMCORE_STAT,
DEVDRV_PCIE_READ_TYPE_CHIP_DFX_LOG,
DEVDRV_PCIE_READ_TYPE_TS_LOG,
DEVDRV_PCIE_READ_TYPE_BBOX_DDR_LOG,
DEVDRV_MAX_PCIE_READ_TYPE
};
struct devdrv_bbox_pcie_logdump {
unsigned int devid;
unsigned int offset;
unsigned int len;
void *buff;
enum devdrv_pcie_read_type type;
};
enum devdrv_pcie_write_type {
DEVDRV_PCIE_WRITE_TYPE_KDUMP = 0x0,
DEVDRV_MAX_PCIE_WRITE_TYPE
};
struct devdrv_pcie_read_para {
unsigned int devId;
unsigned int offset;
unsigned char value[DEVDRV_VALUE_SIZE];
unsigned int len;
enum devdrv_pcie_read_type type;
};
struct devdrv_pcie_write_para {
unsigned int devId;
unsigned int offset;
unsigned char value[DEVDRV_VALUE_SIZE];
unsigned int len;
enum devdrv_pcie_write_type type;
};
struct devdrv_get_device_boot_status_para {
unsigned int devId;
unsigned int boot_status;
};
struct devdrv_get_host_phy_mach_flag_para {
unsigned int devId;
unsigned int host_flag;
};
struct devdrv_pcie_imu_ddr_read_para {
unsigned int devId;
unsigned int offset;
unsigned char value[DEVDRV_VALUE_SIZE];
unsigned int len;
};
struct devdrv_get_device_os_para {
unsigned int dev_id;
unsigned int master_dev_id;
};
struct devdrv_get_local_devid_para {
unsigned int host_dev_id;
unsigned int local_dev_id;
};
struct devdrv_phy_get_devinfo_para {
unsigned int phy_id;
unsigned int chip_type;
};
#define DEVDRV_SQ_INFO_OCCUPY_SIZE \
(sizeof(struct devdrv_ts_sq_info) * DEVDRV_MAX_SQ_NUM)
#define DEVDRV_CQ_INFO_OCCUPY_SIZE \
(sizeof(struct devdrv_ts_cq_info) * DEVDRV_MAX_CQ_NUM)
#define DEVDRV_MAX_INFO_SIZE (DEVDRV_SQ_INFO_OCCUPY_SIZE + DEVDRV_CQ_INFO_OCCUPY_SIZE)
#define DEVDRV_STATUS_INFO_SIZE (sizeof(unsigned int))
#define DEVDRV_MAX_INFO_ORDER (get_order(DEVDRV_MAX_INFO_SIZE))
#define DEVDRV_STATUS_INFO_ORDER (get_order(DEVDRV_STATUS_INFO_SIZE))
#define PMU_EMMC_VCC_CHANNEL (7)
#define PMU_EMMC_VCCQ_CHANNEL (14)
#define ADCIN7_SLOT0 (7)
#define ADCIN8_SLOT1 (8)
struct devdrv_emmc_voltage_para {
int emmc_vcc;
int emmc_vccq;
};
struct devdrv_emmc_info_para {
unsigned int dev_id;
unsigned int info_type;
};
#define DMANAGE_ERROR_ARRAY_NUM (128)
struct devdrv_error_code_para {
int error_code_count;
unsigned int error_code[DMANAGE_ERROR_ARRAY_NUM];
unsigned int dev_id;
unsigned int resv[2];
};
struct devdrv_lp_status {
unsigned int status;
unsigned long long status_info;
};
#define RESULT_SIZE 4
struct tsensor_ioctl_arg {
unsigned int dev_id;
unsigned int coreid;
unsigned int result_size;
unsigned int result[RESULT_SIZE];
};
enum devdrv_dfx_sec_cmd {
DEVMNG_DFX_TS_WORKING = 0,
DEVMNG_DFX_HEART_BEAT,
DEVMNG_DFX_CQSQ,
DEVMNG_DFX_ALL_STATUS,
DEVMNG_DFX_MAX_DFX_CMD,
};
struct devdrv_cq_dfx_info {
unsigned int flag;
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int a1;
unsigned int b1;
unsigned int c1;
};
struct devdrv_dfx_para {
unsigned int devid;
unsigned int cmd;
void *in;
void *out;
};
enum devdrv_container_cmd {
#if ((defined CFG_SOC_PLATFORM_MINI) && (!defined CFG_SOC_PLATFORM_MINIV2))
DEVDRV_CONTAINER_NOTIFY,
DEVDRV_CONTAINER_ALLOCATE_TFLOPS,
DEVDRV_CONTAINER_IS_CONTAINER,
DEVDRV_CONTAINER_DOCKER_EXIT,
DEVDRV_CONTAINER_DOCKER_CREATE,
DEVDRV_CONTAINER_ASSIGN_NOTIFY,
DEVDRV_CONTAINER_ASSIGN_ALLOCATE_DEVICES,
DEVDRV_CONTAINER_ASSIGN_IS_ASSIGN_MODE,
DEVDRV_CONTAINER_ASSIGN_SET_UUID,
DEVDRV_CONTAINER_IS_IN_CONTAINER,
DEVDRV_CONTAINER_GET_DAVINCI_DEVLIST,
DEVDRV_CONTAINER_LOGICID_TO_PHYSICID,
DEVDRV_CONTAINER_GET_BARE_PID,
DEVDRV_CONTAINER_GET_BARE_TGID,
#else
DEVDRV_CONTAINER_GET_DAVINCI_DEVLIST,
DEVDRV_CONTAINER_GET_BARE_PID,
DEVDRV_CONTAINER_GET_BARE_TGID,
#endif
DEVDRV_CONTAINER_MAX_CMD,
};
struct devdrv_container_para {
struct devdrv_dfx_para para;
unsigned int admin;
};
#define DEVDRV_MINI_TOTAL_TFLOP 16
#define DEVDRV_MINI_FP16_UNIT 1
#define DEVDRV_MINI_INT8_UNIT 2
#ifdef CFG_EDGE_HOST
#define VDAVINCI_VDEV_OFFSET 100
#else
#define VDAVINCI_VDEV_OFFSET 32
#endif
#define VDAVINCI_VDEV_OFFSET_PLUS(x) ((x) + VDAVINCI_VDEV_OFFSET)
#define VDAVINCI_VDEV_OFFSET_SUB(x) ((x) - VDAVINCI_VDEV_OFFSET)
#define VDAVINCI_IS_VDEV(x) ((x) >= VDAVINCI_VDEV_OFFSET)
#define VDAVINCI_MAX_VDEV_ID (VDAVINCI_VDEV_OFFSET + MAX_VDEV_NUM - 1)
#define VDAVINCI_MAX_VDEV_NUM (VDAVINCI_MAX_VDEV_ID + 1)
struct devdrv_container_alloc_para {
unsigned int is_in_container;
unsigned int num;
unsigned int phy_dev_num;
unsigned int npu_id[DEVDRV_MAX_DAVINCI_NUM];
unsigned int vdev_id[DEVDRV_MAX_DAVINCI_NUM];
unsigned int phy_dev_id[DEVDRV_MAX_DAVINCI_NUM];
};
struct devdrv_container_tflop_config {
unsigned int tflop_mode;
unsigned int total_tflop;
unsigned int alloc_unit;
unsigned int tflop_num;
};
enum devdrv_run_mode {
DEVDRV_NORMAL_MODE = 0,
DEVDRV_CONTAINER_MODE,
DEVDRV_MAX_RUN_MODE,
};
enum devdrv_running_mode {
DEVDRV_NORMAL_RUNNING_MODE = 0,
DEVDRV_CONTAINER_RUNNING_MODE,
DEVDRV_CONTAINER_DEVICE_RUNNING_MODE,
DEVDRV_MAX_RUNNING_MODE,
};
enum devdrv_container_tflop_mode {
DEVDRV_FP16 = 0,
DEVDRV_INT8,
DEVDRV_MAX_TFLOP_MODE,
};
enum devdrv_flash_config_cmd {
DEVDRV_FLASH_CONFIG_READ_CMD = 0,
DEVDRV_FLASH_CONFIG_WRITE_CMD,
DEVDRV_FLASH_CONFIG_CLEAR_CMD,
DEVDRV_FLASH_CONFIG_MAX_CMD,
};
struct devdrv_flash_config_ioctl_para {
unsigned int dev_id;
int cmd;
int cfg_index;
unsigned int buf_size;
void *buf;
};
#define DEVDRV_MAX_LIB_LENGTH 128
#define DEVDRV_SHA256_SIZE 32
struct devdrv_load_kernel {
unsigned int devid;
unsigned int share;
char libname[DEVDRV_MAX_LIB_LENGTH];
unsigned char sha256[DEVDRV_SHA256_SIZE];
int pid;
void *binary;
unsigned int size;
};
struct devdrv_load_kernel_serve {
struct devdrv_load_kernel load_kernel;
unsigned char thread_should_exit;
unsigned int save_state;
};
#define REMAP_ALIGN_SIZE (64 * 1024)
#define REMAP_ALIGN_MASK (~(REMAP_ALIGN_SIZE - 1))
#define REMAP_ALIGN(x) (((x) + REMAP_ALIGN_SIZE - 1) & REMAP_ALIGN_MASK)
#define DEVDRV_VM_SYSFS_DFX_SIZE (1024 * 1024)
#define DEVDRV_VM_SQ_SLOT_SIZE REMAP_ALIGN(DEVDRV_MAX_SQ_DEPTH * DEVDRV_SQ_SLOT_SIZE)
#define DEVDRV_VM_INFO_MEM_SIZE REMAP_ALIGN(DEVDRV_MAX_INFO_SIZE)
#define DEVDRV_VM_CQ_SLOT_SIZE REMAP_ALIGN(DEVDRV_MAX_CQ_DEPTH * DEVDRV_CQ_SLOT_SIZE)
typedef enum {
DEVDRV_IOC_VA_TO_PA,
DEVDRV_IOC_GET_SVM_SSID,
DEVDRV_IOC_GET_CHIP_INFO,
DEVDRV_IOC_ALLOC_CONTIGUOUS_MEM,
DEVDRV_IOC_FREE_CONTIGUOUS_MEM,
} devdrv_custom_ioc_t;
typedef struct {
unsigned int version;
unsigned int cmd;
unsigned int result;
unsigned int reserved;
unsigned long long arg;
} devdrv_custom_para_t;
typedef enum {
GET_GROUP_COUNT_RES_INDEX = 0,
GET_GROUP_TS_ID_RES_INDEX,
GET_GROUP_ID_RES_INDEX,
}GET_GROUP_RESVER_INDEX;
#define COMMON_STATUS_RES_LEN 8
typedef struct _common_status_info {
unsigned int dev_id;
unsigned int name_len;
unsigned char *name;
void *commoninfo;
unsigned int commoninfo_len;
int reserver[COMMON_STATUS_RES_LEN];
} common_status_info_t;
typedef struct _last_bootstate_info {
unsigned int dev_id;
unsigned int boot_type;
} last_bootstate_info_t;
#define DDR_MANUFACTURE_CODE_LEN 24
struct devdrv_ddr_base_info {
unsigned int ddr_type;
unsigned int ddr_capacity;
unsigned int ddr_channel;
unsigned int ddr_rank_num;
unsigned int ddr_ecc_enable;
};
enum tsdrv_dev_machine_type {
PHY_MACHINE_TYPE = 0,
VIR_MACHINE_TYPE = 1,
MACHINE_MAX_TYPE,
};
struct tsdrv_dev_com_info {
enum tsdrv_dev_machine_type mach_type;
unsigned int ts_num;
};
struct delete_ts_group_info {
int ts_id;
int group_id;
unsigned int result;
};
struct get_ts_group_para {
unsigned int device_id;
int ts_id;
int group_id;
int group_count;
};
#define DEVDRV_IOCTL_RES_LEN 8
struct devdrv_ioctl_info {
int dev_id;
void *input_buf;
unsigned int input_len;
char *out_buf;
unsigned int out_len;
int res[DEVDRV_IOCTL_RES_LEN];
};
struct ts_group_info {
unsigned char group_id;
unsigned char state;
unsigned char extend_attribute;
unsigned char aicore_number;
unsigned char aivector_number;
unsigned char sdma_number;
unsigned char aicpu_number;
unsigned char active_sq_number;
unsigned int aicore_mask;
unsigned int vfid;
unsigned int poolid;
unsigned int poolid_max;
unsigned int result;
};
typedef enum {
SET_CAN_CONFIG_FILTER = 0,
SET_CAN_CONFIG_RAM,
SET_CAN_CONFIG_MAX,
}SET_CAN_CONFIG_INDEX;
#define CAN_ID_INDEX_OFFSET 24
#define CAN_CFG_ITEM_CFG_BIT 0xff
#define CAN_MAX_CFG_LEN 2048
#define GET_CAN_ID_FROM_SUB_CMD(can_sub_cmd) ((can_sub_cmd) >> CAN_ID_INDEX_OFFSET)
#define GET_CAN_CFG_ITEM_FROM_SUB_CMD(can_sub_cmd) ((can_sub_cmd) & CAN_CFG_ITEM_CFG_BIT)
#define DEVDRV_SIGN_LEN 49
struct devdrv_ioctl_para_bind_host_pid {
pid_t host_pid;
unsigned int vfid;
unsigned int chip_id;
int mode;
int cp_type;
unsigned int len;
char sign[DEVDRV_SIGN_LEN];
};
struct devdrv_ioctl_para_query_pid {
pid_t pid;
unsigned int chip_id;
unsigned int vfid;
pid_t host_pid;
unsigned int cp_type;
};
enum ipcMainCmdType {
IPC_MAIN_CMD_QUERY = 1,
MAX_IPC_MAIN_CMD_NUM
};
enum ipcSubCmdType {
IPC_SUB_CMD_SOC_TEMP = 1,
IPC_SUB_CMD_HBM_TEMP,
IPC_SUB_CMD_NDIE_TEMP,
IPC_SUB_CMD_VRD_TEMP,
IPC_SUB_CMD_AIC0_FREQ,
IPC_SUB_CMD_AIC1_FREQ,
IPC_SUB_CMD_AIV_FREQ,
IPC_SUB_CMD_CCPU_FREQ,
IPC_SUB_CMD_DDR_FREQ,
IPC_SUB_CMD_HBM_FREQ,
IPC_SUB_CMD_SOC_POWER,
MAX_IPC_SUB_CMD_NUM
};
enum ipcTargetId {
TARGET_ID_LP = 0,
TARGET_ID_IMU,
TARGET_ID_TSC,
TARGET_ID_TSV,
TARGET_ID_SAFETYISLAND,
MAX_TARGET_ID
};
struct devdrv_device_work_status {
unsigned int device_id;
unsigned int device_process_status;
unsigned int dmp_started;
};
struct devdrv_device_health_status {
unsigned int device_id;
unsigned int device_health_status;
};
#define DEVDRV_MAX_PAYLOAD_LEN 256
enum devdrv_owner_type {
DEVDRV_DEV_RESOURCE = 0,
DEVDRV_VDEV_RESOURCE,
DEVDRV_PROCESS_RESOURCE,
DEVDRV_MAX_OWNER_TYPE,
};
enum devdrv_dev_resource_type {
DEVDRV_DEV_STREAM_ID = 0,
DEVDRV_DEV_EVENT_ID,
DEVDRV_DEV_NOTIFY_ID,
DEVDRV_DEV_MODEL_ID,
DEVDRV_MAX_TS_INFO_TYPE = DEVDRV_DEV_MODEL_ID,
DEVDRV_DEV_HBM_TOTAL,
DEVDRV_DEV_HBM_FREE,
DEVDRV_DEV_DDR_TOTAL,
DEVDRV_DEV_DDR_FREE,
DEVDRV_MAX_MEM_INFO_TYPE = DEVDRV_DEV_DDR_FREE,
DEVDRV_DEV_PROCESS_PID,
DEVDRV_DEV_PROCESS_MEM,
DEVDRV_DEV_PROCESS_CONTAINER_PID,
DEVDRV_DEV_INFO_TYPE_MAX,
};
struct devdrv_resource_info {
unsigned int devid;
unsigned int owner_type;
unsigned int owner_id;
unsigned int resource_type;
unsigned int tsid;
unsigned int buf_len;
char buf[DEVDRV_MAX_PAYLOAD_LEN];
};
#define DEVDRV_MAX_CHIP_NUM 64
struct devdrv_chip_list {
int count;
int chip_list[VDAVINCI_VDEV_OFFSET];
};
struct devdrv_chip_dev_list {
int chip_id;
int count;
int dev_list[DEVDRV_MAX_DAVINCI_NUM];
};
struct devdrv_get_dev_chip_id {
int dev_id;
int chip_id;
};
struct virtmng_vf_list {
unsigned int dev_id;
unsigned int vf_num;
unsigned int vf_list[VDAVINCI_MAX_VFID_NUM];
};
struct devdrv_sign_verification_info {
unsigned int dev_id;
unsigned char sign_buf;
};
#ifdef ENABLE_BUILD_PRODUCT
int error_code_filter(unsigned int *errorcode, int *errorcount);
#endif
#endif