Changeset 085d973 in mainline for arch/ia32/src/mm/frame.c
- Timestamp:
- 2006-02-08T12:34:05Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5e3757d
- Parents:
- eb1b8b6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/src/mm/frame.c
reb1b8b6 r085d973 36 36 #include <debug.h> 37 37 #include <align.h> 38 #include <macros.h> 39 40 #include <print.h> 41 #include <console/cmd.h> 42 #include <console/kconsole.h> 43 38 44 39 45 size_t hardcoded_unmapped_ktext_size = 0; … … 42 48 __address last_frame = 0; 43 49 50 static void init_e820_memory(pfn_t minconf) 51 { 52 int i; 53 pfn_t start, size,conf; 54 55 for (i = 0; i < e820counter; i++) { 56 if (e820table[i].type == MEMMAP_MEMORY_AVAILABLE) { 57 start = ADDR2PFN(ALIGN_UP(e820table[i].base_address, 58 FRAME_SIZE)); 59 size = SIZE2PFN(ALIGN_DOWN(e820table[i].size, 60 FRAME_SIZE)); 61 if (minconf < start || minconf >= start+size) 62 conf = start; 63 else 64 conf = minconf; 65 zone_create(start,size, conf, 0); 66 if (last_frame < ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE)) 67 last_frame = ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE); 68 } 69 } 70 } 71 72 static int cmd_e820mem(cmd_arg_t *argv); 73 static cmd_info_t e820_info = { 74 .name = "e820list", 75 .description = "List e820 memory.", 76 .func = cmd_e820mem, 77 .argc = 0 78 }; 79 80 static char *e820names[] = { "invalid", "available", "reserved", 81 "acpi", "nvs", "unusable" }; 82 83 84 static int cmd_e820mem(cmd_arg_t *argv) 85 { 86 int i; 87 char *name; 88 89 for (i = 0; i < e820counter; i++) { 90 if (e820table[i].type <= MEMMAP_MEMORY_UNUSABLE) 91 name = e820names[e820table[i].type]; 92 else 93 name = "invalid"; 94 printf("%P %dB %s\n", e820table[i].base_address, 95 e820table[i].size, 96 name); 97 } 98 return 0; 99 } 100 101 44 102 void frame_arch_init(void) 45 103 { 46 __u8 i;47 104 static pfn_t minconf; 105 48 106 if (config.cpu_active == 1) { 107 cmd_initialize(&e820_info); 108 cmd_register(&e820_info); 109 110 111 minconf = 1; 112 #ifdef CONFIG_SMP 113 minconf = max(minconf, 114 ADDR2PFN(AP_BOOT_OFFSET+hardcoded_unmapped_ktext_size + hardcoded_unmapped_kdata_size)); 115 #endif 116 #ifdef CONFIG_SIMICS_FIX 117 minconf = max(minconf, ADDR2PFN(0x10000)); 118 #endif 119 init_e820_memory(minconf); 49 120 50 121 /* Reserve frame 0 (BIOS data) */ 51 frame_ region_not_free(0, FRAME_SIZE);122 frame_mark_unavailable(0, 1); 52 123 53 124 #ifdef CONFIG_SMP 54 125 /* Reserve AP real mode bootstrap memory */ 55 frame_region_not_free(AP_BOOT_OFFSET, hardcoded_unmapped_ktext_size + hardcoded_unmapped_kdata_size); 126 frame_mark_unavailable(AP_BOOT_OFFSET >> FRAME_WIDTH, 127 (hardcoded_unmapped_ktext_size + hardcoded_unmapped_kdata_size) >> FRAME_WIDTH); 56 128 57 129 #ifdef CONFIG_SIMICS_FIX 58 130 /* Don't know why, but this addresses help */ 59 frame_region_not_free(0xf000,FRAME_SIZE); 60 frame_region_not_free(0xe000,FRAME_SIZE); 61 frame_region_not_free(0xd000,FRAME_SIZE); 131 frame_mark_unavailable(0xd000 >> FRAME_WIDTH,3); 62 132 #endif 63 133 #endif 64 65 for (i = 0; i < e820counter; i++) {66 if (e820table[i].type == MEMMAP_MEMORY_AVAILABLE) {67 zone_create_in_region(e820table[i].base_address, e820table[i].size & ~(FRAME_SIZE-1));68 if (last_frame < ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE))69 last_frame = ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE);70 }71 }72 134 } 73 135 }
Note:
See TracChangeset
for help on using the changeset viewer.