kernel-brax3-ubuntu-touch/drivers/misc/mediatek/trusted_mem/private/tmem_device.h
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

193 lines
4.9 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2019 MediaTek Inc.
*/
#ifndef TMEM_DEVICE_H
#define TMEM_DEVICE_H
#include <linux/mutex.h>
#include <linux/workqueue.h>
#define SSMR_FEAT_INVALID_ID (0xFFFFFFFF)
#ifdef TCORE_PROFILING_SUPPORT
enum PROFILE_ENTRY_TYPE {
PROFILE_ENTRY_SSMR_GET = 0,
PROFILE_ENTRY_SSMR_PUT = 1,
PROFILE_ENTRY_CHUNK_ALLOC = 2,
PROFILE_ENTRY_CHUNK_FREE = 3,
PROFILE_ENTRY_MEM_ADD = 4,
PROFILE_ENTRY_MEM_REMOVE = 5,
PROFILE_ENTRY_SESSION_OPEN = 6,
PROFILE_ENTRY_SESSION_CLOSE = 7,
PROFILE_ENTRY_INVOKE_COMMAND = 8,
PROFILE_ENTRY_MAX = 9,
};
struct profile_data_item {
u64 count;
u64 sec;
u64 nsec;
struct mutex lock;
};
struct profile_data_context {
struct profile_data_item item[PROFILE_ENTRY_MAX];
};
#endif
enum TRUSTED_MEM_TYPE {
TRUSTED_MEM_START = 0,
TRUSTED_MEM_SVP_REGION = TRUSTED_MEM_START,
TRUSTED_MEM_PROT_REGION = 1,
TRUSTED_MEM_WFD_REGION = 2,
TRUSTED_MEM_HAPP = 3,
TRUSTED_MEM_HAPP_EXTRA = 4,
TRUSTED_MEM_SDSP = 5,
TRUSTED_MEM_SDSP_SHARED = 6,
TRUSTED_MEM_2D_FR = 7,
TRUSTED_MEM_TUI_REGION = 8,
TRUSTED_MEM_SVP_PAGE = 9,
TRUSTED_MEM_PROT_PAGE = 10,
TRUSTED_MEM_WFD_PAGE = 11,
TRUSTED_MEM_SAPU_DATA_SHM = 12,
TRUSTED_MEM_SAPU_ENGINE_SHM = 13,
TRUSTED_MEM_AP_MD_SHM = 14,
TRUSTED_MEM_AP_SCP_SHM = 15,
TRUSTED_MEM_MAX = 16,
TRUSTED_MEM_INVALID = 0xFFFFFFFF
};
enum REGMGR_REGION_STATE {
REGMGR_REGION_STATE_OFF = 0,
REGMGR_REGION_STATE_ON = 1
};
struct trusted_peer_session {
u64 mem_pa_start;
u32 mem_size;
u32 mem_size_runtime;
u64 ref_chunks; /* chunks that are not freed yet! */
bool opened;
struct mutex lock;
void *peer_data;
};
struct trusted_driver_cmd_params {
u32 cmd;
u64 param0;
u64 param1;
u64 param2;
u64 param3;
};
struct trusted_driver_operations {
int (*session_open)(void **peer_data, void *dev_desc);
int (*session_close)(void *peer_data, void *dev_desc);
int (*memory_alloc)(u32 alignment, u32 size, u32 *refcount,
u64 *sec_handle, u8 *owner, u32 id, u32 clean,
void *peer_data, void *dev_desc);
int (*memory_free)(u64 sec_handle, u8 *owner, u32 id, void *peer_data,
void *priv);
int (*memory_grant)(u64 pa, u32 size, void *peer_data, void *dev_desc);
int (*memory_reclaim)(void *peer_data, void *dev_desc);
int (*invoke_cmd)(struct trusted_driver_cmd_params *invoke_params,
void *peer_data, void *dev_desc);
};
struct ssmr_operations {
int (*offline)(u64 *pa, u32 *size, u32 feat, void *dev_desc);
int (*online)(u32 feat, void *dev_desc);
};
struct peer_mgr_desc {
int (*mgr_sess_open)(struct trusted_driver_operations *drv_ops,
struct trusted_peer_session *sess_data,
void *dev_desc);
int (*mgr_sess_close)(bool keep_alive,
struct trusted_driver_operations *drv_ops,
struct trusted_peer_session *sess_data,
void *dev_desc);
int (*mgr_sess_mem_alloc)(u32 alignment, u32 size, u32 *refcount,
u64 *sec_handle, u8 *owner, u32 id, u32 clean,
struct trusted_driver_operations *drv_ops,
struct trusted_peer_session *sess_data,
void *dev_desc);
int (*mgr_sess_mem_free)(u64 sec_handle, u8 *owner, u32 id,
struct trusted_driver_operations *drv_ops,
struct trusted_peer_session *sess_data,
void *dev_desc);
int (*mgr_sess_mem_add)(u64 pa, u32 size,
struct trusted_driver_operations *drv_ops,
struct trusted_peer_session *sess_data,
void *dev_desc);
int (*mgr_sess_mem_remove)(struct trusted_driver_operations *drv_ops,
struct trusted_peer_session *sess_data,
void *dev_desc);
int (*mgr_sess_invoke_cmd)(
struct trusted_driver_cmd_params *invoke_params,
struct trusted_driver_operations *drv_ops,
struct trusted_peer_session *sess_data, void *dev_desc);
struct trusted_peer_session peer_mgr_data;
};
struct region_mgr_work_data {
};
struct region_mgr_desc {
struct workqueue_struct *defer_off_wq;
struct delayed_work defer_off_work;
struct mutex lock;
u64 online_acc_count;
u32 valid_ref_count;
u32 defer_off_delay_ms;
enum REGMGR_REGION_STATE state;
void *mem_device;
enum TRUSTED_MEM_TYPE active_mem_type;
};
#define MAX_DEVICE_NAME_LEN (32)
struct trusted_mem_configs {
u32 caps;
u32 minimal_chunk_size;
u32 phys_mem_shift_bits;
u32 phys_limit_min_alloc_size;
bool session_keep_alive_enable;
bool min_size_check_enable;
bool alignment_check_enable;
};
#ifdef TCORE_PROFILING_SUPPORT
struct profile_mgr_desc {
struct profile_data_context data;
struct ssmr_operations *profiled_ssmr_ops;
struct trusted_driver_operations *profiled_peer_ops;
void *profiled_dev_desc;
};
#endif
struct trusted_mem_device {
struct ssmr_operations *ssmr_ops;
struct trusted_driver_operations *peer_ops;
void *dev_desc;
struct peer_mgr_desc *peer_mgr;
struct region_mgr_desc *reg_mgr;
char name[MAX_DEVICE_NAME_LEN];
enum TRUSTED_MEM_TYPE mem_type;
u32 ssmr_feature_id;
bool is_device_busy;
struct trusted_mem_configs configs;
#ifdef TCORE_PROFILING_SUPPORT
struct profile_mgr_desc *profile_mgr;
#endif
};
#endif /* end of TMEM_DEVICE_H */