1 #ifndef _ASM_POWERPC_TOPOLOGY_H 2 #define _ASM_POWERPC_TOPOLOGY_H 3 #ifdef __KERNEL__ 4 5 6 struct sys_device; 7 struct device_node; 8 9 #ifdef CONFIG_NUMA 10 11 #include <asm/mmzone.h> 12 13 static inline int cpu_to_node(int cpu) 14 { 15 return numa_cpu_lookup_table[cpu]; 16 } 17 18 #define parent_node(node) (node) 19 20 static inline cpumask_t node_to_cpumask(int node) 21 { 22 return numa_cpumask_lookup_table[node]; 23 } 24 25 static inline int node_to_first_cpu(int node) 26 { 27 cpumask_t tmp; 28 tmp = node_to_cpumask(node); 29 return first_cpu(tmp); 30 } 31 32 int of_node_to_nid(struct device_node *device); 33 34 struct pci_bus; 35 #ifdef CONFIG_PCI 36 extern int pcibus_to_node(struct pci_bus *bus); 37 #else 38 static inline int pcibus_to_node(struct pci_bus *bus) 39 { 40 return -1; 41 } 42 #endif 43 44 #define pcibus_to_cpumask(bus) (pcibus_to_node(bus) == -1 ? \ 45 CPU_MASK_ALL : \ 46 node_to_cpumask(pcibus_to_node(bus)) \ 47 ) 48 49 /* sched_domains SD_NODE_INIT for PPC64 machines */ 50 #define SD_NODE_INIT (struct sched_domain) { \ 51 .span = CPU_MASK_NONE, \ 52 .parent = NULL, \ 53 .child = NULL, \ 54 .groups = NULL, \ 55 .min_interval = 8, \ 56 .max_interval = 32, \ 57 .busy_factor = 32, \ 58 .imbalance_pct = 125, \ 59 .cache_nice_tries = 1, \ 60 .busy_idx = 3, \ 61 .idle_idx = 1, \ 62 .newidle_idx = 2, \ 63 .wake_idx = 1, \ 64 .flags = SD_LOAD_BALANCE \ 65 | SD_BALANCE_EXEC \ 66 | SD_BALANCE_NEWIDLE \ 67 | SD_WAKE_IDLE \ 68 | SD_SERIALIZE \ 69 | SD_WAKE_BALANCE, \ 70 .last_balance = jiffies, \ 71 .balance_interval = 1, \ 72 .nr_balance_failed = 0, \ 73 } 74 75 extern void __init dump_numa_cpu_topology(void); 76 77 extern int sysfs_add_device_to_node(struct sys_device *dev, int nid); 78 extern void sysfs_remove_device_from_node(struct sys_device *dev, int nid); 79 80 #else 81 82 static inline int of_node_to_nid(struct device_node *device) 83 { 84 return 0; 85 } 86 87 static inline void dump_numa_cpu_topology(void) {} 88 89 static inline int sysfs_add_device_to_node(struct sys_device *dev, int nid) 90 { 91 return 0; 92 } 93 94 static inline void sysfs_remove_device_from_node(struct sys_device *dev, 95 int nid) 96 { 97 } 98 99 #endif /* CONFIG_NUMA */ 100 101 #include <asm-generic/topology.h> 102 103 #ifdef CONFIG_SMP 104 #include <asm/cputable.h> 105 #define smt_capable() (cpu_has_feature(CPU_FTR_SMT)) 106 107 #ifdef CONFIG_PPC64 108 #include <asm/smp.h> 109 110 #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) 111 #define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) 112 #define topology_core_id(cpu) (cpu_to_core_id(cpu)) 113 #endif 114 #endif 115 116 #endif /* __KERNEL__ */ 117 #endif /* _ASM_POWERPC_TOPOLOGY_H */ 118