Changeset 63f5cd6 in mainline for arch/ppc32/loader/main.c
- Timestamp:
- 2006-04-22T22:34:46Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 271fcaf
- Parents:
- ab4ac14
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/loader/main.c
rab4ac14 r63f5cd6 34 34 #define KERNEL_END ((void *) &_binary_____________kernel_kernel_bin_end) 35 35 #define KERNEL_SIZE ((unsigned int) KERNEL_END - (unsigned int) KERNEL_START) 36 37 #define INIT_START ((void *) &_binary_____________uspace_init_init_start) 38 #define INIT_END ((void *) &_binary_____________uspace_init_init_end) 39 #define INIT_SIZE ((unsigned int) INIT_END - (unsigned int) INIT_START) 36 40 37 41 #define HEAP_GAP 1024000 … … 80 84 81 85 check_align(KERNEL_START, "Kernel image"); 86 check_align(INIT_START, "Init image"); 82 87 check_align(&real_mode, "Bootstrap trampoline"); 83 88 check_align(&trans, "Translation table"); … … 108 113 printf("\nMemory statistics (total %d MB)\n", bootinfo.memmap.total >> 20); 109 114 printf(" kernel image at %L (size %d bytes)\n", KERNEL_START, KERNEL_SIZE); 110 printf(" boot info at %L (physical %L)\n", &bootinfo, bootinfo_pa); 115 printf(" init image at %L (size %d bytes)\n", INIT_START, INIT_SIZE); 116 printf(" boot info structure at %L (physical %L)\n", &bootinfo, bootinfo_pa); 111 117 printf(" bootstrap trampoline at %L (physical %L)\n", &real_mode, real_mode_pa); 112 118 printf(" translation table at %L (physical %L)\n", &trans, trans_pa); 113 119 114 unsigned int top = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE); 115 unsigned int addr; 116 for (addr = 0; addr < KERNEL_SIZE; addr += PAGE_SIZE) { 117 void *pa = ofw_translate(KERNEL_START + addr); 118 fix_overlap(KERNEL_START + addr, &pa, "Kernel image", &top); 119 trans[addr >> PAGE_WIDTH] = pa; 120 unsigned int top = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE) + ALIGN_UP(INIT_SIZE, PAGE_SIZE); 121 unsigned int kernel_pages = ALIGN_UP(KERNEL_SIZE, PAGE_SIZE) >> PAGE_WIDTH; 122 unsigned int init_pages = ALIGN_UP(INIT_SIZE, PAGE_SIZE) >> PAGE_WIDTH; 123 124 unsigned int i; 125 126 for (i = 0; i < kernel_pages; i++) { 127 void *pa = ofw_translate(KERNEL_START + (i << PAGE_WIDTH)); 128 fix_overlap(KERNEL_START + (i << PAGE_WIDTH), &pa, "Kernel image", &top); 129 trans[i] = pa; 130 } 131 132 for (i = 0; i < init_pages; i++) { 133 void *pa = ofw_translate(INIT_START + (i << PAGE_WIDTH)); 134 fix_overlap(INIT_START + (i << PAGE_WIDTH), &pa, "Init image", &top); 135 trans[kernel_pages + i] = pa; 136 if (i == 0) { 137 bootinfo.init.addr = (void *) ((kernel_pages + i) << PAGE_WIDTH); 138 bootinfo.init.size = INIT_SIZE; 139 } 120 140 } 121 141 … … 125 145 126 146 printf("\nBooting the kernel...\n"); 127 jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, KERNEL_SIZE, fb, real_mode_pa);147 jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, (kernel_pages + init_pages) << PAGE_WIDTH, fb, real_mode_pa); 128 148 }
Note:
See TracChangeset
for help on using the changeset viewer.