ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

static BOOLEAN HaliReadMPConfigTable ( PMP_CONFIGURATION_TABLE  Table) [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;
}

Generated on Sun May 27 2012 05:27:32 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.