void __init prom_meminit(void) { struct prom_pmemblock *p; #ifdef DEBUG pr_debug("YAMON MEMORY DESCRIPTOR dump:\n"); p = prom_getmdesc(); while (p->size) { int i = 0; pr_debug("[%d,%p]: base<%08lx> size<%08lx> type<%s>\n", i, p, p->base, p->size, mtypes[p->type]); p++; i++; } #endif p = prom_getmdesc(); while (p->size) { long type; unsigned long base, size; type = prom_memtype_classify(p->type); base = p->base; size = p->size; add_memory_region(base, size, type); p++; } }
void __init prom_meminit(void) { struct linux_mdesc *p; #ifdef DEBUG int i = 0; printk("ARCS MEMORY DESCRIPTOR dump:\n"); p = ArcGetMemoryDescriptor(PROM_NULL_MDESC); while(p) { printk("[%d,%p]: base<%08lx> pages<%08lx> type<%s>\n", i, p, p->base, p->pages, mtypes(p->type)); p = ArcGetMemoryDescriptor(p); i++; } #endif p = PROM_NULL_MDESC; while ((p = ArcGetMemoryDescriptor(p))) { unsigned long base, size; long type; base = p->base << ARC_PAGE_SHIFT; size = p->pages << ARC_PAGE_SHIFT; type = prom_memtype_classify(p->type); add_memory_region(base, size, type); } }
void __init prom_meminit(void) { struct prom_pmemblock *p; p = prom_getmdesc(); while (p->size) { long type; unsigned long base, size; type = prom_memtype_classify(p->type); base = p->base; size = p->size; add_memory_region(base, size, type); p++; } }
void __init prom_meminit(void) { //struct prom_pmemblock *p; #ifdef DEBUG struct prom_pmemblock *psave; #endif //printk("ram start= %x, ram end= %x\n",rt2880_res_ram.start, rt2880_res_ram.end); //printk("size = %x\n",rt2880_res_ram.end - rt2880_res_ram.start); //add_memory_region(0x0a000000, rt2880_res_ram.end - rt2880_res_ram.start, BOOT_MEM_RAM); #if defined(CONFIG_RT2880_ASIC) || defined(CONFIG_RT2880_FPGA) add_memory_region(0x08000000, RAM_SIZE, BOOT_MEM_RAM); #else add_memory_region(0x00000000, RAM_SIZE, BOOT_MEM_RAM); #endif //p = prom_getmdesc(); #ifdef DEBUG prom_printf("MEMORY DESCRIPTOR dump:\n"); psave = p; /* Save p */ while (p->size) { int i = 0; prom_printf("[%d,%p]: base<%08lx> size<%08lx> type<%s>\n", i, p, p->base, p->size, mtypes[p->type]); p++; i++; } p = psave; /* Restore p */ #endif #if 0 while (p->size) { long type; unsigned long base, size; type = prom_memtype_classify (p->type); base = p->base; size = p->size; add_memory_region(base, size, type); p++; } #endif }
void __init prom_meminit(void) { struct prom_pmemblock *largest, *p; unsigned long bootmap_size; int totram; int i = 0; #ifdef DEBUG prom_printf("YAMON MEMORY DESCRIPTOR dump:\n"); p = prom_getmdesc(); while (p->size) { prom_printf("[%d,%p]: base<%08lx> size<%08lx> type<%s>\n", i, p, p->base, p->size, mtypes[p->type]); p++; i++; } #endif totram = 0; i = 0; p = prom_getmdesc(); while (p->size) { pblocks[i].type = prom_memtype_classify (p->type); pblocks[i].base = p->base; pblocks[i].size = p->size; switch (pblocks[i].type) { case MEMTYPE_FREE: totram += pblocks[i].size; #ifdef DEBUG prom_printf("free_chunk[%d]: base=%08lx size=%d\n", i, pblocks[i].base, pblocks[i].size); #endif i++; break; case MEMTYPE_PROM: #ifdef DEBUG prom_printf("prom_chunk[%d]: base=%08lx size=%d\n", i, pblocks[i].base, pblocks[i].size); #endif i++; break; default: break; } p++; } pblocks[i].base = 0xdeadbeef; pblocks[i].size = 0; /* indicates last elem. of array */ max_low_pfn = find_max_low_pfn(); largest = find_largest_memblock(); bootmap_size = init_bootmem(largest->base >> PAGE_SHIFT, max_low_pfn); for (i = 0; pblocks[i].size; i++) if (pblocks[i].type == MEMTYPE_FREE) free_bootmem(pblocks[i].base, pblocks[i].size); /* This test is simpleminded. It will fail if the bootmem bitmap falls into multiple adjacent PROM memory areas. */ if (bootmap_size > largest->size) { prom_printf("CRITIAL: overwriting PROM data.\n"); BUG(); } /* Reserve the memory bootmap itself */ reserve_bootmem(largest->base, bootmap_size); printk("PROMLIB: Total free ram %d bytes (%dK,%dMB)\n", totram, (totram/1024), (totram/1024/1024)); }