* Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __DEVDRV_USER_COMMON_H
#define __DEVDRV_USER_COMMON_H
#include "urd_msg.h"
#include "devdrv_user_common_msg.h"
#include "devdrv_hardware_version.h"
#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 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)
* | feature(chip) | side (host or device) | DEVDRV_MAX_DAVINCI_NUM | DEVDRV_PF_DEV_MAX_NUM
* SRIOV support(910B) host 1124 64
* same solution(910B/310Brc) device 64 32
* others host 64 64
* others device 64 4
*/
#ifndef DEVDRV_MAX_DAVINCI_NUM
#if defined(CFG_HOST_ENV) && defined(CFG_FEATURE_SRIOV)
#define DEVDRV_MAX_DAVINCI_NUM 1124
#define DEVDRV_PF_DEV_MAX_NUM 64
#else
#define DEVDRV_MAX_DAVINCI_NUM 64
#ifdef CFG_HOST_ENV
#define DEVDRV_PF_DEV_MAX_NUM 64
#else
#ifdef CFG_FEATURE_VF_USE_DEVID
#define DEVDRV_PF_DEV_MAX_NUM 32
#else
#define DEVDRV_PF_DEV_MAX_NUM 4
#endif
#endif
#endif
#endif
#if defined(CFG_HOST_ENV) && defined(CFG_FEATURE_SRIOV)
#define MAX_VDEV_NUM (1024)
#define VDAVINCI_MAX_VFID_NUM (16)
#define VDAVINCI_MAX_DEVICE_COUNT (64)
#elif (defined CFG_FEATURE_VFIO) && (defined CFG_FEATURE_RC_MODE)
#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
#define DEVDRV_PF_TYPE 0
#define DEVDRV_VF_TYPE 1
#define DEVDRV_ALL_TYPE 2
#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_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)
#define DIE_BASEADDR_PA_OFFSET (0x0ULL)
#define DEVDRV_MAX_REG_DDR_READ_SIZE (5 * 1024 * 1024)
#elif defined (CFG_SOC_PLATFORM_CLOUD_V2)
#define HCCS_BASEADDR_PA_OFFSET (0x200000000000ULL)
#define HCCS_CHIP_BASEADDR_PA_OFFSET (0x20000000000ULL)
#define CHIP_BASEADDR_PA_OFFSET (0x80000000000ULL)
#define DIE_BASEADDR_PA_OFFSET (0x10000000000ULL)
#define DIE_BASEADDR_HIGH_ADDR_OFFSET (0x1000000000ULL)
#define DEVDRV_MAX_REG_DDR_READ_SIZE (10 * 1024 * 1024)
#else
#define CHIP_BASEADDR_PA_OFFSET (0x200000000000ULL)
#define DIE_BASEADDR_PA_OFFSET (0x0ULL)
#define DEVDRV_MAX_REG_DDR_READ_SIZE (5 * 1024 * 1024)
#endif
#define DEVDRV_LOG_DUMP_TYPE_MAX 64
#define DEVDRV_MAILBOX_PAYLOAD 64
#define DMS_SDK_EX_VERSION_LEN_MAX 128
struct devdrv_mailbox_user_message {
u8 message_payload[DEVDRV_MAILBOX_PAYLOAD];
int message_length;
int feedback_num;
u8 *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);
u8 *buffer;
int feedback_num;
int process_result;
};
struct devdrv_user_parameter {
u32 devid;
u32 cq_slot_size;
u16 disable_wakelock;
};
struct devdrv_pci_info {
u32 dev_id;
u8 bus_number;
u8 dev_number;
u8 function_number;
};
struct devdrv_svm_to_devid {
u32 src_devid;
u32 dest_devid;
unsigned long src_addr;
unsigned long dest_addr;
};
struct devdrv_channel_info_devid {
char name[DEVDRV_IPC_NAME_SIZE];
u32 handle;
u32 event_id;
u32 src_devid;
u32 dest_devid;
u32 status;
u64 timestamp;
};
#define DEVDRV_SHRID_OP_CONFIG (1 << 0)
#define DEVDRV_SHRID_OP_DECONFIG (1 << 1)
struct devdrv_notify_ioctl_info {
u32 dev_id;
u32 tsid;
u32 notify_id;
u32 id_type;
u64 dev_addr;
u64 host_addr;
char name[DEVDRV_IPC_NAME_SIZE];
pid_t pid[DEVDRV_PID_MAX_NUM];
u32 flag;
u32 enableFlag;
u32 open_devid;
};
struct devdrv_hardware_spec {
u32 devid;
u32 ai_core_num;
u32 first_ai_core_id;
u32 ai_cpu_num;
u32 first_ai_cpu_id;
u8 ai_core_num_level;
u8 ai_core_freq_level;
};
struct devdrv_hardware_inuse {
u32 devid;
u32 ai_core_num;
u32 ai_core_error_bitmap;
u32 ai_cpu_num;
u32 ai_cpu_error_bitmap;
};
struct devdrv_board_info {
u32 dev_id;
u32 board_id;
u32 pcb_id;
u32 bom_id;
u32 slot_id;
};
struct devdrv_manager_devids {
unsigned int num_dev;
unsigned int devids[DEVDRV_MAX_DAVINCI_NUM];
};
#define DEVDRV_COMPUTING_VALUE_ERROR 0xFFFFFFFFFFFFFFFEull
#define DEVDRV_COMPUTING_VALUE_INVALID 0xFFFFFFFFFFFFFFFFull
#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 {
u32 devid;
u32 vdev_num;
struct devdrv_vdev_spec_info spec[VDAVINCI_MAX_VFID_NUM];
u32 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 {
u32 devid;
u32 vdevid;
};
struct vdev_info_st {
u32 status;
u32 id;
u32 vfid;
u64 cid;
struct devdrv_vdev_spec_info spec;
};
struct devdrv_vdev_info {
u32 devid;
u32 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_GET_VDEV_TOPS_PERCENTAGE = 4,
DEV_VMNG_SUB_CMD_GET_VDEV_ACTIVITY,
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 {
u32 devid;
u32 type;
u32 buf_size;
char buf[DEVDRV_SVM_VDEV_LEN];
};
struct devdrv_sysrdy_info {
u32 probe_dev_num;
u32 rdy_dev_num;
};
struct devdrv_black_box_devids {
u32 dev_num;
u32 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 {
u32 state;
u32 devId;
};
struct devdrv_black_box_user {
u32 devid;
u32 size;
union {
u64 addr_offset;
u64 phy_addr;
};
void *dst_buffer;
u32 thread_should_stop;
u32 exception_code;
u64 tv_sec;
u64 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 {
u32 devid;
u32 ai_core_error_bitmap;
u8 lpm3_start_fail;
u8 lpm3_lost_heart_beat;
u8 ts_start_fail;
u8 ts_lost_heart_beat;
u8 ts_sram_broken;
u8 ts_sdma_broken;
u8 ts_bs_broken;
u8 ts_l2_buf0_broken;
u8 ts_l2_buf1_broken;
u8 ts_spcie_broken;
u8 ts_ai_core_broken;
u8 ts_hwts_broken;
u8 ts_doorbell_broken;
};
struct devdrv_pcie_pre_reset {
u32 dev_id;
};
struct devdrv_pcie_rescan {
u32 dev_id;
};
struct devdrv_pcie_hot_reset {
u32 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;
u32 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 {
u32 host_dev_id;
u32 local_dev_id;
};
struct devdrv_phy_get_devinfo_para {
u32 phy_id;
u32 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(u32))
#define DEVDRV_MAX_INFO_ORDER ((u32)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;
};
struct devdrv_dev_info {
unsigned int info_type;
unsigned int data1;
int data2;
unsigned int data3;
};
#define RESULT_SIZE 4
struct tsensor_ioctl_arg {
u32 dev_id;
u32 coreid;
u32 result_size;
u32 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 {
u32 flag;
u32 a;
u32 b;
u32 c;
u32 a1;
u32 b1;
u32 c1;
};
struct devdrv_dfx_para {
u32 devid;
u32 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;
u32 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)
#define VDAVINCI_GET_PFID(x) (VDAVINCI_VDEV_OFFSET_SUB(x) / VDAVINCI_MAX_VFID_NUM)
struct devdrv_container_alloc_para {
u32 is_in_container;
u32 num;
u32 phy_dev_num;
u32 npu_id[DEVDRV_MAX_DAVINCI_NUM];
u32 vdev_id[DEVDRV_MAX_DAVINCI_NUM];
u32 phy_dev_id[DEVDRV_MAX_DAVINCI_NUM];
};
struct devdrv_container_tflop_config {
u32 tflop_mode;
u32 total_tflop;
u32 alloc_unit;
u32 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 {
u32 dev_id;
int cmd;
int cfg_index;
u32 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;
u8 thread_should_exit;
u32 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 {
u32 version;
u32 cmd;
u32 result;
u32 reserved;
u64 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;
#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;
u32 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];
};
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 {
u32 devid;
u32 owner_type;
u32 owner_id;
u32 resource_type;
u32 tsid;
u32 buf_len;
char buf[DEVDRV_MAX_PAYLOAD_LEN];
};
#define DEVDRV_MAX_CHIP_NUM 64
#define DEVDRV_RANDOM_SIZE 24
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 {
u32 dev_id;
u32 vf_num;
u32 vf_list[VDAVINCI_MAX_VFID_NUM];
};
#define MAX_CHIP_NAME 32
typedef struct devdrv_chip_info {
u8 type[MAX_CHIP_NAME];
u8 name[MAX_CHIP_NAME];
u8 version[MAX_CHIP_NAME];
} devdrv_chip_info_t;
typedef struct devdrv_query_chip_info {
u32 dev_id;
u32 reg_val;
devdrv_chip_info_t info;
unsigned char resv[8];
} devdrv_query_chip_info_t;
struct devdrv_sign_verification_info {
unsigned int dev_id;
unsigned char sign_buf;
};
#endif