Files
calculet-npu-research-archive/source/driver-source/source/cal-pcie-0.9.0/ioctl.h
T

207 lines
7.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// SPDX-License-Identifier: GPL-2.0
/**
* Copyright (c) 2024-2025 CALCULET Technologies Ltd. All rights reserved.
*/
#ifndef _CALCULET_IOCTL_H_
#define _CALCULET_IOCTL_H_
#define CALCULET_DRV_VER_MAJOR 1
#define CALCULET_DRV_VER_MINOR 0
#define CALCULET_DRV_VER_REVISION 0
#define _STRINGIFY_EXPANDED( x ) #x
#define _STRINGIFY_NUMBER( x ) _STRINGIFY_EXPANDED(x)
#define CALCULET_DRV_VER _STRINGIFY_NUMBER(CALCULET_DRV_VER_MAJOR) "." _STRINGIFY_NUMBER(CALCULET_DRV_VER_MINOR) "." _STRINGIFY_NUMBER(CALCULET_DRV_VER_REVISION)
#define CALCULET_READ_CHANNELS 8
#define CALCULET_WRITE_CHANNELS 8
#define CALCULET_TOTAL_CHANNELS (CALCULET_READ_CHANNELS + CALCULET_WRITE_CHANNELS)
#define CALCULET_MAX_CHANNELS 32
#define KS1_MAX_DEVICES 64 // 最大支持的KS1设备数量
#define KS1_MAX_PATH_LEN 512 // 设备路径最大长度
#define KS1_MAX_STRING_LEN 256 // 一般字符串最大长度
#define KS1_MAX_UUID_LEN 64 // UUID字符串最大长度
#define KS1_MAX_CHIPS 16 // 最大Chip数量
#define MAX_PROCESS_ENTRIES 100 // 最大进程数
#ifdef __linux__
#ifndef __KERNEL__
#include <stdint.h>
#include <sys/types.h>
#else
#include <linux/types.h>
#include <linux/limits.h>
#include <linux/kernel.h>
#endif
#include <linux/ioctl.h>
#define _IOW_ _IOW
#define _IOR_ _IOR
#define _IOWR_ _IOWR
#define _IO_ _IO
#define CALCULET_GENERAL_IOCTL_MAGIC 'g'
#define CALCULET_DMA_IOCTL_MAGIC 'd'
#define CALCULET_SOC_IOCTL_MAGIC 's'
#define CALCULET_NNC_IOCTL_MAGIC 'n'
#define CALCULET_PCI_EP_IOCTL_MAGIC 'p'
#define CALCULET_PROC_IOCTL_MAGIC 'r'
#else
#error "unsupported platform!"
#endif
#pragma pack(push, 1)
// 传输方向枚举
enum calculet_transfer_direction {
TRANSFER_C2H_DIRECTION = 0, //device->host
TRANSFER_H2C_DIRECTION, //host->device
TRANSFER_MAX_ENUM = INT_MAX,
};
// BAR类型枚举
enum calculet_bar_type {
CALCULET_PCIE_BAR2 = 2,
CALCULET_PCIE_BAR4 = 4,
};
// BAR64传输参数
struct calculet_bar64_transfer_params {
enum calculet_transfer_direction transfer_direction; //传输方向
enum calculet_bar_type bar_type; //访问bar类型(2或4
uint64_t bar_offset; //基于bar的地址偏移
uint64_t bar_data; //读或写bar的值
};
// BAR32传输参数
struct calculet_bar32_transfer_params {
enum calculet_transfer_direction transfer_direction; //传输方向
enum calculet_bar_type bar_type; //访问bar类型(2或4
uint64_t bar_offset; //基于bar的地址偏移
uint32_t bar_data; //读或写bar的值
};
// DMA传输通道参数
struct calculet_dma_transfer_channels_params {
enum calculet_transfer_direction dma_transfer_direction; //传输方向
int dma_channel_id; //dma通道index0~7
size_t dma_channel_size; //dma传输一包数据大小(字节)
uint8_t *host_address; //应用层读或写buffer虚拟地址
uint64_t device_address; //要访问device的绝对地址
};
// 进程信息结构体
struct calculet_process_info_user {
int32_t pid; // 进程ID
int32_t ppid; // 父进程ID
uint32_t uid; // 用户ID
char comm[16]; // 进程名称(TASK_COMM_LEN
uint8_t is_active; // 是否活跃
uint8_t reserved[3]; // 对齐保留字段
};
// 进程信息列表结构体
struct calculet_process_info_list_user {
int32_t count; // 进程数量
int32_t board_index; // 板卡索引
struct calculet_process_info_user processes[MAX_PROCESS_ENTRIES];
};
struct calculet_ioc_info {
// 设备基本识别信息
char product_name[KS1_MAX_STRING_LEN]; // 产品名称
char serial_number[KS1_MAX_STRING_LEN]; // 序列号
char product_number[KS1_MAX_STRING_LEN]; // PN号
char calculet_uuid[KS1_MAX_UUID_LEN]; // calculet唯一标识符
// 设备硬件信息
uint16_t device_id; // 设备ID
uint16_t vendor_id; // 厂商ID
uint16_t subsystem_device; // 子系统ID
uint16_t subsystem_vendor; // 子系统厂商ID
// PCI信息
struct {
uint8_t domain; // PCI域
uint8_t bus; // PCI总线
uint8_t device; // PCI设备
uint8_t function; // PCI功能
uint8_t link_speed; // PCI速率
uint8_t link_width; // PCI位宽
} pci_info;
// 版本信息
struct {
uint32_t major; // 驱动主版本号
uint32_t minor; // 驱动次版本号
char string[KS1_MAX_STRING_LEN]; // 版本字符串
} driver_version;
char firmware_version[12]; // 固件版本
// 硬件规格(固定参数)
uint64_t total_memory; // 总显存大小 (0x004C, 8字节)
double memory_bandwidth; // 显存带宽 (0x0054)
uint32_t ddr_frequency; // DDR频率 (0x005C)
uint32_t max_power_limit; // KS1 TDP上限 (0x0060)
uint32_t temp_limit_ks1; // KS1温度上限 (0x0064)
};
struct calculet_msi_req {
uint32_t msi_req; // 自定义msi 请求号(0~15
};
struct calculet_sn_info {
uint32_t chip_id;
char sn[KS1_MAX_STRING_LEN];
};
#pragma pack(pop)
// 通用ioctl代码
enum calculet_general_ioctl_code {
CALCULET_BOARD_INFO_CODE,
CALCULET_BAR64_TRANSFER_CODE,
CALCULET_BAR32_TRANSFER_CODE,
CALCULET_GET_SN_CODE,
CALCULET_GENERAL_IOCTL_MAX_NR,
};
// DMA ioctl代码
enum calculet_dma_ioctl_code {
CALCULET_BLOCK_DMA_TRANSFER_CODE,
CALCULET_DMA_INTERRUPT_POLL_CODE,
CALCULET_EP_MSI_REQ_CODE,
CALCULET_SOFT_RESET_CODE,
CALCULET_DMA_IOCTL_MAX_NR,
};
// 进程信息ioctl代码
enum calculet_proc_ioctl_code {
CALCULET_GET_PROCESS_LIST_CODE,
CALCULET_PROC_IOCTL_MAX_NR,
};
// ioctl定义
// 获取calculet_ioc_info结构体所有参数
#define CALCULET_BOARD_INFO _IOWR_(CALCULET_GENERAL_IOCTL_MAGIC, CALCULET_BOARD_INFO_CODE, struct calculet_ioc_info)
// 64bit访问bar
#define CALCULET_BAR64_TRANSFER _IOWR_(CALCULET_GENERAL_IOCTL_MAGIC, CALCULET_BAR64_TRANSFER_CODE, struct calculet_bar64_transfer_params)
// 32bit访问bar
#define CALCULET_BAR32_TRANSFER _IOWR_(CALCULET_GENERAL_IOCTL_MAGIC, CALCULET_BAR32_TRANSFER_CODE, struct calculet_bar32_transfer_params)
// 获取SN信息
#define CALCULET_GET_SN _IOWR_(CALCULET_GENERAL_IOCTL_MAGIC, CALCULET_GET_SN_CODE, struct calculet_sn_info)
// dma传输
#define CALCULET_BLOCK_DMA_TRANSFER _IOWR_(CALCULET_DMA_IOCTL_MAGIC, CALCULET_BLOCK_DMA_TRANSFER_CODE, struct calculet_dma_transfer_channels_params)
// 轮询中断
#define CALCULET_INTERRUPT_POLL _IO_(CALCULET_DMA_IOCTL_MAGIC, CALCULET_DMA_INTERRUPT_POLL_CODE)
// device主动发起MSI中断(可用于jobq回馈)
#define CALCULET_EP_MSI_REQ _IOW_(CALCULET_PCI_EP_IOCTL_MAGIC, CALCULET_EP_MSI_REQ_CODE, struct calculet_msi_req)
// softreset
#define CALCULET_SOFT_RESET _IO_(CALCULET_PCI_EP_IOCTL_MAGIC, CALCULET_SOFT_RESET_CODE)
// 进程信息
#define CALCULET_GET_PROCESS_LIST _IOWR_(CALCULET_PROC_IOCTL_MAGIC, CALCULET_GET_PROCESS_LIST_CODE, struct calculet_process_info_list_user)
#endif /* _CALCULET_IOCTL_H_ */