diff options
Diffstat (limited to 'original-kernel-headers/linux/msm_thermal_ioctl.h')
-rw-r--r-- | original-kernel-headers/linux/msm_thermal_ioctl.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/original-kernel-headers/linux/msm_thermal_ioctl.h b/original-kernel-headers/linux/msm_thermal_ioctl.h new file mode 100644 index 0000000..6797d39 --- /dev/null +++ b/original-kernel-headers/linux/msm_thermal_ioctl.h @@ -0,0 +1,97 @@ +#ifndef _MSM_THERMAL_IOCTL_H +#define _MSM_THERMAL_IOCTL_H + +#include <linux/ioctl.h> + +#define MSM_THERMAL_IOCTL_NAME "msm_thermal_query" +#define MSM_IOCTL_FREQ_SIZE 16 + +struct __attribute__((__packed__)) cpu_freq_arg { + uint32_t cpu_num; + uint32_t freq_req; +}; + +struct __attribute__((__packed__)) clock_plan_arg { + uint32_t cluster_num; + /* + ** A value of zero for freq_table_len, will fetch the length of the + ** cluster frequency table. A non-zero value will fetch the frequency + ** table contents. + */ + uint32_t freq_table_len; + /* + ** For clusters with frequency table length greater than + ** MSM_IOCTL_FREQ_SIZE, the frequency table is fetched from kernel + ** in multiple sets or iterations. The set_idx variable, + ** indicates, which set/part of frequency table the user is requesting. + ** The set index value starts from zero. A set index value of 'Z', + ** will fetch MSM_IOCTL_FREQ_SIZE or maximum available number of + ** frequency values (if it is less than MSM_IOCTL_FREQ_SIZE) + ** from the frequency table, starting from the index + ** (Z * MSM_IOCTL_FREQ_SIZE). + ** For example, in a device supporting 19 different frequencies, a set + ** index value of 0 will fetch the first 16 (MSM_IOCTL_FREQ_SIZE) + ** frequencies starting from the index 0 and a set value of 1 will fetch + ** the remaining 3 frequencies starting from the index 16. + ** A successful get, will populate the freq_table_len with the + ** number of frequency table entries fetched. + */ + uint32_t set_idx; + unsigned int freq_table[MSM_IOCTL_FREQ_SIZE]; +}; + +struct __attribute__((__packed__)) voltage_plan_arg { + uint32_t cluster_num; + uint32_t voltage_table_len; + uint32_t set_idx; + uint32_t voltage_table[MSM_IOCTL_FREQ_SIZE]; +}; + +struct __attribute__((__packed__)) msm_thermal_ioctl { + uint32_t size; + union { + struct cpu_freq_arg cpu_freq; + struct clock_plan_arg clock_freq; + struct voltage_plan_arg voltage; + }; +}; + +enum { + /*Set CPU Frequency*/ + MSM_SET_CPU_MAX_FREQ = 0x00, + MSM_SET_CPU_MIN_FREQ = 0x01, + /*Set cluster frequency*/ + MSM_SET_CLUSTER_MAX_FREQ = 0x02, + MSM_SET_CLUSTER_MIN_FREQ = 0x03, + /*Get cluster frequency plan*/ + MSM_GET_CLUSTER_FREQ_PLAN = 0x04, + /*Get cluster voltage plan */ + MSM_GET_CLUSTER_VOLTAGE_PLAN = 0x05, + MSM_CMD_MAX_NR, +}; + +#define MSM_THERMAL_MAGIC_NUM 0xCA /*Unique magic number*/ + +#define MSM_THERMAL_SET_CPU_MAX_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ + MSM_SET_CPU_MAX_FREQ, struct msm_thermal_ioctl) + +#define MSM_THERMAL_SET_CPU_MIN_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ + MSM_SET_CPU_MIN_FREQ, struct msm_thermal_ioctl) + +#define MSM_THERMAL_SET_CLUSTER_MAX_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ + MSM_SET_CLUSTER_MAX_FREQ, struct msm_thermal_ioctl) + +#define MSM_THERMAL_SET_CLUSTER_MIN_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ + MSM_SET_CLUSTER_MIN_FREQ, struct msm_thermal_ioctl) + +#define MSM_THERMAL_GET_CLUSTER_FREQUENCY_PLAN _IOR(MSM_THERMAL_MAGIC_NUM,\ + MSM_GET_CLUSTER_FREQ_PLAN, struct msm_thermal_ioctl) + +#define MSM_THERMAL_GET_CLUSTER_VOLTAGE_PLAN _IOR(MSM_THERMAL_MAGIC_NUM,\ + MSM_GET_CLUSTER_VOLTAGE_PLAN, struct msm_thermal_ioctl) +#ifdef __KERNEL__ +extern int msm_thermal_ioctl_init(void); +extern void msm_thermal_ioctl_cleanup(void); +#endif + +#endif |