Changeset 4bb31f7 in mainline for kernel/arch/ia32/src/smp/mps.c
- 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:
- ae78b530
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/smp/mps.c
rae78b530 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 }
Note:
See TracChangeset
for help on using the changeset viewer.