You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.1 KiB
97 lines
3.1 KiB
#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
|
|
|