Home | Info | Community | Development | myReactOS | Contact Us
[static]
Definition at line 259 of file mpconfig.c.
Referenced by HaliGetSmpConfig().
{ PUCHAR Entry; ULONG Count; if (Table->Signature != MPC_SIGNATURE) { PUCHAR pc = (PUCHAR)&Table->Signature; DPRINT1("Bad MP configuration block signature: %c%c%c%c\n", pc[0], pc[1], pc[2], pc[3]); KeBugCheckEx(HAL_INITIALIZATION_FAILED, pc[0], pc[1], pc[2], pc[3]); return FALSE; } if (MPChecksum((PUCHAR)Table, Table->Length)) { DPRINT1("Bad MP configuration block checksum\n"); ASSERT(FALSE); return FALSE; } if (Table->Specification != 0x01 && Table->Specification != 0x04) { DPRINT1("Bad MP configuration table version (%d)\n", Table->Specification); ASSERT(FALSE); return FALSE; } if (Table->LocalAPICAddress != APIC_DEFAULT_BASE) { DPRINT1("APIC base address is at 0x%X. I cannot handle non-standard adresses\n", Table->LocalAPICAddress); ASSERT(FALSE); return FALSE; } DPRINT("Oem: %.*s, ProductId: %.*s\n", 8, Table->Oem, 12, Table->ProductId); DPRINT("APIC at: %08x\n", Table->LocalAPICAddress); Entry = (PUCHAR)((ULONG_PTR)Table + sizeof(MP_CONFIGURATION_TABLE)); Count = 0; while (Count < (Table->Length - sizeof(MP_CONFIGURATION_TABLE))) { /* Switch on type */ switch (*Entry) { case MPCTE_PROCESSOR: { HaliMPProcessorInfo((PMP_CONFIGURATION_PROCESSOR)Entry); Entry += sizeof(MP_CONFIGURATION_PROCESSOR); Count += sizeof(MP_CONFIGURATION_PROCESSOR); break; } case MPCTE_BUS: { HaliMPBusInfo((PMP_CONFIGURATION_BUS)Entry); Entry += sizeof(MP_CONFIGURATION_BUS); Count += sizeof(MP_CONFIGURATION_BUS); break; } case MPCTE_IOAPIC: { HaliMPIOApicInfo((PMP_CONFIGURATION_IOAPIC)Entry); Entry += sizeof(MP_CONFIGURATION_IOAPIC); Count += sizeof(MP_CONFIGURATION_IOAPIC); break; } case MPCTE_INTSRC: { HaliMPIntSrcInfo((PMP_CONFIGURATION_INTSRC)Entry); Entry += sizeof(MP_CONFIGURATION_INTSRC); Count += sizeof(MP_CONFIGURATION_INTSRC); break; } case MPCTE_LINTSRC: { HaliMPIntLocalInfo((PMP_CONFIGURATION_INTLOCAL)Entry); Entry += sizeof(MP_CONFIGURATION_INTLOCAL); Count += sizeof(MP_CONFIGURATION_INTLOCAL); break; } default: DPRINT1("Unknown entry in MPC table\n"); ASSERT(FALSE); return FALSE; } } return TRUE; }