Partially fixed up tree after merge from HEAD. More to do.
[reactos.git] / reactos / boot / freeldr / freeldr / windows / wlmemory.c
index 243c3a1..9f6cbc5 100644 (file)
@@ -102,6 +102,8 @@ extern ULONG_PTR i386GeneralProtectionFault;
 extern ULONG_PTR i386PageFault; // exc 14\r
 extern ULONG_PTR i386CoprocessorError; // exc 16\r
 extern ULONG_PTR i386AlignmentCheck; // exc 17\r
+#else\r
+typedef unsigned long long HARDWARE_PTE, *PHARDWARE_PTE;\r
 #endif\r
 \r
 /* GLOBALS ***************************************************************/\r
@@ -123,6 +125,7 @@ ULONG MadCount = 0;
 BOOLEAN\r
 MempAllocatePageTables()\r
 {\r
+#ifdef _M_IX86\r
        ULONG NumPageTables, TotalSize;\r
        PUCHAR Buffer;\r
        // It's better to allocate PDE + PTEs contigiuos\r
@@ -171,7 +174,7 @@ MempAllocatePageTables()
        // Zero counters of page tables used\r
        PhysicalPageTables = 0;\r
        KernelPageTables = 0;\r
-\r
+#endif\r
        return TRUE;\r
 }\r
 \r
@@ -181,6 +184,7 @@ MempAllocatePTE(ULONG Entry, PHARDWARE_PTE *PhysicalPT, PHARDWARE_PTE *KernelPT)
        //Print(L"Creating PDE Entry %X\n", Entry);\r
 \r
        // Identity mapping\r
+#ifdef _M_IX86\r
        *PhysicalPT = (PHARDWARE_PTE)&PhysicalPageTablesBuffer[PhysicalPageTables*MM_PAGE_SIZE];\r
        PhysicalPageTables++;\r
 \r
@@ -200,12 +204,14 @@ MempAllocatePTE(ULONG Entry, PHARDWARE_PTE *PhysicalPT, PHARDWARE_PTE *KernelPT)
        PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber = ((ULONG)*KernelPT >> MM_PAGE_SHIFT);\r
        PDE[Entry+(KSEG0_BASE >> 22)].Valid = 1;\r
        PDE[Entry+(KSEG0_BASE >> 22)].Write = 1;\r
+#endif\r
 }\r
 \r
 BOOLEAN\r
 MempSetupPaging(IN ULONG StartPage,\r
                                IN ULONG NumberOfPages)\r
 {\r
+#ifdef _M_IX86\r
        PHARDWARE_PTE PhysicalPT;\r
        PHARDWARE_PTE KernelPT;\r
        ULONG Entry, Page;\r
@@ -261,7 +267,7 @@ MempSetupPaging(IN ULONG StartPage,
                        KernelPT[Page & 0x3ff].Write = 1;\r
                }\r
        }\r
-\r
+#endif\r
        return TRUE;\r
 }\r
 \r
@@ -271,8 +277,8 @@ MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
                    UINT64 PageCount,\r
                    ULONG Type)\r
 {\r
+#ifdef _M_IX86\r
        BOOLEAN Status;\r
-\r
        //\r
        // Check for some weird stuff at the top\r
        //\r
@@ -382,6 +388,7 @@ MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
                        return;\r
                }\r
        }\r
+#endif\r
 }\r
 \r
 BOOLEAN\r
@@ -390,6 +397,7 @@ WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
                    ULONG TssBasePage,\r
                    PVOID GdtIdt)\r
 {\r
+#ifdef _M_IX86\r
        ULONG i, PagesCount;\r
        ULONG LastPageIndex, LastPageType;\r
        PPAGE_LOOKUP_TABLE_ITEM MemoryMap;\r
@@ -533,7 +541,7 @@ WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
 \r
        // Zero KI_USER_SHARED_DATA page\r
        memset((PVOID)KI_USER_SHARED_DATA, 0, MM_PAGE_SIZE);\r
-\r
+#endif\r
        return TRUE;\r
 }\r
 \r
@@ -606,10 +614,12 @@ WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
 VOID\r
 WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss)\r
 {\r
+#ifdef _M_IX86\r
        GDTIDT GdtDesc, IdtDesc, OldIdt;\r
        PKGDTENTRY      pGdt;\r
        PKIDTENTRY      pIdt;\r
        ULONG Ldt = 0;\r
+#endif\r
        //ULONG i;\r
 \r
        DbgPrint((DPRINT_WINDOWS, "GDtIdt %p, Pcr %p, Tss 0x%08X\n",\r
@@ -619,6 +629,7 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss)
        // FIXME: Why zero it here when we can zero it right after allocation?\r
        RtlZeroMemory((PVOID)Pcr, MM_PAGE_SIZE); //FIXME: Why zero only 1 page when we allocate 2?\r
 \r
+#ifdef _M_IX86\r
        // Get old values of GDT and IDT\r
        Ke386GetGlobalDescriptorTable(GdtDesc);\r
        Ke386GetInterruptDescriptorTable(IdtDesc);\r
@@ -791,6 +802,7 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss)
        //\r
        // Fill IDT with Traps\r
        //\r
+#endif\r
 #if 0\r
        pIdt[0].Offset = (i386DivideByZero | KSEG0_BASE) & 0xFFFF;\r
        pIdt[0].ExtendedOffset = 0x8; // Selector\r
@@ -881,7 +893,6 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss)
        pIdt[17].Offset = (i386AlignmentCheck | KSEG0_BASE) & 0xFFFF;\r
        pIdt[17].ExtendedOffset = 0x8; // Selector\r
        pIdt[17].Access = 0x8F00;\r
-#endif\r
 \r
        /*for (i=0; i<16; i++)\r
        {\r
@@ -945,4 +956,5 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss)
                pop ebp;\r
                ret\r
                */\r
+#endif\r
 }\r