/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2021 MediaTek Inc. */ #ifndef __SWPM_MODULE_EXT_H__ #define __SWPM_MODULE_EXT_H__ #include #define MAX_IP_NAME_LENGTH (16) /* swpm extension interface types */ enum swpm_num_type { DDR_DATA_IP, DDR_FREQ, CORE_IP, CORE_VOL, }; /* swpm extension structure */ struct ip_vol_times { int32_t vol; int64_t active_time; int64_t idle_time; int64_t off_time; }; struct ip_stats { char ip_name[MAX_IP_NAME_LENGTH]; struct ip_vol_times *vol_times; }; struct vol_duration { int32_t vol; int64_t duration; }; struct ddr_act_times { int32_t freq; int64_t active_time; }; struct ddr_sr_pd_times { int64_t sr_time; int64_t pd_time; }; struct ddr_bc_stats { int32_t freq; uint64_t value; }; struct ddr_ip_bc_stats { char ip_name[MAX_IP_NAME_LENGTH]; struct ddr_bc_stats *bc_stats; }; /* swpm extension internal ops structure */ struct swpm_internal_ops { void (*const cmd)(unsigned int type, unsigned int val); int32_t (*const ddr_act_times_get) (int32_t freq_num, struct ddr_act_times *ddr_times); int32_t (*const ddr_sr_pd_times_get) (struct ddr_sr_pd_times *ddr_times); int32_t (*const ddr_freq_data_ip_stats_get) (int32_t data_ip_num, int32_t freq_num, void *stats); int32_t (*const vcore_ip_vol_stats_get) (int32_t ip_num, int32_t vol_num, void *stats); int32_t (*const vcore_vol_duration_get) (int32_t vol_num, struct vol_duration *duration); int32_t (*const num_get) (enum swpm_num_type type); }; extern int32_t sync_latest_data(void); extern int32_t get_ddr_act_times(int32_t freq_num, struct ddr_act_times *ddr_times); extern int32_t get_ddr_sr_pd_times(struct ddr_sr_pd_times *ddr_times); extern int32_t get_ddr_data_ip_num(void); extern int32_t get_ddr_freq_num(void); extern int32_t get_ddr_freq_data_ip_stats(int32_t data_ip_num, int32_t freq_num, void *stats); extern int32_t get_vcore_ip_num(void); extern int32_t get_vcore_vol_num(void); extern int32_t get_vcore_ip_vol_stats(int32_t ip_num, int32_t vol_num, void *stats); extern int32_t get_vcore_vol_duration(int32_t vol_num, struct vol_duration *duration); extern int mtk_register_swpm_ops(struct swpm_internal_ops *ops); #endif /* __SWPM_MODULE_EXT_H__ */