2005-09-07 15:59:48 -05:00
# ifndef _ASM_POWERPC_TOPOLOGY_H
# define _ASM_POWERPC_TOPOLOGY_H
2005-12-16 22:43:46 +01:00
# ifdef __KERNEL__
2005-04-16 15:20:36 -07:00
2006-05-01 12:16:12 -07:00
struct sys_device ;
struct device_node ;
2005-04-16 15:20:36 -07:00
# ifdef CONFIG_NUMA
2005-09-07 15:59:48 -05:00
# include <asm/mmzone.h>
2005-04-16 15:20:36 -07:00
static inline int cpu_to_node ( int cpu )
{
2005-11-11 14:22:35 +11:00
return numa_cpu_lookup_table [ cpu ] ;
2005-04-16 15:20:36 -07:00
}
# define parent_node(node) (node)
static inline cpumask_t node_to_cpumask ( int node )
{
return numa_cpumask_lookup_table [ node ] ;
}
static inline int node_to_first_cpu ( int node )
{
cpumask_t tmp ;
tmp = node_to_cpumask ( node ) ;
return first_cpu ( tmp ) ;
}
2006-05-01 12:16:12 -07:00
int of_node_to_nid ( struct device_node * device ) ;
2006-06-10 20:53:06 +10:00
struct pci_bus ;
2006-11-27 19:19:00 +01:00
# ifdef CONFIG_PCI
2006-06-10 20:53:06 +10:00
extern int pcibus_to_node ( struct pci_bus * bus ) ;
2006-11-27 19:19:00 +01:00
# else
static inline int pcibus_to_node ( struct pci_bus * bus )
{
return - 1 ;
}
# endif
2006-06-10 20:53:06 +10:00
# define pcibus_to_cpumask(bus) (pcibus_to_node(bus) == -1 ? \
CPU_MASK_ALL : \
node_to_cpumask ( pcibus_to_node ( bus ) ) \
)
2005-04-16 15:20:36 -07:00
/* sched_domains SD_NODE_INIT for PPC64 machines */
# define SD_NODE_INIT (struct sched_domain) { \
. span = CPU_MASK_NONE , \
. parent = NULL , \
2006-10-03 01:14:08 -07:00
. child = NULL , \
2005-04-16 15:20:36 -07:00
. groups = NULL , \
. min_interval = 8 , \
. max_interval = 32 , \
. busy_factor = 32 , \
. imbalance_pct = 125 , \
. cache_nice_tries = 1 , \
2005-11-16 23:37:53 +11:00
. busy_idx = 3 , \
2005-11-17 20:34:35 +11:00
. idle_idx = 1 , \
2005-11-16 23:37:53 +11:00
. newidle_idx = 2 , \
. wake_idx = 1 , \
2005-04-16 15:20:36 -07:00
. flags = SD_LOAD_BALANCE \
| SD_BALANCE_EXEC \
| SD_BALANCE_NEWIDLE \
| SD_WAKE_IDLE \
2006-12-10 02:20:29 -08:00
| SD_SERIALIZE \
2005-04-16 15:20:36 -07:00
| SD_WAKE_BALANCE , \
. last_balance = jiffies , \
. balance_interval = 1 , \
. nr_balance_failed = 0 , \
}
2005-12-13 06:56:47 +11:00
extern void __init dump_numa_cpu_topology ( void ) ;
2006-05-01 12:16:12 -07:00
extern int sysfs_add_device_to_node ( struct sys_device * dev , int nid ) ;
extern void sysfs_remove_device_from_node ( struct sys_device * dev , int nid ) ;
2005-08-01 21:11:46 -07:00
# else
2005-04-16 15:20:36 -07:00
2006-05-01 12:16:12 -07:00
static inline int of_node_to_nid ( struct device_node * device )
{
return 0 ;
}
2005-12-13 06:56:47 +11:00
static inline void dump_numa_cpu_topology ( void ) { }
2006-05-01 12:16:12 -07:00
static inline int sysfs_add_device_to_node ( struct sys_device * dev , int nid )
{
return 0 ;
}
static inline void sysfs_remove_device_from_node ( struct sys_device * dev ,
int nid )
{
}
2005-04-16 15:20:36 -07:00
# include <asm-generic/topology.h>
2005-08-01 21:11:46 -07:00
# endif /* CONFIG_NUMA */
2006-06-27 02:54:42 -07:00
# ifdef CONFIG_SMP
# include <asm/cputable.h>
2006-11-13 14:51:46 +11:00
# define smt_capable() (cpu_has_feature(CPU_FTR_SMT))
# ifdef CONFIG_PPC64
# include <asm/smp.h>
2007-10-16 01:24:05 -07:00
# define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu))
2006-11-13 14:51:46 +11:00
# endif
2006-06-27 02:54:42 -07:00
# endif
2005-12-16 22:43:46 +01:00
# endif /* __KERNEL__ */
2005-09-07 15:59:48 -05:00
# endif /* _ASM_POWERPC_TOPOLOGY_H */