Rev 4337 | Rev 4342 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4337 | Rev 4341 | ||
|---|---|---|---|
| Line 139... | Line 139... | ||
| 139 | */ |
139 | */ |
| 140 | if (silo_ramdisk_image) { |
140 | if (silo_ramdisk_image) { |
| 141 | silo_ramdisk_image += bootinfo.physmem_start; |
141 | silo_ramdisk_image += bootinfo.physmem_start; |
| 142 | silo_ramdisk_image -= 0x400000; |
142 | silo_ramdisk_image -= 0x400000; |
| 143 | /* Install 1:1 mapping for the ramdisk. */ |
143 | /* Install 1:1 mapping for the ramdisk. */ |
| 144 | if (ofw_map((void *)((uintptr_t)silo_ramdisk_image), |
144 | if (ofw_map((void *)((uintptr_t) silo_ramdisk_image), |
| 145 | (void *)((uintptr_t)silo_ramdisk_image), |
145 | (void *)((uintptr_t) silo_ramdisk_image), |
| 146 | silo_ramdisk_size, -1) != 0) { |
146 | silo_ramdisk_size, -1) != 0) { |
| 147 | printf("Failed to map ramdisk.\n"); |
147 | printf("Failed to map ramdisk.\n"); |
| 148 | halt(); |
148 | halt(); |
| 149 | } |
149 | } |
| 150 | } |
150 | } |
| Line 200... | Line 200... | ||
| 200 | /* |
200 | /* |
| 201 | * Claim and map the whole ramdisk as it may exceed the area |
201 | * Claim and map the whole ramdisk as it may exceed the area |
| 202 | * given to us by SILO. |
202 | * given to us by SILO. |
| 203 | */ |
203 | */ |
| 204 | (void) ofw_claim_phys(base + top, silo_ramdisk_size); |
204 | (void) ofw_claim_phys(base + top, silo_ramdisk_size); |
| 205 | (void) ofw_map(base + top, base + top, silo_ramdisk_size, -1); |
205 | (void) ofw_map(bootinfo.physmem_start + base + top, base + top, |
| - | 206 | silo_ramdisk_size, -1); |
|
| 206 | /* |
207 | /* |
| 207 | * FIXME If the source and destination overlap, it may be |
208 | * FIXME If the source and destination overlap, it may be |
| 208 | * desirable to copy in reverse order, depending on how the two |
209 | * desirable to copy in reverse order, depending on how the two |
| 209 | * regions overlap. |
210 | * regions overlap. |
| 210 | */ |
211 | */ |
| Line 255... | Line 256... | ||
| 255 | * Initialize the boot allocator. |
256 | * Initialize the boot allocator. |
| 256 | */ |
257 | */ |
| 257 | balloc_base = base + ALIGN_UP(top, PAGE_SIZE); |
258 | balloc_base = base + ALIGN_UP(top, PAGE_SIZE); |
| 258 | (void) ofw_claim_phys(bootinfo.physmem_start + balloc_base, |
259 | (void) ofw_claim_phys(bootinfo.physmem_start + balloc_base, |
| 259 | BALLOC_MAX_SIZE); |
260 | BALLOC_MAX_SIZE); |
| 260 | (void) ofw_map(balloc_base, balloc_base, BALLOC_MAX_SIZE, -1); |
261 | (void) ofw_map(bootinfo.physmem_start + balloc_base, balloc_base, |
| - | 262 | BALLOC_MAX_SIZE, -1); |
|
| 261 | balloc_init(&bootinfo.ballocs, (uintptr_t)balloc_base); |
263 | balloc_init(&bootinfo.ballocs, (uintptr_t)balloc_base); |
| 262 | 264 | ||
| 263 | printf("\nCanonizing OpenFirmware device tree..."); |
265 | printf("\nCanonizing OpenFirmware device tree..."); |
| 264 | bootinfo.ofw_root = ofw_tree_build(); |
266 | bootinfo.ofw_root = ofw_tree_build(); |
| 265 | printf("done.\n"); |
267 | printf("done.\n"); |
| 266 | 268 | ||
| 267 | #ifdef CONFIG_SMP |
269 | #ifdef CONFIG_AP |
| 268 | printf("\nChecking for secondary processors..."); |
270 | printf("\nChecking for secondary processors..."); |
| 269 | if (!ofw_cpu()) |
271 | if (!ofw_cpu()) |
| 270 | printf("Error: unable to get CPU properties\n"); |
272 | printf("Error: unable to get CPU properties\n"); |
| 271 | printf("done.\n"); |
273 | printf("done.\n"); |
| 272 | #endif |
274 | #endif |
| Line 276... | Line 278... | ||
| 276 | printf("\nBooting the kernel...\n"); |
278 | printf("\nBooting the kernel...\n"); |
| 277 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, |
279 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, |
| 278 | bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo, |
280 | bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo, |
| 279 | sizeof(bootinfo)); |
281 | sizeof(bootinfo)); |
| 280 | } |
282 | } |
| 281 | - | ||