/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __PERF_CPUTOPO_H
#define __PERF_CPUTOPO_H

#include <linux/types.h>

struct cpu_topology {
	/* The number of unique package_cpus_lists below. */
	u32	  package_cpus_lists;
	/* The number of unique die_cpu_lists below. */
	u32	  die_cpus_lists;
	/* The number of unique core_cpu_lists below. */
	u32	  core_cpus_lists;
	/*
	 * An array of strings where each string is unique and read from
	 * /sys/devices/system/cpu/cpuX/topology/package_cpus_list. From the ABI
	 * each of these is a human-readable list of CPUs sharing the same
	 * physical_package_id. The format is like 0-3, 8-11, 14,17.
	 */
	const char **package_cpus_list;
	/*
	 * An array of string where each string is unique and from
	 * /sys/devices/system/cpu/cpuX/topology/die_cpus_list. From the ABI
	 * each of these is a human-readable list of CPUs within the same die.
	 * The format is like 0-3, 8-11, 14,17.
	 */
	const char **die_cpus_list;
	/*
	 * An array of string where each string is unique and from
	 * /sys/devices/system/cpu/cpuX/topology/core_cpus_list. From the ABI
	 * each of these is a human-readable list of CPUs within the same
	 * core. The format is like 0-3, 8-11, 14,17.
	 */
	const char **core_cpus_list;
};

struct numa_topology_node {
	char		*cpus;
	u32		 node;
	u64		 mem_total;
	u64		 mem_free;
};

struct numa_topology {
	u32				nr;
	struct numa_topology_node	nodes[];
};

struct hybrid_topology_node {
	char		*pmu_name;
	char		*cpus;
};

struct hybrid_topology {
	u32				nr;
	struct hybrid_topology_node	nodes[];
};

struct cpu_topology *cpu_topology__new(void);
void cpu_topology__delete(struct cpu_topology *tp);

struct numa_topology *numa_topology__new(void);
void numa_topology__delete(struct numa_topology *tp);

struct hybrid_topology *hybrid_topology__new(void);
void hybrid_topology__delete(struct hybrid_topology *tp);

#endif /* __PERF_CPUTOPO_H */
