1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef CHANNEL_COMMANDS_H_
6 #define CHANNEL_COMMANDS_H_
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #include <stdint.h>
13 #include <stdbool.h>
14 
15 /* --- Incoming messages --- */
16 
17 /* Valid Commands */
18 #define CPU_POWER               1
19 #define CPU_POWER_CONNECT       2
20 #define PKT_POLICY              3
21 #define PKT_POLICY_REMOVE       4
22 
23 /* CPU Power Command Scaling */
24 #define CPU_POWER_SCALE_UP      1
25 #define CPU_POWER_SCALE_DOWN    2
26 #define CPU_POWER_SCALE_MAX     3
27 #define CPU_POWER_SCALE_MIN     4
28 #define CPU_POWER_ENABLE_TURBO  5
29 #define CPU_POWER_DISABLE_TURBO 6
30 
31 /* CPU Power Queries */
32 #define CPU_POWER_QUERY_FREQ_LIST  7
33 #define CPU_POWER_QUERY_FREQ       8
34 #define CPU_POWER_QUERY_CAPS_LIST  9
35 #define CPU_POWER_QUERY_CAPS       10
36 
37 /* --- Outgoing messages --- */
38 
39 /* Generic Power Command Response */
40 #define CPU_POWER_CMD_ACK       1
41 #define CPU_POWER_CMD_NACK      2
42 
43 /* CPU Power Query Responses */
44 #define CPU_POWER_FREQ_LIST     3
45 #define CPU_POWER_CAPS_LIST     4
46 
47 #define HOURS 24
48 
49 #define MAX_VFS 10
50 #define VM_MAX_NAME_SZ 32
51 
52 #define MAX_VCPU_PER_VM         8
53 
54 struct t_boost_status {
55 	bool tbEnabled;
56 };
57 
58 struct timer_profile {
59 	int busy_hours[HOURS];
60 	int quiet_hours[HOURS];
61 	int hours_to_use_traffic_profile[HOURS];
62 };
63 
64 enum workload {HIGH, MEDIUM, LOW};
65 enum policy_to_use {
66 	TRAFFIC,
67 	TIME,
68 	WORKLOAD,
69 	BRANCH_RATIO
70 };
71 
72 struct traffic {
73 	uint32_t min_packet_thresh;
74 	uint32_t avg_max_packet_thresh;
75 	uint32_t max_max_packet_thresh;
76 };
77 
78 #define CORE_TYPE_VIRTUAL 0
79 #define CORE_TYPE_PHYSICAL 1
80 
81 struct channel_packet {
82 	uint64_t resource_id; /**< core_num, device */
83 	uint32_t unit;        /**< scale down/up/min/max */
84 	uint32_t command;     /**< Power, IO, etc */
85 	char vm_name[VM_MAX_NAME_SZ];
86 
87 	uint64_t vfid[MAX_VFS];
88 	int nb_mac_to_monitor;
89 	struct traffic traffic_policy;
90 	uint8_t vcpu_to_control[MAX_VCPU_PER_VM];
91 	uint8_t num_vcpu;
92 	struct timer_profile timer_policy;
93 	bool core_type;
94 	enum workload workload;
95 	enum policy_to_use policy_to_use;
96 	struct t_boost_status t_boost_status;
97 };
98 
99 struct channel_packet_freq_list {
100 	uint64_t resource_id; /**< core_num, device */
101 	uint32_t unit;        /**< scale down/up/min/max */
102 	uint32_t command;     /**< Power, IO, etc */
103 	char vm_name[VM_MAX_NAME_SZ];
104 
105 	uint32_t freq_list[MAX_VCPU_PER_VM];
106 	uint8_t num_vcpu;
107 };
108 
109 struct channel_packet_caps_list {
110 	uint64_t resource_id; /**< core_num, device */
111 	uint32_t unit;        /**< scale down/up/min/max */
112 	uint32_t command;     /**< Power, IO, etc */
113 	char vm_name[VM_MAX_NAME_SZ];
114 
115 	uint64_t turbo[MAX_VCPU_PER_VM];
116 	uint64_t priority[MAX_VCPU_PER_VM];
117 	uint8_t num_vcpu;
118 };
119 
120 
121 #ifdef __cplusplus
122 }
123 #endif
124 
125 #endif /* CHANNEL_COMMANDS_H_ */
126