1
0
mirror of https://github.com/physwizz/a155-U-u1.git synced 2025-09-26 19:04:54 +00:00
Files
physwizz 99537be4e2 first
2024-03-11 06:53:12 +11:00

288 lines
4.6 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2021 MediaTek Inc.
*/
#ifndef __MTK_APU_IOCTL_H__
#define __MTK_APU_IOCTL_H__
#include <linux/ioctl.h>
#include <linux/types.h>
#define APUSYS_MAGICNO 'A'
enum mdw_hs_ioctl_op {
MDW_HS_IOCTL_OP_BASIC,
MDW_HS_IOCTL_OP_DEV,
MDW_HS_IOCTL_OP_MEM,
};
struct mdw_hs_in {
uint32_t op; //enum mdw_hs_ioctl_op
uint64_t flags;
union {
struct {
uint32_t type;
} dev;
struct {
uint32_t type;
} mem;
};
};
#define MDW_DEV_META_SIZE (32)
struct mdw_hs_out {
union {
struct {
uint64_t version;
uint64_t dev_bitmask;
uint64_t mem_bitmask;
uint64_t flags;
uint32_t meta_size;
uint32_t reserved;
} basic;
struct {
uint32_t type;
uint32_t num;
char meta[MDW_DEV_META_SIZE];
} dev;
struct {
uint32_t type;
uint32_t reserved;
uint64_t start;
uint32_t size;
} mem;
};
};
union mdw_hs_args {
struct mdw_hs_in in;
struct mdw_hs_out out;
};
#define APU_MDW_IOCTL_HANDSHAKE \
_IOWR(APUSYS_MAGICNO, 32, union mdw_hs_args)
enum mdw_mem_ioctl_op {
MDW_MEM_IOCTL_ALLOC,
MDW_MEM_IOCTL_FREE,
MDW_MEM_IOCTL_MAP,
MDW_MEM_IOCTL_UNMAP,
MDW_MEM_IOCTL_FLUSH,
MDW_MEM_IOCTL_INVALIDATE,
};
enum mdw_mem_flag {
MDW_MEM_FLAG_CACHEABLE = 0,
MDW_MEM_FLAG_32BIT = 1,
MDW_MEM_FLAG_HIGHADDR = 2,
};
#define F_MDW_MEM_CACHEABLE (1ULL << MDW_MEM_FLAG_CACHEABLE)
#define F_MDW_MEM_32BIT (1ULL << MDW_MEM_FLAG_32BIT)
#define F_MDW_MEM_HIGHADDR (1ULL << MDW_MEM_FLAG_HIGHADDR)
enum mdw_mem_type {
MDW_MEM_TYPE_MAIN,
MDW_MEM_TYPE_VLM,
MDW_MEM_TYPE_LOCAL,
MDW_MEM_TYPE_SYSTEM,
MDW_MEM_TYPE_SYSTEM_ISP,
MDW_MEM_TYPE_SYSTEM_APU,
MDW_MEM_TYPE_MAX,
};
struct mdw_mem_in {
uint32_t op; //enum mdw_mem_ioctl_op
uint64_t flags;
union {
/* alloc */
struct {
uint32_t type; //enum mdw_mem_type
uint32_t size;
uint32_t align;
uint64_t flags;
} alloc;
struct {
uint64_t handle;
} free;
/* map */
struct {
uint64_t handle;
uint32_t size;
} map;
struct {
uint64_t handle;
} unmap;
/* cache operation */
struct {
uint64_t handle;
uint32_t offset;
uint32_t size;
} flush;
struct {
uint64_t handle;
uint32_t offset;
uint32_t size;
} invalidate;
};
};
struct mdw_mem_out {
union {
struct {
uint64_t handle;
} alloc;
struct {
uint32_t type;
uint64_t device_va;
} map;
struct {
uint64_t device_va;
uint32_t size;
} import;
};
};
union mdw_mem_args {
struct mdw_mem_in in;
struct mdw_mem_out out;
};
#define APU_MDW_IOCTL_MEM \
_IOWR(APUSYS_MAGICNO, 33, union mdw_mem_args)
enum mdw_cmd_ioctl_op {
MDW_CMD_IOCTL_RUN,
};
enum {
/* cmdbuf copy in before execution and copy out after exection */
MDW_CB_BIDIRECTIONAL,
/* cmdbuf copy in before execution */
MDW_CB_IN,
/* cmdbuf copy out after execution */
MDW_CB_OUT,
};
struct mdw_subcmd_exec_info {
uint32_t driver_time;
uint32_t ip_time;
uint32_t ip_start_ts;
uint32_t ip_end_ts;
uint32_t bw;
uint32_t boost;
uint32_t tcm_usage;
int32_t ret;
};
struct mdw_cmd_exec_info {
uint64_t sc_rets;
int64_t ret;
uint64_t total_us;
uint64_t reserved;
};
struct mdw_subcmd_cmdbuf {
uint64_t handle;
uint32_t size;
uint32_t align;
uint32_t direction;
};
struct mdw_subcmd_info {
uint32_t type;
uint32_t suggest_time;
uint32_t vlm_usage;
uint32_t vlm_ctx_id;
uint32_t vlm_force;
uint32_t boost;
uint32_t turbo_boost;
uint32_t min_boost;
uint32_t max_boost;
uint32_t hse_en;
uint32_t pack_id;
uint32_t driver_time;
uint32_t ip_time;
uint32_t bw;
/* cmdbufs */
uint32_t num_cmdbufs;
uint64_t cmdbufs;
};
struct mdw_cmd_in {
uint32_t op; //enum mdw_cmd_ioctl_op
union {
struct {
uint64_t usr_id;
uint64_t uid;
uint32_t priority;
uint32_t hardlimit;
uint32_t softlimit;
uint32_t power_save;
uint32_t power_plcy;
uint32_t power_dtime;
uint32_t app_type;
uint32_t flags;
uint32_t num_subcmds;
uint64_t subcmd_infos;
uint64_t adj_matrix;
uint64_t fence;
uint64_t exec_infos;
} exec;
};
};
struct mdw_cmd_out {
union {
struct {
uint64_t id;
uint64_t fence;
} exec;
};
};
union mdw_cmd_args {
struct mdw_cmd_in in;
struct mdw_cmd_out out;
};
#define APU_MDW_IOCTL_CMD \
_IOWR(APUSYS_MAGICNO, 34, union mdw_cmd_args)
enum mdw_util_ioctl_op {
MDW_UTIL_IOCTL_SETPOWER,
MDW_UTIL_IOCTL_UCMD,
};
struct mdw_util_in {
uint32_t op; //enum mdw_util_ioctl_op
union {
struct {
uint32_t dev_type;
uint32_t core_idx;
uint32_t boost;
uint64_t reserve;
} power;
struct {
uint32_t dev_type;
uint32_t size;
uint64_t handle;
} ucmd;
};
};
union mdw_util_args {
struct mdw_util_in in;
};
#define APU_MDW_IOCTL_UTIL \
_IOWR(APUSYS_MAGICNO, 35, union mdw_util_args)
#endif