1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#ifndef __PERF_CPUMAP_H
2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#define __PERF_CPUMAP_H
3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <stdio.h>
5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#include <stdbool.h>
6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct cpu_map {
8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int nr;
9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	int map[];
10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng};
11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct cpu_map *cpu_map__new(const char *cpu_list);
13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct cpu_map *cpu_map__dummy_new(void);
14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengvoid cpu_map__delete(struct cpu_map *map);
15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstruct cpu_map *cpu_map__read(FILE *file);
16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengsize_t cpu_map__fprintf(struct cpu_map *map, FILE *fp);
17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint cpu_map__get_socket(struct cpu_map *map, int idx);
18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint cpu_map__get_core(struct cpu_map *map, int idx);
19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint cpu_map__build_socket_map(struct cpu_map *cpus, struct cpu_map **sockp);
20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengint cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep);
21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline int cpu_map__socket(struct cpu_map *sock, int s)
23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	if (!sock || s > sock->nr || s < 0)
25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng		return 0;
26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return sock->map[s];
27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline int cpu_map__id_to_socket(int id)
30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return id >> 16;
32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline int cpu_map__id_to_cpu(int id)
35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return id & 0xffff;
37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline int cpu_map__nr(const struct cpu_map *map)
40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return map ? map->nr : 1;
42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Chengstatic inline bool cpu_map__empty(const struct cpu_map *map)
45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng{
46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng	return map ? map->map[0] == -1 : true;
47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng}
48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng
49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif /* __PERF_CPUMAP_H */
50