Subversion Repositories Kolibri OS

Rev

Rev 6934 | 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 */