Rev 3684 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3684 | Rev 4377 | ||
---|---|---|---|
Line 34... | Line 34... | ||
34 | #include <balloc.h> |
34 | #include <balloc.h> |
35 | #include <ofw.h> |
35 | #include <ofw.h> |
36 | #include <ofw_tree.h> |
36 | #include <ofw_tree.h> |
37 | #include "ofwarch.h" |
37 | #include "ofwarch.h" |
38 | #include <align.h> |
38 | #include <align.h> |
- | 39 | #include <macros.h> |
|
39 | #include <string.h> |
40 | #include <string.h> |
40 | 41 | ||
41 | bootinfo_t bootinfo; |
42 | bootinfo_t bootinfo; |
42 | 43 | ||
43 | component_t components[COMPONENTS]; |
44 | component_t components[COMPONENTS]; |
44 | 45 | ||
45 | char *release = RELEASE; |
46 | char *release = STRING(RELEASE); |
46 | 47 | ||
47 | #ifdef REVISION |
48 | #ifdef REVISION |
48 | char *revision = ", revision " REVISION; |
49 | char *revision = ", revision " STRING(REVISION); |
49 | #else |
50 | #else |
50 | char *revision = ""; |
51 | char *revision = ""; |
51 | #endif |
52 | #endif |
52 | 53 | ||
53 | #ifdef TIMESTAMP |
54 | #ifdef TIMESTAMP |
54 | char *timestamp = "\nBuilt on " TIMESTAMP; |
55 | char *timestamp = "\nBuilt on " STRING(TIMESTAMP); |
55 | #else |
56 | #else |
56 | char *timestamp = ""; |
57 | char *timestamp = ""; |
57 | #endif |
58 | #endif |
58 | 59 | ||
59 | /** UltraSPARC subarchitecture - 1 for US, 3 for US3 */ |
60 | /** UltraSPARC subarchitecture - 1 for US, 3 for US3 */ |
Line 140... | Line 141... | ||
140 | */ |
141 | */ |
141 | if (silo_ramdisk_image) { |
142 | if (silo_ramdisk_image) { |
142 | silo_ramdisk_image += bootinfo.physmem_start; |
143 | silo_ramdisk_image += bootinfo.physmem_start; |
143 | silo_ramdisk_image -= 0x400000; |
144 | silo_ramdisk_image -= 0x400000; |
144 | /* Install 1:1 mapping for the ramdisk. */ |
145 | /* Install 1:1 mapping for the ramdisk. */ |
145 | if (ofw_map((void *)((uintptr_t)silo_ramdisk_image), |
146 | if (ofw_map((void *)((uintptr_t) silo_ramdisk_image), |
146 | (void *)((uintptr_t)silo_ramdisk_image), |
147 | (void *)((uintptr_t) silo_ramdisk_image), |
147 | silo_ramdisk_size, -1) != 0) { |
148 | silo_ramdisk_size, -1) != 0) { |
148 | printf("Failed to map ramdisk.\n"); |
149 | printf("Failed to map ramdisk.\n"); |
149 | halt(); |
150 | halt(); |
150 | } |
151 | } |
151 | } |
152 | } |
Line 176... | Line 177... | ||
176 | } |
177 | } |
177 | bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = |
178 | bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = |
178 | base + top; |
179 | base + top; |
179 | bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = |
180 | bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = |
180 | components[i].size; |
181 | components[i].size; |
- | 182 | strncpy(bootinfo.taskmap.tasks[ |
|
- | 183 | bootinfo.taskmap.count].name, components[i].name, |
|
- | 184 | BOOTINFO_TASK_NAME_BUFLEN); |
|
181 | bootinfo.taskmap.count++; |
185 | bootinfo.taskmap.count++; |
182 | } |
186 | } |
183 | top += components[i].size; |
187 | top += components[i].size; |
184 | } |
188 | } |
185 | 189 | ||
Line 201... | Line 205... | ||
201 | /* |
205 | /* |
202 | * Claim and map the whole ramdisk as it may exceed the area |
206 | * Claim and map the whole ramdisk as it may exceed the area |
203 | * given to us by SILO. |
207 | * given to us by SILO. |
204 | */ |
208 | */ |
205 | (void) ofw_claim_phys(base + top, silo_ramdisk_size); |
209 | (void) ofw_claim_phys(base + top, silo_ramdisk_size); |
206 | (void) ofw_map(base + top, base + top, silo_ramdisk_size, -1); |
210 | (void) ofw_map(bootinfo.physmem_start + base + top, base + top, |
- | 211 | silo_ramdisk_size, -1); |
|
207 | memmove(base + top, (void *)((uintptr_t)silo_ramdisk_image), |
212 | memmove(base + top, (void *)((uintptr_t)silo_ramdisk_image), |
208 | silo_ramdisk_size); |
213 | silo_ramdisk_size); |
209 | printf("done.\n"); |
214 | printf("done.\n"); |
210 | top += silo_ramdisk_size; |
215 | top += silo_ramdisk_size; |
211 | } |
216 | } |
Line 251... | Line 256... | ||
251 | * Initialize the boot allocator. |
256 | * Initialize the boot allocator. |
252 | */ |
257 | */ |
253 | balloc_base = base + ALIGN_UP(top, PAGE_SIZE); |
258 | balloc_base = base + ALIGN_UP(top, PAGE_SIZE); |
254 | (void) ofw_claim_phys(bootinfo.physmem_start + balloc_base, |
259 | (void) ofw_claim_phys(bootinfo.physmem_start + balloc_base, |
255 | BALLOC_MAX_SIZE); |
260 | BALLOC_MAX_SIZE); |
256 | (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); |
|
257 | balloc_init(&bootinfo.ballocs, (uintptr_t)balloc_base); |
263 | balloc_init(&bootinfo.ballocs, (uintptr_t)balloc_base); |
258 | 264 | ||
259 | printf("\nCanonizing OpenFirmware device tree..."); |
265 | printf("\nCanonizing OpenFirmware device tree..."); |
260 | bootinfo.ofw_root = ofw_tree_build(); |
266 | bootinfo.ofw_root = ofw_tree_build(); |
261 | printf("done.\n"); |
267 | printf("done.\n"); |
262 | 268 | ||
263 | #ifdef CONFIG_SMP |
269 | #ifdef CONFIG_AP |
264 | printf("\nChecking for secondary processors..."); |
270 | printf("\nChecking for secondary processors..."); |
265 | if (!ofw_cpu()) |
271 | if (!ofw_cpu()) |
266 | printf("Error: unable to get CPU properties\n"); |
272 | printf("Error: unable to get CPU properties\n"); |
267 | printf("done.\n"); |
273 | printf("done.\n"); |
268 | #endif |
274 | #endif |
269 | 275 | ||
270 | setup_palette(); |
276 | ofw_setup_palette(); |
271 | 277 | ||
272 | printf("\nBooting the kernel...\n"); |
278 | printf("\nBooting the kernel...\n"); |
273 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, |
279 | jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, |
274 | bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo, |
280 | bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo, |
275 | sizeof(bootinfo)); |
281 | sizeof(bootinfo)); |
276 | } |
282 | } |
277 | - |