]>
Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
a3c98b8b MH |
2 | /* |
3 | * governor.h - internal header for devfreq governors. | |
4 | * | |
5 | * Copyright (C) 2011 Samsung Electronics | |
6 | * MyungJoo Ham <myungjoo.ham@samsung.com> | |
7 | * | |
a3c98b8b MH |
8 | * This header is for devfreq governors in drivers/devfreq/ |
9 | */ | |
10 | ||
11 | #ifndef _GOVERNOR_H | |
12 | #define _GOVERNOR_H | |
13 | ||
14 | #include <linux/devfreq.h> | |
15 | ||
96ffcdf2 CC |
16 | #define DEVFREQ_NAME_LEN 16 |
17 | ||
a3c98b8b MH |
18 | #define to_devfreq(DEV) container_of((DEV), struct devfreq, dev) |
19 | ||
7e6fdd4b RV |
20 | /* Devfreq events */ |
21 | #define DEVFREQ_GOV_START 0x1 | |
22 | #define DEVFREQ_GOV_STOP 0x2 | |
3a1ec2e8 | 23 | #define DEVFREQ_GOV_UPDATE_INTERVAL 0x3 |
206c30cf RV |
24 | #define DEVFREQ_GOV_SUSPEND 0x4 |
25 | #define DEVFREQ_GOV_RESUME 0x5 | |
7e6fdd4b | 26 | |
6ff66e2a MK |
27 | #define DEVFREQ_MIN_FREQ 0 |
28 | #define DEVFREQ_MAX_FREQ ULONG_MAX | |
29 | ||
0dd25a0d CC |
30 | /* |
31 | * Definition of the governor feature flags | |
32 | * - DEVFREQ_GOV_FLAG_IMMUTABLE | |
33 | * : This governor is never changeable to other governors. | |
34 | * - DEVFREQ_GOV_FLAG_IRQ_DRIVEN | |
35 | * : The devfreq won't schedule the work for this governor. | |
36 | */ | |
37 | #define DEVFREQ_GOV_FLAG_IMMUTABLE BIT(0) | |
38 | #define DEVFREQ_GOV_FLAG_IRQ_DRIVEN BIT(1) | |
39 | ||
5f1a9066 CC |
40 | /* |
41 | * Definition of governor attribute flags except for common sysfs attributes | |
42 | * - DEVFREQ_GOV_ATTR_POLLING_INTERVAL | |
f40d8123 | 43 | * : Indicate polling_interval sysfs attribute |
5f1a9066 CC |
44 | * - DEVFREQ_GOV_ATTR_TIMER |
45 | * : Indicate timer sysfs attribute | |
46 | */ | |
47 | #define DEVFREQ_GOV_ATTR_POLLING_INTERVAL BIT(0) | |
48 | #define DEVFREQ_GOV_ATTR_TIMER BIT(1) | |
49 | ||
3ea6b700 CC |
50 | /** |
51 | * struct devfreq_governor - Devfreq policy governor | |
52 | * @node: list node - contains registered devfreq governors | |
53 | * @name: Governor's name | |
5f1a9066 | 54 | * @attrs: Governor's sysfs attribute flags |
0dd25a0d | 55 | * @flags: Governor's feature flags |
3ea6b700 CC |
56 | * @get_target_freq: Returns desired operating frequency for the device. |
57 | * Basically, get_target_freq will run | |
58 | * devfreq_dev_profile.get_dev_status() to get the | |
59 | * status of the device (load = busy_time / total_time). | |
3ea6b700 CC |
60 | * @event_handler: Callback for devfreq core framework to notify events |
61 | * to governors. Events include per device governor | |
62 | * init and exit, opp changes out of devfreq, suspend | |
63 | * and resume of per device devfreq during device idle. | |
64 | * | |
65 | * Note that the callbacks are called with devfreq->lock locked by devfreq. | |
66 | */ | |
67 | struct devfreq_governor { | |
68 | struct list_head node; | |
69 | ||
70 | const char name[DEVFREQ_NAME_LEN]; | |
5f1a9066 | 71 | const u64 attrs; |
0dd25a0d | 72 | const u64 flags; |
3ea6b700 CC |
73 | int (*get_target_freq)(struct devfreq *this, unsigned long *freq); |
74 | int (*event_handler)(struct devfreq *devfreq, | |
75 | unsigned int event, void *data); | |
76 | }; | |
77 | ||
6d743493 CC |
78 | void devfreq_monitor_start(struct devfreq *devfreq); |
79 | void devfreq_monitor_stop(struct devfreq *devfreq); | |
80 | void devfreq_monitor_suspend(struct devfreq *devfreq); | |
81 | void devfreq_monitor_resume(struct devfreq *devfreq); | |
3a1ec2e8 | 82 | void devfreq_update_interval(struct devfreq *devfreq, unsigned int *delay); |
3aa173b8 | 83 | |
6d743493 CC |
84 | int devfreq_add_governor(struct devfreq_governor *governor); |
85 | int devfreq_remove_governor(struct devfreq_governor *governor); | |
3aa173b8 | 86 | |
6d743493 | 87 | int devfreq_update_status(struct devfreq *devfreq, unsigned long freq); |
b4365423 | 88 | int devfreq_update_target(struct devfreq *devfreq, unsigned long freq); |
30582c25 | 89 | |
f75b0afa CC |
90 | static inline int devfreq_update_stats(struct devfreq *df) |
91 | { | |
b19e1346 DA |
92 | if (!df->profile->get_dev_status) |
93 | return -EINVAL; | |
94 | ||
f75b0afa CC |
95 | return df->profile->get_dev_status(df->dev.parent, &df->last_status); |
96 | } | |
a3c98b8b | 97 | #endif /* _GOVERNOR_H */ |