summaryrefslogtreecommitdiff
path: root/original-kernel-headers/linux/msm_thermal_ioctl.h
blob: 6797d39f9265a63543be8dd298d96ac89da178fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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