Rev 6934 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6588 | serge | 1 | /* |
2 | * Written by: Matthew Dobson, IBM Corporation |
||
3 | * |
||
4 | * Copyright (C) 2002, IBM Corp. |
||
5 | * |
||
6 | * All rights reserved. |
||
7 | * |
||
8 | * This program is free software; you can redistribute it and/or modify |
||
9 | * it under the terms of the GNU General Public License as published by |
||
10 | * the Free Software Foundation; either version 2 of the License, or |
||
11 | * (at your option) any later version. |
||
12 | * |
||
13 | * This program is distributed in the hope that it will be useful, but |
||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
||
15 | * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or |
||
16 | * NON INFRINGEMENT. See the GNU General Public License for more |
||
17 | * details. |
||
18 | * |
||
19 | * You should have received a copy of the GNU General Public License |
||
20 | * along with this program; if not, write to the Free Software |
||
21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||
22 | * |
||
23 | * Send feedback to |
||
24 | */ |
||
25 | #ifndef _ASM_X86_TOPOLOGY_H |
||
26 | #define _ASM_X86_TOPOLOGY_H |
||
27 | |||
28 | #ifdef CONFIG_X86_32 |
||
29 | # ifdef CONFIG_SMP |
||
30 | # define ENABLE_TOPO_DEFINES |
||
31 | # endif |
||
32 | #else |
||
33 | # ifdef CONFIG_SMP |
||
34 | # define ENABLE_TOPO_DEFINES |
||
35 | # endif |
||
36 | #endif |
||
37 | |||
38 | /* |
||
39 | * to preserve the visibility of NUMA_NO_NODE definition, |
||
40 | * moved to there from here. May be used independent of |
||
41 | * CONFIG_NUMA. |
||
42 | */ |
||
43 | #include |
||
44 | |||
45 | #ifdef CONFIG_NUMA |
||
46 | #include |
||
47 | |||
48 | #include |
||
49 | |||
50 | /* Mappings between logical cpu number and node number */ |
||
51 | DECLARE_EARLY_PER_CPU(int, x86_cpu_to_node_map); |
||
52 | |||
53 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS |
||
54 | /* |
||
55 | * override generic percpu implementation of cpu_to_node |
||
56 | */ |
||
57 | extern int __cpu_to_node(int cpu); |
||
58 | #define cpu_to_node __cpu_to_node |
||
59 | |||
60 | extern int early_cpu_to_node(int cpu); |
||
61 | |||
62 | #else /* !CONFIG_DEBUG_PER_CPU_MAPS */ |
||
63 | |||
64 | /* Same function but used if called before per_cpu areas are setup */ |
||
65 | static inline int early_cpu_to_node(int cpu) |
||
66 | { |
||
67 | return early_per_cpu(x86_cpu_to_node_map, cpu); |
||
68 | } |
||
69 | |||
70 | #endif /* !CONFIG_DEBUG_PER_CPU_MAPS */ |
||
71 | |||
72 | /* Mappings between node number and cpus on that node. */ |
||
73 | extern cpumask_var_t node_to_cpumask_map[MAX_NUMNODES]; |
||
74 | |||
75 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS |
||
76 | extern const struct cpumask *cpumask_of_node(int node); |
||
77 | #else |
||
78 | /* Returns a pointer to the cpumask of CPUs on Node 'node'. */ |
||
79 | static inline const struct cpumask *cpumask_of_node(int node) |
||
80 | { |
||
81 | return node_to_cpumask_map[node]; |
||
82 | } |
||
83 | #endif |
||
84 | |||
85 | extern void setup_node_to_cpumask_map(void); |
||
86 | |||
87 | /* |
||
88 | * Returns the number of the node containing Node 'node'. This |
||
89 | * architecture is flat, so it is a pretty simple function! |
||
90 | */ |
||
91 | #define parent_node(node) (node) |
||
92 | |||
93 | #define pcibus_to_node(bus) __pcibus_to_node(bus) |
||
94 | |||
95 | extern int __node_distance(int, int); |
||
96 | #define node_distance(a, b) __node_distance(a, b) |
||
97 | |||
98 | #else /* !CONFIG_NUMA */ |
||
99 | |||
100 | static inline int numa_node_id(void) |
||
101 | { |
||
102 | return 0; |
||
103 | } |
||
104 | /* |
||
105 | * indicate override: |
||
106 | */ |
||
107 | #define numa_node_id numa_node_id |
||
108 | |||
109 | static inline int early_cpu_to_node(int cpu) |
||
110 | { |
||
111 | return 0; |
||
112 | } |
||
113 | |||
114 | static inline void setup_node_to_cpumask_map(void) { } |
||
115 | |||
116 | #endif |
||
117 | |||
118 | #include |
||
119 | |||
120 | extern const struct cpumask *cpu_coregroup_mask(int cpu); |
||
121 | |||
7143 | serge | 122 | #define topology_logical_package_id(cpu) (cpu_data(cpu).logical_proc_id) |
6588 | serge | 123 | #define topology_physical_package_id(cpu) (cpu_data(cpu).phys_proc_id) |
124 | #define topology_core_id(cpu) (cpu_data(cpu).cpu_core_id) |
||
125 | |||
126 | #ifdef ENABLE_TOPO_DEFINES |
||
127 | #define topology_core_cpumask(cpu) (per_cpu(cpu_core_map, cpu)) |
||
128 | #define topology_sibling_cpumask(cpu) (per_cpu(cpu_sibling_map, cpu)) |
||
7143 | serge | 129 | |
130 | extern unsigned int __max_logical_packages; |
||
131 | #define topology_max_packages() (__max_logical_packages) |
||
132 | int topology_update_package_map(unsigned int apicid, unsigned int cpu); |
||
133 | extern int topology_phys_to_logical_pkg(unsigned int pkg); |
||
134 | #else |
||
135 | #define topology_max_packages() (1) |
||
136 | static inline int |
||
137 | topology_update_package_map(unsigned int apicid, unsigned int cpu) { return 0; } |
||
138 | static inline int topology_phys_to_logical_pkg(unsigned int pkg) { return 0; } |
||
6588 | serge | 139 | #endif |
140 | |||
141 | static inline void arch_fix_phys_package_id(int num, u32 slot) |
||
142 | { |
||
143 | } |
||
144 | |||
145 | struct pci_bus; |
||
146 | int x86_pci_root_bus_node(int bus); |
||
147 | void x86_pci_root_bus_resources(int bus, struct list_head *resources); |
||
148 | |||
149 | #endif /* _ASM_X86_TOPOLOGY_H */ |