blob: e8157f30bba5b5c650a707a70e3e97c72abaa106 (
plain) (
blame)
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
|
/*
*
* (C) COPYRIGHT 2011-2012 ARM Limited. All rights reserved.
*
* This program is free software and is provided to you under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
*
* A copy of the licence is included with the program, and can also be obtained from Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
/**
* @file mali_kbase_pm_demand.h
* A simple demand based power management policy
*/
#ifndef MALI_KBASE_PM_DEMAND_H
#define MALI_KBASE_PM_DEMAND_H
/** The states that the demand policy can enter.
*
* The diagram below should the states that the demand policy can enter and the transitions that can occur between the
* states:
*
* @dot
* digraph demand_states {
* node [fontsize=10];
* edge [fontsize=10];
*
* POWERING_UP [label="STATE_POWERING_UP"
* URL="\ref kbasep_pm_demand_state.KBASEP_PM_DEMAND_STATE_POWERING_UP"];
* POWERING_DOWN [label="STATE_POWERING_DOWN"
* URL="\ref kbasep_pm_demand_state.KBASEP_PM_DEMAND_STATE_POWERING_DOWN"];
* POWERED_UP [label="STATE_POWERED_UP"
* URL="\ref kbasep_pm_demand_state.KBASEP_PM_DEMAND_STATE_POWERED_UP"];
* POWERED_DOWN [label="STATE_POWERED_DOWN"
* URL="\ref kbasep_pm_demand_state.KBASEP_PM_DEMAND_STATE_POWERED_DOWN"];
* CHANGING_POLICY [label="STATE_CHANGING_POLICY"
* URL="\ref kbasep_pm_demand_state.KBASEP_PM_DEMAND_STATE_CHANGING_POLICY"];
*
* init [label="init" URL="\ref KBASE_PM_EVENT_INIT"];
* change_policy [label="change_policy" URL="\ref kbase_pm_change_policy"];
*
* init -> POWERING_UP [ label = "Policy init" ];
*
* POWERING_UP -> POWERED_UP [label = "Power state change" URL="\ref KBASE_PM_EVENT_STATE_CHANGED"];
* POWERING_DOWN -> POWERED_DOWN [label = "Power state change" URL="\ref KBASE_PM_EVENT_STATE_CHANGED"];
* CHANGING_POLICY -> change_policy [label = "Power state change" URL="\ref KBASE_PM_EVENT_STATE_CHANGED"];
*
* POWERED_UP -> POWERING_DOWN [label = "GPU Idle" URL="\ref KBASE_PM_EVENT_GPU_IDLE"];
* POWERING_UP -> POWERING_DOWN [label = "GPU Idle" URL="\ref KBASE_PM_EVENT_GPU_IDLE"];
*
* POWERED_DOWN -> POWERING_UP [label = "GPU Active" URL="\ref KBASE_PM_EVENT_GPU_ACTIVE"];
* POWERING_DOWN -> POWERING_UP [label = "GPU Active" URL="\ref KBASE_PM_EVENT_GPU_ACTIVE"];
* POWERING_UP -> CHANGING_POLICY [label = "Change policy" URL="\ref KBASE_PM_EVENT_CHANGE_POLICY"];
* POWERING_DOWN -> CHANGING_POLICY [label = "Change policy" URL="\ref KBASE_PM_EVENT_CHANGE_POLICY"];
* POWERED_UP -> change_policy [label = "Change policy" URL="\ref KBASE_PM_EVENT_CHANGE_POLICY"];
* POWERED_DOWN -> change_policy [label = "Change policy" URL="\ref KBASE_PM_EVENT_CHANGE_POLICY"];
* }
* @enddot
*/
typedef enum kbasep_pm_demand_state
{
KBASEP_PM_DEMAND_STATE_POWERING_UP, /**< The GPU is powering up */
KBASEP_PM_DEMAND_STATE_POWERED_UP, /**< The GPU is powered up and jobs can execute */
KBASEP_PM_DEMAND_STATE_POWERING_DOWN, /**< The GPU is powering down */
KBASEP_PM_DEMAND_STATE_POWERED_DOWN, /**< The GPU is powered down */
KBASEP_PM_DEMAND_STATE_CHANGING_POLICY /**< The power policy is about to change */
} kbasep_pm_demand_state;
/** Private structure for policy instance data.
*
* This contains data that is private to the particular power policy that is active.
*/
typedef struct kbasep_pm_policy_demand
{
kbasep_pm_demand_state state; /**< The current state of the policy */
} kbasep_pm_policy_demand;
#endif
|