Warning: That file was not part of the compilation database. It may have many parsing errors.

1/* @title: ACPI CPU */
2#pragma once
3#include <acpi/acpi.h>
4#include <compiler/core.h>
5#include <types/types.h>
6
7/* This is the big struct we gotta declare in here: */
8struct acpi_cpu;
9
10#define ACPI_CPU_BUSY_METRIC 10
11
12#define ACPI_CPU_MAX_POWER 8
13#define ACPI_CPU_MAX_C2_LATENCY 100
14#define ACPI_CPU_MAX_C3_LATENCY 1000
15
16#define ACPI_CPU_MAX_THROTTLING 16
17#define ACPI_CPU_MAX_THROTTLE 100 /* 10% */
18#define ACPI_CPU_MAX_DUTY_WIDTH 4
19
20#define ACPI_PDC_REVISION_ID 0x1
21
22#define ACPI_PSD_REV0_REVISION 0
23#define ACPI_PSD_REV0_ENTRIES 5
24
25#define ACPI_TSD_REV0_REVISION 0
26#define ACPI_TSD_REV0_ENTRIES 5
27
28#define ACPI_CONTEXT_DESCRIPTOR_LENGTH 32
29
30struct acpi_power_reg {
31 uint8_t descriptor;
32 uint16_t length;
33 uint8_t space_id;
34 uint8_t bit_width;
35 uint8_t bit_offset;
36 uint8_t access_size;
37 uint64_t addr;
38} cc_packed;
39
40struct acpi_cpu_context {
41 bool valid;
42 uint8_t type;
43 uint32_t addr;
44 uint8_t entry_method;
45 uint8_t index;
46 uint32_t latency;
47 uint8_t bm_status_skip;
48 char desc[ACPI_CONTEXT_DESCRIPTOR_LENGTH];
49};
50
51struct acpi_lpi_state {
52 uint32_t min_residency;
53 uint32_t wake_latency;
54 uint32_t flags;
55 uint32_t resolution_counter_frequency;
56 uint32_t enable_parent_state;
57 uint64_t addr;
58 uint8_t index;
59 uint8_t entry_method;
60 char desc[ACPI_CONTEXT_DESCRIPTOR_LENGTH];
61};
62
63struct acpi_cpu_power {
64 size_t count;
65 union {
66 struct acpi_cpu_context states[ACPI_CPU_MAX_POWER];
67 struct acpi_lpi_state lpi_states[ACPI_CPU_MAX_POWER];
68 };
69 size_t timer_broadcast_on_state;
70};
71
72struct acpi_psd_pkg {
73 uint64_t num_entries;
74 uint64_t revision;
75 uint64_t domain;
76 uint64_t coord_type;
77 uint64_t num_cpus;
78} cc_packed;
79
80struct acpi_pct_reg {
81 uint8_t desc;
82 uint16_t len;
83 uint8_t space_id;
84 uint8_t bit_width;
85 uint8_t bit_offset;
86 uint8_t reserved0;
87 uint64_t addr;
88} cc_packed;
89
90struct acpi_cpu_px {
91 uint64_t frequency; /* megahertz */
92 uint64_t power; /* milliwatts */
93 uint64_t transition_latency_us;
94 uint64_t bus_master_latency_us;
95 uint64_t control;
96 uint64_t status;
97};
98
99struct acpi_cpu_perf {
100 uint32_t state;
101 uint32_t platform_limit;
102 struct acpi_pct_reg control_reg;
103 struct acpi_pct_reg status_reg;
104 uint32_t state_count;
105 struct acpi_cpu_px *states;
106 struct acpi_psd_pkg domain_info;
107 uint32_t type;
108};
109
110struct acpi_tsd_pkg {
111 uint64_t num_entries;
112 uint64_t revision;
113 uint64_t domain;
114 uint64_t coord_type;
115 uint64_t num_cpus;
116} cc_packed;
117
118struct acpi_ptc_reg {
119 uint8_t desc;
120 uint16_t len;
121 uint8_t space_id;
122 uint8_t bit_width;
123 uint8_t bit_offset;
124 uint8_t reserved0;
125 uint64_t addr;
126} cc_packed;
127
128struct acpi_cpu_tx_tss {
129 uint64_t freq_pct;
130 uint64_t power; /* milliwatts */
131 uint64_t transition_latency_us;
132 uint64_t control;
133 uint64_t status;
134};
135
136struct acpi_cpu_tx {
137 uint16_t power;
138 uint16_t performance;
139};
140
141struct acpi_cpu_throttling {
142 uint32_t state;
143 uint32_t platform_limit;
144 struct acpi_pct_reg control_reg;
145 struct acpi_pct_reg status_reg;
146 uint32_t state_count;
147 struct acpi_cpu_tx_tss *states_tss;
148 struct acpi_tsd_pkg domain_info;
149 int32_t (*get_throttling)(struct acpi_cpu *);
150 int32_t (*set_throttling)(struct acpi_cpu *, int32_t);
151 uint32_t addr;
152 uint8_t duty_offset;
153 uint8_t duty_width;
154 uint8_t tsd_valid_flag;
155 uint32_t shared_type;
156 struct acpi_cpu_tx states[ACPI_CPU_MAX_THROTTLING];
157};
158
159struct acpi_cpu_lx {
160 int32_t px; /* perf state */
161 int32_t tx; /* throttle level */
162};
163
164struct acpi_cpu_limit {
165 struct acpi_cpu_lx state; /* what are we right now */
166 struct acpi_cpu_lx thermal; /* thermal limit */
167 struct acpi_cpu_lx user; /* limit the user wants */
168};
169
170struct acpi_cpu_flags {
171 uint8_t power : 1;
172 uint8_t perf : 1;
173 uint8_t throttling : 1;
174 uint8_t limit : 1;
175 uint8_t has_cst : 1;
176 uint8_t has_lpi : 1;
177 uint8_t setup : 1;
178};
179
180struct acpi_cpu {
181 cpu_id_t id;
182 int32_t perf_throttle_limit;
183 int32_t throttle_platform_limit;
184 struct acpi_cpu_flags flags;
185 struct acpi_cpu_power power;
186 struct acpi_cpu_perf *performance;
187 struct acpi_cpu_throttling throttling;
188 struct acpi_cpu_limit limit;
189};
190

Warning: That file was not part of the compilation database. It may have many parsing errors.