Changeset 2f57690 in mainline for kernel/arch/ia32/src/boot/cboot.c
- Timestamp:
- 2009-03-03T12:41:39Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- deca67b
- Parents:
- 561db3f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/boot/cboot.c
r561db3f r2f57690 47 47 /** Extract command name from the multiboot module command line. 48 48 * 49 * @param buf Destination buffer (will always null-terminate). 50 * @param n Size of destination buffer. 51 * @param cmd_line Input string (the command line). 49 * @param buf Destination buffer (will always null-terminate). 50 * @param n Size of destination buffer. 51 * @param cmd_line Input string (the command line). 52 * 52 53 */ 53 54 static void extract_command(char *buf, size_t n, const char *cmd_line) … … 55 56 const char *start, *end, *cp; 56 57 size_t max_len; 57 58 58 59 /* Find the first space. */ 59 60 end = strchr(cmd_line, ' '); 60 if (end == NULL) end = cmd_line + strlen(cmd_line); 61 61 if (end == NULL) 62 end = cmd_line + strlen(cmd_line); 63 62 64 /* 63 65 * Find last occurence of '/' before 'end'. If found, place start at … … 73 75 --cp; 74 76 } 75 77 76 78 /* Copy the command and null-terminate the string. */ 77 79 max_len = min(n - 1, (size_t) (end - start)); … … 81 83 82 84 /** C part of ia32 boot sequence. 83 * @param signature Should contain the multiboot signature. 84 * @param mi Pointer to the multiboot information structure. 85 * 86 * @param signature Should contain the multiboot signature. 87 * @param mi Pointer to the multiboot information structure. 85 88 */ 86 89 void ia32_cboot(uint32_t signature, const mb_info_t *mi) … … 89 92 mb_mod_t *mods; 90 93 uint32_t i; 91 92 if (signature == MULTIBOOT_LOADER_MAGIC) {94 95 if (signature == MULTIBOOT_LOADER_MAGIC) 93 96 flags = mi->flags; 94 }else {97 else { 95 98 /* No multiboot info available. */ 96 99 flags = 0; 97 100 } 98 101 99 102 /* Copy module information. */ 100 103 101 104 if ((flags & MBINFO_FLAGS_MODS) != 0) { 102 105 init.cnt = mi->mods_count; 103 106 mods = mi->mods_addr; 104 107 105 108 for (i = 0; i < init.cnt; i++) { 106 109 init.tasks[i].addr = mods[i].start + 0x80000000; 107 110 init.tasks[i].size = mods[i].end - mods[i].start; 108 111 109 112 /* Copy command line, if available. */ 110 113 if (mods[i].string) { … … 112 115 CONFIG_TASK_NAME_BUFLEN, 113 116 mods[i].string); 114 } else {117 } else 115 118 init.tasks[i].name[0] = '\0'; 116 }117 119 } 118 } else {120 } else 119 121 init.cnt = 0; 120 } 121 122 122 123 /* Copy memory map. */ 123 124 124 125 int32_t mmap_length; 125 126 mb_mmap_t *mme; 126 127 uint32_t size; 127 128 128 129 if ((flags & MBINFO_FLAGS_MMAP) != 0) { 129 130 mmap_length = mi->mmap_length; 130 131 mme = mi->mmap_addr; 131 132 e820counter = 0; 132 133 133 134 i = 0; 134 135 while (mmap_length > 0) { 135 136 e820table[i++] = mme->mm_info; 136 137 137 138 /* Compute address of next structure. */ 138 139 size = sizeof(mme->size) + mme->size; … … 140 141 mmap_length -= size; 141 142 } 142 143 143 144 e820counter = i; 144 } else {145 } else 145 146 e820counter = 0; 146 } 147 147 148 148 #ifdef CONFIG_SMP 149 149 /* Copy AP bootstrap routines below 1 MB. */ … … 151 151 (size_t) &_hardcoded_unmapped_size); 152 152 #endif 153 153 154 154 main_bsp(); 155 155 }
Note:
See TracChangeset
for help on using the changeset viewer.