diff options
author | Alex Chiang <achiang@hp.com> | 2009-12-20 14:19:29 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-12-22 03:24:13 -0500 |
commit | 6c5807d7bc7d051fce00863ffb98d36325501eb2 (patch) | |
tree | eceda659786e5e6ff659fca0b0382ec52ea13871 | |
parent | 08ea48a326d8030ef5b7fb02292faf5a53c95e0a (diff) |
ACPI: processor: finish unifying arch_acpi_processor_init_pdc()
The only thing arch-specific about calling _PDC is what bits get
set in the input obj_list buffer.
There's no need for several levels of indirection to twiddle those
bits. Additionally, since we're just messing around with a buffer,
we can simplify the interface; no need to pass around the entire
struct acpi_processor * just to get at the buffer.
Cc: Tony Luck <tony.luck@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r-- | arch/ia64/include/asm/acpi.h | 4 | ||||
-rw-r--r-- | arch/ia64/kernel/acpi-processor.c | 18 | ||||
-rw-r--r-- | arch/x86/include/asm/acpi.h | 19 | ||||
-rw-r--r-- | arch/x86/kernel/acpi/processor.c | 34 | ||||
-rw-r--r-- | drivers/acpi/processor_pdc.c | 6 | ||||
-rw-r--r-- | include/acpi/processor.h | 1 |
6 files changed, 26 insertions, 56 deletions
diff --git a/arch/ia64/include/asm/acpi.h b/arch/ia64/include/asm/acpi.h index 3b7888294648..7ae58892ba8d 100644 --- a/arch/ia64/include/asm/acpi.h +++ b/arch/ia64/include/asm/acpi.h | |||
@@ -133,6 +133,10 @@ extern int __initdata nid_to_pxm_map[MAX_NUMNODES]; | |||
133 | #endif | 133 | #endif |
134 | 134 | ||
135 | static inline bool arch_has_acpi_pdc(void) { return true; } | 135 | static inline bool arch_has_acpi_pdc(void) { return true; } |
136 | static inline void arch_acpi_set_pdc_bits(u32 *buf) | ||
137 | { | ||
138 | buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP; | ||
139 | } | ||
136 | 140 | ||
137 | #define acpi_unlazy_tlb(x) | 141 | #define acpi_unlazy_tlb(x) |
138 | 142 | ||
diff --git a/arch/ia64/kernel/acpi-processor.c b/arch/ia64/kernel/acpi-processor.c index ebe23f58bd6e..7ba5accebf66 100644 --- a/arch/ia64/kernel/acpi-processor.c +++ b/arch/ia64/kernel/acpi-processor.c | |||
@@ -14,24 +14,6 @@ | |||
14 | #include <acpi/processor.h> | 14 | #include <acpi/processor.h> |
15 | #include <asm/acpi.h> | 15 | #include <asm/acpi.h> |
16 | 16 | ||
17 | static void init_intel_pdc(struct acpi_processor *pr) | ||
18 | { | ||
19 | u32 *buf = (u32 *)pr->pdc->pointer->buffer.pointer; | ||
20 | |||
21 | buf[2] |= ACPI_PDC_EST_CAPABILITY_SMP; | ||
22 | |||
23 | return; | ||
24 | } | ||
25 | |||
26 | /* Initialize _PDC data based on the CPU vendor */ | ||
27 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | ||
28 | { | ||
29 | init_intel_pdc(pr); | ||
30 | return; | ||
31 | } | ||
32 | |||
33 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); | ||
34 | |||
35 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr) | 17 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr) |
36 | { | 18 | { |
37 | if (pr->pdc) { | 19 | if (pr->pdc) { |
diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h index d787e6e92bd1..56f462cf22d2 100644 --- a/arch/x86/include/asm/acpi.h +++ b/arch/x86/include/asm/acpi.h | |||
@@ -149,6 +149,25 @@ static inline bool arch_has_acpi_pdc(void) | |||
149 | c->x86_vendor == X86_VENDOR_CENTAUR); | 149 | c->x86_vendor == X86_VENDOR_CENTAUR); |
150 | } | 150 | } |
151 | 151 | ||
152 | static inline void arch_acpi_set_pdc_bits(u32 *buf) | ||
153 | { | ||
154 | struct cpuinfo_x86 *c = &cpu_data(0); | ||
155 | |||
156 | buf[2] |= ACPI_PDC_C_CAPABILITY_SMP; | ||
157 | |||
158 | if (cpu_has(c, X86_FEATURE_EST)) | ||
159 | buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP; | ||
160 | |||
161 | if (cpu_has(c, X86_FEATURE_ACPI)) | ||
162 | buf[2] |= ACPI_PDC_T_FFH; | ||
163 | |||
164 | /* | ||
165 | * If mwait/monitor is unsupported, C2/C3_FFH will be disabled | ||
166 | */ | ||
167 | if (!cpu_has(c, X86_FEATURE_MWAIT)) | ||
168 | buf[2] &= ~(ACPI_PDC_C_C2C3_FFH); | ||
169 | } | ||
170 | |||
152 | #else /* !CONFIG_ACPI */ | 171 | #else /* !CONFIG_ACPI */ |
153 | 172 | ||
154 | #define acpi_lapic 0 | 173 | #define acpi_lapic 0 |
diff --git a/arch/x86/kernel/acpi/processor.c b/arch/x86/kernel/acpi/processor.c index d722ca8cb4c7..0f57307f8224 100644 --- a/arch/x86/kernel/acpi/processor.c +++ b/arch/x86/kernel/acpi/processor.c | |||
@@ -12,40 +12,6 @@ | |||
12 | #include <acpi/processor.h> | 12 | #include <acpi/processor.h> |
13 | #include <asm/acpi.h> | 13 | #include <asm/acpi.h> |
14 | 14 | ||
15 | static void init_intel_pdc(struct acpi_processor *pr, struct cpuinfo_x86 *c) | ||
16 | { | ||
17 | u32 *buf = (u32 *)pr->pdc->pointer->buffer.pointer; | ||
18 | |||
19 | buf[2] |= ACPI_PDC_C_CAPABILITY_SMP; | ||
20 | |||
21 | if (cpu_has(c, X86_FEATURE_EST)) | ||
22 | buf[2] |= ACPI_PDC_EST_CAPABILITY_SWSMP; | ||
23 | |||
24 | if (cpu_has(c, X86_FEATURE_ACPI)) | ||
25 | buf[2] |= ACPI_PDC_T_FFH; | ||
26 | |||
27 | /* | ||
28 | * If mwait/monitor is unsupported, C2/C3_FFH will be disabled | ||
29 | */ | ||
30 | if (!cpu_has(c, X86_FEATURE_MWAIT)) | ||
31 | buf[2] &= ~(ACPI_PDC_C_C2C3_FFH); | ||
32 | |||
33 | return; | ||
34 | } | ||
35 | |||
36 | |||
37 | /* Initialize _PDC data based on the CPU vendor */ | ||
38 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr) | ||
39 | { | ||
40 | struct cpuinfo_x86 *c = &cpu_data(pr->id); | ||
41 | |||
42 | init_intel_pdc(pr, c); | ||
43 | |||
44 | return; | ||
45 | } | ||
46 | |||
47 | EXPORT_SYMBOL(arch_acpi_processor_init_pdc); | ||
48 | |||
49 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr) | 15 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr) |
50 | { | 16 | { |
51 | if (pr->pdc) { | 17 | if (pr->pdc) { |
diff --git a/drivers/acpi/processor_pdc.c b/drivers/acpi/processor_pdc.c index ccda7c95d073..48df08ebcec4 100644 --- a/drivers/acpi/processor_pdc.c +++ b/drivers/acpi/processor_pdc.c | |||
@@ -40,6 +40,9 @@ static void acpi_set_pdc_bits(u32 *buf) | |||
40 | 40 | ||
41 | /* Enable coordination with firmware's _TSD info */ | 41 | /* Enable coordination with firmware's _TSD info */ |
42 | buf[2] = ACPI_PDC_SMP_T_SWCOORD; | 42 | buf[2] = ACPI_PDC_SMP_T_SWCOORD; |
43 | |||
44 | /* Twiddle arch-specific bits needed for _PDC */ | ||
45 | arch_acpi_set_pdc_bits(buf); | ||
43 | } | 46 | } |
44 | 47 | ||
45 | static void acpi_processor_init_pdc(struct acpi_processor *pr) | 48 | static void acpi_processor_init_pdc(struct acpi_processor *pr) |
@@ -81,9 +84,6 @@ static void acpi_processor_init_pdc(struct acpi_processor *pr) | |||
81 | obj_list->pointer = obj; | 84 | obj_list->pointer = obj; |
82 | pr->pdc = obj_list; | 85 | pr->pdc = obj_list; |
83 | 86 | ||
84 | /* Now let the arch do the bit-twiddling to buf[] */ | ||
85 | arch_acpi_processor_init_pdc(pr); | ||
86 | |||
87 | return; | 87 | return; |
88 | } | 88 | } |
89 | 89 | ||
diff --git a/include/acpi/processor.h b/include/acpi/processor.h index a1b748a7a766..50edd734aec6 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h | |||
@@ -257,7 +257,6 @@ int acpi_processor_notify_smm(struct module *calling_module); | |||
257 | DECLARE_PER_CPU(struct acpi_processor *, processors); | 257 | DECLARE_PER_CPU(struct acpi_processor *, processors); |
258 | extern struct acpi_processor_errata errata; | 258 | extern struct acpi_processor_errata errata; |
259 | 259 | ||
260 | void arch_acpi_processor_init_pdc(struct acpi_processor *pr); | ||
261 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr); | 260 | void arch_acpi_processor_cleanup_pdc(struct acpi_processor *pr); |
262 | 261 | ||
263 | #ifdef ARCH_HAS_POWER_INIT | 262 | #ifdef ARCH_HAS_POWER_INIT |