Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6
[pandora-kernel.git] / arch / i386 / kernel / setup.c
1 /*
2  *  linux/arch/i386/kernel/setup.c
3  *
4  *  Copyright (C) 1995  Linus Torvalds
5  *
6  *  Support of BIGMEM added by Gerhard Wichert, Siemens AG, July 1999
7  *
8  *  Memory region support
9  *      David Parsons <orc@pell.chi.il.us>, July-August 1999
10  *
11  *  Added E820 sanitization routine (removes overlapping memory regions);
12  *  Brian Moyle <bmoyle@mvista.com>, February 2001
13  *
14  * Moved CPU detection code to cpu/${cpu}.c
15  *    Patrick Mochel <mochel@osdl.org>, March 2002
16  *
17  *  Provisions for empty E820 memory regions (reported by certain BIOSes).
18  *  Alex Achenbach <xela@slit.de>, December 2002.
19  *
20  */
21
22 /*
23  * This file handles the architecture-dependent parts of initialization
24  */
25
26 #include <linux/sched.h>
27 #include <linux/mm.h>
28 #include <linux/mmzone.h>
29 #include <linux/screen_info.h>
30 #include <linux/ioport.h>
31 #include <linux/acpi.h>
32 #include <linux/apm_bios.h>
33 #include <linux/initrd.h>
34 #include <linux/bootmem.h>
35 #include <linux/seq_file.h>
36 #include <linux/platform_device.h>
37 #include <linux/console.h>
38 #include <linux/mca.h>
39 #include <linux/root_dev.h>
40 #include <linux/highmem.h>
41 #include <linux/module.h>
42 #include <linux/efi.h>
43 #include <linux/init.h>
44 #include <linux/edd.h>
45 #include <linux/nodemask.h>
46 #include <linux/kexec.h>
47 #include <linux/crash_dump.h>
48 #include <linux/dmi.h>
49 #include <linux/pfn.h>
50
51 #include <video/edid.h>
52
53 #include <asm/apic.h>
54 #include <asm/e820.h>
55 #include <asm/mpspec.h>
56 #include <asm/mmzone.h>
57 #include <asm/setup.h>
58 #include <asm/arch_hooks.h>
59 #include <asm/sections.h>
60 #include <asm/io_apic.h>
61 #include <asm/ist.h>
62 #include <asm/io.h>
63 #include <setup_arch.h>
64 #include <bios_ebda.h>
65
66 /* Forward Declaration. */
67 void __init find_max_pfn(void);
68
69 /* This value is set up by the early boot code to point to the value
70    immediately after the boot time page tables.  It contains a *physical*
71    address, and must not be in the .bss segment! */
72 unsigned long init_pg_tables_end __initdata = ~0UL;
73
74 int disable_pse __devinitdata = 0;
75
76 /*
77  * Machine setup..
78  */
79
80 #ifdef CONFIG_EFI
81 int efi_enabled = 0;
82 EXPORT_SYMBOL(efi_enabled);
83 #endif
84
85 /* cpu data as detected by the assembly code in head.S */
86 struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
87 /* common cpu data for all cpus */
88 struct cpuinfo_x86 boot_cpu_data __read_mostly = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
89 EXPORT_SYMBOL(boot_cpu_data);
90
91 unsigned long mmu_cr4_features;
92
93 /* for MCA, but anyone else can use it if they want */
94 unsigned int machine_id;
95 #ifdef CONFIG_MCA
96 EXPORT_SYMBOL(machine_id);
97 #endif
98 unsigned int machine_submodel_id;
99 unsigned int BIOS_revision;
100 unsigned int mca_pentium_flag;
101
102 /* For PCI or other memory-mapped resources */
103 unsigned long pci_mem_start = 0x10000000;
104 #ifdef CONFIG_PCI
105 EXPORT_SYMBOL(pci_mem_start);
106 #endif
107
108 /* Boot loader ID as an integer, for the benefit of proc_dointvec */
109 int bootloader_type;
110
111 /* user-defined highmem size */
112 static unsigned int highmem_pages = -1;
113
114 /*
115  * Setup options
116  */
117 struct drive_info_struct { char dummy[32]; } drive_info;
118 #if defined(CONFIG_BLK_DEV_IDE) || defined(CONFIG_BLK_DEV_HD) || \
119     defined(CONFIG_BLK_DEV_IDE_MODULE) || defined(CONFIG_BLK_DEV_HD_MODULE)
120 EXPORT_SYMBOL(drive_info);
121 #endif
122 struct screen_info screen_info;
123 EXPORT_SYMBOL(screen_info);
124 struct apm_info apm_info;
125 EXPORT_SYMBOL(apm_info);
126 struct sys_desc_table_struct {
127         unsigned short length;
128         unsigned char table[0];
129 };
130 struct edid_info edid_info;
131 EXPORT_SYMBOL_GPL(edid_info);
132 struct ist_info ist_info;
133 #if defined(CONFIG_X86_SPEEDSTEP_SMI) || \
134         defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
135 EXPORT_SYMBOL(ist_info);
136 #endif
137 struct e820map e820;
138
139 extern void early_cpu_init(void);
140 extern int root_mountflags;
141
142 unsigned long saved_videomode;
143
144 #define RAMDISK_IMAGE_START_MASK        0x07FF
145 #define RAMDISK_PROMPT_FLAG             0x8000
146 #define RAMDISK_LOAD_FLAG               0x4000  
147
148 static char command_line[COMMAND_LINE_SIZE];
149
150 unsigned char __initdata boot_params[PARAM_SIZE];
151
152 static struct resource data_resource = {
153         .name   = "Kernel data",
154         .start  = 0,
155         .end    = 0,
156         .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
157 };
158
159 static struct resource code_resource = {
160         .name   = "Kernel code",
161         .start  = 0,
162         .end    = 0,
163         .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
164 };
165
166 static struct resource system_rom_resource = {
167         .name   = "System ROM",
168         .start  = 0xf0000,
169         .end    = 0xfffff,
170         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
171 };
172
173 static struct resource extension_rom_resource = {
174         .name   = "Extension ROM",
175         .start  = 0xe0000,
176         .end    = 0xeffff,
177         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
178 };
179
180 static struct resource adapter_rom_resources[] = { {
181         .name   = "Adapter ROM",
182         .start  = 0xc8000,
183         .end    = 0,
184         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
185 }, {
186         .name   = "Adapter ROM",
187         .start  = 0,
188         .end    = 0,
189         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
190 }, {
191         .name   = "Adapter ROM",
192         .start  = 0,
193         .end    = 0,
194         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
195 }, {
196         .name   = "Adapter ROM",
197         .start  = 0,
198         .end    = 0,
199         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
200 }, {
201         .name   = "Adapter ROM",
202         .start  = 0,
203         .end    = 0,
204         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
205 }, {
206         .name   = "Adapter ROM",
207         .start  = 0,
208         .end    = 0,
209         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
210 } };
211
212 #define ADAPTER_ROM_RESOURCES \
213         (sizeof adapter_rom_resources / sizeof adapter_rom_resources[0])
214
215 static struct resource video_rom_resource = {
216         .name   = "Video ROM",
217         .start  = 0xc0000,
218         .end    = 0xc7fff,
219         .flags  = IORESOURCE_BUSY | IORESOURCE_READONLY | IORESOURCE_MEM
220 };
221
222 static struct resource video_ram_resource = {
223         .name   = "Video RAM area",
224         .start  = 0xa0000,
225         .end    = 0xbffff,
226         .flags  = IORESOURCE_BUSY | IORESOURCE_MEM
227 };
228
229 static struct resource standard_io_resources[] = { {
230         .name   = "dma1",
231         .start  = 0x0000,
232         .end    = 0x001f,
233         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
234 }, {
235         .name   = "pic1",
236         .start  = 0x0020,
237         .end    = 0x0021,
238         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
239 }, {
240         .name   = "timer0",
241         .start  = 0x0040,
242         .end    = 0x0043,
243         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
244 }, {
245         .name   = "timer1",
246         .start  = 0x0050,
247         .end    = 0x0053,
248         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
249 }, {
250         .name   = "keyboard",
251         .start  = 0x0060,
252         .end    = 0x006f,
253         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
254 }, {
255         .name   = "dma page reg",
256         .start  = 0x0080,
257         .end    = 0x008f,
258         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
259 }, {
260         .name   = "pic2",
261         .start  = 0x00a0,
262         .end    = 0x00a1,
263         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
264 }, {
265         .name   = "dma2",
266         .start  = 0x00c0,
267         .end    = 0x00df,
268         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
269 }, {
270         .name   = "fpu",
271         .start  = 0x00f0,
272         .end    = 0x00ff,
273         .flags  = IORESOURCE_BUSY | IORESOURCE_IO
274 } };
275
276 #define STANDARD_IO_RESOURCES \
277         (sizeof standard_io_resources / sizeof standard_io_resources[0])
278
279 #define romsignature(x) (*(unsigned short *)(x) == 0xaa55)
280
281 static int __init romchecksum(unsigned char *rom, unsigned long length)
282 {
283         unsigned char *p, sum = 0;
284
285         for (p = rom; p < rom + length; p++)
286                 sum += *p;
287         return sum == 0;
288 }
289
290 static void __init probe_roms(void)
291 {
292         unsigned long start, length, upper;
293         unsigned char *rom;
294         int           i;
295
296         /* video rom */
297         upper = adapter_rom_resources[0].start;
298         for (start = video_rom_resource.start; start < upper; start += 2048) {
299                 rom = isa_bus_to_virt(start);
300                 if (!romsignature(rom))
301                         continue;
302
303                 video_rom_resource.start = start;
304
305                 /* 0 < length <= 0x7f * 512, historically */
306                 length = rom[2] * 512;
307
308                 /* if checksum okay, trust length byte */
309                 if (length && romchecksum(rom, length))
310                         video_rom_resource.end = start + length - 1;
311
312                 request_resource(&iomem_resource, &video_rom_resource);
313                 break;
314         }
315
316         start = (video_rom_resource.end + 1 + 2047) & ~2047UL;
317         if (start < upper)
318                 start = upper;
319
320         /* system rom */
321         request_resource(&iomem_resource, &system_rom_resource);
322         upper = system_rom_resource.start;
323
324         /* check for extension rom (ignore length byte!) */
325         rom = isa_bus_to_virt(extension_rom_resource.start);
326         if (romsignature(rom)) {
327                 length = extension_rom_resource.end - extension_rom_resource.start + 1;
328                 if (romchecksum(rom, length)) {
329                         request_resource(&iomem_resource, &extension_rom_resource);
330                         upper = extension_rom_resource.start;
331                 }
332         }
333
334         /* check for adapter roms on 2k boundaries */
335         for (i = 0; i < ADAPTER_ROM_RESOURCES && start < upper; start += 2048) {
336                 rom = isa_bus_to_virt(start);
337                 if (!romsignature(rom))
338                         continue;
339
340                 /* 0 < length <= 0x7f * 512, historically */
341                 length = rom[2] * 512;
342
343                 /* but accept any length that fits if checksum okay */
344                 if (!length || start + length > upper || !romchecksum(rom, length))
345                         continue;
346
347                 adapter_rom_resources[i].start = start;
348                 adapter_rom_resources[i].end = start + length - 1;
349                 request_resource(&iomem_resource, &adapter_rom_resources[i]);
350
351                 start = adapter_rom_resources[i++].end & ~2047UL;
352         }
353 }
354
355 static void __init limit_regions(unsigned long long size)
356 {
357         unsigned long long current_addr = 0;
358         int i;
359
360         if (efi_enabled) {
361                 efi_memory_desc_t *md;
362                 void *p;
363
364                 for (p = memmap.map, i = 0; p < memmap.map_end;
365                         p += memmap.desc_size, i++) {
366                         md = p;
367                         current_addr = md->phys_addr + (md->num_pages << 12);
368                         if (md->type == EFI_CONVENTIONAL_MEMORY) {
369                                 if (current_addr >= size) {
370                                         md->num_pages -=
371                                                 (((current_addr-size) + PAGE_SIZE-1) >> PAGE_SHIFT);
372                                         memmap.nr_map = i + 1;
373                                         return;
374                                 }
375                         }
376                 }
377         }
378         for (i = 0; i < e820.nr_map; i++) {
379                 current_addr = e820.map[i].addr + e820.map[i].size;
380                 if (current_addr < size)
381                         continue;
382
383                 if (e820.map[i].type != E820_RAM)
384                         continue;
385
386                 if (e820.map[i].addr >= size) {
387                         /*
388                          * This region starts past the end of the
389                          * requested size, skip it completely.
390                          */
391                         e820.nr_map = i;
392                 } else {
393                         e820.nr_map = i + 1;
394                         e820.map[i].size -= current_addr - size;
395                 }
396                 return;
397         }
398 }
399
400 void __init add_memory_region(unsigned long long start,
401                               unsigned long long size, int type)
402 {
403         int x;
404
405         if (!efi_enabled) {
406                 x = e820.nr_map;
407
408                 if (x == E820MAX) {
409                     printk(KERN_ERR "Ooops! Too many entries in the memory map!\n");
410                     return;
411                 }
412
413                 e820.map[x].addr = start;
414                 e820.map[x].size = size;
415                 e820.map[x].type = type;
416                 e820.nr_map++;
417         }
418 } /* add_memory_region */
419
420 #define E820_DEBUG      1
421
422 static void __init print_memory_map(char *who)
423 {
424         int i;
425
426         for (i = 0; i < e820.nr_map; i++) {
427                 printk(" %s: %016Lx - %016Lx ", who,
428                         e820.map[i].addr,
429                         e820.map[i].addr + e820.map[i].size);
430                 switch (e820.map[i].type) {
431                 case E820_RAM:  printk("(usable)\n");
432                                 break;
433                 case E820_RESERVED:
434                                 printk("(reserved)\n");
435                                 break;
436                 case E820_ACPI:
437                                 printk("(ACPI data)\n");
438                                 break;
439                 case E820_NVS:
440                                 printk("(ACPI NVS)\n");
441                                 break;
442                 default:        printk("type %lu\n", e820.map[i].type);
443                                 break;
444                 }
445         }
446 }
447
448 /*
449  * Sanitize the BIOS e820 map.
450  *
451  * Some e820 responses include overlapping entries.  The following 
452  * replaces the original e820 map with a new one, removing overlaps.
453  *
454  */
455 struct change_member {
456         struct e820entry *pbios; /* pointer to original bios entry */
457         unsigned long long addr; /* address for this change point */
458 };
459 static struct change_member change_point_list[2*E820MAX] __initdata;
460 static struct change_member *change_point[2*E820MAX] __initdata;
461 static struct e820entry *overlap_list[E820MAX] __initdata;
462 static struct e820entry new_bios[E820MAX] __initdata;
463
464 int __init sanitize_e820_map(struct e820entry * biosmap, char * pnr_map)
465 {
466         struct change_member *change_tmp;
467         unsigned long current_type, last_type;
468         unsigned long long last_addr;
469         int chgidx, still_changing;
470         int overlap_entries;
471         int new_bios_entry;
472         int old_nr, new_nr, chg_nr;
473         int i;
474
475         /*
476                 Visually we're performing the following (1,2,3,4 = memory types)...
477
478                 Sample memory map (w/overlaps):
479                    ____22__________________
480                    ______________________4_
481                    ____1111________________
482                    _44_____________________
483                    11111111________________
484                    ____________________33__
485                    ___________44___________
486                    __________33333_________
487                    ______________22________
488                    ___________________2222_
489                    _________111111111______
490                    _____________________11_
491                    _________________4______
492
493                 Sanitized equivalent (no overlap):
494                    1_______________________
495                    _44_____________________
496                    ___1____________________
497                    ____22__________________
498                    ______11________________
499                    _________1______________
500                    __________3_____________
501                    ___________44___________
502                    _____________33_________
503                    _______________2________
504                    ________________1_______
505                    _________________4______
506                    ___________________2____
507                    ____________________33__
508                    ______________________4_
509         */
510
511         /* if there's only one memory region, don't bother */
512         if (*pnr_map < 2)
513                 return -1;
514
515         old_nr = *pnr_map;
516
517         /* bail out if we find any unreasonable addresses in bios map */
518         for (i=0; i<old_nr; i++)
519                 if (biosmap[i].addr + biosmap[i].size < biosmap[i].addr)
520                         return -1;
521
522         /* create pointers for initial change-point information (for sorting) */
523         for (i=0; i < 2*old_nr; i++)
524                 change_point[i] = &change_point_list[i];
525
526         /* record all known change-points (starting and ending addresses),
527            omitting those that are for empty memory regions */
528         chgidx = 0;
529         for (i=0; i < old_nr; i++)      {
530                 if (biosmap[i].size != 0) {
531                         change_point[chgidx]->addr = biosmap[i].addr;
532                         change_point[chgidx++]->pbios = &biosmap[i];
533                         change_point[chgidx]->addr = biosmap[i].addr + biosmap[i].size;
534                         change_point[chgidx++]->pbios = &biosmap[i];
535                 }
536         }
537         chg_nr = chgidx;        /* true number of change-points */
538
539         /* sort change-point list by memory addresses (low -> high) */
540         still_changing = 1;
541         while (still_changing)  {
542                 still_changing = 0;
543                 for (i=1; i < chg_nr; i++)  {
544                         /* if <current_addr> > <last_addr>, swap */
545                         /* or, if current=<start_addr> & last=<end_addr>, swap */
546                         if ((change_point[i]->addr < change_point[i-1]->addr) ||
547                                 ((change_point[i]->addr == change_point[i-1]->addr) &&
548                                  (change_point[i]->addr == change_point[i]->pbios->addr) &&
549                                  (change_point[i-1]->addr != change_point[i-1]->pbios->addr))
550                            )
551                         {
552                                 change_tmp = change_point[i];
553                                 change_point[i] = change_point[i-1];
554                                 change_point[i-1] = change_tmp;
555                                 still_changing=1;
556                         }
557                 }
558         }
559
560         /* create a new bios memory map, removing overlaps */
561         overlap_entries=0;       /* number of entries in the overlap table */
562         new_bios_entry=0;        /* index for creating new bios map entries */
563         last_type = 0;           /* start with undefined memory type */
564         last_addr = 0;           /* start with 0 as last starting address */
565         /* loop through change-points, determining affect on the new bios map */
566         for (chgidx=0; chgidx < chg_nr; chgidx++)
567         {
568                 /* keep track of all overlapping bios entries */
569                 if (change_point[chgidx]->addr == change_point[chgidx]->pbios->addr)
570                 {
571                         /* add map entry to overlap list (> 1 entry implies an overlap) */
572                         overlap_list[overlap_entries++]=change_point[chgidx]->pbios;
573                 }
574                 else
575                 {
576                         /* remove entry from list (order independent, so swap with last) */
577                         for (i=0; i<overlap_entries; i++)
578                         {
579                                 if (overlap_list[i] == change_point[chgidx]->pbios)
580                                         overlap_list[i] = overlap_list[overlap_entries-1];
581                         }
582                         overlap_entries--;
583                 }
584                 /* if there are overlapping entries, decide which "type" to use */
585                 /* (larger value takes precedence -- 1=usable, 2,3,4,4+=unusable) */
586                 current_type = 0;
587                 for (i=0; i<overlap_entries; i++)
588                         if (overlap_list[i]->type > current_type)
589                                 current_type = overlap_list[i]->type;
590                 /* continue building up new bios map based on this information */
591                 if (current_type != last_type)  {
592                         if (last_type != 0)      {
593                                 new_bios[new_bios_entry].size =
594                                         change_point[chgidx]->addr - last_addr;
595                                 /* move forward only if the new size was non-zero */
596                                 if (new_bios[new_bios_entry].size != 0)
597                                         if (++new_bios_entry >= E820MAX)
598                                                 break;  /* no more space left for new bios entries */
599                         }
600                         if (current_type != 0)  {
601                                 new_bios[new_bios_entry].addr = change_point[chgidx]->addr;
602                                 new_bios[new_bios_entry].type = current_type;
603                                 last_addr=change_point[chgidx]->addr;
604                         }
605                         last_type = current_type;
606                 }
607         }
608         new_nr = new_bios_entry;   /* retain count for new bios entries */
609
610         /* copy new bios mapping into original location */
611         memcpy(biosmap, new_bios, new_nr*sizeof(struct e820entry));
612         *pnr_map = new_nr;
613
614         return 0;
615 }
616
617 /*
618  * Copy the BIOS e820 map into a safe place.
619  *
620  * Sanity-check it while we're at it..
621  *
622  * If we're lucky and live on a modern system, the setup code
623  * will have given us a memory map that we can use to properly
624  * set up memory.  If we aren't, we'll fake a memory map.
625  *
626  * We check to see that the memory map contains at least 2 elements
627  * before we'll use it, because the detection code in setup.S may
628  * not be perfect and most every PC known to man has two memory
629  * regions: one from 0 to 640k, and one from 1mb up.  (The IBM
630  * thinkpad 560x, for example, does not cooperate with the memory
631  * detection code.)
632  */
633 int __init copy_e820_map(struct e820entry * biosmap, int nr_map)
634 {
635         /* Only one memory region (or negative)? Ignore it */
636         if (nr_map < 2)
637                 return -1;
638
639         do {
640                 unsigned long long start = biosmap->addr;
641                 unsigned long long size = biosmap->size;
642                 unsigned long long end = start + size;
643                 unsigned long type = biosmap->type;
644
645                 /* Overflow in 64 bits? Ignore the memory map. */
646                 if (start > end)
647                         return -1;
648
649                 /*
650                  * Some BIOSes claim RAM in the 640k - 1M region.
651                  * Not right. Fix it up.
652                  */
653                 if (type == E820_RAM) {
654                         if (start < 0x100000ULL && end > 0xA0000ULL) {
655                                 if (start < 0xA0000ULL)
656                                         add_memory_region(start, 0xA0000ULL-start, type);
657                                 if (end <= 0x100000ULL)
658                                         continue;
659                                 start = 0x100000ULL;
660                                 size = end - start;
661                         }
662                 }
663                 add_memory_region(start, size, type);
664         } while (biosmap++,--nr_map);
665         return 0;
666 }
667
668 #if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
669 struct edd edd;
670 #ifdef CONFIG_EDD_MODULE
671 EXPORT_SYMBOL(edd);
672 #endif
673 /**
674  * copy_edd() - Copy the BIOS EDD information
675  *              from boot_params into a safe place.
676  *
677  */
678 static inline void copy_edd(void)
679 {
680      memcpy(edd.mbr_signature, EDD_MBR_SIGNATURE, sizeof(edd.mbr_signature));
681      memcpy(edd.edd_info, EDD_BUF, sizeof(edd.edd_info));
682      edd.mbr_signature_nr = EDD_MBR_SIG_NR;
683      edd.edd_info_nr = EDD_NR;
684 }
685 #else
686 static inline void copy_edd(void)
687 {
688 }
689 #endif
690
691 static int __initdata user_defined_memmap = 0;
692
693 /*
694  * "mem=nopentium" disables the 4MB page tables.
695  * "mem=XXX[kKmM]" defines a memory region from HIGH_MEM
696  * to <mem>, overriding the bios size.
697  * "memmap=XXX[KkmM]@XXX[KkmM]" defines a memory region from
698  * <start> to <start>+<mem>, overriding the bios size.
699  *
700  * HPA tells me bootloaders need to parse mem=, so no new
701  * option should be mem=  [also see Documentation/i386/boot.txt]
702  */
703 static int __init parse_mem(char *arg)
704 {
705         if (!arg)
706                 return -EINVAL;
707
708         if (strcmp(arg, "nopentium") == 0) {
709                 clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability);
710                 disable_pse = 1;
711         } else {
712                 /* If the user specifies memory size, we
713                  * limit the BIOS-provided memory map to
714                  * that size. exactmap can be used to specify
715                  * the exact map. mem=number can be used to
716                  * trim the existing memory map.
717                  */
718                 unsigned long long mem_size;
719  
720                 mem_size = memparse(arg, &arg);
721                 limit_regions(mem_size);
722                 user_defined_memmap = 1;
723         }
724         return 0;
725 }
726 early_param("mem", parse_mem);
727
728 static int __init parse_memmap(char *arg)
729 {
730         if (!arg)
731                 return -EINVAL;
732
733         if (strcmp(arg, "exactmap") == 0) {
734 #ifdef CONFIG_CRASH_DUMP
735                 /* If we are doing a crash dump, we
736                  * still need to know the real mem
737                  * size before original memory map is
738                  * reset.
739                  */
740                 find_max_pfn();
741                 saved_max_pfn = max_pfn;
742 #endif
743                 e820.nr_map = 0;
744                 user_defined_memmap = 1;
745         } else {
746                 /* If the user specifies memory size, we
747                  * limit the BIOS-provided memory map to
748                  * that size. exactmap can be used to specify
749                  * the exact map. mem=number can be used to
750                  * trim the existing memory map.
751                  */
752                 unsigned long long start_at, mem_size;
753
754                 mem_size = memparse(arg, &arg);
755                 if (*arg == '@') {
756                         start_at = memparse(arg+1, &arg);
757                         add_memory_region(start_at, mem_size, E820_RAM);
758                 } else if (*arg == '#') {
759                         start_at = memparse(arg+1, &arg);
760                         add_memory_region(start_at, mem_size, E820_ACPI);
761                 } else if (*arg == '$') {
762                         start_at = memparse(arg+1, &arg);
763                         add_memory_region(start_at, mem_size, E820_RESERVED);
764                 } else {
765                         limit_regions(mem_size);
766                         user_defined_memmap = 1;
767                 }
768         }
769         return 0;
770 }
771 early_param("memmap", parse_memmap);
772
773 #ifdef CONFIG_PROC_VMCORE
774 /* elfcorehdr= specifies the location of elf core header
775  * stored by the crashed kernel.
776  */
777 static int __init parse_elfcorehdr(char *arg)
778 {
779         if (!arg)
780                 return -EINVAL;
781
782         elfcorehdr_addr = memparse(arg, &arg);
783         return 0;
784 }
785 early_param("elfcorehdr", parse_elfcorehdr);
786 #endif /* CONFIG_PROC_VMCORE */
787
788 /*
789  * highmem=size forces highmem to be exactly 'size' bytes.
790  * This works even on boxes that have no highmem otherwise.
791  * This also works to reduce highmem size on bigger boxes.
792  */
793 static int __init parse_highmem(char *arg)
794 {
795         if (!arg)
796                 return -EINVAL;
797
798         highmem_pages = memparse(arg, &arg) >> PAGE_SHIFT;
799         return 0;
800 }
801 early_param("highmem", parse_highmem);
802
803 /*
804  * vmalloc=size forces the vmalloc area to be exactly 'size'
805  * bytes. This can be used to increase (or decrease) the
806  * vmalloc area - the default is 128m.
807  */
808 static int __init parse_vmalloc(char *arg)
809 {
810         if (!arg)
811                 return -EINVAL;
812
813         __VMALLOC_RESERVE = memparse(arg, &arg);
814         return 0;
815 }
816 early_param("vmalloc", parse_vmalloc);
817
818 /*
819  * reservetop=size reserves a hole at the top of the kernel address space which
820  * a hypervisor can load into later.  Needed for dynamically loaded hypervisors,
821  * so relocating the fixmap can be done before paging initialization.
822  */
823 static int __init parse_reservetop(char *arg)
824 {
825         unsigned long address;
826
827         if (!arg)
828                 return -EINVAL;
829
830         address = memparse(arg, &arg);
831         reserve_top_address(address);
832         return 0;
833 }
834 early_param("reservetop", parse_reservetop);
835
836 /*
837  * Callback for efi_memory_walk.
838  */
839 static int __init
840 efi_find_max_pfn(unsigned long start, unsigned long end, void *arg)
841 {
842         unsigned long *max_pfn = arg, pfn;
843
844         if (start < end) {
845                 pfn = PFN_UP(end -1);
846                 if (pfn > *max_pfn)
847                         *max_pfn = pfn;
848         }
849         return 0;
850 }
851
852 static int __init
853 efi_memory_present_wrapper(unsigned long start, unsigned long end, void *arg)
854 {
855         memory_present(0, start, end);
856         return 0;
857 }
858
859  /*
860   * This function checks if the entire range <start,end> is mapped with type.
861   *
862   * Note: this function only works correct if the e820 table is sorted and
863   * not-overlapping, which is the case
864   */
865 int __init
866 e820_all_mapped(unsigned long s, unsigned long e, unsigned type)
867 {
868         u64 start = s;
869         u64 end = e;
870         int i;
871         for (i = 0; i < e820.nr_map; i++) {
872                 struct e820entry *ei = &e820.map[i];
873                 if (type && ei->type != type)
874                         continue;
875                 /* is the region (part) in overlap with the current region ?*/
876                 if (ei->addr >= end || ei->addr + ei->size <= start)
877                         continue;
878                 /* if the region is at the beginning of <start,end> we move
879                  * start to the end of the region since it's ok until there
880                  */
881                 if (ei->addr <= start)
882                         start = ei->addr + ei->size;
883                 /* if start is now at or beyond end, we're done, full
884                  * coverage */
885                 if (start >= end)
886                         return 1; /* we're done */
887         }
888         return 0;
889 }
890
891 /*
892  * Find the highest page frame number we have available
893  */
894 void __init find_max_pfn(void)
895 {
896         int i;
897
898         max_pfn = 0;
899         if (efi_enabled) {
900                 efi_memmap_walk(efi_find_max_pfn, &max_pfn);
901                 efi_memmap_walk(efi_memory_present_wrapper, NULL);
902                 return;
903         }
904
905         for (i = 0; i < e820.nr_map; i++) {
906                 unsigned long start, end;
907                 /* RAM? */
908                 if (e820.map[i].type != E820_RAM)
909                         continue;
910                 start = PFN_UP(e820.map[i].addr);
911                 end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
912                 if (start >= end)
913                         continue;
914                 if (end > max_pfn)
915                         max_pfn = end;
916                 memory_present(0, start, end);
917         }
918 }
919
920 /*
921  * Determine low and high memory ranges:
922  */
923 unsigned long __init find_max_low_pfn(void)
924 {
925         unsigned long max_low_pfn;
926
927         max_low_pfn = max_pfn;
928         if (max_low_pfn > MAXMEM_PFN) {
929                 if (highmem_pages == -1)
930                         highmem_pages = max_pfn - MAXMEM_PFN;
931                 if (highmem_pages + MAXMEM_PFN < max_pfn)
932                         max_pfn = MAXMEM_PFN + highmem_pages;
933                 if (highmem_pages + MAXMEM_PFN > max_pfn) {
934                         printk("only %luMB highmem pages available, ignoring highmem size of %uMB.\n", pages_to_mb(max_pfn - MAXMEM_PFN), pages_to_mb(highmem_pages));
935                         highmem_pages = 0;
936                 }
937                 max_low_pfn = MAXMEM_PFN;
938 #ifndef CONFIG_HIGHMEM
939                 /* Maximum memory usable is what is directly addressable */
940                 printk(KERN_WARNING "Warning only %ldMB will be used.\n",
941                                         MAXMEM>>20);
942                 if (max_pfn > MAX_NONPAE_PFN)
943                         printk(KERN_WARNING "Use a PAE enabled kernel.\n");
944                 else
945                         printk(KERN_WARNING "Use a HIGHMEM enabled kernel.\n");
946                 max_pfn = MAXMEM_PFN;
947 #else /* !CONFIG_HIGHMEM */
948 #ifndef CONFIG_X86_PAE
949                 if (max_pfn > MAX_NONPAE_PFN) {
950                         max_pfn = MAX_NONPAE_PFN;
951                         printk(KERN_WARNING "Warning only 4GB will be used.\n");
952                         printk(KERN_WARNING "Use a PAE enabled kernel.\n");
953                 }
954 #endif /* !CONFIG_X86_PAE */
955 #endif /* !CONFIG_HIGHMEM */
956         } else {
957                 if (highmem_pages == -1)
958                         highmem_pages = 0;
959 #ifdef CONFIG_HIGHMEM
960                 if (highmem_pages >= max_pfn) {
961                         printk(KERN_ERR "highmem size specified (%uMB) is bigger than pages available (%luMB)!.\n", pages_to_mb(highmem_pages), pages_to_mb(max_pfn));
962                         highmem_pages = 0;
963                 }
964                 if (highmem_pages) {
965                         if (max_low_pfn-highmem_pages < 64*1024*1024/PAGE_SIZE){
966                                 printk(KERN_ERR "highmem size %uMB results in smaller than 64MB lowmem, ignoring it.\n", pages_to_mb(highmem_pages));
967                                 highmem_pages = 0;
968                         }
969                         max_low_pfn -= highmem_pages;
970                 }
971 #else
972                 if (highmem_pages)
973                         printk(KERN_ERR "ignoring highmem size on non-highmem kernel!\n");
974 #endif
975         }
976         return max_low_pfn;
977 }
978
979 /*
980  * Free all available memory for boot time allocation.  Used
981  * as a callback function by efi_memory_walk()
982  */
983
984 static int __init
985 free_available_memory(unsigned long start, unsigned long end, void *arg)
986 {
987         /* check max_low_pfn */
988         if (start >= (max_low_pfn << PAGE_SHIFT))
989                 return 0;
990         if (end >= (max_low_pfn << PAGE_SHIFT))
991                 end = max_low_pfn << PAGE_SHIFT;
992         if (start < end)
993                 free_bootmem(start, end - start);
994
995         return 0;
996 }
997 /*
998  * Register fully available low RAM pages with the bootmem allocator.
999  */
1000 static void __init register_bootmem_low_pages(unsigned long max_low_pfn)
1001 {
1002         int i;
1003
1004         if (efi_enabled) {
1005                 efi_memmap_walk(free_available_memory, NULL);
1006                 return;
1007         }
1008         for (i = 0; i < e820.nr_map; i++) {
1009                 unsigned long curr_pfn, last_pfn, size;
1010                 /*
1011                  * Reserve usable low memory
1012                  */
1013                 if (e820.map[i].type != E820_RAM)
1014                         continue;
1015                 /*
1016                  * We are rounding up the start address of usable memory:
1017                  */
1018                 curr_pfn = PFN_UP(e820.map[i].addr);
1019                 if (curr_pfn >= max_low_pfn)
1020                         continue;
1021                 /*
1022                  * ... and at the end of the usable range downwards:
1023                  */
1024                 last_pfn = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
1025
1026                 if (last_pfn > max_low_pfn)
1027                         last_pfn = max_low_pfn;
1028
1029                 /*
1030                  * .. finally, did all the rounding and playing
1031                  * around just make the area go away?
1032                  */
1033                 if (last_pfn <= curr_pfn)
1034                         continue;
1035
1036                 size = last_pfn - curr_pfn;
1037                 free_bootmem(PFN_PHYS(curr_pfn), PFN_PHYS(size));
1038         }
1039 }
1040
1041 /*
1042  * workaround for Dell systems that neglect to reserve EBDA
1043  */
1044 static void __init reserve_ebda_region(void)
1045 {
1046         unsigned int addr;
1047         addr = get_bios_ebda();
1048         if (addr)
1049                 reserve_bootmem(addr, PAGE_SIZE);       
1050 }
1051
1052 #ifndef CONFIG_NEED_MULTIPLE_NODES
1053 void __init setup_bootmem_allocator(void);
1054 static unsigned long __init setup_memory(void)
1055 {
1056         /*
1057          * partially used pages are not usable - thus
1058          * we are rounding upwards:
1059          */
1060         min_low_pfn = PFN_UP(init_pg_tables_end);
1061
1062         find_max_pfn();
1063
1064         max_low_pfn = find_max_low_pfn();
1065
1066 #ifdef CONFIG_HIGHMEM
1067         highstart_pfn = highend_pfn = max_pfn;
1068         if (max_pfn > max_low_pfn) {
1069                 highstart_pfn = max_low_pfn;
1070         }
1071         printk(KERN_NOTICE "%ldMB HIGHMEM available.\n",
1072                 pages_to_mb(highend_pfn - highstart_pfn));
1073         num_physpages = highend_pfn;
1074         high_memory = (void *) __va(highstart_pfn * PAGE_SIZE - 1) + 1;
1075 #else
1076         num_physpages = max_low_pfn;
1077         high_memory = (void *) __va(max_low_pfn * PAGE_SIZE - 1) + 1;
1078 #endif
1079 #ifdef CONFIG_FLATMEM
1080         max_mapnr = num_physpages;
1081 #endif
1082         printk(KERN_NOTICE "%ldMB LOWMEM available.\n",
1083                         pages_to_mb(max_low_pfn));
1084
1085         setup_bootmem_allocator();
1086
1087         return max_low_pfn;
1088 }
1089
1090 void __init zone_sizes_init(void)
1091 {
1092         unsigned long zones_size[MAX_NR_ZONES] = { 0, };
1093         unsigned int max_dma, low;
1094
1095         max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
1096         low = max_low_pfn;
1097
1098         if (low < max_dma)
1099                 zones_size[ZONE_DMA] = low;
1100         else {
1101                 zones_size[ZONE_DMA] = max_dma;
1102                 zones_size[ZONE_NORMAL] = low - max_dma;
1103 #ifdef CONFIG_HIGHMEM
1104                 zones_size[ZONE_HIGHMEM] = highend_pfn - low;
1105 #endif
1106         }
1107         free_area_init(zones_size);
1108 }
1109 #else
1110 extern unsigned long __init setup_memory(void);
1111 extern void zone_sizes_init(void);
1112 #endif /* !CONFIG_NEED_MULTIPLE_NODES */
1113
1114 void __init setup_bootmem_allocator(void)
1115 {
1116         unsigned long bootmap_size;
1117         /*
1118          * Initialize the boot-time allocator (with low memory only):
1119          */
1120         bootmap_size = init_bootmem(min_low_pfn, max_low_pfn);
1121
1122         register_bootmem_low_pages(max_low_pfn);
1123
1124         /*
1125          * Reserve the bootmem bitmap itself as well. We do this in two
1126          * steps (first step was init_bootmem()) because this catches
1127          * the (very unlikely) case of us accidentally initializing the
1128          * bootmem allocator with an invalid RAM area.
1129          */
1130         reserve_bootmem(__PHYSICAL_START, (PFN_PHYS(min_low_pfn) +
1131                          bootmap_size + PAGE_SIZE-1) - (__PHYSICAL_START));
1132
1133         /*
1134          * reserve physical page 0 - it's a special BIOS page on many boxes,
1135          * enabling clean reboots, SMP operation, laptop functions.
1136          */
1137         reserve_bootmem(0, PAGE_SIZE);
1138
1139         /* reserve EBDA region, it's a 4K region */
1140         reserve_ebda_region();
1141
1142     /* could be an AMD 768MPX chipset. Reserve a page  before VGA to prevent
1143        PCI prefetch into it (errata #56). Usually the page is reserved anyways,
1144        unless you have no PS/2 mouse plugged in. */
1145         if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
1146             boot_cpu_data.x86 == 6)
1147              reserve_bootmem(0xa0000 - 4096, 4096);
1148
1149 #ifdef CONFIG_SMP
1150         /*
1151          * But first pinch a few for the stack/trampoline stuff
1152          * FIXME: Don't need the extra page at 4K, but need to fix
1153          * trampoline before removing it. (see the GDT stuff)
1154          */
1155         reserve_bootmem(PAGE_SIZE, PAGE_SIZE);
1156 #endif
1157 #ifdef CONFIG_ACPI_SLEEP
1158         /*
1159          * Reserve low memory region for sleep support.
1160          */
1161         acpi_reserve_bootmem();
1162 #endif
1163 #ifdef CONFIG_X86_FIND_SMP_CONFIG
1164         /*
1165          * Find and reserve possible boot-time SMP configuration:
1166          */
1167         find_smp_config();
1168 #endif
1169         numa_kva_reserve();
1170 #ifdef CONFIG_BLK_DEV_INITRD
1171         if (LOADER_TYPE && INITRD_START) {
1172                 if (INITRD_START + INITRD_SIZE <= (max_low_pfn << PAGE_SHIFT)) {
1173                         reserve_bootmem(INITRD_START, INITRD_SIZE);
1174                         initrd_start =
1175                                 INITRD_START ? INITRD_START + PAGE_OFFSET : 0;
1176                         initrd_end = initrd_start+INITRD_SIZE;
1177                 }
1178                 else {
1179                         printk(KERN_ERR "initrd extends beyond end of memory "
1180                             "(0x%08lx > 0x%08lx)\ndisabling initrd\n",
1181                             INITRD_START + INITRD_SIZE,
1182                             max_low_pfn << PAGE_SHIFT);
1183                         initrd_start = 0;
1184                 }
1185         }
1186 #endif
1187 #ifdef CONFIG_KEXEC
1188         if (crashk_res.start != crashk_res.end)
1189                 reserve_bootmem(crashk_res.start,
1190                         crashk_res.end - crashk_res.start + 1);
1191 #endif
1192 }
1193
1194 /*
1195  * The node 0 pgdat is initialized before all of these because
1196  * it's needed for bootmem.  node>0 pgdats have their virtual
1197  * space allocated before the pagetables are in place to access
1198  * them, so they can't be cleared then.
1199  *
1200  * This should all compile down to nothing when NUMA is off.
1201  */
1202 void __init remapped_pgdat_init(void)
1203 {
1204         int nid;
1205
1206         for_each_online_node(nid) {
1207                 if (nid != 0)
1208                         memset(NODE_DATA(nid), 0, sizeof(struct pglist_data));
1209         }
1210 }
1211
1212 /*
1213  * Request address space for all standard RAM and ROM resources
1214  * and also for regions reported as reserved by the e820.
1215  */
1216 static void __init
1217 legacy_init_iomem_resources(struct resource *code_resource, struct resource *data_resource)
1218 {
1219         int i;
1220
1221         probe_roms();
1222         for (i = 0; i < e820.nr_map; i++) {
1223                 struct resource *res;
1224 #ifndef CONFIG_RESOURCES_64BIT
1225                 if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL)
1226                         continue;
1227 #endif
1228                 res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
1229                 switch (e820.map[i].type) {
1230                 case E820_RAM:  res->name = "System RAM"; break;
1231                 case E820_ACPI: res->name = "ACPI Tables"; break;
1232                 case E820_NVS:  res->name = "ACPI Non-volatile Storage"; break;
1233                 default:        res->name = "reserved";
1234                 }
1235                 res->start = e820.map[i].addr;
1236                 res->end = res->start + e820.map[i].size - 1;
1237                 res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
1238                 if (request_resource(&iomem_resource, res)) {
1239                         kfree(res);
1240                         continue;
1241                 }
1242                 if (e820.map[i].type == E820_RAM) {
1243                         /*
1244                          *  We don't know which RAM region contains kernel data,
1245                          *  so we try it repeatedly and let the resource manager
1246                          *  test it.
1247                          */
1248                         request_resource(res, code_resource);
1249                         request_resource(res, data_resource);
1250 #ifdef CONFIG_KEXEC
1251                         request_resource(res, &crashk_res);
1252 #endif
1253                 }
1254         }
1255 }
1256
1257 /*
1258  * Request address space for all standard resources
1259  *
1260  * This is called just before pcibios_init(), which is also a
1261  * subsys_initcall, but is linked in later (in arch/i386/pci/common.c).
1262  */
1263 static int __init request_standard_resources(void)
1264 {
1265         int i;
1266
1267         printk("Setting up standard PCI resources\n");
1268         if (efi_enabled)
1269                 efi_initialize_iomem_resources(&code_resource, &data_resource);
1270         else
1271                 legacy_init_iomem_resources(&code_resource, &data_resource);
1272
1273         /* EFI systems may still have VGA */
1274         request_resource(&iomem_resource, &video_ram_resource);
1275
1276         /* request I/O space for devices used on all i[345]86 PCs */
1277         for (i = 0; i < STANDARD_IO_RESOURCES; i++)
1278                 request_resource(&ioport_resource, &standard_io_resources[i]);
1279         return 0;
1280 }
1281
1282 subsys_initcall(request_standard_resources);
1283
1284 static void __init register_memory(void)
1285 {
1286         unsigned long gapstart, gapsize, round;
1287         unsigned long long last;
1288         int i;
1289
1290         /*
1291          * Search for the bigest gap in the low 32 bits of the e820
1292          * memory space.
1293          */
1294         last = 0x100000000ull;
1295         gapstart = 0x10000000;
1296         gapsize = 0x400000;
1297         i = e820.nr_map;
1298         while (--i >= 0) {
1299                 unsigned long long start = e820.map[i].addr;
1300                 unsigned long long end = start + e820.map[i].size;
1301
1302                 /*
1303                  * Since "last" is at most 4GB, we know we'll
1304                  * fit in 32 bits if this condition is true
1305                  */
1306                 if (last > end) {
1307                         unsigned long gap = last - end;
1308
1309                         if (gap > gapsize) {
1310                                 gapsize = gap;
1311                                 gapstart = end;
1312                         }
1313                 }
1314                 if (start < last)
1315                         last = start;
1316         }
1317
1318         /*
1319          * See how much we want to round up: start off with
1320          * rounding to the next 1MB area.
1321          */
1322         round = 0x100000;
1323         while ((gapsize >> 4) > round)
1324                 round += round;
1325         /* Fun with two's complement */
1326         pci_mem_start = (gapstart + round) & -round;
1327
1328         printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n",
1329                 pci_mem_start, gapstart, gapsize);
1330 }
1331
1332 #ifdef CONFIG_MCA
1333 static void set_mca_bus(int x)
1334 {
1335         MCA_bus = x;
1336 }
1337 #else
1338 static void set_mca_bus(int x) { }
1339 #endif
1340
1341 /*
1342  * Determine if we were loaded by an EFI loader.  If so, then we have also been
1343  * passed the efi memmap, systab, etc., so we should use these data structures
1344  * for initialization.  Note, the efi init code path is determined by the
1345  * global efi_enabled. This allows the same kernel image to be used on existing
1346  * systems (with a traditional BIOS) as well as on EFI systems.
1347  */
1348 void __init setup_arch(char **cmdline_p)
1349 {
1350         unsigned long max_low_pfn;
1351
1352         memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data));
1353         pre_setup_arch_hook();
1354         early_cpu_init();
1355
1356         /*
1357          * FIXME: This isn't an official loader_type right
1358          * now but does currently work with elilo.
1359          * If we were configured as an EFI kernel, check to make
1360          * sure that we were loaded correctly from elilo and that
1361          * the system table is valid.  If not, then initialize normally.
1362          */
1363 #ifdef CONFIG_EFI
1364         if ((LOADER_TYPE == 0x50) && EFI_SYSTAB)
1365                 efi_enabled = 1;
1366 #endif
1367
1368         ROOT_DEV = old_decode_dev(ORIG_ROOT_DEV);
1369         drive_info = DRIVE_INFO;
1370         screen_info = SCREEN_INFO;
1371         edid_info = EDID_INFO;
1372         apm_info.bios = APM_BIOS_INFO;
1373         ist_info = IST_INFO;
1374         saved_videomode = VIDEO_MODE;
1375         if( SYS_DESC_TABLE.length != 0 ) {
1376                 set_mca_bus(SYS_DESC_TABLE.table[3] & 0x2);
1377                 machine_id = SYS_DESC_TABLE.table[0];
1378                 machine_submodel_id = SYS_DESC_TABLE.table[1];
1379                 BIOS_revision = SYS_DESC_TABLE.table[2];
1380         }
1381         bootloader_type = LOADER_TYPE;
1382
1383 #ifdef CONFIG_BLK_DEV_RAM
1384         rd_image_start = RAMDISK_FLAGS & RAMDISK_IMAGE_START_MASK;
1385         rd_prompt = ((RAMDISK_FLAGS & RAMDISK_PROMPT_FLAG) != 0);
1386         rd_doload = ((RAMDISK_FLAGS & RAMDISK_LOAD_FLAG) != 0);
1387 #endif
1388         ARCH_SETUP
1389         if (efi_enabled)
1390                 efi_init();
1391         else {
1392                 printk(KERN_INFO "BIOS-provided physical RAM map:\n");
1393                 print_memory_map(machine_specific_memory_setup());
1394         }
1395
1396         copy_edd();
1397
1398         if (!MOUNT_ROOT_RDONLY)
1399                 root_mountflags &= ~MS_RDONLY;
1400         init_mm.start_code = (unsigned long) _text;
1401         init_mm.end_code = (unsigned long) _etext;
1402         init_mm.end_data = (unsigned long) _edata;
1403         init_mm.brk = init_pg_tables_end + PAGE_OFFSET;
1404
1405         code_resource.start = virt_to_phys(_text);
1406         code_resource.end = virt_to_phys(_etext)-1;
1407         data_resource.start = virt_to_phys(_etext);
1408         data_resource.end = virt_to_phys(_edata)-1;
1409
1410         parse_early_param();
1411
1412         if (user_defined_memmap) {
1413                 printk(KERN_INFO "user-defined physical RAM map:\n");
1414                 print_memory_map("user");
1415         }
1416
1417         strlcpy(command_line, saved_command_line, COMMAND_LINE_SIZE);
1418         *cmdline_p = command_line;
1419
1420         max_low_pfn = setup_memory();
1421
1422         /*
1423          * NOTE: before this point _nobody_ is allowed to allocate
1424          * any memory using the bootmem allocator.  Although the
1425          * alloctor is now initialised only the first 8Mb of the kernel
1426          * virtual address space has been mapped.  All allocations before
1427          * paging_init() has completed must use the alloc_bootmem_low_pages()
1428          * variant (which allocates DMA'able memory) and care must be taken
1429          * not to exceed the 8Mb limit.
1430          */
1431
1432 #ifdef CONFIG_SMP
1433         smp_alloc_memory(); /* AP processor realmode stacks in low memory*/
1434 #endif
1435         paging_init();
1436         remapped_pgdat_init();
1437         sparse_init();
1438         zone_sizes_init();
1439
1440         /*
1441          * NOTE: at this point the bootmem allocator is fully available.
1442          */
1443
1444         dmi_scan_machine();
1445
1446 #ifdef CONFIG_X86_GENERICARCH
1447         generic_apic_probe();
1448 #endif  
1449         if (efi_enabled)
1450                 efi_map_memmap();
1451
1452 #ifdef CONFIG_ACPI
1453         /*
1454          * Parse the ACPI tables for possible boot-time SMP configuration.
1455          */
1456         acpi_boot_table_init();
1457 #endif
1458
1459 #ifdef CONFIG_PCI
1460 #ifdef CONFIG_X86_IO_APIC
1461         check_acpi_pci();       /* Checks more than just ACPI actually */
1462 #endif
1463 #endif
1464
1465 #ifdef CONFIG_ACPI
1466         acpi_boot_init();
1467
1468 #if defined(CONFIG_SMP) && defined(CONFIG_X86_PC)
1469         if (def_to_bigsmp)
1470                 printk(KERN_WARNING "More than 8 CPUs detected and "
1471                         "CONFIG_X86_PC cannot handle it.\nUse "
1472                         "CONFIG_X86_GENERICARCH or CONFIG_X86_BIGSMP.\n");
1473 #endif
1474 #endif
1475 #ifdef CONFIG_X86_LOCAL_APIC
1476         if (smp_found_config)
1477                 get_smp_config();
1478 #endif
1479
1480         register_memory();
1481
1482 #ifdef CONFIG_VT
1483 #if defined(CONFIG_VGA_CONSOLE)
1484         if (!efi_enabled || (efi_mem_type(0xa0000) != EFI_CONVENTIONAL_MEMORY))
1485                 conswitchp = &vga_con;
1486 #elif defined(CONFIG_DUMMY_CONSOLE)
1487         conswitchp = &dummy_con;
1488 #endif
1489 #endif
1490         tsc_init();
1491 }
1492
1493 static __init int add_pcspkr(void)
1494 {
1495         struct platform_device *pd;
1496         int ret;
1497
1498         pd = platform_device_alloc("pcspkr", -1);
1499         if (!pd)
1500                 return -ENOMEM;
1501
1502         ret = platform_device_add(pd);
1503         if (ret)
1504                 platform_device_put(pd);
1505
1506         return ret;
1507 }
1508 device_initcall(add_pcspkr);
1509
1510 /*
1511  * Local Variables:
1512  * mode:c
1513  * c-file-style:"k&r"
1514  * c-basic-offset:8
1515  * End:
1516  */