diff options
Diffstat (limited to 'arch')
| -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 |
4 files changed, 23 insertions, 52 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) { |
