[ros-dev] [ros-diffs] [tkreuzer] 35458: Move some architecture specific code from KiRosPrepareForSystemStartup into KiArchInitSystem, defined for each architecture. Enable KiRosBuildReservedMemoryMap for _M_AMD64
Alex Ionescu
ionucu at videotron.ca
Tue Aug 19 22:16:37 CEST 2008
Please rename the function to KiFreeLdrHackKiArchHackHack or something
like that, and move it away from cpu.c, somewhere like i386/freeldr.c
to make clear that this function has NOTHING TO DO with how NT should
boot and is a hack because FreeLDR is a piece of shit that nobody
seems to want to fix.
On 19-Aug-08, at 12:07 PM, tkreuzer at svn.reactos.org wrote:
> Author: tkreuzer
> Date: Tue Aug 19 14:07:13 2008
> New Revision: 35458
>
> URL: http://svn.reactos.org/svn/reactos?rev=35458&view=rev
> Log:
> Move some architecture specific code from
> KiRosPrepareForSystemStartup into KiArchInitSystem, defined for each
> architecture. Enable KiRosBuildReservedMemoryMap for _M_AMD64
>
> Modified:
> branches/ros-amd64-bringup/reactos/ntoskrnl/ke/freeldr.c
> branches/ros-amd64-bringup/reactos/ntoskrnl/ke/i386/cpu.c
> branches/ros-amd64-bringup/reactos/ntoskrnl/ke/powerpc/cpu.c
>
> Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/freeldr.c
> URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/freeldr.c?rev=35458&r1=35457&r2=35458&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/freeldr.c
> [iso-8859-1] (original)
> +++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/freeldr.c
> [iso-8859-1] Tue Aug 19 14:07:13 2008
> @@ -949,7 +949,7 @@
> /* Build entries for ReactOS memory ranges, which uses ARC
> Descriptors */
> KiRosBuildOsMemoryMap();
>
> -#ifdef _M_IX86
> +#if defined(_M_IX86) || defined(_M_AMD64)
> /* Build entries for the reserved map, which uses ARC
> Descriptors */
> KiRosBuildReservedMemoryMap();
> #endif
> @@ -1266,42 +1266,15 @@
> {
> PLOADER_PARAMETER_BLOCK NtLoaderBlock;
> ULONG size, i = 0, *ent;
> -#if defined(_M_IX86)
> - PKTSS Tss;
> - PKGDTENTRY TssEntry;
> -
> - /* Load the GDT and IDT */
> -
> Ke386SetGlobalDescriptorTable(*(PKDESCRIPTOR)&KiGdtDescriptor.Limit);
> -
> Ke386SetInterruptDescriptorTable
> (*(PKDESCRIPTOR)&KiIdtDescriptor.Limit);
> -
> - /* Initialize the boot TSS */
> - Tss = &KiBootTss;
> - TssEntry = &KiBootGdt[KGDT_TSS / sizeof(KGDTENTRY)];
> - TssEntry->HighWord.Bits.Type = I386_TSS;
> - TssEntry->HighWord.Bits.Pres = 1;
> - TssEntry->HighWord.Bits.Dpl = 0;
> - TssEntry->BaseLow = (USHORT)((ULONG_PTR)Tss & 0xFFFF);
> - TssEntry->HighWord.Bytes.BaseMid = (UCHAR)((ULONG_PTR)Tss >> 16);
> - TssEntry->HighWord.Bytes.BaseHi = (UCHAR)((ULONG_PTR)Tss >> 24);
> -#endif
> -
> -#if defined(_M_PPC)
> - // Zero bats. We might have residual bats set that will
> interfere with
> - // our mapping of ofwldr.
> - for (i = 0; i < 4; i++)
> - {
> - SetBat(i, 0, 0, 0); SetBat(i, 1, 0, 0);
> - }
> - KiSetupSyscallHandler();
> - DbgPrint("Kernel Power (%08x)\n", LoaderBlock);
> - DbgPrint("ArchExtra (%08x)!\n", LoaderBlock->ArchExtra);
> -#endif
>
> /* Save pointer to ROS Block */
> KeRosLoaderBlock = LoaderBlock;
>
> /* Get debugging function */
> FrLdrDbgPrint = LoaderBlock->FrLdrDbgPrint;
> +
> + /* Per architecture initialisazion code */
> + KiArchInitSystem();
>
> /* Save memory manager data */
> KeMemoryMapRangeCount = 0;
>
> Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/i386/cpu.c
> URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/i386/cpu.c?rev=35458&r1=35457&r2=35458&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/i386/cpu.c
> [iso-8859-1] (original)
> +++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/i386/cpu.c
> [iso-8859-1] Tue Aug 19 14:07:13 2008
> @@ -1036,3 +1036,24 @@
> /* Capture the control state */
> KiSaveProcessorControlState(State);
> }
> +
> +VOID
> +KiArchInitSystem()
> +{
> + PKTSS Tss;
> + PKGDTENTRY TssEntry;
> +
> + /* Load the GDT and IDT */
> +
> Ke386SetGlobalDescriptorTable(*(PKDESCRIPTOR)&KiGdtDescriptor.Limit);
> +
> Ke386SetInterruptDescriptorTable
> (*(PKDESCRIPTOR)&KiIdtDescriptor.Limit);
> +
> + /* Initialize the boot TSS */
> + Tss = &KiBootTss;
> + TssEntry = &KiBootGdt[KGDT_TSS / sizeof(KGDTENTRY)];
> + TssEntry->HighWord.Bits.Type = I386_TSS;
> + TssEntry->HighWord.Bits.Pres = 1;
> + TssEntry->HighWord.Bits.Dpl = 0;
> + TssEntry->BaseLow = (USHORT)((ULONG_PTR)Tss & 0xFFFF);
> + TssEntry->HighWord.Bytes.BaseMid = (UCHAR)((ULONG_PTR)Tss >> 16);
> + TssEntry->HighWord.Bytes.BaseHi = (UCHAR)((ULONG_PTR)Tss >> 24);
> +}
>
> Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/ke/powerpc/cpu.c
> URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/ke/powerpc/cpu.c?rev=35458&r1=35457&r2=35458&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- branches/ros-amd64-bringup/reactos/ntoskrnl/ke/powerpc/cpu.c
> [iso-8859-1] (original)
> +++ branches/ros-amd64-bringup/reactos/ntoskrnl/ke/powerpc/cpu.c
> [iso-8859-1] Tue Aug 19 14:07:13 2008
> @@ -275,3 +275,19 @@
> /* Capture the control state */
> KiSaveProcessorControlState(State);
> }
> +
> +VOID
> +KiArchInitSystem()
> +{
> + ULONG i;
> +
> + // Zero bats. We might have residual bats set that will
> interfere with
> + // our mapping of ofwldr.
> + for (i = 0; i < 4; i++)
> + {
> + SetBat(i, 0, 0, 0); SetBat(i, 1, 0, 0);
> + }
> + KiSetupSyscallHandler();
> + DbgPrint("Kernel Power (%08x)\n", KeRosLoaderBlock);
> + DbgPrint("ArchExtra (%08x)!\n", KeRosLoaderBlock->ArchExtra);
> +}
>
Best regards,
Alex Ionescu
More information about the Ros-dev
mailing list