1#ifndef _MSM_THERMAL_IOCTL_H 2#define _MSM_THERMAL_IOCTL_H 3 4#include <linux/ioctl.h> 5 6#define MSM_THERMAL_IOCTL_NAME "msm_thermal_query" 7#define MSM_IOCTL_FREQ_SIZE 16 8 9struct __attribute__((__packed__)) cpu_freq_arg { 10 uint32_t cpu_num; 11 uint32_t freq_req; 12}; 13 14struct __attribute__((__packed__)) clock_plan_arg { 15 uint32_t cluster_num; 16 /* 17 ** A value of zero for freq_table_len, will fetch the length of the 18 ** cluster frequency table. A non-zero value will fetch the frequency 19 ** table contents. 20 */ 21 uint32_t freq_table_len; 22 /* 23 ** For clusters with frequency table length greater than 24 ** MSM_IOCTL_FREQ_SIZE, the frequency table is fetched from kernel 25 ** in multiple sets or iterations. The set_idx variable, 26 ** indicates, which set/part of frequency table the user is requesting. 27 ** The set index value starts from zero. A set index value of 'Z', 28 ** will fetch MSM_IOCTL_FREQ_SIZE or maximum available number of 29 ** frequency values (if it is less than MSM_IOCTL_FREQ_SIZE) 30 ** from the frequency table, starting from the index 31 ** (Z * MSM_IOCTL_FREQ_SIZE). 32 ** For example, in a device supporting 19 different frequencies, a set 33 ** index value of 0 will fetch the first 16 (MSM_IOCTL_FREQ_SIZE) 34 ** frequencies starting from the index 0 and a set value of 1 will fetch 35 ** the remaining 3 frequencies starting from the index 16. 36 ** A successful get, will populate the freq_table_len with the 37 ** number of frequency table entries fetched. 38 */ 39 uint32_t set_idx; 40 unsigned int freq_table[MSM_IOCTL_FREQ_SIZE]; 41}; 42 43struct __attribute__((__packed__)) voltage_plan_arg { 44 uint32_t cluster_num; 45 uint32_t voltage_table_len; 46 uint32_t set_idx; 47 uint32_t voltage_table[MSM_IOCTL_FREQ_SIZE]; 48}; 49 50struct __attribute__((__packed__)) msm_thermal_ioctl { 51 uint32_t size; 52 union { 53 struct cpu_freq_arg cpu_freq; 54 struct clock_plan_arg clock_freq; 55 struct voltage_plan_arg voltage; 56 }; 57}; 58 59enum { 60 /*Set CPU Frequency*/ 61 MSM_SET_CPU_MAX_FREQ = 0x00, 62 MSM_SET_CPU_MIN_FREQ = 0x01, 63 /*Set cluster frequency*/ 64 MSM_SET_CLUSTER_MAX_FREQ = 0x02, 65 MSM_SET_CLUSTER_MIN_FREQ = 0x03, 66 /*Get cluster frequency plan*/ 67 MSM_GET_CLUSTER_FREQ_PLAN = 0x04, 68 /*Get cluster voltage plan */ 69 MSM_GET_CLUSTER_VOLTAGE_PLAN = 0x05, 70 MSM_CMD_MAX_NR, 71}; 72 73#define MSM_THERMAL_MAGIC_NUM 0xCA /*Unique magic number*/ 74 75#define MSM_THERMAL_SET_CPU_MAX_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ 76 MSM_SET_CPU_MAX_FREQ, struct msm_thermal_ioctl) 77 78#define MSM_THERMAL_SET_CPU_MIN_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ 79 MSM_SET_CPU_MIN_FREQ, struct msm_thermal_ioctl) 80 81#define MSM_THERMAL_SET_CLUSTER_MAX_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ 82 MSM_SET_CLUSTER_MAX_FREQ, struct msm_thermal_ioctl) 83 84#define MSM_THERMAL_SET_CLUSTER_MIN_FREQUENCY _IOW(MSM_THERMAL_MAGIC_NUM,\ 85 MSM_SET_CLUSTER_MIN_FREQ, struct msm_thermal_ioctl) 86 87#define MSM_THERMAL_GET_CLUSTER_FREQUENCY_PLAN _IOR(MSM_THERMAL_MAGIC_NUM,\ 88 MSM_GET_CLUSTER_FREQ_PLAN, struct msm_thermal_ioctl) 89 90#define MSM_THERMAL_GET_CLUSTER_VOLTAGE_PLAN _IOR(MSM_THERMAL_MAGIC_NUM,\ 91 MSM_GET_CLUSTER_VOLTAGE_PLAN, struct msm_thermal_ioctl) 92#ifdef __KERNEL__ 93extern int msm_thermal_ioctl_init(void); 94extern void msm_thermal_ioctl_cleanup(void); 95#endif 96 97#endif 98