[ros-diffs] [tkreuzer] 34728: forgot this one: a stubbed out loader.c copied from i386

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Thu Jul 24 04:30:36 CEST 2008


Author: tkreuzer
Date: Wed Jul 23 21:30:36 2008
New Revision: 34728

URL: http://svn.reactos.org/svn/reactos?rev=34728&view=rev
Log:
forgot this one: a stubbed out loader.c copied from i386

Added:
    branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/loader.c   (with props)

Added: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/loader.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/loader.c?rev=34728&view=auto
==============================================================================
--- branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/loader.c (added)
+++ branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/loader.c [iso-8859-1] Wed Jul 23 21:30:36 2008
@@ -1,0 +1,216 @@
+/*
+ *  FreeLoader
+ *  Copyright (C) 1998-2003  Brian Palmer  <brianp at sginet.com>
+ *  Copyright (C) 2005       Alex Ionescu  <alex at relsoft.net>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#define _NTSYSTEM_
+#include <freeldr.h>
+
+#define NDEBUG
+#include <debug.h>
+#undef DbgPrint
+
+/* Page Directory and Tables for non-PAE Systems */
+extern PAGE_DIRECTORY_X86 startup_pagedirectory;
+extern PAGE_DIRECTORY_X86 lowmem_pagetable;
+extern PAGE_DIRECTORY_X86 kernel_pagetable;
+extern PAGE_DIRECTORY_X86 hyperspace_pagetable;
+extern PAGE_DIRECTORY_X86 apic_pagetable;
+extern PAGE_DIRECTORY_X86 kpcr_pagetable;
+extern PAGE_DIRECTORY_X86 kuser_pagetable;
+extern ULONG_PTR KernelBase;
+extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint;
+/* FUNCTIONS *****************************************************************/
+
+/*++
+ * FrLdrStartup
+ * INTERNAL
+ *
+ *     Prepares the system for loading the Kernel.
+ *
+ * Params:
+ *     Magic - Multiboot Magic
+ *
+ * Returns:
+ *     None.
+ *
+ * Remarks:
+ *     None.
+ *
+ *--*/
+VOID
+NTAPI
+FrLdrStartup(ULONG Magic)
+{
+    ASSERT(FALSE);
+#if 0
+    /* Disable Interrupts */
+    _disable();
+
+    /* Re-initalize EFLAGS */
+    Ke386EraseFlags();
+
+    /* Initialize the page directory */
+    FrLdrSetupPageDirectory();
+
+    /* Initialize Paging, Write-Protection and Load NTOSKRNL */
+    FrLdrSetupPae(Magic);
+#endif
+}
+
+/*++
+ * FrLdrSetupPae
+ * INTERNAL
+ *
+ *     Configures PAE on a MP System, and sets the PDBR if it's supported, or if
+ *     the system is UP.
+ *
+ * Params:
+ *     Magic - Multiboot Magic
+ *
+ * Returns:
+ *     None.
+ *
+ * Remarks:
+ *     None.
+ *
+ *--*/
+VOID
+FASTCALL
+FrLdrSetupPae(ULONG Magic)
+{
+#if 0
+    ULONG_PTR PageDirectoryBaseAddress = (ULONG_PTR)&startup_pagedirectory;
+
+    /* Set the PDBR */
+    __writecr3(PageDirectoryBaseAddress);
+
+    /* Enable Paging and Write Protect*/
+    __writecr0(__readcr0() | X86_CR0_PG | X86_CR0_WP);
+
+    /* Jump to Kernel */
+    (*KernelEntryPoint)(Magic, &LoaderBlock);
+#endif
+}
+
+/*++
+ * FrLdrSetupPageDirectory
+ * INTERNAL
+ *
+ *     Sets up the ReactOS Startup Page Directory.
+ *
+ * Params:
+ *     None.
+ *
+ * Returns:
+ *     None.
+ *
+ * Remarks:
+ *     We are setting PDEs, but using the equvivalent (for our purpose) PTE structure.
+ *     As such, please note that PageFrameNumber == PageEntryNumber.
+ *
+ *--*/
+VOID
+FASTCALL
+FrLdrSetupPageDirectory(VOID)
+{
+#if 0
+    PPAGE_DIRECTORY_X86 PageDir;
+    ULONG KernelPageTableIndex;
+    ULONG i;
+
+    /* Get the Kernel Table Index */
+    KernelPageTableIndex = KernelBase >> PDE_SHIFT;
+
+    /* Get the Startup Page Directory */
+    PageDir = (PPAGE_DIRECTORY_X86)&startup_pagedirectory;
+
+    /* Set up the Low Memory PDE */
+    PageDir->Pde[LowMemPageTableIndex].Valid = 1;
+    PageDir->Pde[LowMemPageTableIndex].Write = 1;
+    PageDir->Pde[LowMemPageTableIndex].PageFrameNumber = PaPtrToPfn(lowmem_pagetable);
+
+    /* Set up the Kernel PDEs */
+    PageDir->Pde[KernelPageTableIndex].Valid = 1;
+    PageDir->Pde[KernelPageTableIndex].Write = 1;
+    PageDir->Pde[KernelPageTableIndex].PageFrameNumber = PaPtrToPfn(kernel_pagetable);
+    PageDir->Pde[KernelPageTableIndex + 1].Valid = 1;
+    PageDir->Pde[KernelPageTableIndex + 1].Write = 1;
+    PageDir->Pde[KernelPageTableIndex + 1].PageFrameNumber = PaPtrToPfn(kernel_pagetable + 4096);
+
+    /* Set up the Startup PDE */
+    PageDir->Pde[StartupPageTableIndex].Valid = 1;
+    PageDir->Pde[StartupPageTableIndex].Write = 1;
+    PageDir->Pde[StartupPageTableIndex].PageFrameNumber = PaPtrToPfn(startup_pagedirectory);
+
+    /* Set up the Hyperspace PDE */
+    PageDir->Pde[HyperspacePageTableIndex].Valid = 1;
+    PageDir->Pde[HyperspacePageTableIndex].Write = 1;
+    PageDir->Pde[HyperspacePageTableIndex].PageFrameNumber = PaPtrToPfn(hyperspace_pagetable);
+
+    /* Set up the HAL PDE */
+    PageDir->Pde[HalPageTableIndex].Valid = 1;
+    PageDir->Pde[HalPageTableIndex].Write = 1;
+    PageDir->Pde[HalPageTableIndex].PageFrameNumber = PaPtrToPfn(apic_pagetable);
+
+    /* Set up Low Memory PTEs */
+    PageDir = (PPAGE_DIRECTORY_X86)&lowmem_pagetable;
+    for (i=0; i<1024; i++)
+    {
+        PageDir->Pde[i].Valid = 1;
+        PageDir->Pde[i].Write = 1;
+        PageDir->Pde[i].Owner = 1;
+        PageDir->Pde[i].PageFrameNumber = PaToPfn(i * PAGE_SIZE);
+    }
+
+    /* Set up Kernel PTEs */
+    PageDir = (PPAGE_DIRECTORY_X86)&kernel_pagetable;
+    for (i=0; i<1536; i++)
+    {
+        PageDir->Pde[i].Valid = 1;
+        PageDir->Pde[i].Write = 1;
+        PageDir->Pde[i].PageFrameNumber = PaToPfn(KERNEL_BASE_PHYS + i * PAGE_SIZE);
+    }
+
+    /* Setup APIC Base */
+    PageDir = (PPAGE_DIRECTORY_X86)&apic_pagetable;
+    PageDir->Pde[0].Valid = 1;
+    PageDir->Pde[0].Write = 1;
+    PageDir->Pde[0].CacheDisable = 1;
+    PageDir->Pde[0].WriteThrough = 1;
+    PageDir->Pde[0].PageFrameNumber = PaToPfn(HAL_BASE);
+    PageDir->Pde[0x200].Valid = 1;
+    PageDir->Pde[0x200].Write = 1;
+    PageDir->Pde[0x200].CacheDisable = 1;
+    PageDir->Pde[0x200].WriteThrough = 1;
+    PageDir->Pde[0x200].PageFrameNumber = PaToPfn(HAL_BASE + KERNEL_BASE_PHYS);
+
+    /* Setup KUSER_SHARED_DATA Base */
+    PageDir->Pde[0x1F0].Valid = 1;
+    PageDir->Pde[0x1F0].Write = 1;
+    PageDir->Pde[0x1F0].PageFrameNumber = 2;
+
+    /* Setup KPCR Base*/
+    PageDir->Pde[0x1FF].Valid = 1;
+    PageDir->Pde[0x1FF].Write = 1;
+    PageDir->Pde[0x1FF].PageFrameNumber = 1;
+
+    /* Zero shared data */
+    RtlZeroMemory((PVOID)(2 << MM_PAGE_SHIFT), PAGE_SIZE);
+#endif
+}
+

Propchange: branches/ros-amd64-bringup/reactos/boot/freeldr/freeldr/arch/amd64/loader.c
------------------------------------------------------------------------------
    svn:eol-style = native



More information about the Ros-diffs mailing list