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 #define cpumask_of_node(node) (&numa_cpumask_lookup_table[node]) 26 27 int of_node_to_nid(struct device_node *device); 28 29 struct pci_bus; 30 #ifdef CONFIG_PCI 31 extern int pcibus_to_node(struct pci_bus *bus); 32 #else 33 static inline int pcibus_to_node(struct pci_bus *bus) 34 { 35 return -1; 36 } 37 #endif 38 39 #define pcibus_to_cpumask(bus) (pcibus_to_node(bus) == -1 ? \ 40 CPU_MASK_ALL : \ 41 node_to_cpumask(pcibus_to_node(bus)) \ 42 ) 43 44 #define cpumask_of_pcibus(bus) (pcibus_to_node(bus) == -1 ? \ 45 cpu_all_mask : \ 46 cpumask_of_node(pcibus_to_node(bus))) 47 48 /* sched_domains SD_NODE_INIT for PPC64 machines */ 49 #define SD_NODE_INIT (struct sched_domain) { \ 50 .parent = NULL, \ 51 .child = NULL, \ 52 .groups = NULL, \ 53 .min_interval = 8, \ 54 .max_interval = 32, \ 55 .busy_factor = 32, \ 56 .imbalance_pct = 125, \ 57 .cache_nice_tries = 1, \ 58 .busy_idx = 3, \ 59 .idle_idx = 1, \ 60 .newidle_idx = 2, \ 61 .wake_idx = 1, \ 62 .flags = SD_LOAD_BALANCE \ 63 | SD_BALANCE_EXEC \ 64 | SD_BALANCE_NEWIDLE \ 65 | SD_WAKE_IDLE \ 66 | SD_SERIALIZE \ 67 | SD_WAKE_BALANCE, \ 68 .last_balance = jiffies, \ 69 .balance_interval = 1, \ 70 .nr_balance_failed = 0, \ 71 } 72 73 extern void __init dump_numa_cpu_topology(void); 74 75 extern int sysfs_add_device_to_node(struct sys_device *dev, int nid); 76 extern void sysfs_remove_device_from_node(struct sys_device *dev, int nid); 77 78 #else 79 80 static inline int of_node_to_nid(struct device_node *device) 81 { 82 return 0; 83 } 84 85 static inline void dump_numa_cpu_topology(void) {} 86 87 static inline int sysfs_add_device_to_node(struct sys_device *dev, int nid) 88 { 89 return 0; 90 } 91 92 static inline void sysfs_remove_device_from_node(struct sys_device *dev, 93 int nid) 94 { 95 } 96 97 #endif /* CONFIG_NUMA */ 98 99 #include <asm-generic/topology.h> 100 101 #ifdef CONFIG_SMP 102 #include <asm/cputable.h> 103 #define smt_capable() (cpu_has_feature(CPU_FTR_SMT)) 104 105 #ifdef CONFIG_PPC64 106 #include <asm/smp.h> 107 108 #define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) 109 #define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) 110 #define topology_thread_cpumask(cpu) (&per_cpu(cpu_sibling_map, cpu)) 111 #define topology_core_cpumask(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