| #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 |