diff options
Diffstat (limited to 'arch/x86/kernel/setup.c')
| -rw-r--r-- | arch/x86/kernel/setup.c | 115 |
1 files changed, 18 insertions, 97 deletions
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 19f15c4076f..a55f6609fe1 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c | |||
| @@ -109,10 +109,6 @@ | |||
| 109 | #include <asm/numa_64.h> | 109 | #include <asm/numa_64.h> |
| 110 | #endif | 110 | #endif |
| 111 | 111 | ||
| 112 | #ifndef ARCH_SETUP | ||
| 113 | #define ARCH_SETUP | ||
| 114 | #endif | ||
| 115 | |||
| 116 | /* | 112 | /* |
| 117 | * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries. | 113 | * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries. |
| 118 | * The direct mapping extends to max_pfn_mapped, so that we can directly access | 114 | * The direct mapping extends to max_pfn_mapped, so that we can directly access |
| @@ -134,9 +130,9 @@ int default_cpu_present_to_apicid(int mps_cpu) | |||
| 134 | return __default_cpu_present_to_apicid(mps_cpu); | 130 | return __default_cpu_present_to_apicid(mps_cpu); |
| 135 | } | 131 | } |
| 136 | 132 | ||
| 137 | int default_check_phys_apicid_present(int boot_cpu_physical_apicid) | 133 | int default_check_phys_apicid_present(int phys_apicid) |
| 138 | { | 134 | { |
| 139 | return __default_check_phys_apicid_present(boot_cpu_physical_apicid); | 135 | return __default_check_phys_apicid_present(phys_apicid); |
| 140 | } | 136 | } |
| 141 | #endif | 137 | #endif |
| 142 | 138 | ||
| @@ -172,13 +168,6 @@ static struct resource bss_resource = { | |||
| 172 | 168 | ||
| 173 | 169 | ||
| 174 | #ifdef CONFIG_X86_32 | 170 | #ifdef CONFIG_X86_32 |
| 175 | static struct resource video_ram_resource = { | ||
| 176 | .name = "Video RAM area", | ||
| 177 | .start = 0xa0000, | ||
| 178 | .end = 0xbffff, | ||
| 179 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | ||
| 180 | }; | ||
| 181 | |||
| 182 | /* cpu data as detected by the assembly code in head.S */ | 171 | /* cpu data as detected by the assembly code in head.S */ |
| 183 | struct cpuinfo_x86 new_cpu_data __cpuinitdata = {0, 0, 0, 0, -1, 1, 0, 0, -1}; | 172 | struct cpuinfo_x86 new_cpu_data __cpuinitdata = {0, 0, 0, 0, -1, 1, 0, 0, -1}; |
| 184 | /* common cpu data for all cpus */ | 173 | /* common cpu data for all cpus */ |
| @@ -606,7 +595,7 @@ static struct resource standard_io_resources[] = { | |||
| 606 | .flags = IORESOURCE_BUSY | IORESOURCE_IO } | 595 | .flags = IORESOURCE_BUSY | IORESOURCE_IO } |
| 607 | }; | 596 | }; |
| 608 | 597 | ||
| 609 | static void __init reserve_standard_io_resources(void) | 598 | void __init reserve_standard_io_resources(void) |
| 610 | { | 599 | { |
| 611 | int i; | 600 | int i; |
| 612 | 601 | ||
| @@ -638,10 +627,6 @@ static int __init setup_elfcorehdr(char *arg) | |||
| 638 | early_param("elfcorehdr", setup_elfcorehdr); | 627 | early_param("elfcorehdr", setup_elfcorehdr); |
| 639 | #endif | 628 | #endif |
| 640 | 629 | ||
| 641 | static struct x86_quirks default_x86_quirks __initdata; | ||
| 642 | |||
| 643 | struct x86_quirks *x86_quirks __initdata = &default_x86_quirks; | ||
| 644 | |||
| 645 | #ifdef CONFIG_X86_RESERVE_LOW_64K | 630 | #ifdef CONFIG_X86_RESERVE_LOW_64K |
| 646 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) | 631 | static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) |
| 647 | { | 632 | { |
| @@ -773,7 +758,7 @@ void __init setup_arch(char **cmdline_p) | |||
| 773 | } | 758 | } |
| 774 | #endif | 759 | #endif |
| 775 | 760 | ||
| 776 | ARCH_SETUP | 761 | x86_init.oem.arch_setup(); |
| 777 | 762 | ||
| 778 | setup_memory_map(); | 763 | setup_memory_map(); |
| 779 | parse_setup_data(); | 764 | parse_setup_data(); |
| @@ -844,11 +829,9 @@ void __init setup_arch(char **cmdline_p) | |||
| 844 | * VMware detection requires dmi to be available, so this | 829 | * VMware detection requires dmi to be available, so this |
| 845 | * needs to be done after dmi_scan_machine, for the BP. | 830 | * needs to be done after dmi_scan_machine, for the BP. |
| 846 | */ | 831 | */ |
| 847 | init_hypervisor(&boot_cpu_data); | 832 | init_hypervisor_platform(); |
| 848 | 833 | ||
| 849 | #ifdef CONFIG_X86_32 | 834 | x86_init.resources.probe_roms(); |
| 850 | probe_roms(); | ||
| 851 | #endif | ||
| 852 | 835 | ||
| 853 | /* after parse_early_param, so could debug it */ | 836 | /* after parse_early_param, so could debug it */ |
| 854 | insert_resource(&iomem_resource, &code_resource); | 837 | insert_resource(&iomem_resource, &code_resource); |
| @@ -983,10 +966,9 @@ void __init setup_arch(char **cmdline_p) | |||
| 983 | kvmclock_init(); | 966 | kvmclock_init(); |
| 984 | #endif | 967 | #endif |
| 985 | 968 | ||
| 986 | paravirt_pagetable_setup_start(swapper_pg_dir); | 969 | x86_init.paging.pagetable_setup_start(swapper_pg_dir); |
| 987 | paging_init(); | 970 | paging_init(); |
| 988 | paravirt_pagetable_setup_done(swapper_pg_dir); | 971 | x86_init.paging.pagetable_setup_done(swapper_pg_dir); |
| 989 | paravirt_post_allocator_init(); | ||
| 990 | 972 | ||
| 991 | tboot_probe(); | 973 | tboot_probe(); |
| 992 | 974 | ||
| @@ -1003,13 +985,11 @@ void __init setup_arch(char **cmdline_p) | |||
| 1003 | */ | 985 | */ |
| 1004 | acpi_boot_init(); | 986 | acpi_boot_init(); |
| 1005 | 987 | ||
| 1006 | #if defined(CONFIG_X86_MPPARSE) || defined(CONFIG_X86_VISWS) | ||
| 1007 | /* | 988 | /* |
| 1008 | * get boot-time SMP configuration: | 989 | * get boot-time SMP configuration: |
| 1009 | */ | 990 | */ |
| 1010 | if (smp_found_config) | 991 | if (smp_found_config) |
| 1011 | get_smp_config(); | 992 | get_smp_config(); |
| 1012 | #endif | ||
| 1013 | 993 | ||
| 1014 | prefill_possible_map(); | 994 | prefill_possible_map(); |
| 1015 | 995 | ||
| @@ -1028,10 +1008,7 @@ void __init setup_arch(char **cmdline_p) | |||
| 1028 | e820_reserve_resources(); | 1008 | e820_reserve_resources(); |
| 1029 | e820_mark_nosave_regions(max_low_pfn); | 1009 | e820_mark_nosave_regions(max_low_pfn); |
| 1030 | 1010 | ||
| 1031 | #ifdef CONFIG_X86_32 | 1011 | x86_init.resources.reserve_resources(); |
| 1032 | request_resource(&iomem_resource, &video_ram_resource); | ||
| 1033 | #endif | ||
| 1034 | reserve_standard_io_resources(); | ||
| 1035 | 1012 | ||
| 1036 | e820_setup_gap(); | 1013 | e820_setup_gap(); |
| 1037 | 1014 | ||
| @@ -1043,78 +1020,22 @@ void __init setup_arch(char **cmdline_p) | |||
| 1043 | conswitchp = &dummy_con; | 1020 | conswitchp = &dummy_con; |
| 1044 | #endif | 1021 | #endif |
| 1045 | #endif | 1022 | #endif |
| 1023 | x86_init.oem.banner(); | ||
| 1046 | } | 1024 | } |
| 1047 | 1025 | ||
| 1048 | #ifdef CONFIG_X86_32 | 1026 | #ifdef CONFIG_X86_32 |
| 1049 | 1027 | ||
| 1050 | /** | 1028 | static struct resource video_ram_resource = { |
| 1051 | * x86_quirk_intr_init - post gate setup interrupt initialisation | 1029 | .name = "Video RAM area", |
| 1052 | * | 1030 | .start = 0xa0000, |
| 1053 | * Description: | 1031 | .end = 0xbffff, |
| 1054 | * Fill in any interrupts that may have been left out by the general | 1032 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM |
| 1055 | * init_IRQ() routine. interrupts having to do with the machine rather | ||
| 1056 | * than the devices on the I/O bus (like APIC interrupts in intel MP | ||
| 1057 | * systems) are started here. | ||
| 1058 | **/ | ||
| 1059 | void __init x86_quirk_intr_init(void) | ||
| 1060 | { | ||
| 1061 | if (x86_quirks->arch_intr_init) { | ||
| 1062 | if (x86_quirks->arch_intr_init()) | ||
| 1063 | return; | ||
| 1064 | } | ||
| 1065 | } | ||
| 1066 | |||
| 1067 | /** | ||
| 1068 | * x86_quirk_trap_init - initialise system specific traps | ||
| 1069 | * | ||
| 1070 | * Description: | ||
| 1071 | * Called as the final act of trap_init(). Used in VISWS to initialise | ||
| 1072 | * the various board specific APIC traps. | ||
| 1073 | **/ | ||
| 1074 | void __init x86_quirk_trap_init(void) | ||
| 1075 | { | ||
| 1076 | if (x86_quirks->arch_trap_init) { | ||
| 1077 | if (x86_quirks->arch_trap_init()) | ||
| 1078 | return; | ||
| 1079 | } | ||
| 1080 | } | ||
| 1081 | |||
| 1082 | static struct irqaction irq0 = { | ||
| 1083 | .handler = timer_interrupt, | ||
| 1084 | .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL | IRQF_TIMER, | ||
| 1085 | .name = "timer" | ||
| 1086 | }; | 1033 | }; |
| 1087 | 1034 | ||
| 1088 | /** | 1035 | void __init i386_reserve_resources(void) |
| 1089 | * x86_quirk_pre_time_init - do any specific initialisations before. | ||
| 1090 | * | ||
| 1091 | **/ | ||
| 1092 | void __init x86_quirk_pre_time_init(void) | ||
| 1093 | { | 1036 | { |
| 1094 | if (x86_quirks->arch_pre_time_init) | 1037 | request_resource(&iomem_resource, &video_ram_resource); |
| 1095 | x86_quirks->arch_pre_time_init(); | 1038 | reserve_standard_io_resources(); |
| 1096 | } | 1039 | } |
| 1097 | 1040 | ||
| 1098 | /** | ||
| 1099 | * x86_quirk_time_init - do any specific initialisations for the system timer. | ||
| 1100 | * | ||
| 1101 | * Description: | ||
| 1102 | * Must plug the system timer interrupt source at HZ into the IRQ listed | ||
| 1103 | * in irq_vectors.h:TIMER_IRQ | ||
| 1104 | **/ | ||
| 1105 | void __init x86_quirk_time_init(void) | ||
| 1106 | { | ||
| 1107 | if (x86_quirks->arch_time_init) { | ||
| 1108 | /* | ||
| 1109 | * A nonzero return code does not mean failure, it means | ||
| 1110 | * that the architecture quirk does not want any | ||
| 1111 | * generic (timer) setup to be performed after this: | ||
| 1112 | */ | ||
| 1113 | if (x86_quirks->arch_time_init()) | ||
| 1114 | return; | ||
| 1115 | } | ||
| 1116 | |||
| 1117 | irq0.mask = cpumask_of_cpu(0); | ||
| 1118 | setup_irq(0, &irq0); | ||
| 1119 | } | ||
| 1120 | #endif /* CONFIG_X86_32 */ | 1041 | #endif /* CONFIG_X86_32 */ |
