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