1 #ifndef _CPU_TOPOLOGY_H_
2 #define _CPU_TOPOLOGY_H_
4 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
6 #include <machine/cpumask.h>
8 /* CPU TOPOLOGY DATA AND FUNCTIONS */
10 struct cpu_node * parent_node;
11 struct cpu_node * child_node[MAXCPU];
16 uint8_t compute_unit_id; /* AMD compute unit ID */
19 long phys_mem; /* supplied from vm_numa_organize() */
21 typedef struct cpu_node cpu_node_t;
25 /* Level type for CPU siblings */
26 #define PACKAGE_LEVEL 1
29 #define THREAD_LEVEL 4
31 #define CPUSET_FOREACH(cpu, mask) \
32 for ((cpu) = 0; (cpu) < ncpus; (cpu)++) \
33 if (CPUMASK_TESTBIT(mask, cpu))
39 extern int cpu_topology_levels_number;
40 extern int cpu_topology_ht_ids;
41 extern int cpu_topology_core_ids;
42 extern int cpu_topology_phys_ids;
43 extern cpu_node_t *root_cpu_node;
45 cpumask_t get_cpumask_from_level(int cpuid, uint8_t level_type);
46 cpu_node_t *get_cpu_node_by_cpuid(int cpuid);
47 const cpu_node_t *get_cpu_node_by_chipid(int chip_id);
48 long get_highest_node_memory(void);
49 int get_cpu_ht_id(int cpuid);
50 int get_cpu_core_id(int cpuid);
51 int get_cpu_phys_id(int cpuid);
54 #endif /* _CPU_TOPOLOGY_H_ */