- Timestamp:
- 2009-02-17T22:47:27Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f89979b
- Parents:
- e662a5f
- Location:
- boot/arch
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/arch/arm32/loader/asm.h
re662a5f r96e0748d 33 33 /** @file 34 34 * @brief Functions implemented in assembly. 35 */ 35 */ 36 36 37 37 … … 41 41 42 42 /** Copies cnt bytes from dst to src. 43 * 43 * 44 44 * @param dst Destination address. 45 45 * @param src Source address. 46 * @param cnt Count of bytes to be copied. 46 * @param cnt Count of bytes to be copied. 47 47 */ 48 48 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) … … 59 59 /** Jumps to the kernel entry point. 60 60 * 61 * @param entry 62 * @param bootinfo 63 * @param bootinfo_size Size of the bootinfo structure.61 * @param entry Kernel entry point address. 62 * @param bootinfo Structure holding information about loaded tasks. 63 * 64 64 */ 65 extern void jump_to_kernel(void *entry, void *bootinfo, 66 unsigned int bootinfo_size) __attribute__((noreturn)); 65 extern void jump_to_kernel(void *entry, void *bootinfo) __attribute__((noreturn)); 67 66 68 67 -
boot/arch/arm32/loader/boot.S
re662a5f r96e0748d 54 54 page_table: 55 55 .skip PTL0_ENTRIES * PTL0_ENTRY_SIZE 56 57 -
boot/arch/arm32/loader/main.c
re662a5f r96e0748d 33 33 /** @file 34 34 * @brief Bootstrap. 35 */ 35 */ 36 36 37 37 … … 40 40 #include "_components.h" 41 41 #include <printf.h> 42 #include <align.h> 42 43 #include <macros.h> 43 44 … … 110 111 111 112 printf("\nBooting the kernel...\n"); 112 jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo , sizeof(bootinfo));113 jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo); 113 114 } 114 115 -
boot/arch/arm32/loader/main.h
re662a5f r96e0748d 33 33 /** @file 34 34 * @brief Boot related declarations. 35 */ 35 */ 36 36 37 37 … … 39 39 #define BOOT_arm32_MAIN_H 40 40 41 42 /** Aligns to the nearest higher address.43 *44 * @param addr Address or number to be aligned.45 * @param align Size of alignment, must be power of 2.46 */47 #define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1))48 41 49 42 /** Maximum number of tasks in the #bootinfo_t struct. */ … … 75 68 /** @} 76 69 */ 77 -
boot/arch/mips32/loader/asm.h
re662a5f r96e0748d 30 30 #define BOOT_mips32_ASM_H_ 31 31 32 #define PAGE_SIZE 1638433 #define PAGE_WIDTH 1432 #define PAGE_SIZE 16384 33 #define PAGE_WIDTH 14 34 34 35 #define memcpy(dst, src, cnt) 35 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) 36 36 37 void jump_to_kernel(void *entry, void *bootinfo , unsigned int bootinfo_size) __attribute__((noreturn));37 void jump_to_kernel(void *entry, void *bootinfo) __attribute__((noreturn)); 38 38 39 39 #endif -
boot/arch/mips32/loader/boot.S
re662a5f r96e0748d 28 28 29 29 #include "regname.h" 30 31 #define INITIAL_STACK 0x80040000 32 #define MSIM_DORDER_ADDRESS 0x90000004 30 #include "main.h" 33 31 34 32 .set noat … … 41 39 start: 42 40 41 /* Setup CPU map (on msim this code 42 is executed in parallel on all CPUs, 43 but it not an issue) */ 44 la $a0, CPUMAP 45 46 sw $zero, 0($a0) 47 sw $zero, 4($a0) 48 sw $zero, 8($a0) 49 sw $zero, 12($a0) 50 51 sw $zero, 16($a0) 52 sw $zero, 20($a0) 53 sw $zero, 24($a0) 54 sw $zero, 28($a0) 55 56 sw $zero, 32($a0) 57 sw $zero, 36($a0) 58 sw $zero, 40($a0) 59 sw $zero, 44($a0) 60 61 sw $zero, 48($a0) 62 sw $zero, 52($a0) 63 sw $zero, 56($a0) 64 sw $zero, 60($a0) 65 66 sw $zero, 64($a0) 67 sw $zero, 68($a0) 68 sw $zero, 72($a0) 69 sw $zero, 76($a0) 70 71 sw $zero, 80($a0) 72 sw $zero, 84($a0) 73 sw $zero, 88($a0) 74 sw $zero, 92($a0) 75 76 sw $zero, 96($a0) 77 sw $zero, 100($a0) 78 sw $zero, 104($a0) 79 sw $zero, 108($a0) 80 81 sw $zero, 112($a0) 82 sw $zero, 116($a0) 83 sw $zero, 120($a0) 84 sw $zero, 124($a0) 85 86 lui $a1, 1 87 43 88 #ifdef MACHINE_msim 89 44 90 /* Read dorder value */ 45 91 la $k0, MSIM_DORDER_ADDRESS 46 lw $k 0, ($k0)92 lw $k1, ($k0) 47 93 48 94 /* If we are not running on BSP 49 end in an infinite loop */50 beq $k 0, $zero, bsp95 then end in an infinite loop */ 96 beq $k1, $zero, bsp 51 97 nop 98 99 /* Record CPU presence */ 100 sll $a2, $k1, 2 101 addu $a2, $a2, $a0 102 sw $a1, ($a2) 52 103 53 104 loop: … … 58 109 59 110 bsp: 111 /* Record CPU presence */ 112 sw $a1, ($a0) 113 60 114 /* Setup initial stack */ 61 lui $sp, INITIAL_STACK >> 16 62 ori $sp, $sp, INITIAL_STACK & 0xffff 115 la $sp, INITIAL_STACK 63 116 64 117 j bootstrap -
boot/arch/mips32/loader/main.c
re662a5f r96e0748d 29 29 #include "main.h" 30 30 #include <printf.h> 31 #include <align.h> 31 32 #include <macros.h> 32 33 #include "msim.h" … … 74 75 75 76 printf("\nCopying components\n"); 77 76 78 unsigned int top = 0; 77 79 bootinfo.cnt = 0; 78 for (i = 0; i < COMPONENTS; i++) {80 for (i = 0; i < min(COMPONENTS, TASKMAP_MAX_RECORDS); i++) { 79 81 printf(" %s...", components[i].name); 80 82 top = ALIGN_UP(top, PAGE_SIZE); … … 89 91 } 90 92 93 unsigned int *cpumap = (unsigned int *) CPUMAP; 94 bootinfo.cpumap = 0; 95 for (i = 0; i < CPUMAP_MAX_RECORDS; i++) { 96 if (cpumap[i] != 0) 97 bootinfo.cpumap |= (1 << i); 98 } 99 91 100 printf("\nBooting the kernel...\n"); 92 jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo , sizeof(bootinfo));101 jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo); 93 102 } -
boot/arch/mips32/loader/main.h
re662a5f r96e0748d 30 30 #define BOOT_mips32_MAIN_H_ 31 31 32 /** Align to the nearest higher address. 33 * 34 * @param addr Address or size to be aligned. 35 * @param align Size of alignment, must be power of 2. 36 */ 37 #define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1)) 32 #define CPUMAP 0x80001000 33 #define INITIAL_STACK 0x80002000 34 #define MSIM_DORDER_ADDRESS 0xb0000004 38 35 39 #define TASKMAP_MAX_RECORDS 32 36 #define TASKMAP_MAX_RECORDS 32 37 #define CPUMAP_MAX_RECORDS 32 38 39 #ifndef __ASM__ 40 40 41 41 typedef struct { … … 45 45 46 46 typedef struct { 47 unsigned int cpumap; 47 48 unsigned int cnt; 48 49 task_t tasks[TASKMAP_MAX_RECORDS]; … … 53 54 54 55 #endif 56 57 #endif
Note:
See TracChangeset
for help on using the changeset viewer.