static char * __init visws_memory_setup(void) { long long gfx_mem_size = 8 * MB; mem_size = boot_params.alt_mem_k; if (!mem_size) { printk(KERN_WARNING "Bootloader didn't set memory size, upgrade it !\n"); mem_size = 128 * MB; } /* * this hardcodes the graphics memory to 8 MB * it really should be sized dynamically (or at least * set as a boot param) */ if (!sgivwfb_mem_size) { printk(KERN_WARNING "Defaulting to 8 MB framebuffer size\n"); sgivwfb_mem_size = 8 * MB; } /* * Trim to nearest MB */ sgivwfb_mem_size &= ~((1 << 20) - 1); sgivwfb_mem_phys = mem_size - gfx_mem_size; e820_add_region(0, LOWMEMSIZE(), E820_RAM); e820_add_region(HIGH_MEMORY, mem_size - sgivwfb_mem_size - HIGH_MEMORY, E820_RAM); e820_add_region(sgivwfb_mem_phys, sgivwfb_mem_size, E820_RESERVED); return "PROM"; }
char * __init machine_specific_memory_setup(void) { char *who; who = "BIOS-e820"; /* * Try to copy the BIOS-supplied E820-map. * * Otherwise fake a memory map; one section from 0k->640k, * the next section from 1mb->appropriate_mem_k */ sanitize_e820_map(boot_params.e820_map, &boot_params.e820_entries); if (copy_e820_map(boot_params.e820_map, boot_params.e820_entries) < 0) { unsigned long mem_size; /* compare results from other methods and take the greater */ if (boot_params.alt_mem_k < boot_params.screen_info.ext_mem_k) { mem_size = boot_params.screen_info.ext_mem_k; who = "BIOS-88"; } else { mem_size = boot_params.alt_mem_k; who = "BIOS-e801"; } e820.nr_map = 0; add_memory_region(0, LOWMEMSIZE(), E820_RAM); add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM); } return who; }
char * __init xen_memory_setup(void) { unsigned long max_pfn = xen_start_info->nr_pages; e820.nr_map = 0; add_memory_region(0, LOWMEMSIZE(), E820_RAM); add_memory_region(HIGH_MEMORY, PFN_PHYS(max_pfn)-HIGH_MEMORY, E820_RAM); return "Xen"; }
static char * __init x86_intel_ce_memory_setup(void) { unsigned long memory_top, linux_top; /* Our only memory config option is e801, * firmware doesn't seem to bother with e820 map. */ memory_top = ONE_MB + boot_params.alt_mem_k * 1024; /* Ancient bootloaders pass garbage here, do a basic sanity check */ if (memory_top < 4 * ONE_MB) { printk(KERN_WARNING "Incorrect e801 memory size 0x%08lx, using 768 MB\n", memory_top); memory_top = 768 * ONE_MB; } e820_add_region(0, LOWMEMSIZE(), E820_RAM); e820_add_region(HIGH_MEMORY, memory_top - HIGH_MEMORY, E820_RAM); /* CEFDK uses some regions in the first 1MB for various purposes. * We hardcode superset of those regions to support different * CEFDK releases. */ #ifdef CONFIG_ACPI e820_update_range(0x10000, 0x8000, E820_RAM, E820_ACPI); #endif /* 8051 microcode can be loaded at 0x30000 or 0x40000 */ e820_update_range(0x30000, 0x20000, E820_RAM, E820_RESERVED); /* e1000 "NVRAM" */ e820_update_range(0x60000, 0x1000, E820_RAM, E820_RESERVED); linux_top = x86_intel_ce_machine_top_of_ram(memory_top); if (linux_top < memory_top) e820_update_range(linux_top, memory_top - linux_top, E820_RAM, E820_RESERVED); /* check board name for reboot and halt sequence*/ { static __initdata char tmp_cmdline[COMMAND_LINE_SIZE]; strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE); parse_args("beyond_param", tmp_cmdline, NULL, 0, parse_pwrctl_type); } return "BIOS-e801"; }
char * __init machine_specific_memory_setup(void) { char *who; who = "NOT VOYAGER"; if(voyager_level == 5) { __u32 addr, length; int i; who = "Voyager-SUS"; e820.nr_map = 0; for(i=0; voyager_memory_detect(i, &addr, &length); i++) { add_memory_region(addr, length, E820_RAM); } return who; } else if(voyager_level == 4) { __u32 tom; __u16 catbase = inb(VOYAGER_SSPB_RELOCATION_PORT)<<8; /* select the DINO config space */ outb(VOYAGER_DINO, VOYAGER_CAT_CONFIG_PORT); /* Read DINO top of memory register */ tom = ((inb(catbase + 0x4) & 0xf0) << 16) + ((inb(catbase + 0x5) & 0x7f) << 24); if(inb(catbase) != VOYAGER_DINO) { printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n"); tom = (EXT_MEM_K)<<10; } who = "Voyager-TOM"; add_memory_region(0, 0x9f000, E820_RAM); /* map from 1M to top of memory */ add_memory_region(1*1024*1024, tom - 1*1024*1024, E820_RAM); /* FIXME: Should check the ASICs to see if I need to * take out the 8M window. Just do it at the moment * */ add_memory_region(8*1024*1024, 8*1024*1024, E820_RESERVED); return who; } who = "BIOS-e820"; /* * Try to copy the BIOS-supplied E820-map. * * Otherwise fake a memory map; one section from 0k->640k, * the next section from 1mb->appropriate_mem_k */ sanitize_e820_map(E820_MAP, &E820_MAP_NR); if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) { unsigned long mem_size; /* compare results from other methods and take the greater */ if (ALT_MEM_K < EXT_MEM_K) { mem_size = EXT_MEM_K; who = "BIOS-88"; } else { mem_size = ALT_MEM_K; who = "BIOS-e801"; } e820.nr_map = 0; add_memory_region(0, LOWMEMSIZE(), E820_RAM); add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM); } return who; }