1,5 → 1,5 |
/* |
* Copyright (c) 2001-2005 Jakub Jermar |
* Copyright (c) 2008 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
178,7 → 178,8 |
addr[0] = (uint8_t *) PA2KA(ebda ? ebda : 639 * 1024); |
for (i = 0; i < 2; i++) { |
for (j = 0; j < length[i]; j += 16) { |
if (*((uint32_t *) &addr[i][j]) == FS_SIGNATURE && mps_fs_check(&addr[i][j])) { |
if (*((uint32_t *) &addr[i][j]) == |
FS_SIGNATURE && mps_fs_check(&addr[i][j])) { |
fs = (struct mps_fs *) &addr[i][j]; |
goto fs_found; |
} |
231,15 → 232,19 |
switch (*cur) { |
/* Processor entry */ |
case 0: |
processor_entries = processor_entries ? processor_entries : (struct __processor_entry *) cur; |
processor_entries = processor_entries ? |
processor_entries : |
(struct __processor_entry *) cur; |
processor_entry_cnt++; |
cnt += ct_processor_entry((struct __processor_entry *) cur); |
cnt += ct_processor_entry((struct __processor_entry *) |
cur); |
cur += 20; |
break; |
|
/* Bus entry */ |
case 1: |
bus_entries = bus_entries ? bus_entries : (struct __bus_entry *) cur; |
bus_entries = bus_entries ? |
bus_entries : (struct __bus_entry *) cur; |
bus_entry_cnt++; |
ct_bus_entry((struct __bus_entry *) cur); |
cur += 8; |
247,7 → 252,8 |
|
/* I/O Apic */ |
case 2: |
io_apic_entries = io_apic_entries ? io_apic_entries : (struct __io_apic_entry *) cur; |
io_apic_entries = io_apic_entries ? |
io_apic_entries : (struct __io_apic_entry *) cur; |
io_apic_entry_cnt++; |
ct_io_apic_entry((struct __io_apic_entry *) cur); |
cur += 8; |
255,7 → 261,8 |
|
/* I/O Interrupt Assignment */ |
case 3: |
io_intr_entries = io_intr_entries ? io_intr_entries : (struct __io_intr_entry *) cur; |
io_intr_entries = io_intr_entries ? |
io_intr_entries : (struct __io_intr_entry *) cur; |
io_intr_entry_cnt++; |
ct_io_intr_entry((struct __io_intr_entry *) cur); |
cur += 8; |
263,7 → 270,8 |
|
/* Local Interrupt Assignment */ |
case 4: |
l_intr_entries = l_intr_entries ? l_intr_entries : (struct __l_intr_entry *) cur; |
l_intr_entries = l_intr_entries ? |
l_intr_entries : (struct __l_intr_entry *) cur; |
l_intr_entry_cnt++; |
ct_l_intr_entry((struct __l_intr_entry *) cur); |
cur += 8; |
341,29 → 349,54 |
{ |
#ifdef MPSCT_VERBOSE |
switch (iointr->intr_type) { |
case 0: printf("INT"); break; |
case 1: printf("NMI"); break; |
case 2: printf("SMI"); break; |
case 3: printf("ExtINT"); break; |
case 0: |
printf("INT"); |
break; |
case 1: |
printf("NMI"); |
break; |
case 2: |
printf("SMI"); |
break; |
case 3: |
printf("ExtINT"); |
break; |
} |
putchar(','); |
switch (iointr->poel&3) { |
case 0: printf("bus-like"); break; |
case 1: printf("active high"); break; |
case 2: printf("reserved"); break; |
case 3: printf("active low"); break; |
case 0: |
printf("bus-like"); |
break; |
case 1: |
printf("active high"); |
break; |
case 2: |
printf("reserved"); |
break; |
case 3: |
printf("active low"); |
break; |
} |
putchar(','); |
switch ((iointr->poel>>2)&3) { |
case 0: printf("bus-like"); break; |
case 1: printf("edge-triggered"); break; |
case 2: printf("reserved"); break; |
case 3: printf("level-triggered"); break; |
case 0: |
printf("bus-like"); |
break; |
case 1: |
printf("edge-triggered"); |
break; |
case 2: |
printf("reserved"); |
break; |
case 3: |
printf("level-triggered"); |
break; |
} |
putchar(','); |
printf("bus%d,irq%d", iointr->src_bus_id, iointr->src_bus_irq); |
putchar(','); |
printf("io_apic%d,pin%d", iointr->dst_io_apic_id, iointr->dst_io_apic_pin); |
printf("io_apic%d,pin%d", iointr->dst_io_apic_id, |
iointr->dst_io_apic_pin); |
putchar('\n'); |
#endif |
} |
372,24 → 405,48 |
{ |
#ifdef MPSCT_VERBOSE |
switch (lintr->intr_type) { |
case 0: printf("INT"); break; |
case 1: printf("NMI"); break; |
case 2: printf("SMI"); break; |
case 3: printf("ExtINT"); break; |
case 0: |
printf("INT"); |
break; |
case 1: |
printf("NMI"); |
break; |
case 2: |
printf("SMI"); |
break; |
case 3: |
printf("ExtINT"); |
break; |
} |
putchar(','); |
switch (lintr->poel&3) { |
case 0: printf("bus-like"); break; |
case 1: printf("active high"); break; |
case 2: printf("reserved"); break; |
case 3: printf("active low"); break; |
case 0: |
printf("bus-like"); |
break; |
case 1: |
printf("active high"); |
break; |
case 2: |
printf("reserved"); |
break; |
case 3: |
printf("active low"); |
break; |
} |
putchar(','); |
switch ((lintr->poel>>2)&3) { |
case 0: printf("bus-like"); break; |
case 1: printf("edge-triggered"); break; |
case 2: printf("reserved"); break; |
case 3: printf("level-triggered"); break; |
case 0: |
printf("bus-like"); |
break; |
case 1: |
printf("edge-triggered"); |
break; |
case 2: |
printf("reserved"); |
break; |
case 3: |
printf("level-triggered"); |
break; |
} |
putchar(','); |
printf("bus%d,irq%d", lintr->src_bus_id, lintr->src_bus_irq); |
404,10 → 461,12 |
uint8_t *ext = (uint8_t *) ct + ct->base_table_length; |
uint8_t *cur; |
|
for (cur = ext; cur < ext + ct->ext_table_length; cur += cur[CT_EXT_ENTRY_LEN]) { |
for (cur = ext; cur < ext + ct->ext_table_length; |
cur += cur[CT_EXT_ENTRY_LEN]) { |
switch (cur[CT_EXT_ENTRY_TYPE]) { |
default: |
printf("%p: skipping MP Configuration Table extended entry type %d\n", cur, cur[CT_EXT_ENTRY_TYPE]); |
printf("%p: skipping MP Configuration Table extended " |
"entry type %d\n", cur, cur[CT_EXT_ENTRY_TYPE]); |
break; |
} |
} |
418,7 → 477,8 |
unsigned int i; |
|
for (i = 0; i < io_intr_entry_cnt; i++) { |
if (io_intr_entries[i].src_bus_irq == irq && io_intr_entries[i].intr_type == 0) |
if (io_intr_entries[i].src_bus_irq == irq && |
io_intr_entries[i].intr_type == 0) |
return io_intr_entries[i].dst_io_apic_pin; |
} |
|