topology.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #ifndef _ASM_ARM_TOPOLOGY_H
  2. #define _ASM_ARM_TOPOLOGY_H
  3. #ifdef CONFIG_ARM_CPU_TOPOLOGY
  4. #include <linux/cpumask.h>
  5. struct cputopo_arm {
  6. int thread_id;
  7. int core_id;
  8. int socket_id;
  9. unsigned int partno;
  10. cpumask_t thread_sibling;
  11. cpumask_t core_sibling;
  12. };
  13. extern struct cputopo_arm cpu_topology[NR_CPUS];
  14. extern unsigned long arch_get_max_cpu_capacity(int);
  15. #define topology_physical_package_id(cpu) (cpu_topology[cpu].socket_id)
  16. #define topology_core_id(cpu) (cpu_topology[cpu].core_id)
  17. #define topology_core_cpumask(cpu) (&cpu_topology[cpu].core_sibling)
  18. #define topology_thread_cpumask(cpu) (&cpu_topology[cpu].thread_sibling)
  19. #define topology_max_cpu_capacity(cpu) (arch_get_max_cpu_capacity(cpu))
  20. void init_cpu_topology(void);
  21. void store_cpu_topology(unsigned int cpuid);
  22. const struct cpumask *cpu_coregroup_mask(int cpu);
  23. /* Extras of CPU & Cluster functions */
  24. extern int arch_cpu_is_big(unsigned int cpu);
  25. extern int arch_cpu_is_little(unsigned int cpu);
  26. extern int arch_is_multi_cluster(void);
  27. extern int arch_is_smp(void);
  28. extern int arch_get_nr_clusters(void);
  29. extern int arch_get_cluster_id(unsigned int cpu);
  30. extern void arch_get_cluster_cpus(struct cpumask *cpus, int cluster_id);
  31. extern int arch_better_capacity(unsigned int cpu);
  32. #else /* !CONFIG_ARM_CPU_TOPOLOGY */
  33. static inline void init_cpu_topology(void) { }
  34. static inline void store_cpu_topology(unsigned int cpuid) { }
  35. static inline int arch_cpu_is_big(unsigned int cpu) { return 0; }
  36. static inline int arch_cpu_is_little(unsigned int cpu) { return 1; }
  37. static inline int arch_is_multi_cluster(void) { return 0; }
  38. static inline int arch_is_smp(void) { return 1; }
  39. static inline int arch_get_nr_clusters(void) { return 1; }
  40. static inline int arch_get_cluster_id(unsigned int cpu) { return 0; }
  41. static inline void arch_get_cluster_cpus(struct cpumask *cpus, int cluster_id)
  42. {
  43. cpumask_clear(cpus);
  44. if (0 == cluster_id) {
  45. unsigned int cpu;
  46. for_each_possible_cpu(cpu)
  47. cpumask_set_cpu(cpu, cpus);
  48. }
  49. }
  50. static inline int arch_better_capacity(unsigned int cpu) { return 0; }
  51. #endif /* CONFIG_ARM_CPU_TOPOLOGY */
  52. #ifdef CONFIG_MTK_CPU_TOPOLOGY
  53. void arch_build_cpu_topology_domain(void);
  54. #endif
  55. #include <asm-generic/topology.h>
  56. #endif /* _ASM_ARM_TOPOLOGY_H */