GNU Linux-libre 5.19-rc6-gnu
[releases.git] / tools / perf / util / cputopo.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PERF_CPUTOPO_H
3 #define __PERF_CPUTOPO_H
4
5 #include <linux/types.h>
6
7 struct cpu_topology {
8         /* The number of unique package_cpus_lists below. */
9         u32       package_cpus_lists;
10         /* The number of unique die_cpu_lists below. */
11         u32       die_cpus_lists;
12         /* The number of unique core_cpu_lists below. */
13         u32       core_cpus_lists;
14         /*
15          * An array of strings where each string is unique and read from
16          * /sys/devices/system/cpu/cpuX/topology/package_cpus_list. From the ABI
17          * each of these is a human-readable list of CPUs sharing the same
18          * physical_package_id. The format is like 0-3, 8-11, 14,17.
19          */
20         const char **package_cpus_list;
21         /*
22          * An array of string where each string is unique and from
23          * /sys/devices/system/cpu/cpuX/topology/die_cpus_list. From the ABI
24          * each of these is a human-readable list of CPUs within the same die.
25          * The format is like 0-3, 8-11, 14,17.
26          */
27         const char **die_cpus_list;
28         /*
29          * An array of string where each string is unique and from
30          * /sys/devices/system/cpu/cpuX/topology/core_cpus_list. From the ABI
31          * each of these is a human-readable list of CPUs within the same
32          * core. The format is like 0-3, 8-11, 14,17.
33          */
34         const char **core_cpus_list;
35 };
36
37 struct numa_topology_node {
38         char            *cpus;
39         u32              node;
40         u64              mem_total;
41         u64              mem_free;
42 };
43
44 struct numa_topology {
45         u32                             nr;
46         struct numa_topology_node       nodes[];
47 };
48
49 struct hybrid_topology_node {
50         char            *pmu_name;
51         char            *cpus;
52 };
53
54 struct hybrid_topology {
55         u32                             nr;
56         struct hybrid_topology_node     nodes[];
57 };
58
59 struct cpu_topology *cpu_topology__new(void);
60 void cpu_topology__delete(struct cpu_topology *tp);
61
62 struct numa_topology *numa_topology__new(void);
63 void numa_topology__delete(struct numa_topology *tp);
64
65 struct hybrid_topology *hybrid_topology__new(void);
66 void hybrid_topology__delete(struct hybrid_topology *tp);
67
68 #endif /* __PERF_CPUTOPO_H */