Changeset 4bb31f7 in mainline
- Timestamp:
- 2008-01-25T12:03:54Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a7df23c
- Parents:
- ae78b53
- Location:
- kernel
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/pm.c
rae78b53 r4bb31f7 1 1 /* 2 * Copyright (c) 200 1-2004Jakub Jermar2 * Copyright (c) 2008 Jakub Jermar 3 3 * Copyright (c) 2005-2006 Ondrej Palkovsky 4 4 * All rights reserved. … … 55 55 .base_0_15 = 0, 56 56 .base_16_23 = 0, 57 .access = AR_PRESENT | AR_CODE | DPL_KERNEL | AR_READABLE 57 .access = AR_PRESENT | AR_CODE | DPL_KERNEL | AR_READABLE, 58 58 .limit_16_19 = 0xf, 59 59 .available = 0, … … 112 112 /* VESA Init descriptor */ 113 113 #ifdef CONFIG_FB 114 { 0xffff, 0, VESA_INIT_SEGMENT>>12, AR_PRESENT | AR_CODE | DPL_KERNEL, 0xf, 0, 0, 0, 0, 0 } 114 { 0xffff, 0, VESA_INIT_SEGMENT >> 12, AR_PRESENT | AR_CODE | DPL_KERNEL, 115 0xf, 0, 0, 0, 0, 0 116 } 115 117 #endif 116 118 }; … … 118 120 idescriptor_t idt[IDT_ITEMS]; 119 121 120 ptr_16_64_t gdtr = {.limit = sizeof(gdt), .base = (uint64_t) gdt };121 ptr_16_64_t idtr = {.limit = sizeof(idt), .base = (uint64_t) idt };122 ptr_16_64_t gdtr = {.limit = sizeof(gdt), .base = (uint64_t) gdt }; 123 ptr_16_64_t idtr = {.limit = sizeof(idt), .base = (uint64_t) idt }; 122 124 123 125 static tss_t tss; … … 174 176 d->type = AR_INTERRUPT; /* masking interrupt */ 175 177 176 idt_setoffset(d, ((uintptr_t) interrupt_handlers) + i*interrupt_handler_size); 178 idt_setoffset(d, ((uintptr_t) interrupt_handlers) + 179 i * interrupt_handler_size); 177 180 } 178 181 } -
kernel/arch/ia32/src/mm/frame.c
rae78b53 r4bb31f7 1 1 /* 2 * Copyright (c) 200 1-2004Jakub Jermar2 * Copyright (c) 2008 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 62 62 for (i = 0; i < e820counter; i++) { 63 63 if (e820table[i].type == MEMMAP_MEMORY_AVAILABLE) { 64 start = ADDR2PFN(ALIGN_UP(e820table[i].base_address, FRAME_SIZE)); 65 size = SIZE2FRAMES(ALIGN_DOWN(e820table[i].size, FRAME_SIZE)); 64 start = ADDR2PFN(ALIGN_UP(e820table[i].base_address, 65 FRAME_SIZE)); 66 size = SIZE2FRAMES(ALIGN_DOWN(e820table[i].size, 67 FRAME_SIZE)); 66 68 if ((minconf < start) || (minconf >= start + size)) 67 69 conf = start; … … 69 71 conf = minconf; 70 72 zone_create(start, size, conf, 0); 71 if (last_frame < ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE)) 72 last_frame = ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE); 73 if (last_frame < ALIGN_UP(e820table[i].base_address + 74 e820table[i].size, FRAME_SIZE)) 75 last_frame = 76 ALIGN_UP(e820table[i].base_address + 77 e820table[i].size, FRAME_SIZE); 73 78 } 74 79 } … … 83 88 }; 84 89 85 static char *e820names[] = { "invalid", "available", "reserved", 86 "acpi", "nvs","unusable" };90 static char *e820names[] = { "invalid", "available", "reserved", "acpi", "nvs", 91 "unusable" }; 87 92 88 93 … … 97 102 else 98 103 name = "invalid"; 99 printf("%.*p %#.16llXB %s\n", 100 sizeof(unative_t) * 2, 101 (unative_t) e820table[i].base_address, 102 (uint64_t) e820table[i].size, 103 name); 104 printf("%.*p %#.16llXB %s\n", sizeof(unative_t) * 2, 105 (unative_t) e820table[i].base_address, 106 (uint64_t) e820table[i].size, name); 104 107 } 105 108 return 0; … … 118 121 #ifdef CONFIG_SMP 119 122 minconf = max(minconf, 120 ADDR2PFN(AP_BOOT_OFFSET + hardcoded_unmapped_ktext_size + hardcoded_unmapped_kdata_size)); 123 ADDR2PFN(AP_BOOT_OFFSET + hardcoded_unmapped_ktext_size + 124 hardcoded_unmapped_kdata_size)); 121 125 #endif 122 126 #ifdef CONFIG_SIMICS_FIX … … 131 135 /* Reserve AP real mode bootstrap memory */ 132 136 frame_mark_unavailable(AP_BOOT_OFFSET >> FRAME_WIDTH, 133 (hardcoded_unmapped_ktext_size + hardcoded_unmapped_kdata_size) >> FRAME_WIDTH); 137 (hardcoded_unmapped_ktext_size + 138 hardcoded_unmapped_kdata_size) >> FRAME_WIDTH); 134 139 135 140 #ifdef CONFIG_SIMICS_FIX -
kernel/arch/ia32/src/smp/mps.c
rae78b53 r4bb31f7 1 1 /* 2 * Copyright (c) 200 1-2005Jakub Jermar2 * Copyright (c) 2008 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 150 150 151 151 /* count the checksum for the base table */ 152 for (i =0,sum=0; i < ct->base_table_length; i++)152 for (i = 0,sum = 0; i < ct->base_table_length; i++) 153 153 sum = (uint8_t) (sum + base[i]); 154 154 … … 157 157 158 158 /* count the checksum for the extended table */ 159 for (i =0,sum=0; i < ct->ext_table_length; i++)159 for (i = 0, sum = 0; i < ct->ext_table_length; i++) 160 160 sum = (uint8_t) (sum + ext[i]); 161 161 … … 179 179 for (i = 0; i < 2; i++) { 180 180 for (j = 0; j < length[i]; j += 16) { 181 if (*((uint32_t *) &addr[i][j]) == FS_SIGNATURE && mps_fs_check(&addr[i][j])) { 181 if (*((uint32_t *) &addr[i][j]) == 182 FS_SIGNATURE && mps_fs_check(&addr[i][j])) { 182 183 fs = (struct mps_fs *) &addr[i][j]; 183 184 goto fs_found; … … 228 229 cnt = 0; 229 230 cur = &ct->base_table[0]; 230 for (i =0; i < ct->entry_count; i++) {231 for (i = 0; i < ct->entry_count; i++) { 231 232 switch (*cur) { 232 /* Processor entry */ 233 case 0: 234 processor_entries = processor_entries ? processor_entries : (struct __processor_entry *) cur; 235 processor_entry_cnt++; 236 cnt += ct_processor_entry((struct __processor_entry *) cur); 237 cur += 20; 238 break; 239 240 /* Bus entry */ 241 case 1: 242 bus_entries = bus_entries ? bus_entries : (struct __bus_entry *) cur; 243 bus_entry_cnt++; 244 ct_bus_entry((struct __bus_entry *) cur); 245 cur += 8; 246 break; 233 /* Processor entry */ 234 case 0: 235 processor_entries = processor_entries ? 236 processor_entries : 237 (struct __processor_entry *) cur; 238 processor_entry_cnt++; 239 cnt += ct_processor_entry((struct __processor_entry *) 240 cur); 241 cur += 20; 242 break; 243 244 /* Bus entry */ 245 case 1: 246 bus_entries = bus_entries ? 247 bus_entries : (struct __bus_entry *) cur; 248 bus_entry_cnt++; 249 ct_bus_entry((struct __bus_entry *) cur); 250 cur += 8; 251 break; 247 252 248 /* I/O Apic */ 249 case 2: 250 io_apic_entries = io_apic_entries ? io_apic_entries : (struct __io_apic_entry *) cur; 253 /* I/O Apic */ 254 case 2: 255 io_apic_entries = io_apic_entries ? 256 io_apic_entries : (struct __io_apic_entry *) cur; 251 257 io_apic_entry_cnt++; 252 253 254 258 ct_io_apic_entry((struct __io_apic_entry *) cur); 259 cur += 8; 260 break; 255 261 256 /* I/O Interrupt Assignment */ 257 case 3: 258 io_intr_entries = io_intr_entries ? io_intr_entries : (struct __io_intr_entry *) cur; 259 io_intr_entry_cnt++; 260 ct_io_intr_entry((struct __io_intr_entry *) cur); 261 cur += 8; 262 break; 263 264 /* Local Interrupt Assignment */ 265 case 4: 266 l_intr_entries = l_intr_entries ? l_intr_entries : (struct __l_intr_entry *) cur; 267 l_intr_entry_cnt++; 268 ct_l_intr_entry((struct __l_intr_entry *) cur); 269 cur += 8; 270 break; 271 272 default: 273 /* 274 * Something is wrong. Fallback to UP mode. 275 */ 276 277 printf("%s: ct badness\n", __func__); 278 return 1; 262 /* I/O Interrupt Assignment */ 263 case 3: 264 io_intr_entries = io_intr_entries ? 265 io_intr_entries : (struct __io_intr_entry *) cur; 266 io_intr_entry_cnt++; 267 ct_io_intr_entry((struct __io_intr_entry *) cur); 268 cur += 8; 269 break; 270 271 /* Local Interrupt Assignment */ 272 case 4: 273 l_intr_entries = l_intr_entries ? 274 l_intr_entries : (struct __l_intr_entry *) cur; 275 l_intr_entry_cnt++; 276 ct_l_intr_entry((struct __l_intr_entry *) cur); 277 cur += 8; 278 break; 279 280 default: 281 /* 282 * Something is wrong. Fallback to UP mode. 283 */ 284 285 printf("%s: ct badness\n", __func__); 286 return 1; 279 287 } 280 288 } … … 302 310 * Ignore processors which are not marked enabled. 303 311 */ 304 if ((pr->cpu_flags & (1 <<0)) == 0)312 if ((pr->cpu_flags & (1 << 0)) == 0) 305 313 return 0; 306 314 307 apic_id_mask |= (1 <<pr->l_apic_id);315 apic_id_mask |= (1 << pr->l_apic_id); 308 316 return 1; 309 317 } … … 342 350 #ifdef MPSCT_VERBOSE 343 351 switch (iointr->intr_type) { 344 case 0: printf("INT"); break; 345 case 1: printf("NMI"); break; 346 case 2: printf("SMI"); break; 347 case 3: printf("ExtINT"); break; 348 } 349 putchar(','); 350 switch (iointr->poel&3) { 351 case 0: printf("bus-like"); break; 352 case 1: printf("active high"); break; 353 case 2: printf("reserved"); break; 354 case 3: printf("active low"); break; 355 } 356 putchar(','); 357 switch ((iointr->poel>>2)&3) { 358 case 0: printf("bus-like"); break; 359 case 1: printf("edge-triggered"); break; 360 case 2: printf("reserved"); break; 361 case 3: printf("level-triggered"); break; 352 case 0: 353 printf("INT"); 354 break; 355 case 1: 356 printf("NMI"); 357 break; 358 case 2: 359 printf("SMI"); 360 break; 361 case 3: 362 printf("ExtINT"); 363 break; 364 } 365 putchar(','); 366 switch (iointr->poel & 3) { 367 case 0: 368 printf("bus-like"); 369 break; 370 case 1: 371 printf("active high"); 372 break; 373 case 2: 374 printf("reserved"); 375 break; 376 case 3: 377 printf("active low"); 378 break; 379 } 380 putchar(','); 381 switch ((iointr->poel >> 2) & 3) { 382 case 0: 383 printf("bus-like"); 384 break; 385 case 1: 386 printf("edge-triggered"); 387 break; 388 case 2: 389 printf("reserved"); 390 break; 391 case 3: 392 printf("level-triggered"); 393 break; 362 394 } 363 395 putchar(','); 364 396 printf("bus%d,irq%d", iointr->src_bus_id, iointr->src_bus_irq); 365 397 putchar(','); 366 printf("io_apic%d,pin%d", iointr->dst_io_apic_id, iointr->dst_io_apic_pin); 398 printf("io_apic%d,pin%d", iointr->dst_io_apic_id, 399 iointr->dst_io_apic_pin); 367 400 putchar('\n'); 368 401 #endif … … 373 406 #ifdef MPSCT_VERBOSE 374 407 switch (lintr->intr_type) { 375 case 0: printf("INT"); break; 376 case 1: printf("NMI"); break; 377 case 2: printf("SMI"); break; 378 case 3: printf("ExtINT"); break; 379 } 380 putchar(','); 381 switch (lintr->poel&3) { 382 case 0: printf("bus-like"); break; 383 case 1: printf("active high"); break; 384 case 2: printf("reserved"); break; 385 case 3: printf("active low"); break; 386 } 387 putchar(','); 388 switch ((lintr->poel>>2)&3) { 389 case 0: printf("bus-like"); break; 390 case 1: printf("edge-triggered"); break; 391 case 2: printf("reserved"); break; 392 case 3: printf("level-triggered"); break; 408 case 0: 409 printf("INT"); 410 break; 411 case 1: 412 printf("NMI"); 413 break; 414 case 2: 415 printf("SMI"); 416 break; 417 case 3: 418 printf("ExtINT"); 419 break; 420 } 421 putchar(','); 422 switch (lintr->poel & 3) { 423 case 0: 424 printf("bus-like"); 425 break; 426 case 1: 427 printf("active high"); 428 break; 429 case 2: 430 printf("reserved"); 431 break; 432 case 3: 433 printf("active low"); 434 break; 435 } 436 putchar(','); 437 switch ((lintr->poel >> 2) & 3) { 438 case 0: 439 printf("bus-like"); 440 break; 441 case 1: 442 printf("edge-triggered"); 443 break; 444 case 2: 445 printf("reserved"); 446 break; 447 case 3: 448 printf("level-triggered"); 449 break; 393 450 } 394 451 putchar(','); … … 405 462 uint8_t *cur; 406 463 407 for (cur = ext; cur < ext + ct->ext_table_length; cur += cur[CT_EXT_ENTRY_LEN]) { 464 for (cur = ext; cur < ext + ct->ext_table_length; 465 cur += cur[CT_EXT_ENTRY_LEN]) { 408 466 switch (cur[CT_EXT_ENTRY_TYPE]) { 409 default: 410 printf("%p: skipping MP Configuration Table extended entry type %d\n", cur, cur[CT_EXT_ENTRY_TYPE]); 411 break; 467 default: 468 printf("%p: skipping MP Configuration Table extended " 469 "entry type %d\n", cur, cur[CT_EXT_ENTRY_TYPE]); 470 break; 412 471 } 413 472 } … … 419 478 420 479 for (i = 0; i < io_intr_entry_cnt; i++) { 421 if (io_intr_entries[i].src_bus_irq == irq && io_intr_entries[i].intr_type == 0) 480 if (io_intr_entries[i].src_bus_irq == irq && 481 io_intr_entries[i].intr_type == 0) 422 482 return io_intr_entries[i].dst_io_apic_pin; 423 483 } -
kernel/arch/ia32/src/smp/smp.c
rae78b53 r4bb31f7 1 1 /* 2 * Copyright (c) 200 5Jakub Jermar2 * Copyright (c) 2008 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 73 73 } 74 74 75 l_apic_address = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_ATOMIC | FRAME_KA); 75 l_apic_address = (uintptr_t) frame_alloc(ONE_FRAME, 76 FRAME_ATOMIC | FRAME_KA); 76 77 if (!l_apic_address) 77 78 panic("cannot allocate address for l_apic\n"); 78 79 79 io_apic_address = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_ATOMIC | FRAME_KA); 80 io_apic_address = (uintptr_t) frame_alloc(ONE_FRAME, 81 FRAME_ATOMIC | FRAME_KA); 80 82 if (!io_apic_address) 81 83 panic("cannot allocate address for io_apic\n"); 82 84 83 85 if (config.cpu_count > 1) { 84 page_mapping_insert(AS_KERNEL, l_apic_address, (uintptr_t) l_apic,85 86 page_mapping_insert(AS_KERNEL, io_apic_address, (uintptr_t) io_apic,87 86 page_mapping_insert(AS_KERNEL, l_apic_address, 87 (uintptr_t) l_apic, PAGE_NOT_CACHEABLE | PAGE_WRITE); 88 page_mapping_insert(AS_KERNEL, io_apic_address, 89 (uintptr_t) io_apic, PAGE_NOT_CACHEABLE | PAGE_WRITE); 88 90 89 91 l_apic = (uint32_t *) l_apic_address; … … 113 115 * Set the warm-reset vector to the real-mode address of 4K-aligned ap_boot() 114 116 */ 115 *((uint16_t *) (PA2KA(0x467 + 0))) = (uint16_t) (((uintptr_t) ap_boot) >> 4); /* segment */ 116 *((uint16_t *) (PA2KA(0x467 + 2))) = 0; /* offset */ 117 *((uint16_t *) (PA2KA(0x467 + 0))) = 118 (uint16_t) (((uintptr_t) ap_boot) >> 4); /* segment */ 119 *((uint16_t *) (PA2KA(0x467 + 2))) = 0; /* offset */ 117 120 118 121 /* … … 144 147 145 148 if (ops->cpu_apic_id(i) == apic) { 146 printf("%s: bad processor entry #%u, will not send IPI to myself\n", __FUNCTION__, i); 149 printf("%s: bad processor entry #%u, will not send IPI " 150 "to myself\n", __FUNCTION__, i); 147 151 continue; 148 152 } … … 151 155 * Prepare new GDT for CPU in question. 152 156 */ 153 if (!(gdt_new = (struct descriptor *) malloc(GDT_ITEMS * sizeof(struct descriptor), FRAME_ATOMIC))) 157 gdt_new = (struct descriptor *) malloc(GDT_ITEMS * 158 sizeof(struct descriptor), FRAME_ATOMIC); 159 if (!gdt_new) 154 160 panic("couldn't allocate memory for GDT\n"); 155 161 156 162 memcpy(gdt_new, gdt, GDT_ITEMS * sizeof(struct descriptor)); 157 memsetb((uintptr_t)(&gdt_new[TSS_DES]), sizeof(struct descriptor), 0); 163 memsetb((uintptr_t)(&gdt_new[TSS_DES]), 164 sizeof(struct descriptor), 0); 158 165 protected_ap_gdtr.limit = GDT_ITEMS * sizeof(struct descriptor); 159 166 protected_ap_gdtr.base = KA2PA((uintptr_t) gdt_new); … … 166 173 * supposed to wake us up. 167 174 */ 168 if (waitq_sleep_timeout(&ap_completion_wq, 1000000, SYNCH_FLAGS_NONE) == ESYNCH_TIMEOUT) { 169 unsigned int cpu = (config.cpu_active > i) ? config.cpu_active : i; 170 printf("%s: waiting for cpu%u (APIC ID = %d) timed out\n", __FUNCTION__, cpu, ops->cpu_apic_id(i)); 175 if (waitq_sleep_timeout(&ap_completion_wq, 1000000, 176 SYNCH_FLAGS_NONE) == ESYNCH_TIMEOUT) { 177 unsigned int cpu = (config.cpu_active > i) ? 178 config.cpu_active : i; 179 printf("%s: waiting for cpu%u (APIC ID = %d) " 180 "timed out\n", __FUNCTION__, cpu, 181 ops->cpu_apic_id(i)); 171 182 } 172 183 } else 173 printf("INIT IPI for l_apic%d failed\n", ops->cpu_apic_id(i)); 184 printf("INIT IPI for l_apic%d failed\n", 185 ops->cpu_apic_id(i)); 174 186 } 175 187 } -
kernel/generic/src/main/version.c
rae78b53 r4bb31f7 37 37 38 38 char *project = "SPARTAN kernel"; 39 char *copyright = "Copyright (c) 2001-200 7HelenOS project";39 char *copyright = "Copyright (c) 2001-2008 HelenOS project"; 40 40 char *release = RELEASE; 41 41 char *name = NAME;
Note:
See TracChangeset
for help on using the changeset viewer.