1/* 2 * linux/include/asm-i386/topology.h 3 * 4 * Written by: Matthew Dobson, IBM Corporation 5 * 6 * Copyright (C) 2002, IBM Corp. 7 * 8 * All rights reserved. 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, but 16 * WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 18 * NON INFRINGEMENT. See the GNU General Public License for more 19 * details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; if not, write to the Free Software 23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 24 * 25 * Send feedback to <colpatch@us.ibm.com> 26 */ 27#ifndef _ASM_I386_TOPOLOGY_H 28#define _ASM_I386_TOPOLOGY_H 29 30#ifdef CONFIG_X86_HT 31#define topology_physical_package_id(cpu) (cpu_data[cpu].phys_proc_id) 32#define topology_core_id(cpu) (cpu_data[cpu].cpu_core_id) 33#define topology_core_siblings(cpu) (cpu_core_map[cpu]) 34#define topology_thread_siblings(cpu) (cpu_sibling_map[cpu]) 35#endif 36 37#ifdef CONFIG_NUMA 38 39#include <asm/mpspec.h> 40 41#include <linux/cpumask.h> 42 43/* Mappings between logical cpu number and node number */ 44extern cpumask_t node_2_cpu_mask[]; 45extern int cpu_2_node[]; 46 47/* Returns the number of the node containing CPU 'cpu' */ 48static inline int cpu_to_node(int cpu) 49{ 50 return cpu_2_node[cpu]; 51} 52 53/* Returns the number of the node containing Node 'node'. This architecture is flat, 54 so it is a pretty simple function! */ 55#define parent_node(node) (node) 56 57/* Returns a bitmask of CPUs on Node 'node'. */ 58static inline cpumask_t node_to_cpumask(int node) 59{ 60 return node_2_cpu_mask[node]; 61} 62 63/* Returns the number of the first CPU on Node 'node'. */ 64static inline int node_to_first_cpu(int node) 65{ 66 cpumask_t mask = node_to_cpumask(node); 67 return first_cpu(mask); 68} 69 70#define pcibus_to_node(bus) ((long) (bus)->sysdata) 71#define pcibus_to_cpumask(bus) node_to_cpumask(pcibus_to_node(bus)) 72 73/* sched_domains SD_NODE_INIT for NUMAQ machines */ 74#define SD_NODE_INIT (struct sched_domain) { \ 75 .span = CPU_MASK_NONE, \ 76 .parent = NULL, \ 77 .child = NULL, \ 78 .groups = NULL, \ 79 .min_interval = 8, \ 80 .max_interval = 32, \ 81 .busy_factor = 32, \ 82 .imbalance_pct = 125, \ 83 .cache_nice_tries = 1, \ 84 .busy_idx = 3, \ 85 .idle_idx = 1, \ 86 .newidle_idx = 2, \ 87 .wake_idx = 1, \ 88 .flags = SD_LOAD_BALANCE \ 89 | SD_BALANCE_EXEC \ 90 | SD_BALANCE_FORK \ 91 | SD_SERIALIZE \ 92 | SD_WAKE_BALANCE, \ 93 .last_balance = jiffies, \ 94 .balance_interval = 1, \ 95 .nr_balance_failed = 0, \ 96} 97 98extern unsigned long node_start_pfn[]; 99extern unsigned long node_end_pfn[]; 100extern unsigned long node_remap_size[]; 101 102#define node_has_online_mem(nid) (node_start_pfn[nid] != node_end_pfn[nid]) 103 104#else /* !CONFIG_NUMA */ 105/* 106 * Other i386 platforms should define their own version of the 107 * above macros here. 108 */ 109 110#include <asm-generic/topology.h> 111 112#endif /* CONFIG_NUMA */ 113 114extern cpumask_t cpu_coregroup_map(int cpu); 115 116#ifdef CONFIG_SMP 117#define mc_capable() (boot_cpu_data.x86_max_cores > 1) 118#define smt_capable() (smp_num_siblings > 1) 119#endif 120 121#endif /* _ASM_I386_TOPOLOGY_H */ 122