diff options
Diffstat (limited to 'arch/i386')
35 files changed, 474 insertions, 474 deletions
diff --git a/arch/i386/Kconfig b/arch/i386/Kconfig index 5d51b38bd70d..b22f003eaa6d 100644 --- a/arch/i386/Kconfig +++ b/arch/i386/Kconfig | |||
| @@ -1212,7 +1212,6 @@ config PCI_DIRECT | |||
| 1212 | config PCI_MMCONFIG | 1212 | config PCI_MMCONFIG |
| 1213 | bool | 1213 | bool |
| 1214 | depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY) | 1214 | depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY) |
| 1215 | select ACPI_BOOT | ||
| 1216 | default y | 1215 | default y |
| 1217 | 1216 | ||
| 1218 | source "drivers/pci/pcie/Kconfig" | 1217 | source "drivers/pci/pcie/Kconfig" |
diff --git a/arch/i386/Makefile b/arch/i386/Makefile index bf7c9ba709f3..09951990a622 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile | |||
| @@ -156,15 +156,6 @@ install: vmlinux | |||
| 156 | install kernel_install: | 156 | install kernel_install: |
| 157 | $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install | 157 | $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install |
| 158 | 158 | ||
| 159 | prepare: include/asm-$(ARCH)/asm_offsets.h | ||
| 160 | CLEAN_FILES += include/asm-$(ARCH)/asm_offsets.h | ||
| 161 | |||
| 162 | arch/$(ARCH)/kernel/asm-offsets.s: include/asm include/linux/version.h \ | ||
| 163 | include/config/MARKER | ||
| 164 | |||
| 165 | include/asm-$(ARCH)/asm_offsets.h: arch/$(ARCH)/kernel/asm-offsets.s | ||
| 166 | $(call filechk,gen-asm-offsets) | ||
| 167 | |||
| 168 | archclean: | 159 | archclean: |
| 169 | $(Q)$(MAKE) $(clean)=arch/i386/boot | 160 | $(Q)$(MAKE) $(clean)=arch/i386/boot |
| 170 | 161 | ||
diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S index 0587477c99f2..92f669470142 100644 --- a/arch/i386/boot/video.S +++ b/arch/i386/boot/video.S | |||
| @@ -97,6 +97,7 @@ | |||
| 97 | #define PARAM_VESAPM_OFF 0x30 | 97 | #define PARAM_VESAPM_OFF 0x30 |
| 98 | #define PARAM_LFB_PAGES 0x32 | 98 | #define PARAM_LFB_PAGES 0x32 |
| 99 | #define PARAM_VESA_ATTRIB 0x34 | 99 | #define PARAM_VESA_ATTRIB 0x34 |
| 100 | #define PARAM_CAPABILITIES 0x36 | ||
| 100 | 101 | ||
| 101 | /* Define DO_STORE according to CONFIG_VIDEO_RETAIN */ | 102 | /* Define DO_STORE according to CONFIG_VIDEO_RETAIN */ |
| 102 | #ifdef CONFIG_VIDEO_RETAIN | 103 | #ifdef CONFIG_VIDEO_RETAIN |
| @@ -233,6 +234,10 @@ mopar_gr: | |||
| 233 | movw 18(%di), %ax | 234 | movw 18(%di), %ax |
| 234 | movl %eax, %fs:(PARAM_LFB_SIZE) | 235 | movl %eax, %fs:(PARAM_LFB_SIZE) |
| 235 | 236 | ||
| 237 | # store mode capabilities | ||
| 238 | movl 10(%di), %eax | ||
| 239 | movl %eax, %fs:(PARAM_CAPABILITIES) | ||
| 240 | |||
| 236 | # switching the DAC to 8-bit is for <= 8 bpp only | 241 | # switching the DAC to 8-bit is for <= 8 bpp only |
| 237 | movw %fs:(PARAM_LFB_DEPTH), %ax | 242 | movw %fs:(PARAM_LFB_DEPTH), %ax |
| 238 | cmpw $8, %ax | 243 | cmpw $8, %ax |
| @@ -1944,7 +1949,7 @@ store_edid: | |||
| 1944 | movw $0x4f15, %ax # do VBE/DDC | 1949 | movw $0x4f15, %ax # do VBE/DDC |
| 1945 | movw $0x01, %bx | 1950 | movw $0x01, %bx |
| 1946 | movw $0x00, %cx | 1951 | movw $0x00, %cx |
| 1947 | movw $0x01, %dx | 1952 | movw $0x00, %dx |
| 1948 | movw $0x140, %di | 1953 | movw $0x140, %di |
| 1949 | int $0x10 | 1954 | int $0x10 |
| 1950 | 1955 | ||
diff --git a/arch/i386/defconfig b/arch/i386/defconfig index ca07b95c06b8..6a431b926019 100644 --- a/arch/i386/defconfig +++ b/arch/i386/defconfig | |||
| @@ -131,8 +131,6 @@ CONFIG_SOFTWARE_SUSPEND=y | |||
| 131 | # ACPI (Advanced Configuration and Power Interface) Support | 131 | # ACPI (Advanced Configuration and Power Interface) Support |
| 132 | # | 132 | # |
| 133 | CONFIG_ACPI=y | 133 | CONFIG_ACPI=y |
| 134 | CONFIG_ACPI_BOOT=y | ||
| 135 | CONFIG_ACPI_INTERPRETER=y | ||
| 136 | CONFIG_ACPI_SLEEP=y | 134 | CONFIG_ACPI_SLEEP=y |
| 137 | CONFIG_ACPI_SLEEP_PROC_FS=y | 135 | CONFIG_ACPI_SLEEP_PROC_FS=y |
| 138 | CONFIG_ACPI_AC=y | 136 | CONFIG_ACPI_AC=y |
| @@ -144,10 +142,8 @@ CONFIG_ACPI_THERMAL=y | |||
| 144 | # CONFIG_ACPI_ASUS is not set | 142 | # CONFIG_ACPI_ASUS is not set |
| 145 | # CONFIG_ACPI_TOSHIBA is not set | 143 | # CONFIG_ACPI_TOSHIBA is not set |
| 146 | # CONFIG_ACPI_DEBUG is not set | 144 | # CONFIG_ACPI_DEBUG is not set |
| 147 | CONFIG_ACPI_BUS=y | ||
| 148 | CONFIG_ACPI_EC=y | 145 | CONFIG_ACPI_EC=y |
| 149 | CONFIG_ACPI_POWER=y | 146 | CONFIG_ACPI_POWER=y |
| 150 | CONFIG_ACPI_PCI=y | ||
| 151 | CONFIG_ACPI_SYSTEM=y | 147 | CONFIG_ACPI_SYSTEM=y |
| 152 | # CONFIG_X86_PM_TIMER is not set | 148 | # CONFIG_X86_PM_TIMER is not set |
| 153 | 149 | ||
diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile index 64682a0edacf..f10de0f2c5e6 100644 --- a/arch/i386/kernel/Makefile +++ b/arch/i386/kernel/Makefile | |||
| @@ -11,7 +11,7 @@ obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \ | |||
| 11 | 11 | ||
| 12 | obj-y += cpu/ | 12 | obj-y += cpu/ |
| 13 | obj-y += timers/ | 13 | obj-y += timers/ |
| 14 | obj-$(CONFIG_ACPI_BOOT) += acpi/ | 14 | obj-$(CONFIG_ACPI) += acpi/ |
| 15 | obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o | 15 | obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o |
| 16 | obj-$(CONFIG_MCA) += mca.o | 16 | obj-$(CONFIG_MCA) += mca.o |
| 17 | obj-$(CONFIG_X86_MSR) += msr.o | 17 | obj-$(CONFIG_X86_MSR) += msr.o |
diff --git a/arch/i386/kernel/acpi/Makefile b/arch/i386/kernel/acpi/Makefile index 5e291a20c03d..267ca48e1b6c 100644 --- a/arch/i386/kernel/acpi/Makefile +++ b/arch/i386/kernel/acpi/Makefile | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | obj-$(CONFIG_ACPI_BOOT) := boot.o | 1 | obj-y := boot.o |
| 2 | obj-$(CONFIG_X86_IO_APIC) += earlyquirk.o | 2 | obj-$(CONFIG_X86_IO_APIC) += earlyquirk.o |
| 3 | obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o | 3 | obj-$(CONFIG_ACPI_SLEEP) += sleep.o wakeup.o |
| 4 | 4 | ||
diff --git a/arch/i386/kernel/acpi/boot.c b/arch/i386/kernel/acpi/boot.c index 34ee500c26e5..a63351c085c6 100644 --- a/arch/i386/kernel/acpi/boot.c +++ b/arch/i386/kernel/acpi/boot.c | |||
| @@ -40,19 +40,25 @@ | |||
| 40 | 40 | ||
| 41 | #ifdef CONFIG_X86_64 | 41 | #ifdef CONFIG_X86_64 |
| 42 | 42 | ||
| 43 | static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id) { } | 43 | static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
| 44 | { | ||
| 45 | } | ||
| 44 | extern void __init clustered_apic_check(void); | 46 | extern void __init clustered_apic_check(void); |
| 45 | static inline int ioapic_setup_disabled(void) { return 0; } | 47 | static inline int ioapic_setup_disabled(void) |
| 48 | { | ||
| 49 | return 0; | ||
| 50 | } | ||
| 51 | |||
| 46 | #include <asm/proto.h> | 52 | #include <asm/proto.h> |
| 47 | 53 | ||
| 48 | #else /* X86 */ | 54 | #else /* X86 */ |
| 49 | 55 | ||
| 50 | #ifdef CONFIG_X86_LOCAL_APIC | 56 | #ifdef CONFIG_X86_LOCAL_APIC |
| 51 | #include <mach_apic.h> | 57 | #include <mach_apic.h> |
| 52 | #include <mach_mpparse.h> | 58 | #include <mach_mpparse.h> |
| 53 | #endif /* CONFIG_X86_LOCAL_APIC */ | 59 | #endif /* CONFIG_X86_LOCAL_APIC */ |
| 54 | 60 | ||
| 55 | #endif /* X86 */ | 61 | #endif /* X86 */ |
| 56 | 62 | ||
| 57 | #define BAD_MADT_ENTRY(entry, end) ( \ | 63 | #define BAD_MADT_ENTRY(entry, end) ( \ |
| 58 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ | 64 | (!entry) || (unsigned long)entry + sizeof(*entry) > end || \ |
| @@ -60,13 +66,8 @@ static inline int ioapic_setup_disabled(void) { return 0; } | |||
| 60 | 66 | ||
| 61 | #define PREFIX "ACPI: " | 67 | #define PREFIX "ACPI: " |
| 62 | 68 | ||
| 63 | #ifdef CONFIG_ACPI_PCI | ||
| 64 | int acpi_noirq __initdata; /* skip ACPI IRQ initialization */ | 69 | int acpi_noirq __initdata; /* skip ACPI IRQ initialization */ |
| 65 | int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ | 70 | int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */ |
| 66 | #else | ||
| 67 | int acpi_noirq __initdata = 1; | ||
| 68 | int acpi_pci_disabled __initdata = 1; | ||
| 69 | #endif | ||
| 70 | int acpi_ht __initdata = 1; /* enable HT */ | 71 | int acpi_ht __initdata = 1; /* enable HT */ |
| 71 | 72 | ||
| 72 | int acpi_lapic; | 73 | int acpi_lapic; |
| @@ -88,7 +89,7 @@ static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE; | |||
| 88 | 89 | ||
| 89 | #define MAX_MADT_ENTRIES 256 | 90 | #define MAX_MADT_ENTRIES 256 |
| 90 | u8 x86_acpiid_to_apicid[MAX_MADT_ENTRIES] = | 91 | u8 x86_acpiid_to_apicid[MAX_MADT_ENTRIES] = |
| 91 | { [0 ... MAX_MADT_ENTRIES-1] = 0xff }; | 92 | {[0 ... MAX_MADT_ENTRIES - 1] = 0xff }; |
| 92 | EXPORT_SYMBOL(x86_acpiid_to_apicid); | 93 | EXPORT_SYMBOL(x86_acpiid_to_apicid); |
| 93 | 94 | ||
| 94 | /* -------------------------------------------------------------------------- | 95 | /* -------------------------------------------------------------------------- |
| @@ -99,7 +100,7 @@ EXPORT_SYMBOL(x86_acpiid_to_apicid); | |||
| 99 | * The default interrupt routing model is PIC (8259). This gets | 100 | * The default interrupt routing model is PIC (8259). This gets |
| 100 | * overriden if IOAPICs are enumerated (below). | 101 | * overriden if IOAPICs are enumerated (below). |
| 101 | */ | 102 | */ |
| 102 | enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC; | 103 | enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC; |
| 103 | 104 | ||
| 104 | #ifdef CONFIG_X86_64 | 105 | #ifdef CONFIG_X86_64 |
| 105 | 106 | ||
| @@ -107,7 +108,7 @@ enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC; | |||
| 107 | char *__acpi_map_table(unsigned long phys_addr, unsigned long size) | 108 | char *__acpi_map_table(unsigned long phys_addr, unsigned long size) |
| 108 | { | 109 | { |
| 109 | if (!phys_addr || !size) | 110 | if (!phys_addr || !size) |
| 110 | return NULL; | 111 | return NULL; |
| 111 | 112 | ||
| 112 | if (phys_addr < (end_pfn_map << PAGE_SHIFT)) | 113 | if (phys_addr < (end_pfn_map << PAGE_SHIFT)) |
| 113 | return __va(phys_addr); | 114 | return __va(phys_addr); |
| @@ -134,8 +135,8 @@ char *__acpi_map_table(unsigned long phys, unsigned long size) | |||
| 134 | unsigned long base, offset, mapped_size; | 135 | unsigned long base, offset, mapped_size; |
| 135 | int idx; | 136 | int idx; |
| 136 | 137 | ||
| 137 | if (phys + size < 8*1024*1024) | 138 | if (phys + size < 8 * 1024 * 1024) |
| 138 | return __va(phys); | 139 | return __va(phys); |
| 139 | 140 | ||
| 140 | offset = phys & (PAGE_SIZE - 1); | 141 | offset = phys & (PAGE_SIZE - 1); |
| 141 | mapped_size = PAGE_SIZE - offset; | 142 | mapped_size = PAGE_SIZE - offset; |
| @@ -154,7 +155,7 @@ char *__acpi_map_table(unsigned long phys, unsigned long size) | |||
| 154 | mapped_size += PAGE_SIZE; | 155 | mapped_size += PAGE_SIZE; |
| 155 | } | 156 | } |
| 156 | 157 | ||
| 157 | return ((unsigned char *) base + offset); | 158 | return ((unsigned char *)base + offset); |
| 158 | } | 159 | } |
| 159 | #endif | 160 | #endif |
| 160 | 161 | ||
| @@ -172,7 +173,7 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size) | |||
| 172 | if (!phys_addr || !size) | 173 | if (!phys_addr || !size) |
| 173 | return -EINVAL; | 174 | return -EINVAL; |
| 174 | 175 | ||
| 175 | mcfg = (struct acpi_table_mcfg *) __acpi_map_table(phys_addr, size); | 176 | mcfg = (struct acpi_table_mcfg *)__acpi_map_table(phys_addr, size); |
| 176 | if (!mcfg) { | 177 | if (!mcfg) { |
| 177 | printk(KERN_WARNING PREFIX "Unable to map MCFG\n"); | 178 | printk(KERN_WARNING PREFIX "Unable to map MCFG\n"); |
| 178 | return -ENODEV; | 179 | return -ENODEV; |
| @@ -209,20 +210,17 @@ int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size) | |||
| 209 | 210 | ||
| 210 | return 0; | 211 | return 0; |
| 211 | } | 212 | } |
| 212 | #endif /* CONFIG_PCI_MMCONFIG */ | 213 | #endif /* CONFIG_PCI_MMCONFIG */ |
| 213 | 214 | ||
| 214 | #ifdef CONFIG_X86_LOCAL_APIC | 215 | #ifdef CONFIG_X86_LOCAL_APIC |
| 215 | static int __init | 216 | static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size) |
| 216 | acpi_parse_madt ( | ||
| 217 | unsigned long phys_addr, | ||
| 218 | unsigned long size) | ||
| 219 | { | 217 | { |
| 220 | struct acpi_table_madt *madt = NULL; | 218 | struct acpi_table_madt *madt = NULL; |
| 221 | 219 | ||
| 222 | if (!phys_addr || !size) | 220 | if (!phys_addr || !size) |
| 223 | return -EINVAL; | 221 | return -EINVAL; |
| 224 | 222 | ||
| 225 | madt = (struct acpi_table_madt *) __acpi_map_table(phys_addr, size); | 223 | madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size); |
| 226 | if (!madt) { | 224 | if (!madt) { |
| 227 | printk(KERN_WARNING PREFIX "Unable to map MADT\n"); | 225 | printk(KERN_WARNING PREFIX "Unable to map MADT\n"); |
| 228 | return -ENODEV; | 226 | return -ENODEV; |
| @@ -232,22 +230,20 @@ acpi_parse_madt ( | |||
| 232 | acpi_lapic_addr = (u64) madt->lapic_address; | 230 | acpi_lapic_addr = (u64) madt->lapic_address; |
| 233 | 231 | ||
| 234 | printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n", | 232 | printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n", |
| 235 | madt->lapic_address); | 233 | madt->lapic_address); |
| 236 | } | 234 | } |
| 237 | 235 | ||
| 238 | acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id); | 236 | acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id); |
| 239 | 237 | ||
| 240 | return 0; | 238 | return 0; |
| 241 | } | 239 | } |
| 242 | 240 | ||
| 243 | |||
| 244 | static int __init | 241 | static int __init |
| 245 | acpi_parse_lapic ( | 242 | acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end) |
| 246 | acpi_table_entry_header *header, const unsigned long end) | ||
| 247 | { | 243 | { |
| 248 | struct acpi_table_lapic *processor = NULL; | 244 | struct acpi_table_lapic *processor = NULL; |
| 249 | 245 | ||
| 250 | processor = (struct acpi_table_lapic*) header; | 246 | processor = (struct acpi_table_lapic *)header; |
| 251 | 247 | ||
| 252 | if (BAD_MADT_ENTRY(processor, end)) | 248 | if (BAD_MADT_ENTRY(processor, end)) |
| 253 | return -EINVAL; | 249 | return -EINVAL; |
| @@ -260,20 +256,19 @@ acpi_parse_lapic ( | |||
| 260 | 256 | ||
| 261 | x86_acpiid_to_apicid[processor->acpi_id] = processor->id; | 257 | x86_acpiid_to_apicid[processor->acpi_id] = processor->id; |
| 262 | 258 | ||
| 263 | mp_register_lapic ( | 259 | mp_register_lapic(processor->id, /* APIC ID */ |
| 264 | processor->id, /* APIC ID */ | 260 | processor->flags.enabled); /* Enabled? */ |
| 265 | processor->flags.enabled); /* Enabled? */ | ||
| 266 | 261 | ||
| 267 | return 0; | 262 | return 0; |
| 268 | } | 263 | } |
| 269 | 264 | ||
| 270 | static int __init | 265 | static int __init |
| 271 | acpi_parse_lapic_addr_ovr ( | 266 | acpi_parse_lapic_addr_ovr(acpi_table_entry_header * header, |
| 272 | acpi_table_entry_header *header, const unsigned long end) | 267 | const unsigned long end) |
| 273 | { | 268 | { |
| 274 | struct acpi_table_lapic_addr_ovr *lapic_addr_ovr = NULL; | 269 | struct acpi_table_lapic_addr_ovr *lapic_addr_ovr = NULL; |
| 275 | 270 | ||
| 276 | lapic_addr_ovr = (struct acpi_table_lapic_addr_ovr*) header; | 271 | lapic_addr_ovr = (struct acpi_table_lapic_addr_ovr *)header; |
| 277 | 272 | ||
| 278 | if (BAD_MADT_ENTRY(lapic_addr_ovr, end)) | 273 | if (BAD_MADT_ENTRY(lapic_addr_ovr, end)) |
| 279 | return -EINVAL; | 274 | return -EINVAL; |
| @@ -284,12 +279,11 @@ acpi_parse_lapic_addr_ovr ( | |||
| 284 | } | 279 | } |
| 285 | 280 | ||
| 286 | static int __init | 281 | static int __init |
| 287 | acpi_parse_lapic_nmi ( | 282 | acpi_parse_lapic_nmi(acpi_table_entry_header * header, const unsigned long end) |
| 288 | acpi_table_entry_header *header, const unsigned long end) | ||
| 289 | { | 283 | { |
| 290 | struct acpi_table_lapic_nmi *lapic_nmi = NULL; | 284 | struct acpi_table_lapic_nmi *lapic_nmi = NULL; |
| 291 | 285 | ||
| 292 | lapic_nmi = (struct acpi_table_lapic_nmi*) header; | 286 | lapic_nmi = (struct acpi_table_lapic_nmi *)header; |
| 293 | 287 | ||
| 294 | if (BAD_MADT_ENTRY(lapic_nmi, end)) | 288 | if (BAD_MADT_ENTRY(lapic_nmi, end)) |
| 295 | return -EINVAL; | 289 | return -EINVAL; |
| @@ -302,37 +296,32 @@ acpi_parse_lapic_nmi ( | |||
| 302 | return 0; | 296 | return 0; |
| 303 | } | 297 | } |
| 304 | 298 | ||
| 299 | #endif /*CONFIG_X86_LOCAL_APIC */ | ||
| 305 | 300 | ||
| 306 | #endif /*CONFIG_X86_LOCAL_APIC*/ | 301 | #ifdef CONFIG_X86_IO_APIC |
| 307 | |||
| 308 | #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER) | ||
| 309 | 302 | ||
| 310 | static int __init | 303 | static int __init |
| 311 | acpi_parse_ioapic ( | 304 | acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end) |
| 312 | acpi_table_entry_header *header, const unsigned long end) | ||
| 313 | { | 305 | { |
| 314 | struct acpi_table_ioapic *ioapic = NULL; | 306 | struct acpi_table_ioapic *ioapic = NULL; |
| 315 | 307 | ||
| 316 | ioapic = (struct acpi_table_ioapic*) header; | 308 | ioapic = (struct acpi_table_ioapic *)header; |
| 317 | 309 | ||
| 318 | if (BAD_MADT_ENTRY(ioapic, end)) | 310 | if (BAD_MADT_ENTRY(ioapic, end)) |
| 319 | return -EINVAL; | 311 | return -EINVAL; |
| 320 | 312 | ||
| 321 | acpi_table_print_madt_entry(header); | 313 | acpi_table_print_madt_entry(header); |
| 322 | 314 | ||
| 323 | mp_register_ioapic ( | 315 | mp_register_ioapic(ioapic->id, |
| 324 | ioapic->id, | 316 | ioapic->address, ioapic->global_irq_base); |
| 325 | ioapic->address, | 317 | |
| 326 | ioapic->global_irq_base); | ||
| 327 | |||
| 328 | return 0; | 318 | return 0; |
| 329 | } | 319 | } |
| 330 | 320 | ||
| 331 | /* | 321 | /* |
| 332 | * Parse Interrupt Source Override for the ACPI SCI | 322 | * Parse Interrupt Source Override for the ACPI SCI |
| 333 | */ | 323 | */ |
| 334 | static void | 324 | static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) |
| 335 | acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) | ||
| 336 | { | 325 | { |
| 337 | if (trigger == 0) /* compatible SCI trigger is level */ | 326 | if (trigger == 0) /* compatible SCI trigger is level */ |
| 338 | trigger = 3; | 327 | trigger = 3; |
| @@ -348,7 +337,7 @@ acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) | |||
| 348 | polarity = acpi_sci_flags.polarity; | 337 | polarity = acpi_sci_flags.polarity; |
| 349 | 338 | ||
| 350 | /* | 339 | /* |
| 351 | * mp_config_acpi_legacy_irqs() already setup IRQs < 16 | 340 | * mp_config_acpi_legacy_irqs() already setup IRQs < 16 |
| 352 | * If GSI is < 16, this will update its flags, | 341 | * If GSI is < 16, this will update its flags, |
| 353 | * else it will create a new mp_irqs[] entry. | 342 | * else it will create a new mp_irqs[] entry. |
| 354 | */ | 343 | */ |
| @@ -363,12 +352,12 @@ acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger) | |||
| 363 | } | 352 | } |
| 364 | 353 | ||
| 365 | static int __init | 354 | static int __init |
| 366 | acpi_parse_int_src_ovr ( | 355 | acpi_parse_int_src_ovr(acpi_table_entry_header * header, |
| 367 | acpi_table_entry_header *header, const unsigned long end) | 356 | const unsigned long end) |
| 368 | { | 357 | { |
| 369 | struct acpi_table_int_src_ovr *intsrc = NULL; | 358 | struct acpi_table_int_src_ovr *intsrc = NULL; |
| 370 | 359 | ||
| 371 | intsrc = (struct acpi_table_int_src_ovr*) header; | 360 | intsrc = (struct acpi_table_int_src_ovr *)header; |
| 372 | 361 | ||
| 373 | if (BAD_MADT_ENTRY(intsrc, end)) | 362 | if (BAD_MADT_ENTRY(intsrc, end)) |
| 374 | return -EINVAL; | 363 | return -EINVAL; |
| @@ -377,33 +366,30 @@ acpi_parse_int_src_ovr ( | |||
| 377 | 366 | ||
| 378 | if (intsrc->bus_irq == acpi_fadt.sci_int) { | 367 | if (intsrc->bus_irq == acpi_fadt.sci_int) { |
| 379 | acpi_sci_ioapic_setup(intsrc->global_irq, | 368 | acpi_sci_ioapic_setup(intsrc->global_irq, |
| 380 | intsrc->flags.polarity, intsrc->flags.trigger); | 369 | intsrc->flags.polarity, |
| 370 | intsrc->flags.trigger); | ||
| 381 | return 0; | 371 | return 0; |
| 382 | } | 372 | } |
| 383 | 373 | ||
| 384 | if (acpi_skip_timer_override && | 374 | if (acpi_skip_timer_override && |
| 385 | intsrc->bus_irq == 0 && intsrc->global_irq == 2) { | 375 | intsrc->bus_irq == 0 && intsrc->global_irq == 2) { |
| 386 | printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); | 376 | printk(PREFIX "BIOS IRQ0 pin2 override ignored.\n"); |
| 387 | return 0; | 377 | return 0; |
| 388 | } | 378 | } |
| 389 | 379 | ||
| 390 | mp_override_legacy_irq ( | 380 | mp_override_legacy_irq(intsrc->bus_irq, |
| 391 | intsrc->bus_irq, | 381 | intsrc->flags.polarity, |
| 392 | intsrc->flags.polarity, | 382 | intsrc->flags.trigger, intsrc->global_irq); |
| 393 | intsrc->flags.trigger, | ||
| 394 | intsrc->global_irq); | ||
| 395 | 383 | ||
| 396 | return 0; | 384 | return 0; |
| 397 | } | 385 | } |
| 398 | 386 | ||
| 399 | |||
| 400 | static int __init | 387 | static int __init |
| 401 | acpi_parse_nmi_src ( | 388 | acpi_parse_nmi_src(acpi_table_entry_header * header, const unsigned long end) |
| 402 | acpi_table_entry_header *header, const unsigned long end) | ||
| 403 | { | 389 | { |
| 404 | struct acpi_table_nmi_src *nmi_src = NULL; | 390 | struct acpi_table_nmi_src *nmi_src = NULL; |
| 405 | 391 | ||
| 406 | nmi_src = (struct acpi_table_nmi_src*) header; | 392 | nmi_src = (struct acpi_table_nmi_src *)header; |
| 407 | 393 | ||
| 408 | if (BAD_MADT_ENTRY(nmi_src, end)) | 394 | if (BAD_MADT_ENTRY(nmi_src, end)) |
| 409 | return -EINVAL; | 395 | return -EINVAL; |
| @@ -415,9 +401,7 @@ acpi_parse_nmi_src ( | |||
| 415 | return 0; | 401 | return 0; |
| 416 | } | 402 | } |
| 417 | 403 | ||
| 418 | #endif /* CONFIG_X86_IO_APIC */ | 404 | #endif /* CONFIG_X86_IO_APIC */ |
| 419 | |||
| 420 | #ifdef CONFIG_ACPI_BUS | ||
| 421 | 405 | ||
| 422 | /* | 406 | /* |
| 423 | * acpi_pic_sci_set_trigger() | 407 | * acpi_pic_sci_set_trigger() |
| @@ -433,8 +417,7 @@ acpi_parse_nmi_src ( | |||
| 433 | * ECLR2 is IRQ's 8-15 (IRQ 8, 13 must be 0) | 417 | * ECLR2 is IRQ's 8-15 (IRQ 8, 13 must be 0) |
| 434 | */ | 418 | */ |
| 435 | 419 | ||
| 436 | void __init | 420 | void __init acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger) |
| 437 | acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger) | ||
| 438 | { | 421 | { |
| 439 | unsigned int mask = 1 << irq; | 422 | unsigned int mask = 1 << irq; |
| 440 | unsigned int old, new; | 423 | unsigned int old, new; |
| @@ -454,10 +437,10 @@ acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger) | |||
| 454 | * routing tables.. | 437 | * routing tables.. |
| 455 | */ | 438 | */ |
| 456 | switch (trigger) { | 439 | switch (trigger) { |
| 457 | case 1: /* Edge - clear */ | 440 | case 1: /* Edge - clear */ |
| 458 | new &= ~mask; | 441 | new &= ~mask; |
| 459 | break; | 442 | break; |
| 460 | case 3: /* Level - set */ | 443 | case 3: /* Level - set */ |
| 461 | new |= mask; | 444 | new |= mask; |
| 462 | break; | 445 | break; |
| 463 | } | 446 | } |
| @@ -470,21 +453,22 @@ acpi_pic_sci_set_trigger(unsigned int irq, u16 trigger) | |||
| 470 | outb(new >> 8, 0x4d1); | 453 | outb(new >> 8, 0x4d1); |
| 471 | } | 454 | } |
| 472 | 455 | ||
| 473 | |||
| 474 | #endif /* CONFIG_ACPI_BUS */ | ||
| 475 | |||
| 476 | int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) | 456 | int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) |
| 477 | { | 457 | { |
| 478 | #ifdef CONFIG_X86_IO_APIC | 458 | #ifdef CONFIG_X86_IO_APIC |
| 479 | if (use_pci_vector() && !platform_legacy_irq(gsi)) | 459 | if (use_pci_vector() && !platform_legacy_irq(gsi)) |
| 480 | *irq = IO_APIC_VECTOR(gsi); | 460 | *irq = IO_APIC_VECTOR(gsi); |
| 481 | else | 461 | else |
| 482 | #endif | 462 | #endif |
| 483 | *irq = gsi; | 463 | *irq = gsi; |
| 484 | return 0; | 464 | return 0; |
| 485 | } | 465 | } |
| 486 | 466 | ||
| 487 | unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | 467 | /* |
| 468 | * success: return IRQ number (>=0) | ||
| 469 | * failure: return < 0 | ||
| 470 | */ | ||
| 471 | int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | ||
| 488 | { | 472 | { |
| 489 | unsigned int irq; | 473 | unsigned int irq; |
| 490 | unsigned int plat_gsi = gsi; | 474 | unsigned int plat_gsi = gsi; |
| @@ -497,7 +481,7 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | |||
| 497 | extern void eisa_set_level_irq(unsigned int irq); | 481 | extern void eisa_set_level_irq(unsigned int irq); |
| 498 | 482 | ||
| 499 | if (edge_level == ACPI_LEVEL_SENSITIVE) | 483 | if (edge_level == ACPI_LEVEL_SENSITIVE) |
| 500 | eisa_set_level_irq(gsi); | 484 | eisa_set_level_irq(gsi); |
| 501 | } | 485 | } |
| 502 | #endif | 486 | #endif |
| 503 | 487 | ||
| @@ -509,60 +493,58 @@ unsigned int acpi_register_gsi(u32 gsi, int edge_level, int active_high_low) | |||
| 509 | acpi_gsi_to_irq(plat_gsi, &irq); | 493 | acpi_gsi_to_irq(plat_gsi, &irq); |
| 510 | return irq; | 494 | return irq; |
| 511 | } | 495 | } |
| 496 | |||
| 512 | EXPORT_SYMBOL(acpi_register_gsi); | 497 | EXPORT_SYMBOL(acpi_register_gsi); |
| 513 | 498 | ||
| 514 | /* | 499 | /* |
| 515 | * ACPI based hotplug support for CPU | 500 | * ACPI based hotplug support for CPU |
| 516 | */ | 501 | */ |
| 517 | #ifdef CONFIG_ACPI_HOTPLUG_CPU | 502 | #ifdef CONFIG_ACPI_HOTPLUG_CPU |
| 518 | int | 503 | int acpi_map_lsapic(acpi_handle handle, int *pcpu) |
| 519 | acpi_map_lsapic(acpi_handle handle, int *pcpu) | ||
| 520 | { | 504 | { |
| 521 | /* TBD */ | 505 | /* TBD */ |
| 522 | return -EINVAL; | 506 | return -EINVAL; |
| 523 | } | 507 | } |
| 524 | EXPORT_SYMBOL(acpi_map_lsapic); | ||
| 525 | 508 | ||
| 509 | EXPORT_SYMBOL(acpi_map_lsapic); | ||
| 526 | 510 | ||
| 527 | int | 511 | int acpi_unmap_lsapic(int cpu) |
| 528 | acpi_unmap_lsapic(int cpu) | ||
| 529 | { | 512 | { |
| 530 | /* TBD */ | 513 | /* TBD */ |
| 531 | return -EINVAL; | 514 | return -EINVAL; |
| 532 | } | 515 | } |
| 516 | |||
| 533 | EXPORT_SYMBOL(acpi_unmap_lsapic); | 517 | EXPORT_SYMBOL(acpi_unmap_lsapic); |
| 534 | #endif /* CONFIG_ACPI_HOTPLUG_CPU */ | 518 | #endif /* CONFIG_ACPI_HOTPLUG_CPU */ |
| 535 | 519 | ||
| 536 | int | 520 | int acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base) |
| 537 | acpi_register_ioapic(acpi_handle handle, u64 phys_addr, u32 gsi_base) | ||
| 538 | { | 521 | { |
| 539 | /* TBD */ | 522 | /* TBD */ |
| 540 | return -EINVAL; | 523 | return -EINVAL; |
| 541 | } | 524 | } |
| 525 | |||
| 542 | EXPORT_SYMBOL(acpi_register_ioapic); | 526 | EXPORT_SYMBOL(acpi_register_ioapic); |
| 543 | 527 | ||
| 544 | int | 528 | int acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base) |
| 545 | acpi_unregister_ioapic(acpi_handle handle, u32 gsi_base) | ||
| 546 | { | 529 | { |
| 547 | /* TBD */ | 530 | /* TBD */ |
| 548 | return -EINVAL; | 531 | return -EINVAL; |
| 549 | } | 532 | } |
| 533 | |||
| 550 | EXPORT_SYMBOL(acpi_unregister_ioapic); | 534 | EXPORT_SYMBOL(acpi_unregister_ioapic); |
| 551 | 535 | ||
| 552 | static unsigned long __init | 536 | static unsigned long __init |
| 553 | acpi_scan_rsdp ( | 537 | acpi_scan_rsdp(unsigned long start, unsigned long length) |
| 554 | unsigned long start, | ||
| 555 | unsigned long length) | ||
| 556 | { | 538 | { |
| 557 | unsigned long offset = 0; | 539 | unsigned long offset = 0; |
| 558 | unsigned long sig_len = sizeof("RSD PTR ") - 1; | 540 | unsigned long sig_len = sizeof("RSD PTR ") - 1; |
| 559 | 541 | ||
| 560 | /* | 542 | /* |
| 561 | * Scan all 16-byte boundaries of the physical memory region for the | 543 | * Scan all 16-byte boundaries of the physical memory region for the |
| 562 | * RSDP signature. | 544 | * RSDP signature. |
| 563 | */ | 545 | */ |
| 564 | for (offset = 0; offset < length; offset += 16) { | 546 | for (offset = 0; offset < length; offset += 16) { |
| 565 | if (strncmp((char *) (start + offset), "RSD PTR ", sig_len)) | 547 | if (strncmp((char *)(start + offset), "RSD PTR ", sig_len)) |
| 566 | continue; | 548 | continue; |
| 567 | return (start + offset); | 549 | return (start + offset); |
| 568 | } | 550 | } |
| @@ -575,20 +557,19 @@ static int __init acpi_parse_sbf(unsigned long phys_addr, unsigned long size) | |||
| 575 | struct acpi_table_sbf *sb; | 557 | struct acpi_table_sbf *sb; |
| 576 | 558 | ||
| 577 | if (!phys_addr || !size) | 559 | if (!phys_addr || !size) |
| 578 | return -EINVAL; | 560 | return -EINVAL; |
| 579 | 561 | ||
| 580 | sb = (struct acpi_table_sbf *) __acpi_map_table(phys_addr, size); | 562 | sb = (struct acpi_table_sbf *)__acpi_map_table(phys_addr, size); |
| 581 | if (!sb) { | 563 | if (!sb) { |
| 582 | printk(KERN_WARNING PREFIX "Unable to map SBF\n"); | 564 | printk(KERN_WARNING PREFIX "Unable to map SBF\n"); |
| 583 | return -ENODEV; | 565 | return -ENODEV; |
| 584 | } | 566 | } |
| 585 | 567 | ||
| 586 | sbf_port = sb->sbf_cmos; /* Save CMOS port */ | 568 | sbf_port = sb->sbf_cmos; /* Save CMOS port */ |
| 587 | 569 | ||
| 588 | return 0; | 570 | return 0; |
| 589 | } | 571 | } |
| 590 | 572 | ||
| 591 | |||
| 592 | #ifdef CONFIG_HPET_TIMER | 573 | #ifdef CONFIG_HPET_TIMER |
| 593 | 574 | ||
| 594 | static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) | 575 | static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) |
| @@ -598,7 +579,7 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) | |||
| 598 | if (!phys || !size) | 579 | if (!phys || !size) |
| 599 | return -EINVAL; | 580 | return -EINVAL; |
| 600 | 581 | ||
| 601 | hpet_tbl = (struct acpi_table_hpet *) __acpi_map_table(phys, size); | 582 | hpet_tbl = (struct acpi_table_hpet *)__acpi_map_table(phys, size); |
| 602 | if (!hpet_tbl) { | 583 | if (!hpet_tbl) { |
| 603 | printk(KERN_WARNING PREFIX "Unable to map HPET\n"); | 584 | printk(KERN_WARNING PREFIX "Unable to map HPET\n"); |
| 604 | return -ENODEV; | 585 | return -ENODEV; |
| @@ -609,22 +590,21 @@ static int __init acpi_parse_hpet(unsigned long phys, unsigned long size) | |||
| 609 | "memory.\n"); | 590 | "memory.\n"); |
| 610 | return -1; | 591 | return -1; |
| 611 | } | 592 | } |
| 612 | |||
| 613 | #ifdef CONFIG_X86_64 | 593 | #ifdef CONFIG_X86_64 |
| 614 | vxtime.hpet_address = hpet_tbl->addr.addrl | | 594 | vxtime.hpet_address = hpet_tbl->addr.addrl | |
| 615 | ((long) hpet_tbl->addr.addrh << 32); | 595 | ((long)hpet_tbl->addr.addrh << 32); |
| 616 | 596 | ||
| 617 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", | 597 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", |
| 618 | hpet_tbl->id, vxtime.hpet_address); | 598 | hpet_tbl->id, vxtime.hpet_address); |
| 619 | #else /* X86 */ | 599 | #else /* X86 */ |
| 620 | { | 600 | { |
| 621 | extern unsigned long hpet_address; | 601 | extern unsigned long hpet_address; |
| 622 | 602 | ||
| 623 | hpet_address = hpet_tbl->addr.addrl; | 603 | hpet_address = hpet_tbl->addr.addrl; |
| 624 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", | 604 | printk(KERN_INFO PREFIX "HPET id: %#x base: %#lx\n", |
| 625 | hpet_tbl->id, hpet_address); | 605 | hpet_tbl->id, hpet_address); |
| 626 | } | 606 | } |
| 627 | #endif /* X86 */ | 607 | #endif /* X86 */ |
| 628 | 608 | ||
| 629 | return 0; | 609 | return 0; |
| 630 | } | 610 | } |
| @@ -640,28 +620,25 @@ static int __init acpi_parse_fadt(unsigned long phys, unsigned long size) | |||
| 640 | { | 620 | { |
| 641 | struct fadt_descriptor_rev2 *fadt = NULL; | 621 | struct fadt_descriptor_rev2 *fadt = NULL; |
| 642 | 622 | ||
| 643 | fadt = (struct fadt_descriptor_rev2*) __acpi_map_table(phys,size); | 623 | fadt = (struct fadt_descriptor_rev2 *)__acpi_map_table(phys, size); |
| 644 | if(!fadt) { | 624 | if (!fadt) { |
| 645 | printk(KERN_WARNING PREFIX "Unable to map FADT\n"); | 625 | printk(KERN_WARNING PREFIX "Unable to map FADT\n"); |
| 646 | return 0; | 626 | return 0; |
| 647 | } | 627 | } |
| 648 | |||
| 649 | #ifdef CONFIG_ACPI_INTERPRETER | ||
| 650 | /* initialize sci_int early for INT_SRC_OVR MADT parsing */ | 628 | /* initialize sci_int early for INT_SRC_OVR MADT parsing */ |
| 651 | acpi_fadt.sci_int = fadt->sci_int; | 629 | acpi_fadt.sci_int = fadt->sci_int; |
| 652 | #endif | ||
| 653 | 630 | ||
| 654 | #ifdef CONFIG_ACPI_BUS | ||
| 655 | /* initialize rev and apic_phys_dest_mode for x86_64 genapic */ | 631 | /* initialize rev and apic_phys_dest_mode for x86_64 genapic */ |
| 656 | acpi_fadt.revision = fadt->revision; | 632 | acpi_fadt.revision = fadt->revision; |
| 657 | acpi_fadt.force_apic_physical_destination_mode = fadt->force_apic_physical_destination_mode; | 633 | acpi_fadt.force_apic_physical_destination_mode = |
| 658 | #endif | 634 | fadt->force_apic_physical_destination_mode; |
| 659 | 635 | ||
| 660 | #ifdef CONFIG_X86_PM_TIMER | 636 | #ifdef CONFIG_X86_PM_TIMER |
| 661 | /* detect the location of the ACPI PM Timer */ | 637 | /* detect the location of the ACPI PM Timer */ |
| 662 | if (fadt->revision >= FADT2_REVISION_ID) { | 638 | if (fadt->revision >= FADT2_REVISION_ID) { |
| 663 | /* FADT rev. 2 */ | 639 | /* FADT rev. 2 */ |
| 664 | if (fadt->xpm_tmr_blk.address_space_id != ACPI_ADR_SPACE_SYSTEM_IO) | 640 | if (fadt->xpm_tmr_blk.address_space_id != |
| 641 | ACPI_ADR_SPACE_SYSTEM_IO) | ||
| 665 | return 0; | 642 | return 0; |
| 666 | 643 | ||
| 667 | pmtmr_ioport = fadt->xpm_tmr_blk.address; | 644 | pmtmr_ioport = fadt->xpm_tmr_blk.address; |
| @@ -670,16 +647,15 @@ static int __init acpi_parse_fadt(unsigned long phys, unsigned long size) | |||
| 670 | pmtmr_ioport = fadt->V1_pm_tmr_blk; | 647 | pmtmr_ioport = fadt->V1_pm_tmr_blk; |
| 671 | } | 648 | } |
| 672 | if (pmtmr_ioport) | 649 | if (pmtmr_ioport) |
| 673 | printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n", pmtmr_ioport); | 650 | printk(KERN_INFO PREFIX "PM-Timer IO Port: %#x\n", |
| 651 | pmtmr_ioport); | ||
| 674 | #endif | 652 | #endif |
| 675 | return 0; | 653 | return 0; |
| 676 | } | 654 | } |
| 677 | 655 | ||
| 678 | 656 | unsigned long __init acpi_find_rsdp(void) | |
| 679 | unsigned long __init | ||
| 680 | acpi_find_rsdp (void) | ||
| 681 | { | 657 | { |
| 682 | unsigned long rsdp_phys = 0; | 658 | unsigned long rsdp_phys = 0; |
| 683 | 659 | ||
| 684 | if (efi_enabled) { | 660 | if (efi_enabled) { |
| 685 | if (efi.acpi20) | 661 | if (efi.acpi20) |
| @@ -691,9 +667,9 @@ acpi_find_rsdp (void) | |||
| 691 | * Scan memory looking for the RSDP signature. First search EBDA (low | 667 | * Scan memory looking for the RSDP signature. First search EBDA (low |
| 692 | * memory) paragraphs and then search upper memory (E0000-FFFFF). | 668 | * memory) paragraphs and then search upper memory (E0000-FFFFF). |
| 693 | */ | 669 | */ |
| 694 | rsdp_phys = acpi_scan_rsdp (0, 0x400); | 670 | rsdp_phys = acpi_scan_rsdp(0, 0x400); |
| 695 | if (!rsdp_phys) | 671 | if (!rsdp_phys) |
| 696 | rsdp_phys = acpi_scan_rsdp (0xE0000, 0x20000); | 672 | rsdp_phys = acpi_scan_rsdp(0xE0000, 0x20000); |
| 697 | 673 | ||
| 698 | return rsdp_phys; | 674 | return rsdp_phys; |
| 699 | } | 675 | } |
| @@ -703,8 +679,7 @@ acpi_find_rsdp (void) | |||
| 703 | * Parse LAPIC entries in MADT | 679 | * Parse LAPIC entries in MADT |
| 704 | * returns 0 on success, < 0 on error | 680 | * returns 0 on success, < 0 on error |
| 705 | */ | 681 | */ |
| 706 | static int __init | 682 | static int __init acpi_parse_madt_lapic_entries(void) |
| 707 | acpi_parse_madt_lapic_entries(void) | ||
| 708 | { | 683 | { |
| 709 | int count; | 684 | int count; |
| 710 | 685 | ||
| @@ -713,28 +688,31 @@ acpi_parse_madt_lapic_entries(void) | |||
| 713 | * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value). | 688 | * and (optionally) overriden by a LAPIC_ADDR_OVR entry (64-bit value). |
| 714 | */ | 689 | */ |
| 715 | 690 | ||
| 716 | count = acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, acpi_parse_lapic_addr_ovr, 0); | 691 | count = |
| 692 | acpi_table_parse_madt(ACPI_MADT_LAPIC_ADDR_OVR, | ||
| 693 | acpi_parse_lapic_addr_ovr, 0); | ||
| 717 | if (count < 0) { | 694 | if (count < 0) { |
| 718 | printk(KERN_ERR PREFIX "Error parsing LAPIC address override entry\n"); | 695 | printk(KERN_ERR PREFIX |
| 696 | "Error parsing LAPIC address override entry\n"); | ||
| 719 | return count; | 697 | return count; |
| 720 | } | 698 | } |
| 721 | 699 | ||
| 722 | mp_register_lapic_address(acpi_lapic_addr); | 700 | mp_register_lapic_address(acpi_lapic_addr); |
| 723 | 701 | ||
| 724 | count = acpi_table_parse_madt(ACPI_MADT_LAPIC, acpi_parse_lapic, | 702 | count = acpi_table_parse_madt(ACPI_MADT_LAPIC, acpi_parse_lapic, |
| 725 | MAX_APICS); | 703 | MAX_APICS); |
| 726 | if (!count) { | 704 | if (!count) { |
| 727 | printk(KERN_ERR PREFIX "No LAPIC entries present\n"); | 705 | printk(KERN_ERR PREFIX "No LAPIC entries present\n"); |
| 728 | /* TBD: Cleanup to allow fallback to MPS */ | 706 | /* TBD: Cleanup to allow fallback to MPS */ |
| 729 | return -ENODEV; | 707 | return -ENODEV; |
| 730 | } | 708 | } else if (count < 0) { |
| 731 | else if (count < 0) { | ||
| 732 | printk(KERN_ERR PREFIX "Error parsing LAPIC entry\n"); | 709 | printk(KERN_ERR PREFIX "Error parsing LAPIC entry\n"); |
| 733 | /* TBD: Cleanup to allow fallback to MPS */ | 710 | /* TBD: Cleanup to allow fallback to MPS */ |
| 734 | return count; | 711 | return count; |
| 735 | } | 712 | } |
| 736 | 713 | ||
| 737 | count = acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0); | 714 | count = |
| 715 | acpi_table_parse_madt(ACPI_MADT_LAPIC_NMI, acpi_parse_lapic_nmi, 0); | ||
| 738 | if (count < 0) { | 716 | if (count < 0) { |
| 739 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); | 717 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); |
| 740 | /* TBD: Cleanup to allow fallback to MPS */ | 718 | /* TBD: Cleanup to allow fallback to MPS */ |
| @@ -742,15 +720,14 @@ acpi_parse_madt_lapic_entries(void) | |||
| 742 | } | 720 | } |
| 743 | return 0; | 721 | return 0; |
| 744 | } | 722 | } |
| 745 | #endif /* CONFIG_X86_LOCAL_APIC */ | 723 | #endif /* CONFIG_X86_LOCAL_APIC */ |
| 746 | 724 | ||
| 747 | #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI_INTERPRETER) | 725 | #ifdef CONFIG_X86_IO_APIC |
| 748 | /* | 726 | /* |
| 749 | * Parse IOAPIC related entries in MADT | 727 | * Parse IOAPIC related entries in MADT |
| 750 | * returns 0 on success, < 0 on error | 728 | * returns 0 on success, < 0 on error |
| 751 | */ | 729 | */ |
| 752 | static int __init | 730 | static int __init acpi_parse_madt_ioapic_entries(void) |
| 753 | acpi_parse_madt_ioapic_entries(void) | ||
| 754 | { | 731 | { |
| 755 | int count; | 732 | int count; |
| 756 | 733 | ||
| @@ -762,30 +739,34 @@ acpi_parse_madt_ioapic_entries(void) | |||
| 762 | */ | 739 | */ |
| 763 | if (acpi_disabled || acpi_noirq) { | 740 | if (acpi_disabled || acpi_noirq) { |
| 764 | return -ENODEV; | 741 | return -ENODEV; |
| 765 | } | 742 | } |
| 766 | 743 | ||
| 767 | /* | 744 | /* |
| 768 | * if "noapic" boot option, don't look for IO-APICs | 745 | * if "noapic" boot option, don't look for IO-APICs |
| 769 | */ | 746 | */ |
| 770 | if (skip_ioapic_setup) { | 747 | if (skip_ioapic_setup) { |
| 771 | printk(KERN_INFO PREFIX "Skipping IOAPIC probe " | 748 | printk(KERN_INFO PREFIX "Skipping IOAPIC probe " |
| 772 | "due to 'noapic' option.\n"); | 749 | "due to 'noapic' option.\n"); |
| 773 | return -ENODEV; | 750 | return -ENODEV; |
| 774 | } | 751 | } |
| 775 | 752 | ||
| 776 | count = acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic, MAX_IO_APICS); | 753 | count = |
| 754 | acpi_table_parse_madt(ACPI_MADT_IOAPIC, acpi_parse_ioapic, | ||
| 755 | MAX_IO_APICS); | ||
| 777 | if (!count) { | 756 | if (!count) { |
| 778 | printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); | 757 | printk(KERN_ERR PREFIX "No IOAPIC entries present\n"); |
| 779 | return -ENODEV; | 758 | return -ENODEV; |
| 780 | } | 759 | } else if (count < 0) { |
| 781 | else if (count < 0) { | ||
| 782 | printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n"); | 760 | printk(KERN_ERR PREFIX "Error parsing IOAPIC entry\n"); |
| 783 | return count; | 761 | return count; |
| 784 | } | 762 | } |
| 785 | 763 | ||
| 786 | count = acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, NR_IRQ_VECTORS); | 764 | count = |
| 765 | acpi_table_parse_madt(ACPI_MADT_INT_SRC_OVR, acpi_parse_int_src_ovr, | ||
| 766 | NR_IRQ_VECTORS); | ||
| 787 | if (count < 0) { | 767 | if (count < 0) { |
| 788 | printk(KERN_ERR PREFIX "Error parsing interrupt source overrides entry\n"); | 768 | printk(KERN_ERR PREFIX |
| 769 | "Error parsing interrupt source overrides entry\n"); | ||
| 789 | /* TBD: Cleanup to allow fallback to MPS */ | 770 | /* TBD: Cleanup to allow fallback to MPS */ |
| 790 | return count; | 771 | return count; |
| 791 | } | 772 | } |
| @@ -800,7 +781,9 @@ acpi_parse_madt_ioapic_entries(void) | |||
| 800 | /* Fill in identity legacy mapings where no override */ | 781 | /* Fill in identity legacy mapings where no override */ |
| 801 | mp_config_acpi_legacy_irqs(); | 782 | mp_config_acpi_legacy_irqs(); |
| 802 | 783 | ||
| 803 | count = acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, NR_IRQ_VECTORS); | 784 | count = |
| 785 | acpi_table_parse_madt(ACPI_MADT_NMI_SRC, acpi_parse_nmi_src, | ||
| 786 | NR_IRQ_VECTORS); | ||
| 804 | if (count < 0) { | 787 | if (count < 0) { |
| 805 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); | 788 | printk(KERN_ERR PREFIX "Error parsing NMI SRC entry\n"); |
| 806 | /* TBD: Cleanup to allow fallback to MPS */ | 789 | /* TBD: Cleanup to allow fallback to MPS */ |
| @@ -814,11 +797,9 @@ static inline int acpi_parse_madt_ioapic_entries(void) | |||
| 814 | { | 797 | { |
| 815 | return -1; | 798 | return -1; |
| 816 | } | 799 | } |
| 817 | #endif /* !(CONFIG_X86_IO_APIC && CONFIG_ACPI_INTERPRETER) */ | 800 | #endif /* !CONFIG_X86_IO_APIC */ |
| 818 | 801 | ||
| 819 | 802 | static void __init acpi_process_madt(void) | |
| 820 | static void __init | ||
| 821 | acpi_process_madt(void) | ||
| 822 | { | 803 | { |
| 823 | #ifdef CONFIG_X86_LOCAL_APIC | 804 | #ifdef CONFIG_X86_LOCAL_APIC |
| 824 | int count, error; | 805 | int count, error; |
| @@ -853,7 +834,8 @@ acpi_process_madt(void) | |||
| 853 | /* | 834 | /* |
| 854 | * Dell Precision Workstation 410, 610 come here. | 835 | * Dell Precision Workstation 410, 610 come here. |
| 855 | */ | 836 | */ |
| 856 | printk(KERN_ERR PREFIX "Invalid BIOS MADT, disabling ACPI\n"); | 837 | printk(KERN_ERR PREFIX |
| 838 | "Invalid BIOS MADT, disabling ACPI\n"); | ||
| 857 | disable_acpi(); | 839 | disable_acpi(); |
| 858 | } | 840 | } |
| 859 | } | 841 | } |
| @@ -865,7 +847,6 @@ extern int acpi_force; | |||
| 865 | 847 | ||
| 866 | #ifdef __i386__ | 848 | #ifdef __i386__ |
| 867 | 849 | ||
| 868 | #ifdef CONFIG_ACPI_PCI | ||
| 869 | static int __init disable_acpi_irq(struct dmi_system_id *d) | 850 | static int __init disable_acpi_irq(struct dmi_system_id *d) |
| 870 | { | 851 | { |
| 871 | if (!acpi_force) { | 852 | if (!acpi_force) { |
| @@ -885,12 +866,11 @@ static int __init disable_acpi_pci(struct dmi_system_id *d) | |||
| 885 | } | 866 | } |
| 886 | return 0; | 867 | return 0; |
| 887 | } | 868 | } |
| 888 | #endif | ||
| 889 | 869 | ||
| 890 | static int __init dmi_disable_acpi(struct dmi_system_id *d) | 870 | static int __init dmi_disable_acpi(struct dmi_system_id *d) |
| 891 | { | 871 | { |
| 892 | if (!acpi_force) { | 872 | if (!acpi_force) { |
| 893 | printk(KERN_NOTICE "%s detected: acpi off\n",d->ident); | 873 | printk(KERN_NOTICE "%s detected: acpi off\n", d->ident); |
| 894 | disable_acpi(); | 874 | disable_acpi(); |
| 895 | } else { | 875 | } else { |
| 896 | printk(KERN_NOTICE | 876 | printk(KERN_NOTICE |
| @@ -905,7 +885,8 @@ static int __init dmi_disable_acpi(struct dmi_system_id *d) | |||
| 905 | static int __init force_acpi_ht(struct dmi_system_id *d) | 885 | static int __init force_acpi_ht(struct dmi_system_id *d) |
| 906 | { | 886 | { |
| 907 | if (!acpi_force) { | 887 | if (!acpi_force) { |
| 908 | printk(KERN_NOTICE "%s detected: force use of acpi=ht\n", d->ident); | 888 | printk(KERN_NOTICE "%s detected: force use of acpi=ht\n", |
| 889 | d->ident); | ||
| 909 | disable_acpi(); | 890 | disable_acpi(); |
| 910 | acpi_ht = 1; | 891 | acpi_ht = 1; |
| 911 | } else { | 892 | } else { |
| @@ -924,155 +905,155 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | |||
| 924 | * Boxes that need ACPI disabled | 905 | * Boxes that need ACPI disabled |
| 925 | */ | 906 | */ |
| 926 | { | 907 | { |
| 927 | .callback = dmi_disable_acpi, | 908 | .callback = dmi_disable_acpi, |
| 928 | .ident = "IBM Thinkpad", | 909 | .ident = "IBM Thinkpad", |
| 929 | .matches = { | 910 | .matches = { |
| 930 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), | 911 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), |
| 931 | DMI_MATCH(DMI_BOARD_NAME, "2629H1G"), | 912 | DMI_MATCH(DMI_BOARD_NAME, "2629H1G"), |
| 932 | }, | 913 | }, |
| 933 | }, | 914 | }, |
| 934 | 915 | ||
| 935 | /* | 916 | /* |
| 936 | * Boxes that need acpi=ht | 917 | * Boxes that need acpi=ht |
| 937 | */ | 918 | */ |
| 938 | { | 919 | { |
| 939 | .callback = force_acpi_ht, | 920 | .callback = force_acpi_ht, |
| 940 | .ident = "FSC Primergy T850", | 921 | .ident = "FSC Primergy T850", |
| 941 | .matches = { | 922 | .matches = { |
| 942 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | 923 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), |
| 943 | DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"), | 924 | DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"), |
| 944 | }, | 925 | }, |
| 945 | }, | 926 | }, |
| 946 | { | 927 | { |
| 947 | .callback = force_acpi_ht, | 928 | .callback = force_acpi_ht, |
| 948 | .ident = "DELL GX240", | 929 | .ident = "DELL GX240", |
| 949 | .matches = { | 930 | .matches = { |
| 950 | DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"), | 931 | DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"), |
| 951 | DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"), | 932 | DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"), |
| 952 | }, | 933 | }, |
| 953 | }, | 934 | }, |
| 954 | { | 935 | { |
| 955 | .callback = force_acpi_ht, | 936 | .callback = force_acpi_ht, |
| 956 | .ident = "HP VISUALIZE NT Workstation", | 937 | .ident = "HP VISUALIZE NT Workstation", |
| 957 | .matches = { | 938 | .matches = { |
| 958 | DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), | 939 | DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"), |
| 959 | DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"), | 940 | DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"), |
| 960 | }, | 941 | }, |
| 961 | }, | 942 | }, |
| 962 | { | 943 | { |
| 963 | .callback = force_acpi_ht, | 944 | .callback = force_acpi_ht, |
| 964 | .ident = "Compaq Workstation W8000", | 945 | .ident = "Compaq Workstation W8000", |
| 965 | .matches = { | 946 | .matches = { |
| 966 | DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), | 947 | DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), |
| 967 | DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"), | 948 | DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"), |
| 968 | }, | 949 | }, |
| 969 | }, | 950 | }, |
| 970 | { | 951 | { |
| 971 | .callback = force_acpi_ht, | 952 | .callback = force_acpi_ht, |
| 972 | .ident = "ASUS P4B266", | 953 | .ident = "ASUS P4B266", |
| 973 | .matches = { | 954 | .matches = { |
| 974 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), | 955 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
| 975 | DMI_MATCH(DMI_BOARD_NAME, "P4B266"), | 956 | DMI_MATCH(DMI_BOARD_NAME, "P4B266"), |
| 976 | }, | 957 | }, |
| 977 | }, | 958 | }, |
| 978 | { | 959 | { |
| 979 | .callback = force_acpi_ht, | 960 | .callback = force_acpi_ht, |
| 980 | .ident = "ASUS P2B-DS", | 961 | .ident = "ASUS P2B-DS", |
| 981 | .matches = { | 962 | .matches = { |
| 982 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), | 963 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
| 983 | DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"), | 964 | DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"), |
| 984 | }, | 965 | }, |
| 985 | }, | 966 | }, |
| 986 | { | 967 | { |
| 987 | .callback = force_acpi_ht, | 968 | .callback = force_acpi_ht, |
| 988 | .ident = "ASUS CUR-DLS", | 969 | .ident = "ASUS CUR-DLS", |
| 989 | .matches = { | 970 | .matches = { |
| 990 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), | 971 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
| 991 | DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"), | 972 | DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"), |
| 992 | }, | 973 | }, |
| 993 | }, | 974 | }, |
| 994 | { | 975 | { |
| 995 | .callback = force_acpi_ht, | 976 | .callback = force_acpi_ht, |
| 996 | .ident = "ABIT i440BX-W83977", | 977 | .ident = "ABIT i440BX-W83977", |
| 997 | .matches = { | 978 | .matches = { |
| 998 | DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"), | 979 | DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"), |
| 999 | DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"), | 980 | DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"), |
| 1000 | }, | 981 | }, |
| 1001 | }, | 982 | }, |
| 1002 | { | 983 | { |
| 1003 | .callback = force_acpi_ht, | 984 | .callback = force_acpi_ht, |
| 1004 | .ident = "IBM Bladecenter", | 985 | .ident = "IBM Bladecenter", |
| 1005 | .matches = { | 986 | .matches = { |
| 1006 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), | 987 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), |
| 1007 | DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"), | 988 | DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"), |
| 1008 | }, | 989 | }, |
| 1009 | }, | 990 | }, |
| 1010 | { | 991 | { |
| 1011 | .callback = force_acpi_ht, | 992 | .callback = force_acpi_ht, |
| 1012 | .ident = "IBM eServer xSeries 360", | 993 | .ident = "IBM eServer xSeries 360", |
| 1013 | .matches = { | 994 | .matches = { |
| 1014 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), | 995 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), |
| 1015 | DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"), | 996 | DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"), |
| 1016 | }, | 997 | }, |
| 1017 | }, | 998 | }, |
| 1018 | { | 999 | { |
| 1019 | .callback = force_acpi_ht, | 1000 | .callback = force_acpi_ht, |
| 1020 | .ident = "IBM eserver xSeries 330", | 1001 | .ident = "IBM eserver xSeries 330", |
| 1021 | .matches = { | 1002 | .matches = { |
| 1022 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), | 1003 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), |
| 1023 | DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"), | 1004 | DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"), |
| 1024 | }, | 1005 | }, |
| 1025 | }, | 1006 | }, |
| 1026 | { | 1007 | { |
| 1027 | .callback = force_acpi_ht, | 1008 | .callback = force_acpi_ht, |
| 1028 | .ident = "IBM eserver xSeries 440", | 1009 | .ident = "IBM eserver xSeries 440", |
| 1029 | .matches = { | 1010 | .matches = { |
| 1030 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), | 1011 | DMI_MATCH(DMI_BOARD_VENDOR, "IBM"), |
| 1031 | DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"), | 1012 | DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"), |
| 1032 | }, | 1013 | }, |
| 1033 | }, | 1014 | }, |
| 1034 | 1015 | ||
| 1035 | #ifdef CONFIG_ACPI_PCI | ||
| 1036 | /* | 1016 | /* |
| 1037 | * Boxes that need ACPI PCI IRQ routing disabled | 1017 | * Boxes that need ACPI PCI IRQ routing disabled |
| 1038 | */ | 1018 | */ |
| 1039 | { | 1019 | { |
| 1040 | .callback = disable_acpi_irq, | 1020 | .callback = disable_acpi_irq, |
| 1041 | .ident = "ASUS A7V", | 1021 | .ident = "ASUS A7V", |
| 1042 | .matches = { | 1022 | .matches = { |
| 1043 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), | 1023 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"), |
| 1044 | DMI_MATCH(DMI_BOARD_NAME, "<A7V>"), | 1024 | DMI_MATCH(DMI_BOARD_NAME, "<A7V>"), |
| 1045 | /* newer BIOS, Revision 1011, does work */ | 1025 | /* newer BIOS, Revision 1011, does work */ |
| 1046 | DMI_MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"), | 1026 | DMI_MATCH(DMI_BIOS_VERSION, |
| 1047 | }, | 1027 | "ASUS A7V ACPI BIOS Revision 1007"), |
| 1048 | }, | 1028 | }, |
| 1029 | }, | ||
| 1049 | 1030 | ||
| 1050 | /* | 1031 | /* |
| 1051 | * Boxes that need ACPI PCI IRQ routing and PCI scan disabled | 1032 | * Boxes that need ACPI PCI IRQ routing and PCI scan disabled |
| 1052 | */ | 1033 | */ |
| 1053 | { /* _BBN 0 bug */ | 1034 | { /* _BBN 0 bug */ |
| 1054 | .callback = disable_acpi_pci, | 1035 | .callback = disable_acpi_pci, |
| 1055 | .ident = "ASUS PR-DLS", | 1036 | .ident = "ASUS PR-DLS", |
| 1056 | .matches = { | 1037 | .matches = { |
| 1057 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), | 1038 | DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), |
| 1058 | DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"), | 1039 | DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"), |
| 1059 | DMI_MATCH(DMI_BIOS_VERSION, "ASUS PR-DLS ACPI BIOS Revision 1010"), | 1040 | DMI_MATCH(DMI_BIOS_VERSION, |
| 1060 | DMI_MATCH(DMI_BIOS_DATE, "03/21/2003") | 1041 | "ASUS PR-DLS ACPI BIOS Revision 1010"), |
| 1061 | }, | 1042 | DMI_MATCH(DMI_BIOS_DATE, "03/21/2003") |
| 1062 | }, | 1043 | }, |
| 1044 | }, | ||
| 1063 | { | 1045 | { |
| 1064 | .callback = disable_acpi_pci, | 1046 | .callback = disable_acpi_pci, |
| 1065 | .ident = "Acer TravelMate 36x Laptop", | 1047 | .ident = "Acer TravelMate 36x Laptop", |
| 1066 | .matches = { | 1048 | .matches = { |
| 1067 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | 1049 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
| 1068 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), | 1050 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), |
| 1069 | }, | 1051 | }, |
| 1070 | }, | 1052 | }, |
| 1071 | #endif | 1053 | {} |
| 1072 | { } | ||
| 1073 | }; | 1054 | }; |
| 1074 | 1055 | ||
| 1075 | #endif /* __i386__ */ | 1056 | #endif /* __i386__ */ |
| 1076 | 1057 | ||
| 1077 | /* | 1058 | /* |
| 1078 | * acpi_boot_table_init() and acpi_boot_init() | 1059 | * acpi_boot_table_init() and acpi_boot_init() |
| @@ -1097,8 +1078,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { | |||
| 1097 | * !0: failure | 1078 | * !0: failure |
| 1098 | */ | 1079 | */ |
| 1099 | 1080 | ||
| 1100 | int __init | 1081 | int __init acpi_boot_table_init(void) |
| 1101 | acpi_boot_table_init(void) | ||
| 1102 | { | 1082 | { |
| 1103 | int error; | 1083 | int error; |
| 1104 | 1084 | ||
| @@ -1111,7 +1091,7 @@ acpi_boot_table_init(void) | |||
| 1111 | * One exception: acpi=ht continues far enough to enumerate LAPICs | 1091 | * One exception: acpi=ht continues far enough to enumerate LAPICs |
| 1112 | */ | 1092 | */ |
| 1113 | if (acpi_disabled && !acpi_ht) | 1093 | if (acpi_disabled && !acpi_ht) |
| 1114 | return 1; | 1094 | return 1; |
| 1115 | 1095 | ||
| 1116 | /* | 1096 | /* |
| 1117 | * Initialize the ACPI boot-time table parser. | 1097 | * Initialize the ACPI boot-time table parser. |
| @@ -1121,7 +1101,6 @@ acpi_boot_table_init(void) | |||
| 1121 | disable_acpi(); | 1101 | disable_acpi(); |
| 1122 | return error; | 1102 | return error; |
| 1123 | } | 1103 | } |
| 1124 | |||
| 1125 | #ifdef __i386__ | 1104 | #ifdef __i386__ |
| 1126 | check_acpi_pci(); | 1105 | check_acpi_pci(); |
| 1127 | #endif | 1106 | #endif |
| @@ -1145,7 +1124,6 @@ acpi_boot_table_init(void) | |||
| 1145 | return 0; | 1124 | return 0; |
| 1146 | } | 1125 | } |
| 1147 | 1126 | ||
| 1148 | |||
| 1149 | int __init acpi_boot_init(void) | 1127 | int __init acpi_boot_init(void) |
| 1150 | { | 1128 | { |
| 1151 | /* | 1129 | /* |
| @@ -1153,7 +1131,7 @@ int __init acpi_boot_init(void) | |||
| 1153 | * One exception: acpi=ht continues far enough to enumerate LAPICs | 1131 | * One exception: acpi=ht continues far enough to enumerate LAPICs |
| 1154 | */ | 1132 | */ |
| 1155 | if (acpi_disabled && !acpi_ht) | 1133 | if (acpi_disabled && !acpi_ht) |
| 1156 | return 1; | 1134 | return 1; |
| 1157 | 1135 | ||
| 1158 | acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); | 1136 | acpi_table_parse(ACPI_BOOT, acpi_parse_sbf); |
| 1159 | 1137 | ||
| @@ -1171,4 +1149,3 @@ int __init acpi_boot_init(void) | |||
| 1171 | 1149 | ||
| 1172 | return 0; | 1150 | return 0; |
| 1173 | } | 1151 | } |
| 1174 | |||
diff --git a/arch/i386/kernel/acpi/earlyquirk.c b/arch/i386/kernel/acpi/earlyquirk.c index 726a5ca4b165..1ae2aeeda18b 100644 --- a/arch/i386/kernel/acpi/earlyquirk.c +++ b/arch/i386/kernel/acpi/earlyquirk.c | |||
| @@ -7,45 +7,55 @@ | |||
| 7 | #include <linux/pci.h> | 7 | #include <linux/pci.h> |
| 8 | #include <asm/pci-direct.h> | 8 | #include <asm/pci-direct.h> |
| 9 | #include <asm/acpi.h> | 9 | #include <asm/acpi.h> |
| 10 | #include <asm/apic.h> | ||
| 10 | 11 | ||
| 11 | static int __init check_bridge(int vendor, int device) | 12 | static int __init check_bridge(int vendor, int device) |
| 12 | { | 13 | { |
| 13 | /* According to Nvidia all timer overrides are bogus. Just ignore | 14 | /* According to Nvidia all timer overrides are bogus. Just ignore |
| 14 | them all. */ | 15 | them all. */ |
| 15 | if (vendor == PCI_VENDOR_ID_NVIDIA) { | 16 | if (vendor == PCI_VENDOR_ID_NVIDIA) { |
| 16 | acpi_skip_timer_override = 1; | 17 | acpi_skip_timer_override = 1; |
| 17 | } | 18 | } |
| 19 | #ifdef CONFIG_X86_LOCAL_APIC | ||
| 20 | /* | ||
| 21 | * ATI IXP chipsets get double timer interrupts. | ||
| 22 | * For now just do this for all ATI chipsets. | ||
| 23 | * FIXME: this needs to be checked for the non ACPI case too. | ||
| 24 | */ | ||
| 25 | if (vendor == PCI_VENDOR_ID_ATI) | ||
| 26 | disable_timer_pin_1 = 1; | ||
| 27 | #endif | ||
| 18 | return 0; | 28 | return 0; |
| 19 | } | 29 | } |
| 20 | 30 | ||
| 21 | void __init check_acpi_pci(void) | 31 | void __init check_acpi_pci(void) |
| 22 | { | 32 | { |
| 23 | int num,slot,func; | 33 | int num, slot, func; |
| 24 | 34 | ||
| 25 | /* Assume the machine supports type 1. If not it will | 35 | /* Assume the machine supports type 1. If not it will |
| 26 | always read ffffffff and should not have any side effect. */ | 36 | always read ffffffff and should not have any side effect. */ |
| 27 | 37 | ||
| 28 | /* Poor man's PCI discovery */ | 38 | /* Poor man's PCI discovery */ |
| 29 | for (num = 0; num < 32; num++) { | 39 | for (num = 0; num < 32; num++) { |
| 30 | for (slot = 0; slot < 32; slot++) { | 40 | for (slot = 0; slot < 32; slot++) { |
| 31 | for (func = 0; func < 8; func++) { | 41 | for (func = 0; func < 8; func++) { |
| 32 | u32 class; | 42 | u32 class; |
| 33 | u32 vendor; | 43 | u32 vendor; |
| 34 | class = read_pci_config(num,slot,func, | 44 | class = read_pci_config(num, slot, func, |
| 35 | PCI_CLASS_REVISION); | 45 | PCI_CLASS_REVISION); |
| 36 | if (class == 0xffffffff) | 46 | if (class == 0xffffffff) |
| 37 | break; | 47 | break; |
| 38 | 48 | ||
| 39 | if ((class >> 16) != PCI_CLASS_BRIDGE_PCI) | 49 | if ((class >> 16) != PCI_CLASS_BRIDGE_PCI) |
| 40 | continue; | 50 | continue; |
| 41 | 51 | ||
| 42 | vendor = read_pci_config(num, slot, func, | 52 | vendor = read_pci_config(num, slot, func, |
| 43 | PCI_VENDOR_ID); | 53 | PCI_VENDOR_ID); |
| 44 | 54 | ||
| 45 | if (check_bridge(vendor&0xffff, vendor >> 16)) | 55 | if (check_bridge(vendor & 0xffff, vendor >> 16)) |
| 46 | return; | 56 | return; |
| 47 | } | 57 | } |
| 48 | 58 | ||
| 49 | } | 59 | } |
| 50 | } | 60 | } |
| 51 | } | 61 | } |
diff --git a/arch/i386/kernel/acpi/sleep.c b/arch/i386/kernel/acpi/sleep.c index c1af93032ff3..1cb2b186a3af 100644 --- a/arch/i386/kernel/acpi/sleep.c +++ b/arch/i386/kernel/acpi/sleep.c | |||
| @@ -20,12 +20,13 @@ extern void zap_low_mappings(void); | |||
| 20 | 20 | ||
| 21 | extern unsigned long FASTCALL(acpi_copy_wakeup_routine(unsigned long)); | 21 | extern unsigned long FASTCALL(acpi_copy_wakeup_routine(unsigned long)); |
| 22 | 22 | ||
| 23 | static void init_low_mapping(pgd_t *pgd, int pgd_limit) | 23 | static void init_low_mapping(pgd_t * pgd, int pgd_limit) |
| 24 | { | 24 | { |
| 25 | int pgd_ofs = 0; | 25 | int pgd_ofs = 0; |
| 26 | 26 | ||
| 27 | while ((pgd_ofs < pgd_limit) && (pgd_ofs + USER_PTRS_PER_PGD < PTRS_PER_PGD)) { | 27 | while ((pgd_ofs < pgd_limit) |
| 28 | set_pgd(pgd, *(pgd+USER_PTRS_PER_PGD)); | 28 | && (pgd_ofs + USER_PTRS_PER_PGD < PTRS_PER_PGD)) { |
| 29 | set_pgd(pgd, *(pgd + USER_PTRS_PER_PGD)); | ||
| 29 | pgd_ofs++, pgd++; | 30 | pgd_ofs++, pgd++; |
| 30 | } | 31 | } |
| 31 | flush_tlb_all(); | 32 | flush_tlb_all(); |
| @@ -37,12 +38,13 @@ static void init_low_mapping(pgd_t *pgd, int pgd_limit) | |||
| 37 | * Create an identity mapped page table and copy the wakeup routine to | 38 | * Create an identity mapped page table and copy the wakeup routine to |
| 38 | * low memory. | 39 | * low memory. |
| 39 | */ | 40 | */ |
| 40 | int acpi_save_state_mem (void) | 41 | int acpi_save_state_mem(void) |
| 41 | { | 42 | { |
| 42 | if (!acpi_wakeup_address) | 43 | if (!acpi_wakeup_address) |
| 43 | return 1; | 44 | return 1; |
| 44 | init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD); | 45 | init_low_mapping(swapper_pg_dir, USER_PTRS_PER_PGD); |
| 45 | memcpy((void *) acpi_wakeup_address, &wakeup_start, &wakeup_end - &wakeup_start); | 46 | memcpy((void *)acpi_wakeup_address, &wakeup_start, |
| 47 | &wakeup_end - &wakeup_start); | ||
| 46 | acpi_copy_wakeup_routine(acpi_wakeup_address); | 48 | acpi_copy_wakeup_routine(acpi_wakeup_address); |
| 47 | 49 | ||
| 48 | return 0; | 50 | return 0; |
| @@ -51,7 +53,7 @@ int acpi_save_state_mem (void) | |||
| 51 | /* | 53 | /* |
| 52 | * acpi_restore_state - undo effects of acpi_save_state_mem | 54 | * acpi_restore_state - undo effects of acpi_save_state_mem |
| 53 | */ | 55 | */ |
| 54 | void acpi_restore_state_mem (void) | 56 | void acpi_restore_state_mem(void) |
| 55 | { | 57 | { |
| 56 | zap_low_mappings(); | 58 | zap_low_mappings(); |
| 57 | } | 59 | } |
| @@ -67,7 +69,8 @@ void acpi_restore_state_mem (void) | |||
| 67 | void __init acpi_reserve_bootmem(void) | 69 | void __init acpi_reserve_bootmem(void) |
| 68 | { | 70 | { |
| 69 | if ((&wakeup_end - &wakeup_start) > PAGE_SIZE) { | 71 | if ((&wakeup_end - &wakeup_start) > PAGE_SIZE) { |
| 70 | printk(KERN_ERR "ACPI: Wakeup code way too big, S3 disabled.\n"); | 72 | printk(KERN_ERR |
| 73 | "ACPI: Wakeup code way too big, S3 disabled.\n"); | ||
| 71 | return; | 74 | return; |
| 72 | } | 75 | } |
| 73 | 76 | ||
| @@ -90,10 +93,8 @@ static int __init acpi_sleep_setup(char *str) | |||
| 90 | return 1; | 93 | return 1; |
| 91 | } | 94 | } |
| 92 | 95 | ||
| 93 | |||
| 94 | __setup("acpi_sleep=", acpi_sleep_setup); | 96 | __setup("acpi_sleep=", acpi_sleep_setup); |
| 95 | 97 | ||
| 96 | |||
| 97 | static __init int reset_videomode_after_s3(struct dmi_system_id *d) | 98 | static __init int reset_videomode_after_s3(struct dmi_system_id *d) |
| 98 | { | 99 | { |
| 99 | acpi_video_flags |= 2; | 100 | acpi_video_flags |= 2; |
| @@ -101,14 +102,14 @@ static __init int reset_videomode_after_s3(struct dmi_system_id *d) | |||
| 101 | } | 102 | } |
| 102 | 103 | ||
| 103 | static __initdata struct dmi_system_id acpisleep_dmi_table[] = { | 104 | static __initdata struct dmi_system_id acpisleep_dmi_table[] = { |
| 104 | { /* Reset video mode after returning from ACPI S3 sleep */ | 105 | { /* Reset video mode after returning from ACPI S3 sleep */ |
| 105 | .callback = reset_videomode_after_s3, | 106 | .callback = reset_videomode_after_s3, |
| 106 | .ident = "Toshiba Satellite 4030cdt", | 107 | .ident = "Toshiba Satellite 4030cdt", |
| 107 | .matches = { | 108 | .matches = { |
| 108 | DMI_MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"), | 109 | DMI_MATCH(DMI_PRODUCT_NAME, "S4030CDT/4.3"), |
| 109 | }, | 110 | }, |
| 110 | }, | 111 | }, |
| 111 | { } | 112 | {} |
| 112 | }; | 113 | }; |
| 113 | 114 | ||
| 114 | static int __init acpisleep_dmi_init(void) | 115 | static int __init acpisleep_dmi_init(void) |
diff --git a/arch/i386/kernel/acpi/wakeup.S b/arch/i386/kernel/acpi/wakeup.S index 44d886c745ec..7c74fe0dc93c 100644 --- a/arch/i386/kernel/acpi/wakeup.S +++ b/arch/i386/kernel/acpi/wakeup.S | |||
| @@ -304,12 +304,6 @@ ret_point: | |||
| 304 | call restore_processor_state | 304 | call restore_processor_state |
| 305 | ret | 305 | ret |
| 306 | 306 | ||
| 307 | ENTRY(do_suspend_lowlevel_s4bios) | ||
| 308 | call save_processor_state | ||
| 309 | call save_registers | ||
| 310 | call acpi_enter_sleep_state_s4bios | ||
| 311 | ret | ||
| 312 | |||
| 313 | ALIGN | 307 | ALIGN |
| 314 | # saved registers | 308 | # saved registers |
| 315 | saved_gdt: .long 0,0 | 309 | saved_gdt: .long 0,0 |
diff --git a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c index 46ce9b248f55..9ad43be9a01f 100644 --- a/arch/i386/kernel/cpu/common.c +++ b/arch/i386/kernel/cpu/common.c | |||
| @@ -151,7 +151,7 @@ static char __devinit *table_lookup_model(struct cpuinfo_x86 *c) | |||
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | 153 | ||
| 154 | void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early) | 154 | static void __devinit get_cpu_vendor(struct cpuinfo_x86 *c, int early) |
| 155 | { | 155 | { |
| 156 | char *v = c->x86_vendor_id; | 156 | char *v = c->x86_vendor_id; |
| 157 | int i; | 157 | int i; |
diff --git a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c index 60a9e54dd20e..822c8ce9d1f1 100644 --- a/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <linux/cpufreq.h> | 31 | #include <linux/cpufreq.h> |
| 32 | #include <linux/proc_fs.h> | 32 | #include <linux/proc_fs.h> |
| 33 | #include <linux/seq_file.h> | 33 | #include <linux/seq_file.h> |
| 34 | #include <linux/compiler.h> | ||
| 34 | #include <asm/io.h> | 35 | #include <asm/io.h> |
| 35 | #include <asm/delay.h> | 36 | #include <asm/delay.h> |
| 36 | #include <asm/uaccess.h> | 37 | #include <asm/uaccess.h> |
| @@ -57,6 +58,8 @@ static struct cpufreq_acpi_io *acpi_io_data[NR_CPUS]; | |||
| 57 | 58 | ||
| 58 | static struct cpufreq_driver acpi_cpufreq_driver; | 59 | static struct cpufreq_driver acpi_cpufreq_driver; |
| 59 | 60 | ||
| 61 | static unsigned int acpi_pstate_strict; | ||
| 62 | |||
| 60 | static int | 63 | static int |
| 61 | acpi_processor_write_port( | 64 | acpi_processor_write_port( |
| 62 | u16 port, | 65 | u16 port, |
| @@ -163,34 +166,44 @@ acpi_processor_set_performance ( | |||
| 163 | } | 166 | } |
| 164 | 167 | ||
| 165 | /* | 168 | /* |
| 166 | * Then we read the 'status_register' and compare the value with the | 169 | * Assume the write went through when acpi_pstate_strict is not used. |
| 167 | * target state's 'status' to make sure the transition was successful. | 170 | * As read status_register is an expensive operation and there |
| 168 | * Note that we'll poll for up to 1ms (100 cycles of 10us) before | 171 | * are no specific error cases where an IO port write will fail. |
| 169 | * giving up. | ||
| 170 | */ | 172 | */ |
| 171 | 173 | if (acpi_pstate_strict) { | |
| 172 | port = data->acpi_data.status_register.address; | 174 | /* Then we read the 'status_register' and compare the value |
| 173 | bit_width = data->acpi_data.status_register.bit_width; | 175 | * with the target state's 'status' to make sure the |
| 174 | 176 | * transition was successful. | |
| 175 | dprintk("Looking for 0x%08x from port 0x%04x\n", | 177 | * Note that we'll poll for up to 1ms (100 cycles of 10us) |
| 176 | (u32) data->acpi_data.states[state].status, port); | 178 | * before giving up. |
| 177 | 179 | */ | |
| 178 | for (i=0; i<100; i++) { | 180 | |
| 179 | ret = acpi_processor_read_port(port, bit_width, &value); | 181 | port = data->acpi_data.status_register.address; |
| 180 | if (ret) { | 182 | bit_width = data->acpi_data.status_register.bit_width; |
| 181 | dprintk("Invalid port width 0x%04x\n", bit_width); | 183 | |
| 182 | retval = ret; | 184 | dprintk("Looking for 0x%08x from port 0x%04x\n", |
| 183 | goto migrate_end; | 185 | (u32) data->acpi_data.states[state].status, port); |
| 186 | |||
| 187 | for (i=0; i<100; i++) { | ||
| 188 | ret = acpi_processor_read_port(port, bit_width, &value); | ||
| 189 | if (ret) { | ||
| 190 | dprintk("Invalid port width 0x%04x\n", bit_width); | ||
| 191 | retval = ret; | ||
| 192 | goto migrate_end; | ||
| 193 | } | ||
| 194 | if (value == (u32) data->acpi_data.states[state].status) | ||
| 195 | break; | ||
| 196 | udelay(10); | ||
| 184 | } | 197 | } |
| 185 | if (value == (u32) data->acpi_data.states[state].status) | 198 | } else { |
| 186 | break; | 199 | i = 0; |
| 187 | udelay(10); | 200 | value = (u32) data->acpi_data.states[state].status; |
| 188 | } | 201 | } |
| 189 | 202 | ||
| 190 | /* notify cpufreq */ | 203 | /* notify cpufreq */ |
| 191 | cpufreq_notify_transition(&cpufreq_freqs, CPUFREQ_POSTCHANGE); | 204 | cpufreq_notify_transition(&cpufreq_freqs, CPUFREQ_POSTCHANGE); |
| 192 | 205 | ||
| 193 | if (value != (u32) data->acpi_data.states[state].status) { | 206 | if (unlikely(value != (u32) data->acpi_data.states[state].status)) { |
| 194 | unsigned int tmp = cpufreq_freqs.new; | 207 | unsigned int tmp = cpufreq_freqs.new; |
| 195 | cpufreq_freqs.new = cpufreq_freqs.old; | 208 | cpufreq_freqs.new = cpufreq_freqs.old; |
| 196 | cpufreq_freqs.old = tmp; | 209 | cpufreq_freqs.old = tmp; |
| @@ -537,6 +550,8 @@ acpi_cpufreq_exit (void) | |||
| 537 | return; | 550 | return; |
| 538 | } | 551 | } |
| 539 | 552 | ||
| 553 | module_param(acpi_pstate_strict, uint, 0644); | ||
| 554 | MODULE_PARM_DESC(acpi_pstate_strict, "value 0 or non-zero. non-zero -> strict ACPI checks are performed during frequency changes."); | ||
| 540 | 555 | ||
| 541 | late_initcall(acpi_cpufreq_init); | 556 | late_initcall(acpi_cpufreq_init); |
| 542 | module_exit(acpi_cpufreq_exit); | 557 | module_exit(acpi_cpufreq_exit); |
diff --git a/arch/i386/kernel/cpu/cpufreq/longhaul.c b/arch/i386/kernel/cpu/cpufreq/longhaul.c index bf02b5026e62..8ef38544453c 100644 --- a/arch/i386/kernel/cpu/cpufreq/longhaul.c +++ b/arch/i386/kernel/cpu/cpufreq/longhaul.c | |||
| @@ -467,11 +467,11 @@ static void __init longhaul_setup_voltagescaling(void) | |||
| 467 | } | 467 | } |
| 468 | 468 | ||
| 469 | if (vrmrev==0) { | 469 | if (vrmrev==0) { |
| 470 | dprintk ("VRM 8.5 \n"); | 470 | dprintk ("VRM 8.5\n"); |
| 471 | memcpy (voltage_table, vrm85scales, sizeof(voltage_table)); | 471 | memcpy (voltage_table, vrm85scales, sizeof(voltage_table)); |
| 472 | numvscales = (voltage_table[maxvid]-voltage_table[minvid])/25; | 472 | numvscales = (voltage_table[maxvid]-voltage_table[minvid])/25; |
| 473 | } else { | 473 | } else { |
| 474 | dprintk ("Mobile VRM \n"); | 474 | dprintk ("Mobile VRM\n"); |
| 475 | memcpy (voltage_table, mobilevrmscales, sizeof(voltage_table)); | 475 | memcpy (voltage_table, mobilevrmscales, sizeof(voltage_table)); |
| 476 | numvscales = (voltage_table[maxvid]-voltage_table[minvid])/5; | 476 | numvscales = (voltage_table[maxvid]-voltage_table[minvid])/5; |
| 477 | } | 477 | } |
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c index 327a55d4d1c6..c397b6220430 100644 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c | |||
| @@ -259,7 +259,7 @@ static int centrino_cpu_init_table(struct cpufreq_policy *policy) | |||
| 259 | 259 | ||
| 260 | if (model->op_points == NULL) { | 260 | if (model->op_points == NULL) { |
| 261 | /* Matched a non-match */ | 261 | /* Matched a non-match */ |
| 262 | dprintk(KERN_INFO PFX "no table support for CPU model \"%s\": \n", | 262 | dprintk(KERN_INFO PFX "no table support for CPU model \"%s\"\n", |
| 263 | cpu->x86_model_id); | 263 | cpu->x86_model_id); |
| 264 | #ifndef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI | 264 | #ifndef CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI |
| 265 | dprintk(KERN_INFO PFX "try compiling with CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI enabled\n"); | 265 | dprintk(KERN_INFO PFX "try compiling with CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI enabled\n"); |
| @@ -402,7 +402,7 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) | |||
| 402 | 402 | ||
| 403 | for (i=0; i<p.state_count; i++) { | 403 | for (i=0; i<p.state_count; i++) { |
| 404 | if (p.states[i].control != p.states[i].status) { | 404 | if (p.states[i].control != p.states[i].status) { |
| 405 | dprintk("Different control (%x) and status values (%x)\n", | 405 | dprintk("Different control (%llu) and status values (%llu)\n", |
| 406 | p.states[i].control, p.states[i].status); | 406 | p.states[i].control, p.states[i].status); |
| 407 | result = -EINVAL; | 407 | result = -EINVAL; |
| 408 | goto err_unreg; | 408 | goto err_unreg; |
| @@ -415,7 +415,7 @@ static int centrino_cpu_init_acpi(struct cpufreq_policy *policy) | |||
| 415 | } | 415 | } |
| 416 | 416 | ||
| 417 | if (p.states[i].core_frequency > p.states[0].core_frequency) { | 417 | if (p.states[i].core_frequency > p.states[0].core_frequency) { |
| 418 | dprintk("P%u has larger frequency (%u) than P0 (%u), skipping\n", i, | 418 | dprintk("P%u has larger frequency (%llu) than P0 (%llu), skipping\n", i, |
| 419 | p.states[i].core_frequency, p.states[0].core_frequency); | 419 | p.states[i].core_frequency, p.states[0].core_frequency); |
| 420 | p.states[i].core_frequency = 0; | 420 | p.states[i].core_frequency = 0; |
| 421 | continue; | 421 | continue; |
| @@ -498,13 +498,6 @@ static int centrino_cpu_init(struct cpufreq_policy *policy) | |||
| 498 | if (cpu->x86_vendor != X86_VENDOR_INTEL || !cpu_has(cpu, X86_FEATURE_EST)) | 498 | if (cpu->x86_vendor != X86_VENDOR_INTEL || !cpu_has(cpu, X86_FEATURE_EST)) |
| 499 | return -ENODEV; | 499 | return -ENODEV; |
| 500 | 500 | ||
| 501 | for (i = 0; i < N_IDS; i++) | ||
| 502 | if (centrino_verify_cpu_id(cpu, &cpu_ids[i])) | ||
| 503 | break; | ||
| 504 | |||
| 505 | if (i != N_IDS) | ||
| 506 | centrino_cpu[policy->cpu] = &cpu_ids[i]; | ||
| 507 | |||
| 508 | if (is_const_loops_cpu(policy->cpu)) { | 501 | if (is_const_loops_cpu(policy->cpu)) { |
| 509 | centrino_driver.flags |= CPUFREQ_CONST_LOOPS; | 502 | centrino_driver.flags |= CPUFREQ_CONST_LOOPS; |
| 510 | } | 503 | } |
| @@ -513,6 +506,13 @@ static int centrino_cpu_init(struct cpufreq_policy *policy) | |||
| 513 | if (policy->cpu != 0) | 506 | if (policy->cpu != 0) |
| 514 | return -ENODEV; | 507 | return -ENODEV; |
| 515 | 508 | ||
| 509 | for (i = 0; i < N_IDS; i++) | ||
| 510 | if (centrino_verify_cpu_id(cpu, &cpu_ids[i])) | ||
| 511 | break; | ||
| 512 | |||
| 513 | if (i != N_IDS) | ||
| 514 | centrino_cpu[policy->cpu] = &cpu_ids[i]; | ||
| 515 | |||
| 516 | if (!centrino_cpu[policy->cpu]) { | 516 | if (!centrino_cpu[policy->cpu]) { |
| 517 | dprintk(KERN_INFO PFX "found unsupported CPU with " | 517 | dprintk(KERN_INFO PFX "found unsupported CPU with " |
| 518 | "Enhanced SpeedStep: send /proc/cpuinfo to " | 518 | "Enhanced SpeedStep: send /proc/cpuinfo to " |
diff --git a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c index b25fb6b635ae..2718fb6f6aba 100644 --- a/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c +++ b/arch/i386/kernel/cpu/cpufreq/speedstep-smi.c | |||
| @@ -99,7 +99,7 @@ static int speedstep_smi_get_freqs (unsigned int *low, unsigned int *high) | |||
| 99 | u32 function = GET_SPEEDSTEP_FREQS; | 99 | u32 function = GET_SPEEDSTEP_FREQS; |
| 100 | 100 | ||
| 101 | if (!(ist_info.event & 0xFFFF)) { | 101 | if (!(ist_info.event & 0xFFFF)) { |
| 102 | dprintk("bug #1422 -- can't read freqs from BIOS\n", result); | 102 | dprintk("bug #1422 -- can't read freqs from BIOS\n"); |
| 103 | return -ENODEV; | 103 | return -ENODEV; |
| 104 | } | 104 | } |
| 105 | 105 | ||
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index 3aad03839660..9e24f7b207ee 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S | |||
| @@ -319,7 +319,7 @@ work_notifysig: # deal with pending signals and | |||
| 319 | # vm86-space | 319 | # vm86-space |
| 320 | xorl %edx, %edx | 320 | xorl %edx, %edx |
| 321 | call do_notify_resume | 321 | call do_notify_resume |
| 322 | jmp restore_all | 322 | jmp resume_userspace |
| 323 | 323 | ||
| 324 | ALIGN | 324 | ALIGN |
| 325 | work_notifysig_v86: | 325 | work_notifysig_v86: |
| @@ -329,7 +329,7 @@ work_notifysig_v86: | |||
| 329 | movl %eax, %esp | 329 | movl %eax, %esp |
| 330 | xorl %edx, %edx | 330 | xorl %edx, %edx |
| 331 | call do_notify_resume | 331 | call do_notify_resume |
| 332 | jmp restore_all | 332 | jmp resume_userspace |
| 333 | 333 | ||
| 334 | # perform syscall exit tracing | 334 | # perform syscall exit tracing |
| 335 | ALIGN | 335 | ALIGN |
diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S index 0480ca9e9e57..e437fb367498 100644 --- a/arch/i386/kernel/head.S +++ b/arch/i386/kernel/head.S | |||
| @@ -17,7 +17,7 @@ | |||
| 17 | #include <asm/desc.h> | 17 | #include <asm/desc.h> |
| 18 | #include <asm/cache.h> | 18 | #include <asm/cache.h> |
| 19 | #include <asm/thread_info.h> | 19 | #include <asm/thread_info.h> |
| 20 | #include <asm/asm_offsets.h> | 20 | #include <asm/asm-offsets.h> |
| 21 | #include <asm/setup.h> | 21 | #include <asm/setup.h> |
| 22 | 22 | ||
| 23 | /* | 23 | /* |
diff --git a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c index 0e727e6da5c9..378313b0cce9 100644 --- a/arch/i386/kernel/io_apic.c +++ b/arch/i386/kernel/io_apic.c | |||
| @@ -60,6 +60,8 @@ int sis_apic_bug = -1; | |||
| 60 | */ | 60 | */ |
| 61 | int nr_ioapic_registers[MAX_IO_APICS]; | 61 | int nr_ioapic_registers[MAX_IO_APICS]; |
| 62 | 62 | ||
| 63 | int disable_timer_pin_1 __initdata; | ||
| 64 | |||
| 63 | /* | 65 | /* |
| 64 | * Rough estimation of how many shared IRQs there are, can | 66 | * Rough estimation of how many shared IRQs there are, can |
| 65 | * be changed anytime. | 67 | * be changed anytime. |
| @@ -573,8 +575,7 @@ static int balanced_irq(void *unused) | |||
| 573 | } | 575 | } |
| 574 | 576 | ||
| 575 | for ( ; ; ) { | 577 | for ( ; ; ) { |
| 576 | set_current_state(TASK_INTERRUPTIBLE); | 578 | time_remaining = schedule_timeout_interruptible(time_remaining); |
| 577 | time_remaining = schedule_timeout(time_remaining); | ||
| 578 | try_to_freeze(); | 579 | try_to_freeze(); |
| 579 | if (time_after(jiffies, | 580 | if (time_after(jiffies, |
| 580 | prev_balance_time+balanced_irq_interval)) { | 581 | prev_balance_time+balanced_irq_interval)) { |
| @@ -1634,9 +1635,9 @@ void disable_IO_APIC(void) | |||
| 1634 | clear_IO_APIC(); | 1635 | clear_IO_APIC(); |
| 1635 | 1636 | ||
| 1636 | /* | 1637 | /* |
| 1637 | * If the i82559 is routed through an IOAPIC | 1638 | * If the i8259 is routed through an IOAPIC |
| 1638 | * Put that IOAPIC in virtual wire mode | 1639 | * Put that IOAPIC in virtual wire mode |
| 1639 | * so legacy interrups can be delivered. | 1640 | * so legacy interrupts can be delivered. |
| 1640 | */ | 1641 | */ |
| 1641 | pin = find_isa_irq_pin(0, mp_ExtINT); | 1642 | pin = find_isa_irq_pin(0, mp_ExtINT); |
| 1642 | if (pin != -1) { | 1643 | if (pin != -1) { |
| @@ -2212,6 +2213,8 @@ static inline void check_timer(void) | |||
| 2212 | setup_nmi(); | 2213 | setup_nmi(); |
| 2213 | enable_8259A_irq(0); | 2214 | enable_8259A_irq(0); |
| 2214 | } | 2215 | } |
| 2216 | if (disable_timer_pin_1 > 0) | ||
| 2217 | clear_IO_APIC_pin(0, pin1); | ||
| 2215 | return; | 2218 | return; |
| 2216 | } | 2219 | } |
| 2217 | clear_IO_APIC_pin(0, pin1); | 2220 | clear_IO_APIC_pin(0, pin1); |
| @@ -2423,7 +2426,7 @@ device_initcall(ioapic_init_sysfs); | |||
| 2423 | ACPI-based IOAPIC Configuration | 2426 | ACPI-based IOAPIC Configuration |
| 2424 | -------------------------------------------------------------------------- */ | 2427 | -------------------------------------------------------------------------- */ |
| 2425 | 2428 | ||
| 2426 | #ifdef CONFIG_ACPI_BOOT | 2429 | #ifdef CONFIG_ACPI |
| 2427 | 2430 | ||
| 2428 | int __init io_apic_get_unique_id (int ioapic, int apic_id) | 2431 | int __init io_apic_get_unique_id (int ioapic, int apic_id) |
| 2429 | { | 2432 | { |
| @@ -2577,4 +2580,4 @@ int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int a | |||
| 2577 | return 0; | 2580 | return 0; |
| 2578 | } | 2581 | } |
| 2579 | 2582 | ||
| 2580 | #endif /*CONFIG_ACPI_BOOT*/ | 2583 | #endif /* CONFIG_ACPI */ |
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index 5d0b9a8fc43d..15949fd08109 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
| @@ -122,8 +122,8 @@ static int MP_valid_apicid(int apicid, int version) | |||
| 122 | 122 | ||
| 123 | static void __init MP_processor_info (struct mpc_config_processor *m) | 123 | static void __init MP_processor_info (struct mpc_config_processor *m) |
| 124 | { | 124 | { |
| 125 | int ver, apicid, cpu, found_bsp = 0; | 125 | int ver, apicid; |
| 126 | physid_mask_t tmp; | 126 | physid_mask_t phys_cpu; |
| 127 | 127 | ||
| 128 | if (!(m->mpc_cpuflag & CPU_ENABLED)) | 128 | if (!(m->mpc_cpuflag & CPU_ENABLED)) |
| 129 | return; | 129 | return; |
| @@ -181,7 +181,6 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 181 | if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) { | 181 | if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) { |
| 182 | Dprintk(" Bootup CPU\n"); | 182 | Dprintk(" Bootup CPU\n"); |
| 183 | boot_cpu_physical_apicid = m->mpc_apicid; | 183 | boot_cpu_physical_apicid = m->mpc_apicid; |
| 184 | found_bsp = 1; | ||
| 185 | } | 184 | } |
| 186 | 185 | ||
| 187 | if (num_processors >= NR_CPUS) { | 186 | if (num_processors >= NR_CPUS) { |
| @@ -195,29 +194,26 @@ static void __init MP_processor_info (struct mpc_config_processor *m) | |||
| 195 | " Processor ignored.\n", maxcpus); | 194 | " Processor ignored.\n", maxcpus); |
| 196 | return; | 195 | return; |
| 197 | } | 196 | } |
| 198 | num_processors++; | ||
| 199 | ver = m->mpc_apicver; | 197 | ver = m->mpc_apicver; |
| 200 | 198 | ||
| 201 | if (!MP_valid_apicid(apicid, ver)) { | 199 | if (!MP_valid_apicid(apicid, ver)) { |
| 202 | printk(KERN_WARNING "Processor #%d INVALID. (Max ID: %d).\n", | 200 | printk(KERN_WARNING "Processor #%d INVALID. (Max ID: %d).\n", |
| 203 | m->mpc_apicid, MAX_APICS); | 201 | m->mpc_apicid, MAX_APICS); |
| 204 | --num_processors; | ||
| 205 | return; | 202 | return; |
| 206 | } | 203 | } |
| 207 | 204 | ||
| 208 | if (found_bsp) | 205 | cpu_set(num_processors, cpu_possible_map); |
| 209 | cpu = 0; | 206 | num_processors++; |
| 210 | else | 207 | phys_cpu = apicid_to_cpu_present(apicid); |
| 211 | cpu = num_processors - 1; | 208 | physids_or(phys_cpu_present_map, phys_cpu_present_map, phys_cpu); |
| 212 | cpu_set(cpu, cpu_possible_map); | 209 | |
| 213 | tmp = apicid_to_cpu_present(apicid); | ||
| 214 | physids_or(phys_cpu_present_map, phys_cpu_present_map, tmp); | ||
| 215 | |||
| 216 | /* | 210 | /* |
| 217 | * Validate version | 211 | * Validate version |
| 218 | */ | 212 | */ |
| 219 | if (ver == 0x0) { | 213 | if (ver == 0x0) { |
| 220 | printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! fixing up to 0x10. (tell your hw vendor)\n", m->mpc_apicid); | 214 | printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! " |
| 215 | "fixing up to 0x10. (tell your hw vendor)\n", | ||
| 216 | m->mpc_apicid); | ||
| 221 | ver = 0x10; | 217 | ver = 0x10; |
| 222 | } | 218 | } |
| 223 | apic_version[m->mpc_apicid] = ver; | 219 | apic_version[m->mpc_apicid] = ver; |
| @@ -668,8 +664,6 @@ void __init get_smp_config (void) | |||
| 668 | struct intel_mp_floating *mpf = mpf_found; | 664 | struct intel_mp_floating *mpf = mpf_found; |
| 669 | 665 | ||
| 670 | /* | 666 | /* |
| 671 | * ACPI may be used to obtain the entire SMP configuration or just to | ||
| 672 | * enumerate/configure processors (CONFIG_ACPI_BOOT). Note that | ||
| 673 | * ACPI supports both logical (e.g. Hyper-Threading) and physical | 667 | * ACPI supports both logical (e.g. Hyper-Threading) and physical |
| 674 | * processors, where MPS only supports physical. | 668 | * processors, where MPS only supports physical. |
| 675 | */ | 669 | */ |
| @@ -825,7 +819,7 @@ void __init find_smp_config (void) | |||
| 825 | ACPI-based MP Configuration | 819 | ACPI-based MP Configuration |
| 826 | -------------------------------------------------------------------------- */ | 820 | -------------------------------------------------------------------------- */ |
| 827 | 821 | ||
| 828 | #ifdef CONFIG_ACPI_BOOT | 822 | #ifdef CONFIG_ACPI |
| 829 | 823 | ||
| 830 | void __init mp_register_lapic_address ( | 824 | void __init mp_register_lapic_address ( |
| 831 | u64 address) | 825 | u64 address) |
| @@ -871,7 +865,7 @@ void __init mp_register_lapic ( | |||
| 871 | MP_processor_info(&processor); | 865 | MP_processor_info(&processor); |
| 872 | } | 866 | } |
| 873 | 867 | ||
| 874 | #if defined(CONFIG_X86_IO_APIC) && (defined(CONFIG_ACPI_INTERPRETER) || defined(CONFIG_ACPI_BOOT)) | 868 | #ifdef CONFIG_X86_IO_APIC |
| 875 | 869 | ||
| 876 | #define MP_ISA_BUS 0 | 870 | #define MP_ISA_BUS 0 |
| 877 | #define MP_MAX_IOAPIC_PIN 127 | 871 | #define MP_MAX_IOAPIC_PIN 127 |
| @@ -1086,11 +1080,9 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low) | |||
| 1086 | */ | 1080 | */ |
| 1087 | static int gsi_to_irq[MAX_GSI_NUM]; | 1081 | static int gsi_to_irq[MAX_GSI_NUM]; |
| 1088 | 1082 | ||
| 1089 | #ifdef CONFIG_ACPI_BUS | ||
| 1090 | /* Don't set up the ACPI SCI because it's already set up */ | 1083 | /* Don't set up the ACPI SCI because it's already set up */ |
| 1091 | if (acpi_fadt.sci_int == gsi) | 1084 | if (acpi_fadt.sci_int == gsi) |
| 1092 | return gsi; | 1085 | return gsi; |
| 1093 | #endif | ||
| 1094 | 1086 | ||
| 1095 | ioapic = mp_find_ioapic(gsi); | 1087 | ioapic = mp_find_ioapic(gsi); |
| 1096 | if (ioapic < 0) { | 1088 | if (ioapic < 0) { |
| @@ -1133,13 +1125,11 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low) | |||
| 1133 | if (gsi < MAX_GSI_NUM) { | 1125 | if (gsi < MAX_GSI_NUM) { |
| 1134 | if (gsi > 15) | 1126 | if (gsi > 15) |
| 1135 | gsi = pci_irq++; | 1127 | gsi = pci_irq++; |
| 1136 | #ifdef CONFIG_ACPI_BUS | ||
| 1137 | /* | 1128 | /* |
| 1138 | * Don't assign IRQ used by ACPI SCI | 1129 | * Don't assign IRQ used by ACPI SCI |
| 1139 | */ | 1130 | */ |
| 1140 | if (gsi == acpi_fadt.sci_int) | 1131 | if (gsi == acpi_fadt.sci_int) |
| 1141 | gsi = pci_irq++; | 1132 | gsi = pci_irq++; |
| 1142 | #endif | ||
| 1143 | gsi_to_irq[irq] = gsi; | 1133 | gsi_to_irq[irq] = gsi; |
| 1144 | } else { | 1134 | } else { |
| 1145 | printk(KERN_ERR "GSI %u is too high\n", gsi); | 1135 | printk(KERN_ERR "GSI %u is too high\n", gsi); |
| @@ -1153,5 +1143,5 @@ int mp_register_gsi (u32 gsi, int edge_level, int active_high_low) | |||
| 1153 | return gsi; | 1143 | return gsi; |
| 1154 | } | 1144 | } |
| 1155 | 1145 | ||
| 1156 | #endif /*CONFIG_X86_IO_APIC && (CONFIG_ACPI_INTERPRETER || CONFIG_ACPI_BOOT)*/ | 1146 | #endif /* CONFIG_X86_IO_APIC */ |
| 1157 | #endif /*CONFIG_ACPI_BOOT*/ | 1147 | #endif /* CONFIG_ACPI */ |
diff --git a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c index 340980203b09..7b6368bf8974 100644 --- a/arch/i386/kernel/ptrace.c +++ b/arch/i386/kernel/ptrace.c | |||
| @@ -694,17 +694,22 @@ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code) | |||
| 694 | __attribute__((regparm(3))) | 694 | __attribute__((regparm(3))) |
| 695 | int do_syscall_trace(struct pt_regs *regs, int entryexit) | 695 | int do_syscall_trace(struct pt_regs *regs, int entryexit) |
| 696 | { | 696 | { |
| 697 | int is_sysemu = test_thread_flag(TIF_SYSCALL_EMU), ret = 0; | 697 | int is_sysemu = test_thread_flag(TIF_SYSCALL_EMU); |
| 698 | /* With TIF_SYSCALL_EMU set we want to ignore TIF_SINGLESTEP for syscall | 698 | /* |
| 699 | * interception. */ | 699 | * With TIF_SYSCALL_EMU set we want to ignore TIF_SINGLESTEP for syscall |
| 700 | * interception | ||
| 701 | */ | ||
| 700 | int is_singlestep = !is_sysemu && test_thread_flag(TIF_SINGLESTEP); | 702 | int is_singlestep = !is_sysemu && test_thread_flag(TIF_SINGLESTEP); |
| 703 | int ret = 0; | ||
| 701 | 704 | ||
| 702 | /* do the secure computing check first */ | 705 | /* do the secure computing check first */ |
| 703 | secure_computing(regs->orig_eax); | 706 | if (!entryexit) |
| 707 | secure_computing(regs->orig_eax); | ||
| 704 | 708 | ||
| 705 | if (unlikely(current->audit_context)) { | 709 | if (unlikely(current->audit_context)) { |
| 706 | if (entryexit) | 710 | if (entryexit) |
| 707 | audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), regs->eax); | 711 | audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), |
| 712 | regs->eax); | ||
| 708 | /* Debug traps, when using PTRACE_SINGLESTEP, must be sent only | 713 | /* Debug traps, when using PTRACE_SINGLESTEP, must be sent only |
| 709 | * on the syscall exit path. Normally, when TIF_SYSCALL_AUDIT is | 714 | * on the syscall exit path. Normally, when TIF_SYSCALL_AUDIT is |
| 710 | * not used, entry.S will call us only on syscall exit, not | 715 | * not used, entry.S will call us only on syscall exit, not |
| @@ -738,7 +743,7 @@ int do_syscall_trace(struct pt_regs *regs, int entryexit) | |||
| 738 | /* the 0x80 provides a way for the tracing parent to distinguish | 743 | /* the 0x80 provides a way for the tracing parent to distinguish |
| 739 | between a syscall stop and SIGTRAP delivery */ | 744 | between a syscall stop and SIGTRAP delivery */ |
| 740 | /* Note that the debugger could change the result of test_thread_flag!*/ | 745 | /* Note that the debugger could change the result of test_thread_flag!*/ |
| 741 | ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) ? 0x80 : 0)); | 746 | ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) ? 0x80:0)); |
| 742 | 747 | ||
| 743 | /* | 748 | /* |
| 744 | * this isn't the same as continuing with a signal, but it will do | 749 | * this isn't the same as continuing with a signal, but it will do |
| @@ -750,7 +755,7 @@ int do_syscall_trace(struct pt_regs *regs, int entryexit) | |||
| 750 | current->exit_code = 0; | 755 | current->exit_code = 0; |
| 751 | } | 756 | } |
| 752 | ret = is_sysemu; | 757 | ret = is_sysemu; |
| 753 | out: | 758 | out: |
| 754 | if (unlikely(current->audit_context) && !entryexit) | 759 | if (unlikely(current->audit_context) && !entryexit) |
| 755 | audit_syscall_entry(current, AUDIT_ARCH_I386, regs->orig_eax, | 760 | audit_syscall_entry(current, AUDIT_ARCH_I386, regs->orig_eax, |
| 756 | regs->ebx, regs->ecx, regs->edx, regs->esi); | 761 | regs->ebx, regs->ecx, regs->edx, regs->esi); |
| @@ -759,6 +764,7 @@ int do_syscall_trace(struct pt_regs *regs, int entryexit) | |||
| 759 | 764 | ||
| 760 | regs->orig_eax = -1; /* force skip of syscall restarting */ | 765 | regs->orig_eax = -1; /* force skip of syscall restarting */ |
| 761 | if (unlikely(current->audit_context)) | 766 | if (unlikely(current->audit_context)) |
| 762 | audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), regs->eax); | 767 | audit_syscall_exit(current, AUDITSC_RESULT(regs->eax), |
| 768 | regs->eax); | ||
| 763 | return 1; | 769 | return 1; |
| 764 | } | 770 | } |
diff --git a/arch/i386/kernel/setup.c b/arch/i386/kernel/setup.c index e29fd5aeaf8e..dc39ca6a7eca 100644 --- a/arch/i386/kernel/setup.c +++ b/arch/i386/kernel/setup.c | |||
| @@ -87,14 +87,14 @@ EXPORT_SYMBOL(boot_cpu_data); | |||
| 87 | 87 | ||
| 88 | unsigned long mmu_cr4_features; | 88 | unsigned long mmu_cr4_features; |
| 89 | 89 | ||
| 90 | #ifdef CONFIG_ACPI_INTERPRETER | 90 | #ifdef CONFIG_ACPI |
| 91 | int acpi_disabled = 0; | 91 | int acpi_disabled = 0; |
| 92 | #else | 92 | #else |
| 93 | int acpi_disabled = 1; | 93 | int acpi_disabled = 1; |
| 94 | #endif | 94 | #endif |
| 95 | EXPORT_SYMBOL(acpi_disabled); | 95 | EXPORT_SYMBOL(acpi_disabled); |
| 96 | 96 | ||
| 97 | #ifdef CONFIG_ACPI_BOOT | 97 | #ifdef CONFIG_ACPI |
| 98 | int __initdata acpi_force = 0; | 98 | int __initdata acpi_force = 0; |
| 99 | extern acpi_interrupt_flags acpi_sci_flags; | 99 | extern acpi_interrupt_flags acpi_sci_flags; |
| 100 | #endif | 100 | #endif |
| @@ -139,6 +139,7 @@ struct sys_desc_table_struct { | |||
| 139 | unsigned char table[0]; | 139 | unsigned char table[0]; |
| 140 | }; | 140 | }; |
| 141 | struct edid_info edid_info; | 141 | struct edid_info edid_info; |
| 142 | EXPORT_SYMBOL_GPL(edid_info); | ||
| 142 | struct ist_info ist_info; | 143 | struct ist_info ist_info; |
| 143 | #if defined(CONFIG_X86_SPEEDSTEP_SMI) || \ | 144 | #if defined(CONFIG_X86_SPEEDSTEP_SMI) || \ |
| 144 | defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) | 145 | defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE) |
| @@ -798,7 +799,7 @@ static void __init parse_cmdline_early (char ** cmdline_p) | |||
| 798 | } | 799 | } |
| 799 | #endif | 800 | #endif |
| 800 | 801 | ||
| 801 | #ifdef CONFIG_ACPI_BOOT | 802 | #ifdef CONFIG_ACPI |
| 802 | /* "acpi=off" disables both ACPI table parsing and interpreter */ | 803 | /* "acpi=off" disables both ACPI table parsing and interpreter */ |
| 803 | else if (!memcmp(from, "acpi=off", 8)) { | 804 | else if (!memcmp(from, "acpi=off", 8)) { |
| 804 | disable_acpi(); | 805 | disable_acpi(); |
| @@ -850,11 +851,16 @@ static void __init parse_cmdline_early (char ** cmdline_p) | |||
| 850 | #endif | 851 | #endif |
| 851 | 852 | ||
| 852 | #ifdef CONFIG_X86_LOCAL_APIC | 853 | #ifdef CONFIG_X86_LOCAL_APIC |
| 854 | if (!memcmp(from, "disable_timer_pin_1", 19)) | ||
| 855 | disable_timer_pin_1 = 1; | ||
| 856 | if (!memcmp(from, "enable_timer_pin_1", 18)) | ||
| 857 | disable_timer_pin_1 = -1; | ||
| 858 | |||
| 853 | /* disable IO-APIC */ | 859 | /* disable IO-APIC */ |
| 854 | else if (!memcmp(from, "noapic", 6)) | 860 | else if (!memcmp(from, "noapic", 6)) |
| 855 | disable_ioapic_setup(); | 861 | disable_ioapic_setup(); |
| 856 | #endif /* CONFIG_X86_LOCAL_APIC */ | 862 | #endif /* CONFIG_X86_LOCAL_APIC */ |
| 857 | #endif /* CONFIG_ACPI_BOOT */ | 863 | #endif /* CONFIG_ACPI */ |
| 858 | 864 | ||
| 859 | #ifdef CONFIG_X86_LOCAL_APIC | 865 | #ifdef CONFIG_X86_LOCAL_APIC |
| 860 | /* enable local APIC */ | 866 | /* enable local APIC */ |
| @@ -1299,7 +1305,7 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat | |||
| 1299 | */ | 1305 | */ |
| 1300 | static void __init register_memory(void) | 1306 | static void __init register_memory(void) |
| 1301 | { | 1307 | { |
| 1302 | unsigned long gapstart, gapsize; | 1308 | unsigned long gapstart, gapsize, round; |
| 1303 | unsigned long long last; | 1309 | unsigned long long last; |
| 1304 | int i; | 1310 | int i; |
| 1305 | 1311 | ||
| @@ -1344,14 +1350,14 @@ static void __init register_memory(void) | |||
| 1344 | } | 1350 | } |
| 1345 | 1351 | ||
| 1346 | /* | 1352 | /* |
| 1347 | * Start allocating dynamic PCI memory a bit into the gap, | 1353 | * See how much we want to round up: start off with |
| 1348 | * aligned up to the nearest megabyte. | 1354 | * rounding to the next 1MB area. |
| 1349 | * | ||
| 1350 | * Question: should we try to pad it up a bit (do something | ||
| 1351 | * like " + (gapsize >> 3)" in there too?). We now have the | ||
| 1352 | * technology. | ||
| 1353 | */ | 1355 | */ |
| 1354 | pci_mem_start = (gapstart + 0xfffff) & ~0xfffff; | 1356 | round = 0x100000; |
| 1357 | while ((gapsize >> 4) > round) | ||
| 1358 | round += round; | ||
| 1359 | /* Fun with two's complement */ | ||
| 1360 | pci_mem_start = (gapstart + round) & -round; | ||
| 1355 | 1361 | ||
| 1356 | printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n", | 1362 | printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n", |
| 1357 | pci_mem_start, gapstart, gapsize); | 1363 | pci_mem_start, gapstart, gapsize); |
| @@ -1579,7 +1585,7 @@ void __init setup_arch(char **cmdline_p) | |||
| 1579 | if (efi_enabled) | 1585 | if (efi_enabled) |
| 1580 | efi_map_memmap(); | 1586 | efi_map_memmap(); |
| 1581 | 1587 | ||
| 1582 | #ifdef CONFIG_ACPI_BOOT | 1588 | #ifdef CONFIG_ACPI |
| 1583 | /* | 1589 | /* |
| 1584 | * Parse the ACPI tables for possible boot-time SMP configuration. | 1590 | * Parse the ACPI tables for possible boot-time SMP configuration. |
| 1585 | */ | 1591 | */ |
diff --git a/arch/i386/kernel/sigframe.h b/arch/i386/kernel/sigframe.h index d21b14f5c25c..0b2221711dad 100644 --- a/arch/i386/kernel/sigframe.h +++ b/arch/i386/kernel/sigframe.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | struct sigframe | 1 | struct sigframe |
| 2 | { | 2 | { |
| 3 | char *pretcode; | 3 | char __user *pretcode; |
| 4 | int sig; | 4 | int sig; |
| 5 | struct sigcontext sc; | 5 | struct sigcontext sc; |
| 6 | struct _fpstate fpstate; | 6 | struct _fpstate fpstate; |
| @@ -10,10 +10,10 @@ struct sigframe | |||
| 10 | 10 | ||
| 11 | struct rt_sigframe | 11 | struct rt_sigframe |
| 12 | { | 12 | { |
| 13 | char *pretcode; | 13 | char __user *pretcode; |
| 14 | int sig; | 14 | int sig; |
| 15 | struct siginfo *pinfo; | 15 | struct siginfo __user *pinfo; |
| 16 | void *puc; | 16 | void __user *puc; |
| 17 | struct siginfo info; | 17 | struct siginfo info; |
| 18 | struct ucontext uc; | 18 | struct ucontext uc; |
| 19 | struct _fpstate fpstate; | 19 | struct _fpstate fpstate; |
diff --git a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c index 5e4893d2b9f2..c70cd2a08304 100644 --- a/arch/i386/kernel/smpboot.c +++ b/arch/i386/kernel/smpboot.c | |||
| @@ -1330,8 +1330,7 @@ void __cpu_die(unsigned int cpu) | |||
| 1330 | printk ("CPU %d is now offline\n", cpu); | 1330 | printk ("CPU %d is now offline\n", cpu); |
| 1331 | return; | 1331 | return; |
| 1332 | } | 1332 | } |
| 1333 | current->state = TASK_UNINTERRUPTIBLE; | 1333 | msleep(100); |
| 1334 | schedule_timeout(HZ/10); | ||
| 1335 | } | 1334 | } |
| 1336 | printk(KERN_ERR "CPU %u didn't die...\n", cpu); | 1335 | printk(KERN_ERR "CPU %u didn't die...\n", cpu); |
| 1337 | } | 1336 | } |
diff --git a/arch/i386/kernel/srat.c b/arch/i386/kernel/srat.c index 7b3b27d64409..516bf5653b02 100644 --- a/arch/i386/kernel/srat.c +++ b/arch/i386/kernel/srat.c | |||
| @@ -213,12 +213,18 @@ static __init void node_read_chunk(int nid, struct node_memory_chunk_s *memory_c | |||
| 213 | node_end_pfn[nid] = memory_chunk->end_pfn; | 213 | node_end_pfn[nid] = memory_chunk->end_pfn; |
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | static u8 pxm_to_nid_map[MAX_PXM_DOMAINS];/* _PXM to logical node ID map */ | ||
| 217 | |||
| 218 | int pxm_to_node(int pxm) | ||
| 219 | { | ||
| 220 | return pxm_to_nid_map[pxm]; | ||
| 221 | } | ||
| 222 | |||
| 216 | /* Parse the ACPI Static Resource Affinity Table */ | 223 | /* Parse the ACPI Static Resource Affinity Table */ |
| 217 | static int __init acpi20_parse_srat(struct acpi_table_srat *sratp) | 224 | static int __init acpi20_parse_srat(struct acpi_table_srat *sratp) |
| 218 | { | 225 | { |
| 219 | u8 *start, *end, *p; | 226 | u8 *start, *end, *p; |
| 220 | int i, j, nid; | 227 | int i, j, nid; |
| 221 | u8 pxm_to_nid_map[MAX_PXM_DOMAINS];/* _PXM to logical node ID map */ | ||
| 222 | u8 nid_to_pxm_map[MAX_NUMNODES];/* logical node ID to _PXM map */ | 228 | u8 nid_to_pxm_map[MAX_NUMNODES];/* logical node ID to _PXM map */ |
| 223 | 229 | ||
| 224 | start = (u8 *)(&(sratp->reserved) + 1); /* skip header */ | 230 | start = (u8 *)(&(sratp->reserved) + 1); /* skip header */ |
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index eefea7c55008..2883a4d4f01f 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c | |||
| @@ -329,8 +329,7 @@ EXPORT_SYMBOL(get_cmos_time); | |||
| 329 | 329 | ||
| 330 | static void sync_cmos_clock(unsigned long dummy); | 330 | static void sync_cmos_clock(unsigned long dummy); |
| 331 | 331 | ||
| 332 | static struct timer_list sync_cmos_timer = | 332 | static DEFINE_TIMER(sync_cmos_timer, sync_cmos_clock, 0, 0); |
| 333 | TIMER_INITIALIZER(sync_cmos_clock, 0, 0); | ||
| 334 | 333 | ||
| 335 | static void sync_cmos_clock(unsigned long dummy) | 334 | static void sync_cmos_clock(unsigned long dummy) |
| 336 | { | 335 | { |
diff --git a/arch/i386/kernel/vmlinux.lds.S b/arch/i386/kernel/vmlinux.lds.S index 13b9c62cbbb4..4710195b6b74 100644 --- a/arch/i386/kernel/vmlinux.lds.S +++ b/arch/i386/kernel/vmlinux.lds.S | |||
| @@ -144,12 +144,7 @@ SECTIONS | |||
| 144 | *(.exitcall.exit) | 144 | *(.exitcall.exit) |
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | /* Stabs debugging sections. */ | 147 | STABS_DEBUG |
| 148 | .stab 0 : { *(.stab) } | 148 | |
| 149 | .stabstr 0 : { *(.stabstr) } | 149 | DWARF_DEBUG |
| 150 | .stab.excl 0 : { *(.stab.excl) } | ||
| 151 | .stab.exclstr 0 : { *(.stab.exclstr) } | ||
| 152 | .stab.index 0 : { *(.stab.index) } | ||
| 153 | .stab.indexstr 0 : { *(.stab.indexstr) } | ||
| 154 | .comment 0 : { *(.comment) } | ||
| 155 | } | 150 | } |
diff --git a/arch/i386/kernel/vsyscall-sigreturn.S b/arch/i386/kernel/vsyscall-sigreturn.S index 68afa50dd7cf..fadb5bc3c374 100644 --- a/arch/i386/kernel/vsyscall-sigreturn.S +++ b/arch/i386/kernel/vsyscall-sigreturn.S | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | #include <asm/unistd.h> | 9 | #include <asm/unistd.h> |
| 10 | #include <asm/asm_offsets.h> | 10 | #include <asm/asm-offsets.h> |
| 11 | 11 | ||
| 12 | 12 | ||
| 13 | /* XXX | 13 | /* XXX |
diff --git a/arch/i386/kernel/vsyscall.lds.S b/arch/i386/kernel/vsyscall.lds.S index a7977707c8e5..98699ca6e52d 100644 --- a/arch/i386/kernel/vsyscall.lds.S +++ b/arch/i386/kernel/vsyscall.lds.S | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * object prelinked to its virtual address, and with only one read-only | 3 | * object prelinked to its virtual address, and with only one read-only |
| 4 | * segment (that fits in one page). This script controls its layout. | 4 | * segment (that fits in one page). This script controls its layout. |
| 5 | */ | 5 | */ |
| 6 | #include <asm/asm_offsets.h> | 6 | #include <asm/asm-offsets.h> |
| 7 | 7 | ||
| 8 | SECTIONS | 8 | SECTIONS |
| 9 | { | 9 | { |
diff --git a/arch/i386/mach-es7000/es7000plat.c b/arch/i386/mach-es7000/es7000plat.c index 2000bdca2fc2..dc6660511b07 100644 --- a/arch/i386/mach-es7000/es7000plat.c +++ b/arch/i386/mach-es7000/es7000plat.c | |||
| @@ -51,7 +51,7 @@ struct mip_reg *host_reg; | |||
| 51 | int mip_port; | 51 | int mip_port; |
| 52 | unsigned long mip_addr, host_addr; | 52 | unsigned long mip_addr, host_addr; |
| 53 | 53 | ||
| 54 | #if defined(CONFIG_X86_IO_APIC) && (defined(CONFIG_ACPI_INTERPRETER) || defined(CONFIG_ACPI_BOOT)) | 54 | #if defined(CONFIG_X86_IO_APIC) && defined(CONFIG_ACPI) |
| 55 | 55 | ||
| 56 | /* | 56 | /* |
| 57 | * GSI override for ES7000 platforms. | 57 | * GSI override for ES7000 platforms. |
| @@ -73,7 +73,7 @@ es7000_rename_gsi(int ioapic, int gsi) | |||
| 73 | return gsi; | 73 | return gsi; |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | #endif // (CONFIG_X86_IO_APIC) && (CONFIG_ACPI_INTERPRETER || CONFIG_ACPI_BOOT) | 76 | #endif /* (CONFIG_X86_IO_APIC) && (CONFIG_ACPI) */ |
| 77 | 77 | ||
| 78 | void __init | 78 | void __init |
| 79 | setup_unisys () | 79 | setup_unisys () |
diff --git a/arch/i386/pci/Makefile b/arch/i386/pci/Makefile index 1bff03f36965..ead6122dd06d 100644 --- a/arch/i386/pci/Makefile +++ b/arch/i386/pci/Makefile | |||
| @@ -5,7 +5,7 @@ obj-$(CONFIG_PCI_MMCONFIG) += mmconfig.o | |||
| 5 | obj-$(CONFIG_PCI_DIRECT) += direct.o | 5 | obj-$(CONFIG_PCI_DIRECT) += direct.o |
| 6 | 6 | ||
| 7 | pci-y := fixup.o | 7 | pci-y := fixup.o |
| 8 | pci-$(CONFIG_ACPI_PCI) += acpi.o | 8 | pci-$(CONFIG_ACPI) += acpi.o |
| 9 | pci-y += legacy.o irq.o | 9 | pci-y += legacy.o irq.o |
| 10 | 10 | ||
| 11 | pci-$(CONFIG_X86_VISWS) := visws.o fixup.o | 11 | pci-$(CONFIG_X86_VISWS) := visws.o fixup.o |
diff --git a/arch/i386/pci/acpi.c b/arch/i386/pci/acpi.c index 42913f43feb0..2941674f35eb 100644 --- a/arch/i386/pci/acpi.c +++ b/arch/i386/pci/acpi.c | |||
| @@ -3,16 +3,31 @@ | |||
| 3 | #include <linux/init.h> | 3 | #include <linux/init.h> |
| 4 | #include <linux/irq.h> | 4 | #include <linux/irq.h> |
| 5 | #include <asm/hw_irq.h> | 5 | #include <asm/hw_irq.h> |
| 6 | #include <asm/numa.h> | ||
| 6 | #include "pci.h" | 7 | #include "pci.h" |
| 7 | 8 | ||
| 8 | struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int domain, int busnum) | 9 | struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int domain, int busnum) |
| 9 | { | 10 | { |
| 11 | struct pci_bus *bus; | ||
| 12 | |||
| 10 | if (domain != 0) { | 13 | if (domain != 0) { |
| 11 | printk(KERN_WARNING "PCI: Multiple domains not supported\n"); | 14 | printk(KERN_WARNING "PCI: Multiple domains not supported\n"); |
| 12 | return NULL; | 15 | return NULL; |
| 13 | } | 16 | } |
| 14 | 17 | ||
| 15 | return pcibios_scan_root(busnum); | 18 | bus = pcibios_scan_root(busnum); |
| 19 | #ifdef CONFIG_ACPI_NUMA | ||
| 20 | if (bus != NULL) { | ||
| 21 | int pxm = acpi_get_pxm(device->handle); | ||
| 22 | if (pxm >= 0) { | ||
| 23 | bus->sysdata = (void *)(unsigned long)pxm_to_node(pxm); | ||
| 24 | printk("bus %d -> pxm %d -> node %ld\n", | ||
| 25 | busnum, pxm, (long)(bus->sysdata)); | ||
| 26 | } | ||
| 27 | } | ||
| 28 | #endif | ||
| 29 | |||
| 30 | return bus; | ||
| 16 | } | 31 | } |
| 17 | 32 | ||
| 18 | extern int pci_routeirq; | 33 | extern int pci_routeirq; |
diff --git a/arch/i386/pci/i386.c b/arch/i386/pci/i386.c index 3cc480998a47..6d6338500c3c 100644 --- a/arch/i386/pci/i386.c +++ b/arch/i386/pci/i386.c | |||
| @@ -283,9 +283,9 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | |||
| 283 | /* Write-combine setting is ignored, it is changed via the mtrr | 283 | /* Write-combine setting is ignored, it is changed via the mtrr |
| 284 | * interfaces on this platform. | 284 | * interfaces on this platform. |
| 285 | */ | 285 | */ |
| 286 | if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, | 286 | if (io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, |
| 287 | vma->vm_end - vma->vm_start, | 287 | vma->vm_end - vma->vm_start, |
| 288 | vma->vm_page_prot)) | 288 | vma->vm_page_prot)) |
| 289 | return -EAGAIN; | 289 | return -EAGAIN; |
| 290 | 290 | ||
| 291 | return 0; | 291 | return 0; |
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index 86348b68fda1..326a2edc3834 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c | |||
| @@ -1075,7 +1075,7 @@ static void pirq_penalize_isa_irq(int irq, int active) | |||
| 1075 | 1075 | ||
| 1076 | void pcibios_penalize_isa_irq(int irq, int active) | 1076 | void pcibios_penalize_isa_irq(int irq, int active) |
| 1077 | { | 1077 | { |
| 1078 | #ifdef CONFIG_ACPI_PCI | 1078 | #ifdef CONFIG_ACPI |
| 1079 | if (!acpi_noirq) | 1079 | if (!acpi_noirq) |
| 1080 | acpi_penalize_isa_irq(irq, active); | 1080 | acpi_penalize_isa_irq(irq, active); |
| 1081 | else | 1081 | else |
diff --git a/arch/i386/pci/mmconfig.c b/arch/i386/pci/mmconfig.c index 60f0e7a1162a..dfbf80cff834 100644 --- a/arch/i386/pci/mmconfig.c +++ b/arch/i386/pci/mmconfig.c | |||
| @@ -127,13 +127,6 @@ static int __init pci_mmcfg_init(void) | |||
| 127 | (pci_mmcfg_config[0].base_address == 0)) | 127 | (pci_mmcfg_config[0].base_address == 0)) |
| 128 | goto out; | 128 | goto out; |
| 129 | 129 | ||
| 130 | /* Kludge for now. Don't use mmconfig on AMD systems because | ||
| 131 | those have some busses where mmconfig doesn't work, | ||
| 132 | and we don't parse ACPI MCFG well enough to handle that. | ||
| 133 | Remove when proper handling is added. */ | ||
| 134 | if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) | ||
| 135 | goto out; | ||
| 136 | |||
| 137 | printk(KERN_INFO "PCI: Using MMCONFIG\n"); | 130 | printk(KERN_INFO "PCI: Using MMCONFIG\n"); |
| 138 | raw_pci_ops = &pci_mmcfg; | 131 | raw_pci_ops = &pci_mmcfg; |
| 139 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; | 132 | pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; |
diff --git a/arch/i386/power/swsusp.S b/arch/i386/power/swsusp.S index c4105286ff26..c893b897217f 100644 --- a/arch/i386/power/swsusp.S +++ b/arch/i386/power/swsusp.S | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | #include <linux/linkage.h> | 12 | #include <linux/linkage.h> |
| 13 | #include <asm/segment.h> | 13 | #include <asm/segment.h> |
| 14 | #include <asm/page.h> | 14 | #include <asm/page.h> |
| 15 | #include <asm/asm_offsets.h> | 15 | #include <asm/asm-offsets.h> |
| 16 | 16 | ||
| 17 | .text | 17 | .text |
| 18 | 18 | ||
