https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6ef6fabfc5271b9fb89cd9bdc2038588d55b3ea4

commit 6ef6fabfc5271b9fb89cd9bdc2038588d55b3ea4
Author:     Victor Perevertkin <[email protected]>
AuthorDate: Sun Aug 8 01:50:20 2021 +0300
Commit:     Victor Perevertkin <[email protected]>
CommitDate: Sun Aug 15 15:35:51 2021 +0300

    [FREELDR][NTOS][HALPPC][SDK] Remove PowerPC code
    
    Remove PowerPC-related code from the kernel, HAL, SDK and
    Freeloader.
---
 boot/freeldr/freeldr/arch/powerpc/boot.s           |  111 --
 boot/freeldr/freeldr/arch/powerpc/compat.h         |  105 -
 boot/freeldr/freeldr/arch/powerpc/loader.c         |  348 ----
 boot/freeldr/freeldr/arch/powerpc/mach.c           |  555 ------
 boot/freeldr/freeldr/arch/powerpc/mboot.c          |  852 ---------
 boot/freeldr/freeldr/arch/powerpc/mmu.c            |  399 ----
 boot/freeldr/freeldr/arch/powerpc/ofw_method.c     |   26 -
 boot/freeldr/freeldr/arch/powerpc/ofw_util.s       |   48 -
 boot/freeldr/freeldr/arch/powerpc/prep.c           |  148 --
 boot/freeldr/freeldr/arch/powerpc/prep.h           |   28 -
 boot/freeldr/freeldr/arch/powerpc/prep_ide.c       |  106 -
 boot/freeldr/freeldr/arch/powerpc/prep_pci.c       |  127 --
 boot/freeldr/freeldr/arch/powerpc/prep_vga.c       |   28 -
 .../freeldr/include/arch/powerpc/hardware.h        |   37 -
 boot/freeldr/freeldr/include/of.h                  |   16 -
 hal/CMakeLists.txt                                 |    2 -
 hal/halppc/generic/beep.c                          |   42 -
 hal/halppc/generic/bus.c                           |  356 ----
 hal/halppc/generic/cmos.c                          |  291 ---
 hal/halppc/generic/display.c                       |  383 ----
 hal/halppc/generic/dma.c                           | 2020 --------------------
 hal/halppc/generic/drive.c                         |   74 -
 hal/halppc/generic/enum.c                          |   22 -
 hal/halppc/generic/fmutex.c                        |  100 -
 hal/halppc/generic/font.c                          |  277 ---
 hal/halppc/generic/halinit.c                       |  158 --
 hal/halppc/generic/irql.c                          |  452 -----
 hal/halppc/generic/isa.c                           |   74 -
 hal/halppc/generic/misc.c                          |  105 -
 hal/halppc/generic/pci.c                           |  778 --------
 hal/halppc/generic/portio.c                        |  282 ---
 hal/halppc/generic/processor.c                     |   75 -
 hal/halppc/generic/profil.c                        |   61 -
 hal/halppc/generic/reboot.c                        |   40 -
 hal/halppc/generic/spinlock.c                      |  210 --
 hal/halppc/generic/sysinfo.c                       |   40 -
 hal/halppc/generic/timer.c                         |  138 --
 hal/halppc/include/apic.h                          |  208 --
 hal/halppc/include/bus.h                           |  291 ---
 hal/halppc/include/hal.h                           |   49 -
 hal/halppc/include/haldma.h                        |  380 ----
 hal/halppc/include/halirq.h                        |   29 -
 hal/halppc/include/halp.h                          |  126 --
 hal/halppc/include/ioapic.h                        |   97 -
 hal/halppc/include/mps.h                           |  200 --
 hal/halppc/up/halinit_up.c                         |   31 -
 hal/halppc/up/halup.rc                             |    5 -
 ntoskrnl/config/powerpc/cmhardwr.c                 |  851 ---------
 ntoskrnl/ex/powerpc/ioport.s                       |  171 --
 ntoskrnl/include/internal/powerpc/intrin_i.h       |    5 -
 ntoskrnl/include/internal/powerpc/ke.h             |  132 --
 ntoskrnl/ke/powerpc/cpu.c                          |  271 ---
 ntoskrnl/ke/powerpc/ctxhelp.S                      |  252 ---
 ntoskrnl/ke/powerpc/ctxswitch.c                    |  124 --
 ntoskrnl/ke/powerpc/exp.c                          |  103 -
 ntoskrnl/ke/powerpc/kiinit.c                       |  356 ----
 ntoskrnl/ke/powerpc/main_asm.S                     |   76 -
 ntoskrnl/ke/powerpc/ppc_irq.c                      |  805 --------
 ntoskrnl/ke/powerpc/stubs.c                        |  222 ---
 ntoskrnl/ke/powerpc/systimer.c                     |   20 -
 ntoskrnl/ke/powerpc/thrdini.c                      |  222 ---
 ntoskrnl/mm/powerpc/page.c                         |  470 -----
 ntoskrnl/mm/powerpc/pfault.c                       |  111 --
 ntoskrnl/ntos.cmake                                |   16 -
 sdk/include/reactos/libs/ppcmmu/mmu.h              |  277 ---
 sdk/include/reactos/libs/ppcmmu/mmuutil.h          |   23 -
 sdk/lib/CMakeLists.txt                             |    1 -
 sdk/lib/crt/except/except.cmake                    |    2 -
 sdk/lib/crt/except/powerpc/chkstk_asm.s            |   22 -
 sdk/lib/crt/except/powerpc/seh.s                   |   75 -
 sdk/lib/ppcmmu/CMakeLists.txt                      |    8 -
 sdk/lib/ppcmmu/devint.s                            |  222 ---
 sdk/lib/ppcmmu/dummy.c                             |    0
 sdk/lib/ppcmmu/gdblib.c                            |  475 -----
 sdk/lib/ppcmmu/ldscript                            |    8 -
 sdk/lib/ppcmmu/mmuobject.c                         |  766 --------
 sdk/lib/ppcmmu/mmuobject.h                         |   14 -
 sdk/lib/ppcmmu/mmutest.c                           |   23 -
 sdk/lib/ppcmmu/mmuutil.c                           |  411 ----
 sdk/lib/pseh/CMakeLists.txt                        |    2 -
 sdk/lib/pseh/powerpc/framebased.S                  |   69 -
 sdk/lib/rtl/CMakeLists.txt                         |   10 -
 sdk/lib/rtl/powerpc/debug.c                        |   41 -
 sdk/lib/rtl/powerpc/except.c                       |   54 -
 sdk/lib/rtl/powerpc/interlocked.c                  |  128 --
 sdk/lib/rtl/powerpc/rtlmem.s                       |  101 -
 sdk/lib/rtl/powerpc/rtlswap.s                      |   41 -
 sdk/lib/rtl/powerpc/thread.c                       |   38 -
 88 files changed, 17348 deletions(-)

diff --git a/boot/freeldr/freeldr/arch/powerpc/boot.s 
b/boot/freeldr/freeldr/arch/powerpc/boot.s
deleted file mode 100644
index cc67a408b69..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/boot.s
+++ /dev/null
@@ -1,111 +0,0 @@
-    .section ".text"
-    .extern PpcInit
-    .globl _start
-    .globl call_ofw
-_start:
-    sync
-    isync
-
-    lis     %r1,stackend@ha
-    addi    %r1,%r1,stackend@l
-
-    /* Store ofw call addr */
-    mr  %r21,%r5
-    lis %r10,ofw_call_addr@ha
-    stw %r5,ofw_call_addr@l(%r10)
-
-    bl  zero_registers
-
-    /* Zero CTR */
-    mtcr    %r31
-
-    lis %r3,PpcInit@ha
-    addi    %r3,%r3,PpcInit@l
-    mtlr    %r3
-
-    /* Check for ofw */
-    lis %r3,ofw_call_addr@ha
-    lwz %r3,ofw_call_addr@l(%r3)
-    cmpw    %r3,%r31 /* Zero? */
-    mr  %r3,%r31
-    beq initfp
-
-    lis %r3,call_ofw@ha
-    addi    %r3,%r3,call_ofw@l
-    b       bootme
-
-initfp:
-        /* Enabling FP at this point won't hurt, and the varargs scheme we're
-         * using now requires it. */
-        mfmsr   %r0
-        ori     %r0,%r0,8192
-        mtmsr   %r0
-
-bootme:
-    blr
-
-zero_registers:
-    xor %r2,%r2,%r2
-    mr  %r0,%r2
-    mr  %r3,%r2
-
-    mr  %r4,%r2
-    mr  %r5,%r2
-    mr  %r6,%r2
-    mr  %r7,%r2
-
-    mr  %r8,%r2
-    mr  %r9,%r2
-    mr  %r10,%r2
-    mr  %r11,%r2
-
-    mr  %r12,%r2
-    mr  %r13,%r2
-    mr  %r14,%r2
-    mr  %r15,%r2
-
-    mr  %r12,%r2
-    mr  %r13,%r2
-    mr  %r14,%r2
-    mr  %r15,%r2
-
-    mr  %r16,%r2
-    mr  %r17,%r2
-    mr  %r18,%r2
-    mr  %r19,%r2
-
-    mr  %r20,%r2
-    mr  %r21,%r2
-    mr  %r22,%r2
-    mr  %r23,%r2
-
-    mr  %r24,%r2
-    mr  %r25,%r2
-    mr  %r26,%r2
-    mr  %r27,%r2
-
-    mr  %r28,%r2
-    mr  %r29,%r2
-    mr  %r30,%r2
-    mr  %r31,%r2
-
-    blr
-
-ofw_memory_size:
-    .long   0
-    .long   0
-    .long   0
-    .long   0
-
-    .align  4
-stack:
-    .space  0x4000
-stackend:
-    .long   0,0,0,0
-
-    .globl _bss
-    .section ".bss2"
-_bss:
-    .long   0
-
-    .align  4
diff --git a/boot/freeldr/freeldr/arch/powerpc/compat.h 
b/boot/freeldr/freeldr/arch/powerpc/compat.h
deleted file mode 100644
index e62d16debc5..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/compat.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#pragma once
-
-#define __init
-#define __initdata
-
-#define SPRN_MSSCR0     0x3f6   /* Memory Subsystem Control Register 0 */
-#define SPRN_MSSSR0     0x3f7   /* Memory Subsystem Status Register 1 */
-#define SPRN_LDSTCR     0x3f8   /* Load/Store control register */
-#define SPRN_LDSTDB     0x3f4   /* */
-#define SPRN_LR         0x008   /* Link Register */
-#ifndef SPRN_PIR
-#define SPRN_PIR        0x3FF   /* Processor Identification Register */
-#endif
-#define SPRN_PTEHI      0x3D5   /* 981 7450 PTE HI word (S/W TLB load) */
-#define SPRN_PTELO      0x3D6   /* 982 7450 PTE LO word (S/W TLB load) */
-#define SPRN_PURR       0x135   /* Processor Utilization of Resources Reg */
-#define SPRN_PVR        0x11F   /* Processor Version Register */
-#define SPRN_RPA        0x3D6   /* Required Physical Address Register */
-#define SPRN_SDA        0x3BF   /* Sampled Data Address Register */
-#define SPRN_SDR1       0x019   /* MMU Hash Base Register */
-#define SPRN_ASR        0x118   /* Address Space Register */
-#define SPRN_SIA        0x3BB   /* Sampled Instruction Address Register */
-#define SPRN_SPRG0      0x110   /* Special Purpose Register General 0 */
-#define SPRN_SPRG1      0x111   /* Special Purpose Register General 1 */
-#define SPRN_SPRG2      0x112   /* Special Purpose Register General 2 */
-#define SPRN_SPRG3      0x113   /* Special Purpose Register General 3 */
-#define SPRN_SPRG4      0x114   /* Special Purpose Register General 4 */
-#define SPRN_SPRG5      0x115   /* Special Purpose Register General 5 */
-#define SPRN_SPRG6      0x116   /* Special Purpose Register General 6 */
-#define SPRN_SPRG7      0x117   /* Special Purpose Register General 7 */
-#define SPRN_SRR0       0x01A   /* Save/Restore Register 0 */
-#define SPRN_SRR1       0x01B   /* Save/Restore Register 1 */
-#ifndef SPRN_SVR
-#define SPRN_SVR        0x11E   /* System Version Register */
-#endif
-#define SPRN_THRM1      0x3FC           /* Thermal Management Register 1 */
-/* these bits were defined in inverted endian sense originally, ugh, confusing 
*/
-
-/* Values for PP (assumes Ks=0, Kp=1) */
-#define PP_RWXX 0       /* Supervisor read/write, User none */
-#define PP_RWRX 1       /* Supervisor read/write, User read */
-#define PP_RWRW 2       /* Supervisor read/write, User read/write */
-#define PP_RXRX 3       /* Supervisor read,       User read */
-
-/* Block size masks */
-#define BL_128K 0x000
-#define BL_256K 0x001
-#define BL_512K 0x003
-#define BL_1M   0x007
-#define BL_2M   0x00F
-#define BL_4M   0x01F
-#define BL_8M   0x03F
-#define BL_16M  0x07F
-#define BL_32M  0x0FF
-#define BL_64M  0x1FF
-#define BL_128M 0x3FF
-#define BL_256M 0x7FF
-
-/* BAT Access Protection */
-#define BPP_XX  0x00            /* No access */
-#define BPP_RX  0x01            /* Read only */
-#define BPP_RW  0x02            /* Read/write */
-
-/* Definitions for 40x embedded chips. */
-#define _PAGE_GUARDED   0x001   /* G: page is guarded from prefetch */
-#define _PAGE_FILE      0x001   /* when !present: nonlinear file mapping */
-#define _PAGE_PRESENT   0x002   /* software: PTE contains a translation */
-#define _PAGE_NO_CACHE  0x004   /* I: caching is inhibited */
-#define _PAGE_WRITETHRU 0x008   /* W: caching is write-through */
-#define _PAGE_USER      0x010   /* matches one of the zone permission bits */
-#define _PAGE_RW        0x040   /* software: Writes permitted */
-#define _PAGE_DIRTY     0x080   /* software: dirty page */
-#define _PAGE_HWWRITE   0x100   /* hardware: Dirty & RW, set in exception */
-#define _PAGE_HWEXEC    0x200   /* hardware: EX permission */
-#define _PAGE_ACCESSED  0x400   /* software: R: page referenced */
-
-#define _PMD_PRESENT    0x400   /* PMD points to page of PTEs */
-#define _PMD_BAD        0x802
-#define _PMD_SIZE       0x0e0   /* size field, != 0 for large-page PMD entry */
-#define _PMD_SIZE_4M    0x0c0
-#define _PMD_SIZE_16M   0x0e0
-#define PMD_PAGE_SIZE(pmdval)   (1024 << (((pmdval) & _PMD_SIZE) >> 4))
-
-#define PVR_VER(pvr)(((pvr) >>  16) & 0xFFFF) /* Version field */
-
-#define KERNELBASE 0x80000000
-
-typedef unsigned char __u8;
-typedef unsigned short __u16;
-typedef unsigned int __u32;
-
-typedef struct _pci_reg_property {
-    struct {
-    int a_hi, a_mid, a_lo;
-    } addr;
-    int size_hi, size_lo;
-} pci_reg_property;
-
-void btext_drawstring(const char *c);
-void btext_drawhex(unsigned long v);
-
-void *ioremap(__u32 phys, __u32 size);
-void iounmap(void *logical);
-
-__u32 GetPVR(void);
diff --git a/boot/freeldr/freeldr/arch/powerpc/loader.c 
b/boot/freeldr/freeldr/arch/powerpc/loader.c
deleted file mode 100644
index c9770641658..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/loader.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- *  FreeLoader
- *  Copyright (C) 1998-2003  Brian Palmer  <[email protected]>
- *  Copyright (C) 2005       Alex Ionescu  <[email protected]>
- *
- *  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.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-#define _NTSYSTEM_
-#include <freeldr.h>
-
-#include <debug.h>
-
-#define DbgPrint printf
-
-extern PVOID KernelBase;
-extern PVOID KernelMemory;
-
-PVOID
-NTAPI
-LdrPEGetExportByName(PVOID BaseAddress,
-                     PUCHAR SymbolName,
-                     USHORT Hint);
-
-/* FUNCTIONS *****************************************************************/
-
-PLOADER_MODULE
-NTAPI
-LdrGetModuleObject(PCHAR ModuleName)
-{
-    ULONG i;
-
-    for (i = 0; i < LoaderBlock.ModsCount; i++)
-    {
-        if (strstr(_strupr((PCHAR)reactos_modules[i].String), 
_strupr(ModuleName)))
-        {
-            return &reactos_modules[i];
-        }
-    }
-
-    return NULL;
-}
-
-PVOID
-NTAPI
-LdrPEFixupForward(IN PCHAR ForwardName)
-{
-    CHAR NameBuffer[128];
-    PCHAR p;
-    PLOADER_MODULE ModuleObject;
-
-    strcpy(NameBuffer, ForwardName);
-    p = strchr(NameBuffer, '.');
-    if (p == NULL) return NULL;
-    *p = 0;
-
-    ModuleObject = LdrGetModuleObject(NameBuffer);
-    if (!ModuleObject)
-    {
-        DbgPrint("LdrPEFixupForward: failed to find module %s\n", NameBuffer);
-        return NULL;
-    }
-
-    return LdrPEGetExportByName((PVOID)ModuleObject->ModStart, (PUCHAR)(p + 
1), 0xffff);
-}
-
-PVOID
-NTAPI
-LdrPEGetExportByName(PVOID BaseAddress,
-                     PUCHAR SymbolName,
-                     USHORT Hint)
-{
-    PIMAGE_EXPORT_DIRECTORY ExportDir;
-    PULONG * ExFunctions;
-    PULONG * ExNames;
-    USHORT * ExOrdinals;
-    PVOID ExName;
-    ULONG Ordinal;
-    PVOID Function;
-    LONG minn, maxn, mid, res;
-    ULONG ExportDirSize;
-
-    /* HAL and NTOS use a virtual address, switch it to physical mode */
-    if ((ULONG_PTR)BaseAddress & 0x80000000)
-    {
-        BaseAddress = (PVOID)((ULONG_PTR)BaseAddress - KSEG0_BASE + 
(ULONG)KernelMemory);
-    }
-
-    ExportDir = (PIMAGE_EXPORT_DIRECTORY)
-        RtlImageDirectoryEntryToData(BaseAddress,
-                                     TRUE,
-                                     IMAGE_DIRECTORY_ENTRY_EXPORT,
-                                     &ExportDirSize);
-    if (!ExportDir)
-    {
-        DbgPrint("LdrPEGetExportByName(): no export directory!\n");
-        return NULL;
-    }
-
-    /* The symbol names may be missing entirely */
-    if (!ExportDir->AddressOfNames)
-    {
-        DbgPrint("LdrPEGetExportByName(): symbol names missing entirely\n");
-        return NULL;
-    }
-
-    /*
-    * Get header pointers
-    */
-    ExNames = (PULONG *)RVA(BaseAddress, ExportDir->AddressOfNames);
-    ExOrdinals = (USHORT *)RVA(BaseAddress, ExportDir->AddressOfNameOrdinals);
-    ExFunctions = (PULONG *)RVA(BaseAddress, ExportDir->AddressOfFunctions);
-
-    /*
-    * Check the hint first
-    */
-    if (Hint < ExportDir->NumberOfNames)
-    {
-        ExName = RVA(BaseAddress, ExNames[Hint]);
-        if (strcmp(ExName, (PCHAR)SymbolName) == 0)
-        {
-            Ordinal = ExOrdinals[Hint];
-            Function = RVA(BaseAddress, ExFunctions[Ordinal]);
-            if ((ULONG_PTR)Function >= (ULONG_PTR)ExportDir &&
-                (ULONG_PTR)Function < (ULONG_PTR)ExportDir + ExportDirSize)
-            {
-                Function = LdrPEFixupForward((PCHAR)Function);
-                if (Function == NULL)
-                {
-                    DbgPrint("LdrPEGetExportByName(): failed to find %s\n", 
Function);
-                }
-                return Function;
-            }
-
-            if (Function != NULL) return Function;
-        }
-    }
-
-    /*
-    * Binary search
-    */
-    minn = 0;
-    maxn = ExportDir->NumberOfNames - 1;
-    while (minn <= maxn)
-    {
-        mid = (minn + maxn) / 2;
-
-        ExName = RVA(BaseAddress, ExNames[mid]);
-        res = strcmp(ExName, (PCHAR)SymbolName);
-        if (res == 0)
-        {
-            Ordinal = ExOrdinals[mid];
-            Function = RVA(BaseAddress, ExFunctions[Ordinal]);
-            if ((ULONG_PTR)Function >= (ULONG_PTR)ExportDir &&
-                (ULONG_PTR)Function < (ULONG_PTR)ExportDir + ExportDirSize)
-            {
-                Function = LdrPEFixupForward((PCHAR)Function);
-                if (Function == NULL)
-                {
-                    DbgPrint("1: failed to find %s\n", Function);
-                }
-                return Function;
-            }
-            if (Function != NULL)
-            {
-                return Function;
-            }
-        }
-        else if (res > 0)
-        {
-            maxn = mid - 1;
-        }
-        else
-        {
-            minn = mid + 1;
-        }
-    }
-
-    /* Fall back on unsorted */
-    minn = 0;
-    maxn = ExportDir->NumberOfNames - 1;
-    while (minn <= maxn)
-    {
-        ExName = RVA(BaseAddress, ExNames[minn]);
-        res = strcmp(ExName, (PCHAR)SymbolName);
-        if (res == 0)
-        {
-            Ordinal = ExOrdinals[minn];
-            Function = RVA(BaseAddress, ExFunctions[Ordinal]);
-            if ((ULONG_PTR)Function >= (ULONG_PTR)ExportDir &&
-                (ULONG_PTR)Function < (ULONG_PTR)ExportDir + ExportDirSize)
-            {
-                Function = LdrPEFixupForward((PCHAR)Function);
-                if (Function == NULL)
-                {
-                    DbgPrint("LdrPEGetExportByName(): failed to find 
%s\n",SymbolName);
-                }
-                return Function;
-            }
-        if (Function != NULL)
-        {
-        return Function;
-        }
-        DbgPrint("Failed to get function %s\n", SymbolName);
-    }
-    minn++;
-    }
-
-    DbgPrint("2: failed to find %s\n",SymbolName);
-    return (PVOID)NULL;
-}
-
-NTSTATUS
-NTAPI
-LdrPEProcessImportDirectoryEntry(PVOID DriverBase,
-                                 PLOADER_MODULE LoaderModule,
-                                 PIMAGE_IMPORT_DESCRIPTOR 
ImportModuleDirectory)
-{
-    PVOID* ImportAddressList;
-    PULONG FunctionNameList;
-
-    if (ImportModuleDirectory == NULL || ImportModuleDirectory->Name == 0)
-    {
-        return STATUS_UNSUCCESSFUL;
-    }
-
-    /* Get the import address list. */
-    ImportAddressList = (PVOID*)RVA(DriverBase, 
ImportModuleDirectory->FirstThunk);
-
-    /* Get the list of functions to import. */
-    if (ImportModuleDirectory->OriginalFirstThunk != 0)
-    {
-        FunctionNameList = (PULONG)RVA(DriverBase, 
ImportModuleDirectory->OriginalFirstThunk);
-    }
-    else
-    {
-        FunctionNameList = (PULONG)RVA(DriverBase, 
ImportModuleDirectory->FirstThunk);
-    }
-
-    /* Walk through function list and fixup addresses. */
-    while (*FunctionNameList != 0L)
-    {
-        if ((*FunctionNameList) & 0x80000000)
-        {
-            DbgPrint("Failed to import ordinal from %s\n", 
LoaderModule->String);
-            return STATUS_UNSUCCESSFUL;
-        }
-        else
-        {
-            IMAGE_IMPORT_BY_NAME *pe_name;
-            pe_name = RVA(DriverBase, *FunctionNameList);
-            *ImportAddressList = 
LdrPEGetExportByName((PVOID)LoaderModule->ModStart, pe_name->Name, 
pe_name->Hint);
-
-            /* Fixup the address to be virtual */
-            *ImportAddressList = (PVOID)(ULONG_PTR)*ImportAddressList + 
(ULONG_PTR)KernelBase - (ULONG_PTR)KernelMemory;
-
-
-            //DbgPrint("Looked for: %s and found: %x\n", pe_name->Name, 
*ImportAddressList);
-            if ((*ImportAddressList) == NULL)
-            {
-                DbgPrint("Failed to import %s from %s\n", pe_name->Name, 
LoaderModule->String);
-                return STATUS_UNSUCCESSFUL;
-            }
-        }
-        ImportAddressList++;
-        FunctionNameList++;
-    }
-    return STATUS_SUCCESS;
-}
-
-extern BOOLEAN FrLdrLoadDriver(PCHAR szFileName, INT nPos);
-
-NTSTATUS
-NTAPI
-LdrPEGetOrLoadModule(IN PCHAR ModuleName,
-                     IN PCHAR ImportedName,
-                     IN PLOADER_MODULE* ImportedModule)
-{
-    NTSTATUS Status = STATUS_SUCCESS;
-
-    *ImportedModule = LdrGetModuleObject(ImportedName);
-    if (*ImportedModule == NULL)
-    {
-        /*
-         * For now, we only support import-loading the HAL.
-         * Later, FrLdrLoadDriver should be made to share the same
-         * code, and we'll just call it instead.
-         */
-    FrLdrLoadDriver(ImportedName, 0);
-
-    /* Return the new module */
-    *ImportedModule = LdrGetModuleObject(ImportedName);
-    if (*ImportedModule == NULL)
-    {
-        DbgPrint("Error loading import: %s\n", ImportedName);
-        return STATUS_UNSUCCESSFUL;
-    }
-    }
-
-    return Status;
-}
-
-NTSTATUS
-NTAPI
-LdrPEFixupImports(IN PVOID DllBase,
-                  IN PCHAR DllName)
-{
-    PIMAGE_IMPORT_DESCRIPTOR ImportModuleDirectory;
-    PCHAR ImportedName;
-    NTSTATUS Status;
-    PLOADER_MODULE ImportedModule;
-    ULONG Size;
-
-    /*  Process each import module  */
-    ImportModuleDirectory = (PIMAGE_IMPORT_DESCRIPTOR)
-        RtlImageDirectoryEntryToData(DllBase,
-                                     TRUE,
-                                     IMAGE_DIRECTORY_ENTRY_IMPORT,
-                                     &Size);
-    while (ImportModuleDirectory && ImportModuleDirectory->Name)
-    {
-        /*  Check to make sure that import lib is kernel  */
-        ImportedName = (PCHAR) DllBase + ImportModuleDirectory->Name;
-        //DbgPrint("Processing imports for file: %s into file: %s\n", DllName, 
ImportedName);
-
-        Status = LdrPEGetOrLoadModule(DllName, ImportedName, &ImportedModule);
-        if (!NT_SUCCESS(Status)) return Status;
-
-        Status = LdrPEProcessImportDirectoryEntry(DllBase, ImportedModule, 
ImportModuleDirectory);
-        if (!NT_SUCCESS(Status)) return Status;
-
-        //DbgPrint("Imports for file: %s into file: %s complete\n", DllName, 
ImportedName);
-        ImportModuleDirectory++;
-    }
-
-    return STATUS_SUCCESS;
-}
diff --git a/boot/freeldr/freeldr/arch/powerpc/mach.c 
b/boot/freeldr/freeldr/arch/powerpc/mach.c
deleted file mode 100644
index e5a93d9403d..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/mach.c
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- *  FreeLoader PowerPC Part
- *  Copyright (C) 2005  Art Yerkes
- *
- *  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.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-#include "freeldr.h"
-#include "machine.h"
-#include "ppcmmu/mmu.h"
-#include "of.h"
-#include "prep.h"
-#include "compat.h"
-
-extern void BootMain( PSTR CmdLine );
-extern ULONG CacheSizeLimit;
-of_proxy ofproxy;
-void *PageDirectoryStart, *PageDirectoryEnd;
-static int chosen_package, stdin_handle, stdout_handle, part_handle = -1;
-int mmu_handle = 0;
-int claimed[4];
-BOOLEAN AcpiPresent = FALSE;
-CHAR FrLdrBootPath[MAX_PATH] = "", BootPart[MAX_PATH] = "", CmdLine[MAX_PATH] 
= "bootprep";
-jmp_buf jmp;
-volatile char *video_mem = 0;
-
-void PpcOfwPutChar( int ch ) {
-    char buf[3];
-    if( ch == 0x0a ) { buf[0] = 0x0d; buf[1] = 0x0a; }
-    else { buf[0] = ch; buf[1] = 0; }
-    buf[2] = 0;
-    ofw_write(stdout_handle, buf, strlen(buf));
-}
-
-int PpcFindDevice( int depth, int parent, char *devname, int *nth ) {
-    static char buf[256];
-    int next = 0;
-    int gotname = 0;
-    int match = 0;
-    int i;
-
-    next = ofw_child( parent );
-
-    //printf( "next = %x\n", next );
-
-    gotname = ofw_getprop(parent, "name", buf, 256);
-
-    //printf( "gotname = %d\n", gotname );
-
-    match = !strncmp(buf, devname, strlen(devname));
-
-    if( !nth && match ) return parent;
-
-    for( i = 0; i < depth; i++ ) PpcOfwPutChar( ' ' );
-
-    if( depth == 1 ) {
-    if( gotname > 0 ) {
-        printf( "%c Name: %s\n", match ? '*' : ' ', buf );
-    } else {
-        printf( "- No name attribute for %x\n", parent );
-    }
-    }
-
-    while( !match && next ) {
-        i = PpcFindDevice( depth+1, next, devname, nth );
-    if( i ) return i;
-        next = ofw_peer( next );
-    }
-
-    return 0;
-}
-
-BOOLEAN PpcConsKbHit() {
-    return FALSE;
-}
-
-int PpcConsGetCh() {
-    char buf;
-    ofw_read( stdin_handle, &buf, 1 );
-    return buf;
-}
-
-void PpcVideoClearScreen( UCHAR Attr ) {
-}
-
-VOID PpcVideoGetDisplaySize( PULONG Width, PULONG Height, PULONG Depth ) {
-    *Width = 80;
-    *Height = 25;
-    *Depth = 16;
-}
-
-ULONG PpcVideoGetBufferSize() {
-    ULONG Width, Height, Depth;
-    MachVideoGetDisplaySize( &Width, &Height, &Depth );
-    return Width * Height * Depth / 8;
-}
-
-VIDEODISPLAYMODE PpcVideoSetDisplayMode( char *DisplayMode, BOOLEAN Init ) {
-    //printf( "DisplayMode: %s %s\n", DisplayMode, Init ? "true" : "false" );
-    if( Init && !video_mem ) {
-    video_mem = MmAllocateMemory( PpcVideoGetBufferSize() );
-    }
-    return VideoTextMode;
-}
-
-VOID PpcVideoSetTextCursorPosition( ULONG X, ULONG Y ) {
-    printf("SetTextCursorPosition(%d,%d)\n", X,Y);
-}
-
-VOID PpcVideoHideShowTextCursor( BOOLEAN Show ) {
-    printf("HideShowTextCursor(%s)\n", Show ? "true" : "false");
-}
-
-VOID PpcVideoPutChar( int Ch, UCHAR Attr, unsigned X, unsigned Y ) {
-    printf( "\033[%d;%dH%c", Y, X, Ch );
-}
-
-VOID PpcVideoCopyOffScreenBufferToVRAM( PVOID Buffer ) {
-    int i,j;
-    ULONG w,h,d;
-    PCHAR ChBuf = Buffer;
-    int offset = 0;
-
-    MachVideoGetDisplaySize( &w, &h, &d );
-
-    for( i = 0; i < h; i++ ) {
-    for( j = 0; j < w; j++ ) {
-        offset = (j * 2) + (i * w * 2);
-        if( ChBuf[offset] != video_mem[offset] ) {
-        video_mem[offset] = ChBuf[offset];
-        MachVideoPutChar(ChBuf[offset],0,j+1,i+1);
-        }
-    }
-    }
-}
-
-BOOLEAN PpcVideoIsPaletteFixed() {
-    return FALSE;
-}
-
-VOID PpcVideoSetPaletteColor( UCHAR Color,
-                              UCHAR Red, UCHAR Green, UCHAR Blue ) {
-    printf( "SetPaletteColor(%x,%x,%x,%x)\n", Color, Red, Green, Blue );
-}
-
-VOID PpcVideoGetPaletteColor( UCHAR Color,
-                              UCHAR *Red, UCHAR *Green, UCHAR *Blue ) {
-    printf( "GetPaletteColor(%x)\n", Color);
-}
-
-VOID PpcVideoSync() {
-    printf( "Sync\n" );
-}
-
-int mmu_initialized = 0;
-int mem_range_end;
-VOID PpcInitializeMmu()
-{
-    if(!mmu_initialized)
-    {
-    MmuInit();
-    MmuDbgInit(0, 0x800003f8);
-        MmuSetMemorySize(mem_range_end);
-        //MmuDbgEnter(0x20);
-    mmu_initialized = 1;
-    }
-}
-
-ULONG PpcPrepGetMemoryMap( PBIOS_MEMORY_MAP BiosMemoryMap,
-                           ULONG MaxMemoryMapSize );
-
-/*
- * Get memory the proper openfirmware way
- */
-ULONG PpcGetMemoryMap( PBIOS_MEMORY_MAP BiosMemoryMap,
-                       ULONG MaxMemoryMapSize ) {
-    int i, memhandle, total = 0, slots = 0, last = 0x40000, allocstart = 
0x1000000;
-    int regdata[0x40];
-
-    printf("PpcGetMemoryMap(%d)\n", MaxMemoryMapSize);
-
-    memhandle = ofw_finddevice("/memory");
-
-    ofw_getprop(memhandle, "reg", (char *)regdata, sizeof(regdata));
-
-    /* Try to claim some memory in usable blocks.  Try to get some 8mb bits */
-    for( i = 0; i < sizeof(claimed) / sizeof(claimed[0]); ) {
-        if (!claimed[i])
-            claimed[i] = ofw_claim(allocstart, 8 * 1024 * 1024, 0x1000);
-
-        allocstart += 8 * 1024 * 1024;
-
-        if (claimed[i]) {
-            if (last < claimed[i]) {
-                BiosMemoryMap[slots].Type = BiosMemoryAcpiReclaim;
-                BiosMemoryMap[slots].BaseAddress = last;
-                BiosMemoryMap[slots].Length = claimed[i] - last;
-                slots++;
-            }
-
-            BiosMemoryMap[slots].Type = BiosMemoryUsable;
-            BiosMemoryMap[slots].BaseAddress = claimed[i];
-            BiosMemoryMap[slots].Length = 8 * 1024 * 1024;
-
-            total += BiosMemoryMap[slots].Length;
-            last =
-                BiosMemoryMap[slots].BaseAddress +
-                BiosMemoryMap[slots].Length;
-            slots++;
-            i++;
-        }
-    }
-
-    /* Get the rest until the end of the memory object as we see it */
-    if (last < regdata[1]) {
-        BiosMemoryMap[slots].Type = BiosMemoryAcpiReclaim;
-        BiosMemoryMap[slots].BaseAddress = last;
-        BiosMemoryMap[slots].Length = regdata[1] - last;
-        slots++;
-    }
-
-    for (i = 0; i < slots; i++) {
-        printf("MemoryMap[%d] = (%x:%x)\n",
-               i,
-               (int)BiosMemoryMap[i].BaseAddress,
-               (int)BiosMemoryMap[i].Length);
-
-    }
-
-    mem_range_end = regdata[1];
-
-    printf( "Returning memory map (%d entries, %dk free, %dk total ram)\n",
-            slots, total / 1024, regdata[1] / 1024 );
-
-    return slots;
-}
-
-BOOLEAN PpcDiskReadLogicalSectors( ULONG DriveNumber, ULONGLONG SectorNumber,
-                   ULONG SectorCount, PVOID Buffer ) {
-    int rlen = 0;
-
-    if( part_handle == -1 ) {
-    part_handle = ofw_open( BootPart );
-
-    if( part_handle == -1 ) {
-        printf("Could not open any disk devices we know about\n");
-        return FALSE;
-    }
-    }
-
-    if( part_handle == -1 ) {
-    printf("Got partition handle %x\n", part_handle);
-    return FALSE;
-    }
-
-    if( ofw_seek( part_handle,
-           (ULONG)(SectorNumber >> 25),
-           (ULONG)((SectorNumber * 512) & 0xffffffff) ) ) {
-    printf("Seek to %x failed\n", (ULONG)(SectorNumber * 512));
-    return FALSE;
-    }
-
-    rlen = ofw_read( part_handle, Buffer, (ULONG)(SectorCount * 512) );
-    return rlen > 0;
-}
-
-BOOLEAN PpcDiskGetDriveGeometry( ULONG DriveNumber, PGEOMETRY DriveGeometry ) {
-    printf("GetGeometry(%d)\n", DriveNumber);
-    DriveGeometry->BytesPerSector = 512;
-    DriveGeometry->Heads = 16;
-    DriveGeometry->Sectors = 63;
-    return TRUE;
-}
-
-ULONG PpcDiskGetCacheableBlockCount( ULONG DriveNumber ) {
-    printf("GetCacheableBlockCount\n");
-    return 1;
-}
-
-TIMEINFO*
-PpcGetTime(VOID)
-{
-    static TIMEINFO TimeInfo;
-    //printf("PpcGetTime\n");
-    return &TimeInfo;
-}
-
-VOID NarrowToWide(WCHAR *wide_name, char *name)
-{
-    char *copy_name;
-    WCHAR *wide_name_ptr;
-    for (wide_name_ptr = wide_name, copy_name = name;
-         (*wide_name_ptr = *copy_name);
-         wide_name_ptr++, copy_name++);
-}
-
-/* Recursively copy the device tree into our representation
- * It'll be passed to HAL.
- *
- * When NT was first done on PPC, it was on PReP hardware, which is very
- * like PC hardware (really, just a PPC on a PC motherboard).  HAL can guess
- * the addresses of needed resources in this scheme as it can on x86.
- *
- * Most PPC hardware doesn't assign fixed addresses to hardware, which is
- * the problem that open firmware partially solves.  It allows hardware makers
- * much more leeway in building PPC systems.  Unfortunately, because
- * openfirmware as originally specified neither captures nor standardizes
- * all possible information, and also because of bugs, most OSs use a hybrid
- * configuration scheme that relies both on verification of devices and
- * recording information from openfirmware to be treated as hints.
- */
-VOID OfwCopyDeviceTree
-(PCONFIGURATION_COMPONENT_DATA ParentKey,
- char *name,
- int innode,
- ULONG *BusNumber,
- ULONG *DiskController,
- ULONG *DiskNumber)
-{
-    int proplen = 0, node = innode;
-    char *prev_name, cur_name[64], data[256], *slash, devtype[64];
-    wchar_t wide_name[64];
-    PCONFIGURATION_COMPONENT_DATA NewKey;
-
-    NarrowToWide(wide_name, name);
-
-    /* Create a key for this device */
-    FldrCreateComponentKey
-        (ParentKey,
-         AdapterClass,
-         MultiFunctionAdapter,
-         0,
-         0,
-         (ULONG)-1,
-         NULL,
-         NULL,
-         0,
-         &NewKey);
-
-    /* Add properties */
-    for (prev_name = ""; ofw_nextprop(node, prev_name, cur_name) == 1; )
-    {
-        proplen = ofw_getproplen(node, cur_name);
-        if (proplen > 256 || proplen < 0)
-        {
-            printf("Warning: not getting prop %s (too long: %d)\n",
-                   cur_name, proplen);
-            continue;
-        }
-        ofw_getprop(node, cur_name, data, sizeof(data));
-
-        /* Get device type so we can examine it */
-        if (!strcmp(cur_name, "device_type"))
-            strcpy(devtype, (char *)data);
-
-        NarrowToWide(wide_name, cur_name);
-        //RegSetValue(NewKey, wide_name, REG_BINARY, data, proplen);
-
-        strcpy(data, cur_name);
-        prev_name = data;
-    }
-
-#if 0
-    /* Special device handling */
-    if (!strcmp(devtype, "ata"))
-    {
-        OfwHandleDiskController(NewKey, node, *DiskController);
-        (*DiskController)++;
-        *DiskNumber = 0;
-    }
-    else if (!strcmp(devtype, "disk"))
-    {
-        OfwHandleDiskObject(NewKey, node, *DiskController, *DiskNumber);
-        (*DiskNumber)++;
-    }
-#endif
-
-    /* Subdevices */
-    for (node = ofw_child(node); node; node = ofw_peer(node))
-    {
-        ofw_package_to_path(node, data, sizeof(data));
-        slash = strrchr(data, '/');
-        if (slash) slash++; else continue;
-        OfwCopyDeviceTree
-            (NewKey, slash, node, BusNumber, DiskController, DiskNumber);
-    }
-}
-
-PCONFIGURATION_COMPONENT_DATA PpcHwDetect() {
-    PCONFIGURATION_COMPONENT_DATA RootKey;
-    ULONG BusNumber = 0, DiskController = 0, DiskNumber = 0;
-    int node = ofw_finddevice("/");
-
-    FldrCreateSystemKey(&RootKey);
-
-    OfwCopyDeviceTree(RootKey,"/",node,&BusNumber,&DiskController,&DiskNumber);
-    return RootKey;
-}
-
-VOID
-PpcHwIdle(VOID)
-{
-    /* UNIMPLEMENTED */
-}
-
-void PpcDefaultMachVtbl()
-{
-    MachVtbl.ConsPutChar = PpcOfwPutChar;
-    MachVtbl.ConsKbHit   = PpcConsKbHit;
-    MachVtbl.ConsGetCh   = PpcConsGetCh;
-    MachVtbl.VideoClearScreen = PpcVideoClearScreen;
-    MachVtbl.VideoSetDisplayMode = PpcVideoSetDisplayMode;
-    MachVtbl.VideoGetDisplaySize = PpcVideoGetDisplaySize;
-    MachVtbl.VideoGetBufferSize = PpcVideoGetBufferSize;
-    MachVtbl.VideoSetTextCursorPosition = PpcVideoSetTextCursorPosition;
-    MachVtbl.VideoHideShowTextCursor = PpcVideoHideShowTextCursor;
-    MachVtbl.VideoPutChar = PpcVideoPutChar;
-    MachVtbl.VideoCopyOffScreenBufferToVRAM =
-        PpcVideoCopyOffScreenBufferToVRAM;
-    MachVtbl.VideoIsPaletteFixed = PpcVideoIsPaletteFixed;
-    MachVtbl.VideoSetPaletteColor = PpcVideoSetPaletteColor;
-    MachVtbl.VideoGetPaletteColor = PpcVideoGetPaletteColor;
-    MachVtbl.VideoSync = PpcVideoSync;
-
-    MachVtbl.GetMemoryMap = PpcGetMemoryMap;
-
-    MachVtbl.DiskReadLogicalSectors = PpcDiskReadLogicalSectors;
-    MachVtbl.DiskGetDriveGeometry = PpcDiskGetDriveGeometry;
-    MachVtbl.DiskGetCacheableBlockCount = PpcDiskGetCacheableBlockCount;
-
-    MachVtbl.GetTime = PpcGetTime;
-
-    MachVtbl.HwDetect = PpcHwDetect;
-    MachVtbl.HwIdle = PpcHwIdle;
-}
-
-void PpcOfwInit()
-{
-    chosen_package = ofw_finddevice( "/chosen" );
-
-    ofw_getprop(chosen_package, "bootargs",
-        CmdLine, sizeof(CmdLine));
-    ofw_getprop( chosen_package, "stdin",
-         (char *)&stdin_handle, sizeof(stdin_handle) );
-    ofw_getprop( chosen_package, "stdout",
-         (char *)&stdout_handle, sizeof(stdout_handle) );
-    ofw_getprop( chosen_package, "mmu",
-         (char *)&mmu_handle, sizeof(mmu_handle) );
-
-    // Allow forcing prep for broken OFW
-    if(!strncmp(CmdLine, "bootprep", 8))
-    {
-    printf("Going to PREP init...\n");
-        ofproxy = NULL;
-    PpcPrepInit();
-    return;
-    }
-
-    printf( "FreeLDR version [%s]\n", FrLdrVersionString );
-
-    BootMain( CmdLine );
-}
-
-void PpcInit( of_proxy the_ofproxy ) {
-    // Hack to be a bit easier on ram
-    CacheSizeLimit = 64 * 1024;
-    ofproxy = the_ofproxy;
-    PpcDefaultMachVtbl();
-    if(ofproxy) PpcOfwInit();
-    else PpcPrepInit();
-}
-
-void MachInit(const char *CmdLine) {
-    int i, len;
-    char *sep;
-
-    BootPart[0] = 0;
-    FrLdrBootPath[0] = 0;
-
-    printf( "Determining boot device: [%s]\n", CmdLine );
-
-    sep = NULL;
-    for( i = 0; i < strlen(CmdLine); i++ ) {
-    if( strncmp(CmdLine + i, "boot=", 5) == 0) {
-        strcpy(BootPart, CmdLine + i + 5);
-        sep = strchr(BootPart, ',');
-        if( sep )
-        *sep = 0;
-        while(CmdLine[i] && CmdLine[i]!=',') i++;
-    }
-    }
-
-    if( strlen(BootPart) == 0 ) {
-    if (ofproxy)
-            len = ofw_getprop(chosen_package, "bootpath",
-                              FrLdrBootPath, sizeof(FrLdrBootPath));
-    else
-            len = 0;
-    if( len < 0 ) len = 0;
-    FrLdrBootPath[len] = 0;
-    printf( "Boot Path: %s\n", FrLdrBootPath );
-
-    sep = strrchr(FrLdrBootPath, ',');
-
-    strcpy(BootPart, FrLdrBootPath);
-    if( sep ) {
-        BootPart[sep - FrLdrBootPath] = 0;
-    }
-    }
-
-    printf( "FreeLDR starting (boot partition: %s)\n", BootPart );
-}
-
-void beep() {
-}
-
-UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address) {
-    return GetPhysByte(((ULONG)Address)+0x80000000);
-}
-
-void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value) {
-    SetPhysByte(((ULONG)Address)+0x80000000, Value);
-}
-
-VOID __cdecl BootLinuxKernel(
-    IN ULONG KernelSize,
-    IN PVOID KernelCurrentLoadAddress,
-    IN PVOID KernelTargetLoadAddress,
-    IN UCHAR DriveNumber,
-    IN ULONG PartitionNumber)
-{
-    ofw_exit();
-}
-
-VOID __cdecl ChainLoadBiosBootSectorCode(
-    IN UCHAR BootDrive OPTIONAL,
-    IN ULONG BootPartition OPTIONAL)
-{
-    ofw_exit();
-}
-
-void DbgBreakPoint() {
-    __asm__("twi 31,0,0");
-}
diff --git a/boot/freeldr/freeldr/arch/powerpc/mboot.c 
b/boot/freeldr/freeldr/arch/powerpc/mboot.c
deleted file mode 100644
index 73a50d9d0c1..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/mboot.c
+++ /dev/null
@@ -1,852 +0,0 @@
-/*
- *  FreeLoader
- *  Copyright (C) 1998-2003  Brian Palmer  <[email protected]>
- *  Copyright (C) 2005       Alex Ionescu  <[email protected]>
- *
- *  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.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <freeldr.h>
-#include <elf/elf.h>
-#include <elf/reactos.h>
-#include <of.h>
-#include "ppcmmu/mmu.h"
-#include "compat.h"
-
-#include <debug.h>
-
-/* We'll check this to see if we're in OFW land */
-extern of_proxy ofproxy;
-
-PVOID KernelMemory = NULL;
-
-/* Bits to shift to convert a Virtual Address into an Offset in the Page Table 
*/
-#define PFN_SHIFT 12
-
-/* Bits to shift to convert a Virtual Address into an Offset in the Page 
Directory */
-#define PDE_SHIFT 22
-#define PDE_SHIFT_PAE 18
-
-#define STARTUP_BASE                0xC0000000
-#define HYPERSPACE_BASE             0xC0400000
-#define HYPERSPACE_PAE_BASE         0xC0800000
-#define APIC_BASE                   0xFEC00000
-#define KPCR_BASE                   0xFF000000
-
-#define LowMemPageTableIndex        0
-#define StartupPageTableIndex       (STARTUP_BASE >> 22)
-#define HyperspacePageTableIndex    (HYPERSPACE_BASE >> 22)
-#define KpcrPageTableIndex          (KPCR_BASE >> 22)
-#define ApicPageTableIndex          (APIC_BASE >> 22)
-
-#define BAT_GRANULARITY             (64 * 1024)
-#define KernelMemorySize            (8 * 1024 * 1024)
-#define XROUNDUP(x,n)               ((((ULONG)x) + ((n) - 1)) & (~((n) - 1)))
-
-#define TAG_MBOOT 'oobM'
-
-char reactos_module_strings[64][256];    // Array to hold module names
-
-/* Load Address of Next Module */
-ULONG_PTR NextModuleBase = 0;
-
-/* Currently Opened Module */
-PLOADER_MODULE CurrentModule = NULL;
-
-/* Unrelocated Kernel Base in Virtual Memory */
-ULONG_PTR KernelBase;
-
-/* Wether PAE is to be used or not */
-BOOLEAN PaeModeEnabled;
-
-/* Kernel Entrypoint in Physical Memory */
-ULONG_PTR KernelEntryPoint;
-
-/* Dummy to bring in memmove */
-PVOID memmove_dummy = memmove;
-
-PLOADER_MODULE
-NTAPI
-LdrGetModuleObject(PCHAR ModuleName);
-
-NTSTATUS
-NTAPI
-LdrPEFixupImports(IN PVOID DllBase,
-                  IN PCHAR DllName);
-
-VOID PpcInitializeMmu(int max);
-
-/* FUNCTIONS *****************************************************************/
-
-/*++
- * FrLdrStartup
- * INTERNAL
- *
- *     Prepares the system for loading the Kernel.
- *
- * Params:
- *     Magic - Multiboot Magic
- *
- * Returns:
- *     None.
- *
- * Remarks:
- *     None.
- *
- *--*/
-
-typedef void (*KernelEntryFn)( void * );
-
-int MmuPageMiss(int trapCode, ppc_trap_frame_t *trap)
-{
-    int i;
-    printf("TRAP %x\n", trapCode);
-    for( i = 0; i < 40; i++ )
-    printf("r[%d] %x\n", i, trap->gpr[i]);
-    printf("HALT!\n");
-    while(1);
-}
-
-typedef struct _ppc_map_set_t {
-    int mapsize;
-    int usecount;
-    ppc_map_info_t *info;
-} ppc_map_set_t;
-
-extern int mmu_handle;
-paddr_t MmuTranslate(paddr_t possibly_virtual)
-{
-    if (ofproxy)
-    {
-        /* Openfirmware takes liberties with boot-time memory.
-         * if you're in a unitary kernel, it's not as difficult, but since
-         * we rely on loading things into virtual space from here, we need
-         * to detect the mappings so far.
-         */
-        int args[2];
-        args[0] = possibly_virtual;
-        args[1] = 1; /* Marker to tell we want a physical addr */
-        return (paddr_t)ofw_callmethod_ret("translate", mmu_handle, 2, args, 
3);
-    }
-    else
-    {
-        /* Other booters don't remap ram */
-        return possibly_virtual;
-    }
-}
-
-VOID
-NTAPI
-FrLdrAddPageMapping(ppc_map_set_t *set, int proc, paddr_t phys, vaddr_t virt)
-{
-    int j;
-    paddr_t page = ROUND_DOWN(phys, (1<<PFN_SHIFT));
-
-    if (virt == 0)
-        virt = ROUND_DOWN(page, (1<<PFN_SHIFT));
-    else
-        virt = ROUND_DOWN(virt, (1<<PFN_SHIFT));
-
-    page = MmuTranslate(page);
-
-    //printf("Mapping virt [%x] to phys [%x (from) %x]\n", virt, page, phys);
-
-    for( j = 0; j < set->usecount; j++ )
-    {
-        if(set->info[j].addr == page) return;
-    }
-
-    if (!set->mapsize)
-    {
-        set->mapsize = 0x80;
-        set->info = MmAllocateMemory(0x80 * sizeof(*set->info));
-    }
-    else if (set->mapsize <= set->usecount)
-    {
-        ppc_map_info_t *newinfo = MmAllocateMemory(set->mapsize * 2 * 
sizeof(*set->info));
-        memcpy(newinfo, set->info, set->mapsize * sizeof(*set->info));
-        MmFreeMemory(set->info);
-        set->info = newinfo;
-        set->mapsize *= 2;
-    }
-
-    set->info[set->usecount].flags = MMU_ALL_RW;
-    set->info[set->usecount].proc = proc;
-    set->info[set->usecount].addr = virt;
-    set->info[set->usecount].phys = page;
-    set->usecount++;
-}
-
-extern int _start[], _end[];
-
-VOID
-NTAPI
-FrLdrStartup(ULONG Magic)
-{
-    ULONG_PTR i, tmp, OldModCount = 0;
-    PCHAR ModHeader;
-    CHAR ModulesTreated[64] = { 0 };
-    ULONG NumberOfEntries = 0, UsedEntries = 0;
-    PPAGE_LOOKUP_TABLE_ITEM FreeLdrMap = MmGetMemoryMap(&NumberOfEntries);
-    ppc_map_set_t memmap = { };
-
-    printf("FrLdrStartup\n");
-
-    /* Disable EE */
-    __asm__("mfmsr %0" : "=r" (tmp));
-    tmp &= 0x7fff;
-    __asm__("mtmsr %0" : : "r" (tmp));
-
-    while(OldModCount != LoaderBlock.ModsCount)
-    {
-        printf("Added %d modules last pass\n",
-               LoaderBlock.ModsCount - OldModCount);
-
-        OldModCount = LoaderBlock.ModsCount;
-
-        for(i = 0; i < LoaderBlock.ModsCount; i++)
-        {
-            if (!ModulesTreated[i])
-            {
-                ModulesTreated[i] = 1;
-                ModHeader = ((PCHAR)reactos_modules[i].ModStart);
-                if(ModHeader[0] == 'M' && ModHeader[1] == 'Z')
-                    LdrPEFixupImports
-                        ((PVOID)reactos_modules[i].ModStart,
-                         (PCHAR)reactos_modules[i].String);
-            }
-        }
-    }
-
-    printf("Starting mmu\n");
-
-    PpcInitializeMmu(0);
-
-    printf("Allocating vsid 0 (kernel)\n");
-    MmuAllocVsid(0, 0xff00);
-
-    /* We'll use vsid 1 for freeldr (expendable) */
-    printf("Allocating vsid 1 (freeldr)\n");
-    MmuAllocVsid(1, 0xff);
-
-    printf("Mapping Freeldr Code (%x-%x)\n", _start, _end);
-
-    /* Map memory zones */
-    /* Freeldr itself */
-    for( i = (int)_start;
-         i < (int)_end;
-         i += (1<<PFN_SHIFT) ) {
-        FrLdrAddPageMapping(&memmap, 1, i, 0);
-    }
-
-    printf("KernelBase %x\n", KernelBase);
-
-    /* Heap pages -- this gets the entire freeldr heap */
-    for( i = 0; i < NumberOfEntries; i++ ) {
-        tmp = i<<PFN_SHIFT;
-        if (FreeLdrMap[i].PageAllocated == LoaderSystemCode) {
-            UsedEntries++;
-            if (tmp >= (ULONG)KernelMemory &&
-                tmp <  (ULONG)KernelMemory + KernelMemorySize) {
-                FrLdrAddPageMapping(&memmap, 0, tmp, KernelBase + tmp - 
(ULONG)KernelMemory);
-            } else {
-                FrLdrAddPageMapping(&memmap, 1, tmp, 0);
-            }
-        }
-    }
-
-    MmuMapPage(memmap.info, memmap.usecount);
-
-    printf("Finished Mapping the Freeldr Heap (used %d pages)\n", UsedEntries);
-
-    printf("Setting initial segments\n");
-    MmuSetVsid(0, 8, 1);
-    MmuSetVsid(8, 16, 0);
-
-    printf("Segments set!\n");
-
-    MmuTurnOn((KernelEntryFn)KernelEntryPoint, &LoaderBlock);
-
-    /* Nothing more */
-    while(1);
-}
-
-/*++
- * 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)
-{
-}
-
-/*++
- * FrLdrGetKernelBase
- * INTERNAL
- *
- *     Gets the Kernel Base to use.
- *
- * Params:
- *
- * Returns:
- *     None.
- *
- * Remarks:
- *     Sets both the FreeLdr internal variable as well as the one which
- *     will be used by the Kernel.
- *
- *--*/
-VOID
-FASTCALL
-FrLdrGetKernelBase(VOID)
-{
-    PCHAR p;
-
-    /* Default kernel base at 2GB */
-    KernelBase = 0x80800000;
-
-    /* Set KernelBase */
-    LoaderBlock.KernelBase = 0x80000000;
-
-    /* Read Command Line */
-    p = (PCHAR)LoaderBlock.CommandLine;
-    while ((p = strchr(p, '/')) != NULL) {
-
-        /* Find "/3GB" */
-        if (!_strnicmp(p + 1, "3GB", 3)) {
-
-            /* Make sure there's nothing following it */
-            if (p[4] == ' ' || p[4] == 0) {
-
-                /* Use 3GB */
-                KernelBase = 0xE0000000;
-                LoaderBlock.KernelBase = 0xC0000000;
-            }
-        }
-
-        p++;
-    }
-}
-
-/*++
- * FrLdrGetPaeMode
- * INTERNAL
- *
- *     Determines whether PAE mode should be enabled or not.
- *
- * Params:
- *     None.
- *
- * Returns:
- *     None.
- *
- * Remarks:
- *     None.
- *
- *--*/
-VOID
-FASTCALL
-FrLdrGetPaeMode(VOID)
-{
-}
-
-/*++
- * FrLdrSetupPageDirectory
- * INTERNAL
- *
- *     Sets up the ReactOS Startup Page Directory.
- *
- * Params:
- *     None.
- *
- * Returns:
- *     None.
- *
- * Remarks:
- *     We are setting PDEs, but using the equivalent (for our purpose) PTE 
structure.
- *     As such, please note that PageFrameNumber == PageEntryNumber.
- *
- *--*/
-VOID
-FASTCALL
-FrLdrSetupPageDirectory(VOID)
-{
-}
-
-/*++
- * FrLdrMapModule
- * INTERNAL
- *
- *     Loads the indicated elf image as PE.  The target will appear to be
- *     a PE image whose ImageBase has ever been KernelAddr.
- *
- * Params:
- *     Image -- File to load
- *     ImageName -- Name of image for the modules list
- *     MemLoadAddr -- Freeldr address of module
- *     KernelAddr -- Kernel address of module
- *--*/
-#define ELF_SECTION(n) ((Elf32_Shdr*)(sptr + (n * shsize)))
-#define COFF_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) 
((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+(SWAPW(((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader))))
-
-BOOLEAN
-NTAPI
-FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG 
KernelAddr)
-{
-    PIMAGE_DOS_HEADER ImageHeader = 0;
-    PIMAGE_NT_HEADERS NtHeader = 0;
-    PIMAGE_SECTION_HEADER Section;
-    ULONG SectionCount;
-    ULONG ImageSize;
-    INT i, j;
-    PLOADER_MODULE ModuleData;
-    //int phsize, phnum;
-    int shsize, shnum, relsize, SectionAddr = 0;
-    PCHAR sptr;
-    Elf32_Ehdr ehdr;
-    Elf32_Shdr *shdr;
-    LARGE_INTEGER Position;
-    PSTR TempName;
-
-    TempName = strrchr(ImageName, '\\');
-    if(TempName) TempName++; else TempName = (PSTR)ImageName;
-    ModuleData = LdrGetModuleObject(TempName);
-
-    if(ModuleData)
-    {
-    return TRUE;
-    }
-
-    if(!KernelAddr)
-    KernelAddr = (ULONG)NextModuleBase - (ULONG)KernelMemory + KernelBase;
-    if(!MemLoadAddr)
-    MemLoadAddr = (PCHAR)NextModuleBase;
-
-    ModuleData = &reactos_modules[LoaderBlock.ModsCount];
-    //printf("Loading file (elf at %x)\n", KernelAddr);
-
-    /* Load the first 1024 bytes of the kernel image so we can read the PE 
header */
-    if (ArcRead(KernelImage, &ehdr, sizeof(ehdr), NULL) != ESUCCESS) {
-
-        /* Fail if we couldn't read */
-    printf("Couldn't read the elf header\n");
-        return FALSE;
-    }
-
-    /* Start by getting elf headers */
-    //phsize = ehdr.e_phentsize;
-    //phnum = ehdr.e_phnum;
-    shsize = ehdr.e_shentsize;
-    shnum = ehdr.e_shnum;
-    sptr = (PCHAR)FrLdrTempAlloc(shnum * shsize, TAG_MBOOT);
-
-    /* Read section headers */
-    Position.QuadPart = ehdr.e_shoff;
-    ArcSeek(KernelImage, &Position, SeekAbsolute);
-    ArcRead(KernelImage, sptr, shsize * shnum, NULL);
-
-    /* Now we'll get the PE Header */
-    for( i = 0; i < shnum; i++ )
-    {
-    shdr = ELF_SECTION(i);
-    shdr->sh_addr = 0;
-
-    /* Find the PE Header */
-    if (shdr->sh_type == TYPE_PEHEADER)
-    {
-        Position.QuadPart = shdr->sh_offset;
-        ArcSeek(KernelImage, &Position, SeekAbsolute);
-        ArcRead(KernelImage, MemLoadAddr, shdr->sh_size, NULL);
-        ImageHeader = (PIMAGE_DOS_HEADER)MemLoadAddr;
-        NtHeader = (PIMAGE_NT_HEADERS)((PCHAR)MemLoadAddr + 
SWAPD(ImageHeader->e_lfanew));
-#if 0
-        printf("NtHeader at %x\n", SWAPD(ImageHeader->e_lfanew));
-        printf("SectionAlignment %x\n",
-           SWAPD(NtHeader->OptionalHeader.SectionAlignment));
-        SectionAddr = ROUND_UP
-        (shdr->sh_size, SWAPD(NtHeader->OptionalHeader.SectionAlignment));
-        printf("Header ends at %x\n", SectionAddr);
-#endif
-        break;
-    }
-    }
-
-    if(i == shnum)
-    {
-    printf("No peheader section encountered :-(\n");
-    return 0;
-    }
-#if 0
-    else
-    {
-        printf("DOS SIG: %s\n", (PCHAR)MemLoadAddr);
-    }
-#endif
-
-    /* Save the Image Base */
-    NtHeader->OptionalHeader.ImageBase = SWAPD(KernelAddr);
-
-    /* Load the file image */
-    Section = COFF_FIRST_SECTION(NtHeader);
-    SectionCount = SWAPW(NtHeader->FileHeader.NumberOfSections);
-
-    /* Walk each section */
-    for (i=0; i < SectionCount; i++, Section++)
-    {
-    shdr = ELF_SECTION((SWAPD(Section->PointerToRawData)+1));
-
-    shdr->sh_addr = SectionAddr = SWAPD(Section->VirtualAddress);
-    shdr->sh_addr += KernelAddr;
-
-    Section->PointerToRawData = SWAPD((Section->VirtualAddress - KernelAddr));
-
-    if (shdr->sh_type != SHT_NOBITS)
-    {
-        /* Content area */
-        printf("Loading section %d at %x (real: %x:%d)\n", i, KernelAddr + 
SectionAddr, MemLoadAddr+SectionAddr, shdr->sh_size);
-        Position.QuadPart = shdr->sh_offset;
-        ArcSeek(KernelImage, &Position, SeekAbsolute);
-        ArcRead(KernelImage, MemLoadAddr + SectionAddr, shdr->sh_size, NULL);
-    }
-    else
-    {
-        /* Zero it out */
-        printf("BSS section %d at %x\n", i, KernelAddr + SectionAddr);
-        memset(MemLoadAddr + SectionAddr, 0,
-           ROUND_UP(shdr->sh_size,
-                SWAPD(NtHeader->OptionalHeader.SectionAlignment)));
-        }
-    }
-
-    ImageSize = SWAPD(NtHeader->OptionalHeader.SizeOfImage);
-    printf("Total image size is %x\n", ImageSize);
-
-    /* Handle relocation sections */
-    for (i = 0; i < shnum; i++) {
-    Elf32_Rela reloc = { };
-    ULONG *Target32;
-    USHORT *Target16;
-    int numreloc, relstart, targetSection;
-    Elf32_Sym symbol;
-    PCHAR RelocSection, SymbolSection;
-
-    shdr = ELF_SECTION(i);
-    /* Only relocs here */
-    if((shdr->sh_type != SHT_REL) &&
-       (shdr->sh_type != SHT_RELA)) continue;
-
-    relstart = shdr->sh_offset;
-    relsize = shdr->sh_type == SHT_RELA ? 12 : 8;
-    numreloc = shdr->sh_size / relsize;
-    targetSection = shdr->sh_info;
-
-    if (!ELF_SECTION(targetSection)->sh_addr) continue;
-
-    RelocSection = FrLdrTempAlloc(shdr->sh_size, TAG_MBOOT);
-    Position.QuadPart = relstart;
-    ArcSeek(KernelImage, &Position, SeekAbsolute);
-    ArcRead(KernelImage, RelocSection, shdr->sh_size, NULL);
-
-    /* Get the symbol section */
-    shdr = ELF_SECTION(shdr->sh_link);
-
-    SymbolSection = FrLdrTempAlloc(shdr->sh_size, TAG_MBOOT);
-    Position.QuadPart = shdr->sh_offset;
-    ArcSeek(KernelImage, &Position, SeekAbsolute);
-    ArcRead(KernelImage, SymbolSection, shdr->sh_size, NULL);
-
-    for(j = 0; j < numreloc; j++)
-    {
-        ULONG S,A,P;
-
-        /* Get the reloc */
-        memcpy(&reloc, RelocSection + (j * relsize), sizeof(reloc));
-
-        /* Get the symbol */
-        memcpy(&symbol, SymbolSection + (ELF32_R_SYM(reloc.r_info) * 
sizeof(symbol)), sizeof(symbol));
-
-        /* Compute addends */
-        S = symbol.st_value + ELF_SECTION(symbol.st_shndx)->sh_addr;
-        A = reloc.r_addend;
-        P = reloc.r_offset + ELF_SECTION(targetSection)->sh_addr;
-
-#if 0
-        printf("Symbol[%d] %d -> %d(%x:%x) -> %x(+%x)@%x\n",
-           ELF32_R_TYPE(reloc.r_info),
-           ELF32_R_SYM(reloc.r_info),
-           symbol.st_shndx,
-           ELF_SECTION(symbol.st_shndx)->sh_addr,
-           symbol.st_value,
-           S,
-           A,
-           P);
-#endif
-
-        Target32 = (ULONG*)(((PCHAR)MemLoadAddr) + (P - KernelAddr));
-        Target16 = (USHORT *)Target32;
-
-        switch (ELF32_R_TYPE(reloc.r_info))
-        {
-        case R_PPC_NONE:
-        break;
-        case R_PPC_ADDR32:
-        *Target32 = S + A;
-        break;
-        case R_PPC_REL32:
-        *Target32 = S + A - P;
-        break;
-        case R_PPC_UADDR32: /* Special: Treat as RVA */
-        *Target32 = S + A - KernelAddr;
-        break;
-        case R_PPC_ADDR24:
-        *Target32 = (ADDR24_MASK & (S+A)) | (*Target32 & ~ADDR24_MASK);
-        break;
-        case R_PPC_REL24:
-        *Target32 = (ADDR24_MASK & (S+A-P)) | (*Target32 & ~ADDR24_MASK);
-        break;
-        case R_PPC_ADDR16_LO:
-        *Target16 = S + A;
-        break;
-        case R_PPC_ADDR16_HA:
-        *Target16 = (S + A + 0x8000) >> 16;
-        break;
-        default:
-        break;
-        }
-
-#if 0
-        printf("reloc[%d:%x]: (type %x sym %d val %d) off %x add %x (old %x 
new %x)\n",
-           j,
-           ((ULONG)Target32) - ((ULONG)MemLoadAddr),
-           ELF32_R_TYPE(reloc.r_info),
-           ELF32_R_SYM(reloc.r_info),
-           symbol.st_value,
-           reloc.r_offset, reloc.r_addend,
-           x, *Target32);
-#endif
-    }
-
-    FrLdrTempFree(SymbolSection, TAG_MBOOT);
-    FrLdrTempFree(RelocSection, TAG_MBOOT);
-    }
-
-    FrLdrTempFree(sptr, TAG_MBOOT);
-
-    ModuleData->ModStart = (ULONG)MemLoadAddr;
-    /* Increase the next Load Base */
-    NextModuleBase = ROUND_UP((ULONG)MemLoadAddr + ImageSize, PAGE_SIZE);
-    ModuleData->ModEnd = NextModuleBase;
-    ModuleData->String = (ULONG)MmAllocateMemory(strlen(ImageName)+1);
-    strcpy((PCHAR)ModuleData->String, ImageName);
-    printf("Module %s (%x-%x) next at %x\n",
-       ModuleData->String,
-       ModuleData->ModStart,
-       ModuleData->ModEnd,
-       NextModuleBase);
-    LoaderBlock.ModsCount++;
-
-    /* Return Success */
-    return TRUE;
-}
-
-/*++
- * FrLdrMapKernel
- * INTERNAL
- *
- *     Maps the Kernel into memory, does PE Section Mapping, initializes the
- *     uninitialized data sections, and relocates the image.
- *
- * Params:
- *     KernelImage - FILE Structure representing the ntoskrnl image file.
- *
- * Returns:
- *     TRUE if the Kernel was mapped.
- *
- * Remarks:
- *     None.
- *
- *--*/
-BOOLEAN
-NTAPI
-FrLdrMapKernel(FILE *KernelImage)
-{
-    /* Get Kernel Base */
-    FrLdrGetKernelBase();
-
-    /* Allocate kernel memory */
-    KernelMemory = MmAllocateMemory(KernelMemorySize);
-
-    return FrLdrMapModule(KernelImage, "ntoskrnl.exe", KernelMemory, 
KernelBase);
-}
-
-ULONG_PTR
-NTAPI
-FrLdrLoadModule(FILE *ModuleImage,
-                PCSTR ModuleName,
-                PULONG ModuleSize)
-{
-    ARC_STATUS Status;
-    FILEINFORMATION FileInfo;
-    ULONG LocalModuleSize;
-    ULONG_PTR ThisModuleBase = NextModuleBase;
-    PLOADER_MODULE ModuleData;
-    PSTR NameBuffer;
-    PSTR TempName;
-
-    /* Get current module data structure and module name string array */
-    ModuleData = &reactos_modules[LoaderBlock.ModsCount];
-
-    /* Get only the Module Name */
-    do {
-
-        TempName = strchr(ModuleName, '\\');
-
-        if(TempName) {
-            ModuleName = TempName + 1;
-        }
-
-    } while(TempName);
-    NameBuffer = reactos_module_strings[LoaderBlock.ModsCount];
-
-    /* Get Module Size */
-    Status = ArcGetFileInformation(ModuleImage, &FileInfo);
-    if (Status != ESUCCESS || FileInfo.EndingAddress.HighPart != 0)
-        LocalModuleSize = 0;
-    else
-        LocalModuleSize = FileInfo.EndingAddress.LowPart;
-
-    /* Fill out Module Data Structure */
-    ModuleData->ModStart = NextModuleBase;
-    ModuleData->ModEnd = NextModuleBase + LocalModuleSize;
-
-    /* Save name */
-    strcpy(NameBuffer, ModuleName);
-    ModuleData->String = (ULONG_PTR)NameBuffer;
-
-    /* Load the file image */
-    ArcRead(ModuleImage, (PVOID)NextModuleBase, LocalModuleSize, NULL);
-
-    /* Move to next memory block and increase Module Count */
-    NextModuleBase = ROUND_UP(ModuleData->ModEnd, PAGE_SIZE);
-    LoaderBlock.ModsCount++;
-
-    /* Return Module Size if required */
-    if (ModuleSize != NULL) {
-        *ModuleSize = LocalModuleSize;
-    }
-
-    printf("Module %s (%x-%x) next at %x\n",
-       ModuleData->String,
-       ModuleData->ModStart,
-       ModuleData->ModEnd,
-       NextModuleBase);
-
-    return ThisModuleBase;
-}
-
-PVOID
-NTAPI
-FrLdrMapImage(IN FILE *Image, IN PCHAR ShortName, IN ULONG ImageType)
-{
-    PVOID Result = NULL;
-
-    printf("Loading image %s (type %d)\n", ShortName, ImageType);
-
-    if (ImageType == 1)
-    {
-        if(FrLdrMapKernel(Image))
-            Result = (PVOID)KernelMemory;
-    }
-    else
-    {
-        PVOID ModuleBase = (PVOID)NextModuleBase;
-
-        if(FrLdrMapModule(Image, ShortName, 0, 0))
-            Result = ModuleBase;
-    }
-    return Result;
-}
-
-ULONG_PTR
-NTAPI
-FrLdrCreateModule(PCSTR ModuleName)
-{
-    PLOADER_MODULE ModuleData;
-    PSTR NameBuffer;
-
-    /* Get current module data structure and module name string array */
-    ModuleData = &reactos_modules[LoaderBlock.ModsCount];
-    NameBuffer = reactos_module_strings[LoaderBlock.ModsCount];
-
-    /* Set up the structure */
-    ModuleData->ModStart = NextModuleBase;
-    ModuleData->ModEnd = -1;
-
-    /* Copy the name */
-    strcpy(NameBuffer, ModuleName);
-    ModuleData->String = (ULONG_PTR)NameBuffer;
-
-    /* Set the current Module */
-    CurrentModule = ModuleData;
-
-    /* Return Module Base Address */
-    return(ModuleData->ModStart);
-}
-
-BOOLEAN
-NTAPI
-FrLdrCloseModule(ULONG_PTR ModuleBase,
-                 ULONG ModuleSize)
-{
-    PLOADER_MODULE ModuleData = CurrentModule;
-
-    /* Make sure a module is opened */
-    if (ModuleData) {
-
-        /* Make sure this is the right module and that it hasn't been closed */
-        if ((ModuleBase == ModuleData->ModStart) && (ModuleData->ModEnd == 
MAXULONG_PTR)) {
-
-            /* Close the Module */
-            ModuleData->ModEnd = ModuleData->ModStart + ModuleSize;
-
-            /* Set the next Module Base and increase the number of modules */
-            NextModuleBase = ROUND_UP(ModuleData->ModEnd, PAGE_SIZE);
-            LoaderBlock.ModsCount++;
-
-            /* Close the currently opened module */
-            CurrentModule = NULL;
-
-            /* Success */
-            return(TRUE);
-        }
-    }
-
-    /* Failure path */
-    return(FALSE);
-}
diff --git a/boot/freeldr/freeldr/arch/powerpc/mmu.c 
b/boot/freeldr/freeldr/arch/powerpc/mmu.c
deleted file mode 100644
index e195eaeac07..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/mmu.c
+++ /dev/null
@@ -1,399 +0,0 @@
-#include <freeldr.h>
-#include "ppcmmu/mmu.h"
-
-inline int GetMSR() {
-    register int res asm ("r3");
-    __asm__("mfmsr 3");
-    return res;
-}
-
-inline int GetDEC() {
-    register int res asm ("r3");
-    __asm__("mfdec 3");
-    return res;
-}
-
-__asm__("\t.globl GetPhys\n"
-    "GetPhys:\t\n"
-    "mflr  0\n\t"
-    "stwu  0,-16(1)\n\t"
-    "mfmsr 5\n\t"
-    "andi. 6,5,0xffef\n\t"/* turn off MSR[DR] */
-    "mtmsr 6\n\t"
-    "isync\n\t"
-    "sync\n\t"
-    "lwz   3,0(3)\n\t"    /* Get actual value at phys addr r3 */
-    "mtmsr 5\n\t"
-    "isync\n\t"
-    "sync\n\t"
-    "lwz   0,0(1)\n\t"
-    "addi  1,1,16\n\t"
-    "mtlr  0\n\t"
-    "blr"
-    );
-
-__asm__("\t.globl GetPhysHalf\n"
-    "GetPhysHalf:\t\n"
-    "mflr  0\n\t"
-    "stwu  0,-16(1)\n\t"
-    "mfmsr 5\n\t"
-    "andi. 6,5,0xffef\n\t"/* turn off MSR[DR] */
-    "mtmsr 6\n\t"
-    "isync\n\t"
-    "sync\n\t"
-    "lhz   3,0(3)\n\t"    /* Get actual value at phys addr r3 */
-    "mtmsr 5\n\t"
-    "isync\n\t"
-    "sync\n\t"
-    "lwz   0,0(1)\n\t"
-    "addi  1,1,16\n\t"
-    "mtlr  0\n\t"
-    "blr"
-    );
-
-__asm__("\t.globl GetPhysByte\n"
-    "GetPhysByte:\t\n"
-    "mflr  0\n\t"
-    "stwu  0,-16(1)\n\t"
-    "mfmsr 5\n\t"
-    "andi. 6,5,0xffef\n\t"/* turn off MSR[DR] */
-    "mtmsr 6\n\t"
-    "isync\n\t"
-    "sync\n\t"
-    "lbz   3,0(3)\n\t"    /* Get actual value at phys addr r3 */
-    "mtmsr 5\n\t"
-    "isync\n\t"
-    "sync\n\t"
-    "lwz   0,0(1)\n\t"
-    "addi  1,1,16\n\t"
-    "mtlr  0\n\t"
-    "blr"
-    );
-
-__asm__("\t.globl SetPhys\n"
-    "SetPhys:\t\n"
-    "mflr  0\n\t"
-    "stwu  0,-16(1)\n\t"
-    "mfmsr 5\n\t"
-    "andi. 6,5,0xffef\n\t"/* turn off MSR[DR] */
-    "mtmsr 6\n\t"
-    "sync\n\t"
-    "eieio\n\t"
-    "stw   4,0(3)\n\t"    /* Set actual value at phys addr r3 */
-    "dcbst 0,3\n\t"
-    "mtmsr 5\n\t"
-    "sync\n\t"
-    "eieio\n\t"
-    "mr    3,4\n\t"
-    "lwz   0,0(1)\n\t"
-    "addi  1,1,16\n\t"
-    "mtlr  0\n\t"
-    "blr"
-    );
-
-__asm__("\t.globl SetPhysHalf\n"
-    "SetPhysHalf:\t\n"
-    "mflr  0\n\t"
-    "stwu  0,-16(1)\n\t"
-    "mfmsr 5\n\t"
-    "andi. 6,5,0xffef\n\t"/* turn off MSR[DR] */
-    "mtmsr 6\n\t"
-    "sync\n\t"
-    "eieio\n\t"
-    "sth   4,0(3)\n\t"    /* Set actual value at phys addr r3 */
-    "dcbst 0,3\n\t"
-    "mtmsr 5\n\t"
-    "sync\n\t"
-    "eieio\n\t"
-    "mr    3,4\n\t"
-    "lwz   0,0(1)\n\t"
-    "addi  1,1,16\n\t"
-    "mtlr  0\n\t"
-    "blr"
-    );
-
-__asm__("\t.globl SetPhysByte\n"
-    "SetPhysByte:\t\n"
-    "mflr  0\n\t"
-    "stwu  0,-16(1)\n\t"
-    "mfmsr 5\n\t"
-    "andi. 6,5,0xffef\n\t"/* turn off MSR[DR] */
-    "mtmsr 6\n\t"
-    "sync\n\t"
-    "eieio\n\t"
-    "stb   4,0(3)\n\t"    /* Set actual value at phys addr r3 */
-    "dcbst 0,3\n\t"
-    "mtmsr 5\n\t"
-    "sync\n\t"
-    "eieio\n\t"
-    "mr    3,4\n\t"
-    "lwz   0,0(1)\n\t"
-    "addi  1,1,16\n\t"
-    "mtlr  0\n\t"
-    "blr"
-    );
-
-inline int GetSR(int n) {
-    register int res asm ("r3");
-    switch( n ) {
-    case 0:
-    __asm__("mfsr 3,0");
-    break;
-    case 1:
-    __asm__("mfsr 3,1");
-    break;
-    case 2:
-    __asm__("mfsr 3,2");
-    break;
-    case 3:
-    __asm__("mfsr 3,3");
-    break;
-    case 4:
-    __asm__("mfsr 3,4");
-    break;
-    case 5:
-    __asm__("mfsr 3,5");
-    break;
-    case 6:
-    __asm__("mfsr 3,6");
-    break;
-    case 7:
-    __asm__("mfsr 3,7");
-    break;
-    case 8:
-    __asm__("mfsr 3,8");
-    break;
-    case 9:
-    __asm__("mfsr 3,9");
-    break;
-    case 10:
-    __asm__("mfsr 3,10");
-    break;
-    case 11:
-    __asm__("mfsr 3,11");
-    break;
-    case 12:
-    __asm__("mfsr 3,12");
-    break;
-    case 13:
-    __asm__("mfsr 3,13");
-    break;
-    case 14:
-    __asm__("mfsr 3,14");
-    break;
-    case 15:
-    __asm__("mfsr 3,15");
-    break;
-    }
-    return res;
-}
-
-inline void GetBat( int bat, int inst, int *batHi, int *batLo ) {
-    register int bh asm("r3"), bl asm("r4");
-    if( inst ) {
-    switch( bat ) {
-    case 0:
-        __asm__("mfibatu 3,0");
-        __asm__("mfibatl 4,0");
-        break;
-    case 1:
-        __asm__("mfibatu 3,1");
-        __asm__("mfibatl 4,1");
-        break;
-    case 2:
-        __asm__("mfibatu 3,2");
-        __asm__("mfibatl 4,2");
-        break;
-    case 3:
-        __asm__("mfibatu 3,3");
-        __asm__("mfibatl 4,3");
-        break;
-    }
-    } else {
-    switch( bat ) {
-    case 0:
-        __asm__("mfdbatu 3,0");
-        __asm__("mfdbatl 4,0");
-        break;
-    case 1:
-        __asm__("mfdbatu 3,1");
-        __asm__("mfdbatl 4,1");
-        break;
-    case 2:
-        __asm__("mfdbatu 3,2");
-        __asm__("mfdbatl 4,2");
-        break;
-    case 3:
-        __asm__("mfdbatu 3,3");
-        __asm__("mfdbatl 4,3");
-        break;
-    }
-    }
-    *batHi = bh;
-    *batLo = bl;
-}
-
-inline void SetBat( int bat, int inst, int batHi, int batLo ) {
-    register int bh asm("r3"), bl asm("r4");
-    bh = batHi;
-    bl = batLo;
-    if( inst ) {
-    switch( bat ) {
-    case 0:
-        __asm__("mtibatu 0,3");
-        __asm__("mtibatl 0,4");
-        break;
-    case 1:
-        __asm__("mtibatu 1,3");
-        __asm__("mtibatl 1,4");
-        break;
-    case 2:
-        __asm__("mtibatu 2,3");
-        __asm__("mtibatl 2,4");
-        break;
-    case 3:
-        __asm__("mtibatu 3,3");
-        __asm__("mtibatl 3,4");
-        break;
-    }
-    } else {
-    switch( bat ) {
-    case 0:
-        __asm__("mtdbatu 0,3");
-        __asm__("mtdbatl 0,4");
-        break;
-    case 1:
-        __asm__("mtdbatu 1,3");
-        __asm__("mtdbatl 1,4");
-        break;
-    case 2:
-        __asm__("mtdbatu 2,3");
-        __asm__("mtdbatl 2,4");
-        break;
-    case 3:
-        __asm__("mtdbatu 3,3");
-        __asm__("mtdbatl 3,4");
-        break;
-    }
-    }
-    __asm__("isync\n\tsync");
-}
-
-inline int GetSDR1() {
-    register int res asm("r3");
-    __asm__("mfsdr1 3");
-    return res;
-}
-
-inline void SetSDR1( int sdr ) {
-#if 0
-    int i,j;
-#endif
-    __asm__("mtsdr1 3");
-#if 0
-    __asm__("sync");
-    __asm__("isync");
-    __asm__("ptesync");
-
-    for( i = 0; i < 256; i++ ) {
-    j = i << 12;
-    __asm__("tlbie %0,0" : : "r" (j));
-    }
-    __asm__("eieio");
-    __asm__("tlbsync");
-    __asm__("ptesync");
-#endif
-}
-
-inline int BatHit( int bath, int batl, int virt ) {
-    int mask = 0xfffe0000 & ~((batl & 0x3f) << 17);
-    return (batl & 0x40) && ((virt & mask) == (bath & mask));
-}
-
-inline int BatTranslate( int bath, int batl, int virt ) {
-    return (virt & 0x007fffff) | (batl & 0xfffe0000);
-}
-
-/* translate address */
-int PpcVirt2phys( int virt, int inst ) {
-    int msr = GetMSR();
-    int txmask = inst ? 0x20 : 0x10;
-    int i, bath, batl, sr, sdr1, physbase, valo;
-    int hash, hashmask, ptehi, ptelo, ptegaddr;
-    //int vahi, npteg;
-    int vsid, pteh, ptevsid, pteapi;
-
-    if( msr & txmask ) {
-    sr = GetSR( virt >> 28 );
-    vsid = sr & 0xfffffff;
-    //vahi = vsid >> 4;
-    valo = (vsid << 28) | (virt & 0xfffffff);
-    if( sr & 0x80000000 ) {
-        return valo;
-    }
-
-    for( i = 0; i < 4; i++ ) {
-        GetBat( i, inst, &bath, &batl );
-        if( BatHit( bath, batl, virt ) ) {
-        return BatTranslate( bath, batl, virt );
-        }
-    }
-
-    sdr1 = GetSDR1();
-
-    physbase = sdr1 & ~0xffff;
-    hashmask = ((sdr1 & 0x1ff) << 10) | 0x3ff;
-    hash = (vsid & 0x7ffff) ^ ((valo >> 12) & 0xffff);
-    //npteg = hashmask + 1;
-
-    for( pteh = 0; pteh < 0x80; pteh += 64, hash ^= 0x7ffff ) {
-        ptegaddr = ((hashmask & hash) * 64) + physbase;
-
-        for( i = 0; i < 8; i++ ) {
-        ptehi = GetPhys( ptegaddr + (i * 8) );
-        ptelo = GetPhys( ptegaddr + (i * 8) + 4 );
-
-        ptevsid = (ptehi >> 7) & 0xffffff;
-        pteapi = ptehi & 0x3f;
-
-        if( (ptehi & 64) != pteh ) continue;
-        if( ptevsid != (vsid & 0xffffff) ) continue;
-        if( pteapi != ((virt >> 22) & 0x3f) ) continue;
-
-        return (ptelo & 0xfffff000) | (virt & 0xfff);
-        }
-    }
-    return -1;
-    } else {
-    return virt;
-    }
-}
-
-/* Add a new page table entry for the indicated mapping */
-BOOLEAN InsertPageEntry( int virt, int phys, int slot, int _sdr1 ) {
-    int i, ptehi, ptelo;
-    int sdr1 = _sdr1 ? _sdr1 : GetSDR1();
-    int sr = GetSR( (virt >> 28) & 0xf );
-    int vsid = sr & 0xfffffff;
-    int physbase = sdr1 & ~0xffff;
-    int hashmask = ((sdr1 & 0x1ff) << 10) | 0x3ff;
-    int valo = (vsid << 28) | (virt & 0xfffffff);
-    int hash = (vsid & 0x7ffff) ^ ((valo >> 12) & 0xffff);
-    int ptegaddr = ((hashmask & hash) * 64) + physbase;
-
-    for( i = 0; i < 8; i++ ) {
-    ptehi = GetPhys( ptegaddr + (i * 8) );
-
-    if( (slot != i) && (ptehi & 0x80000000) ) continue;
-
-    ptehi = (1 << 31) | (vsid << 7) | ((virt >> 22) & 0x3f);
-    ptelo = phys & ~0xfff;
-
-    SetPhys( ptegaddr + (i * 8), ptehi );
-    SetPhys( ptegaddr + (i * 8) + 4, ptelo );
-
-    return TRUE;
-    }
-
-    return FALSE;
-}
diff --git a/boot/freeldr/freeldr/arch/powerpc/ofw_method.c 
b/boot/freeldr/freeldr/arch/powerpc/ofw_method.c
deleted file mode 100644
index 0a160b54840..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/ofw_method.c
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <freeldr.h>
-#include "of.h"
-
-typedef struct _ofw_method_call {
-    const char *call_method;
-    int nargs;
-    int nrets;
-    const char *method_name;
-    int handle;
-    int args_rets[8];
-} ofw_method_call;
-
-extern int (*ofw_call_addr)(void *argstruct);
-
-int ofw_callmethod_ret(const char *method, int handle, int nargs, int *args, 
int ret)
-{
-    ofw_method_call callframe = { 0 };
-    callframe.call_method = "call-method";
-    callframe.nargs = nargs + 2;
-    callframe.nrets = ret+1;
-    callframe.method_name = method;
-    callframe.handle = handle;
-    memcpy(callframe.args_rets, args, sizeof(int)*nargs);
-    ofw_call_addr(&callframe);
-    return callframe.args_rets[nargs+ret];
-}
diff --git a/boot/freeldr/freeldr/arch/powerpc/ofw_util.s 
b/boot/freeldr/freeldr/arch/powerpc/ofw_util.s
deleted file mode 100644
index 1a214451630..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/ofw_util.s
+++ /dev/null
@@ -1,48 +0,0 @@
-    .section .text
-    .globl ofw_functions
-    .globl ofw_call_addr
-    .globl call_ofw
-call_ofw:
-       /* R3 has the function offset to call (n * 4)
-        * Other arg registers are unchanged. */
-       subi    %r1,%r1,0x100
-       stw     %r8,24(%r1)
-       mflr    %r8
-       stw     %r8,0(%r1)
-       stw     %r3,4(%r1)
-       stw     %r4,8(%r1)
-       stw     %r5,12(%r1)
-       stw     %r6,16(%r1)
-       stw     %r7,20(%r1)
-       stw     %r9,28(%r1)
-       stw     %r10,32(%r1)
-       stw     %r20,36(%r1)
-
-       lis     %r10,ofw_functions@ha
-       addi    %r8,%r10,ofw_functions@l
-       add     %r8,%r3,%r8
-       lwz     %r9,0(%r8)
-       mtctr   %r9
-
-       mr      %r3,%r4
-       mr      %r4,%r5
-       mr      %r5,%r6
-       mr      %r6,%r7
-       mr      %r7,%r8
-       mr      %r8,%r9
-
-       /* Call ofw proxy function */
-       bctrl
-
-       lwz     %r8,0(%r1)
-       mtlr    %r8
-       lwz     %r4,8(%r1)
-       lwz     %r5,12(%r1)
-       lwz     %r6,16(%r1)
-       lwz     %r7,20(%r1)
-       lwz     %r8,24(%r1)
-       lwz     %r9,28(%r1)
-       lwz     %r10,32(%r1)
-       lwz     %r20,36(%r1)
-       addi    %r1,%r1,0x100
-       blr
diff --git a/boot/freeldr/freeldr/arch/powerpc/prep.c 
b/boot/freeldr/freeldr/arch/powerpc/prep.c
deleted file mode 100644
index 0d33e921bc4..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/prep.c
+++ /dev/null
@@ -1,148 +0,0 @@
-#include "freeldr.h"
-#include "machine.h"
-#include "ppcmmu/mmu.h"
-#include "prep.h"
-
-int prep_serial = 0x800003f8;
-extern int mem_range_end;
-
-void sync() { __asm__("eieio\n\tsync"); }
-
-/* Simple serial */
-
-void PpcPrepPutChar( int ch ) {
-    if( ch == 0x0a ) {
-    SetPhysByte(prep_serial, 0x0d);
-    sync();
-    }
-    SetPhysByte(prep_serial, ch);
-    sync();
-}
-
-BOOLEAN PpcPrepDiskReadLogicalSectors
-( ULONG DriveNumber, ULONGLONG SectorNumber,
-  ULONG SectorCount, PVOID Buffer ) {
-    int secct;
-
-    for(secct = 0; secct < SectorCount; secct++)
-    {
-    ide_seek(&ide1_desc, SectorNumber + secct, 0);
-    ide_read(&ide1_desc, ((PCHAR)Buffer) + secct * 512, 512);
-    }
-    /* Never give up! */
-    return TRUE;
-}
-
-BOOLEAN PpcPrepConsKbHit()
-{
-    return 1;
-    //return GetPhysByte(prep_serial+5) & 1;
-}
-
-int PpcPrepConsGetCh()
-{
-    while(!PpcPrepConsKbHit());
-    return GetPhysByte(prep_serial);
-}
-
-void PpcPrepVideoClearScreen(UCHAR Attr)
-{
-    printf("\033c");
-}
-
-VIDEODISPLAYMODE PpcPrepVideoSetDisplayMode( char *DisplayMode, BOOLEAN Init )
-{
-    return VideoTextMode;
-}
-
-void PpcPrepVideoGetDisplaySize( PULONG Width, PULONG Height, PULONG Depth )
-{
-    *Width = 80;
-    *Height = 25;
-    *Depth = 16;
-}
-
-VOID PpcInitializeMmu(int max);
-
-ULONG PpcPrepGetMemoryMap( PBIOS_MEMORY_MAP BiosMemoryMap,
-               ULONG MaxMemoryMapSize )
-{
-    // Probe memory
-    paddr_t physAddr;
-    register int oldStore = 0, newStore = 0, change = 0, oldmsr;
-
-    __asm__("mfmsr %0\n" : "=r" (oldmsr));
-    change = oldmsr & 0x6fff;
-    __asm__("mtmsr %0\n" : : "r" (change));
-
-    // Find the last ram address in physical space ... this bypasses mapping
-    // but could run into non-ram objects right above ram.  Usually systems
-    // aren't designed like that though.
-    for (physAddr = 0x40000, change = newStore;
-         (physAddr < 0x80000000) && (change == newStore);
-         physAddr += 1 << 12)
-    {
-        oldStore = GetPhys(physAddr);
-        newStore = (physAddr & 0x1000) ? 0x55aa55aa : 0xaa55aa55;
-        SetPhys(physAddr, newStore);
-        change = GetPhys(physAddr);
-        SetPhys(physAddr, oldStore);
-    }
-    // Back off by one page
-    physAddr -= 0x1000;
-    BiosMemoryMap[0].BaseAddress = 0x30000; // End of ppcmmu
-    BiosMemoryMap[0].Type = BiosMemoryUsable;
-    BiosMemoryMap[0].Length = physAddr - BiosMemoryMap[0].BaseAddress;
-
-    __asm__("mtmsr %0\n" : : "r" (oldmsr));
-
-    mem_range_end = physAddr;
-
-    printf("Actual RAM: %d Mb\n", physAddr >> 20);
-    return 1;
-}
-
-/* Most PReP hardware is in standard locations, based on the corresponding
- * hardware on PCs. */
-PCONFIGURATION_COMPONENT_DATA PpcPrepHwDetect() {
-  PCONFIGURATION_COMPONENT_DATA SystemKey;
-
-  /* Create the 'System' key */
-  FldrCreateSystemKey(&SystemKey);
-
-  printf("DetectHardware() Done\n");
-  return SystemKey;
-}
-
-VOID
-PpcPrepHwIdle(VOID)
-{
-    /* UNIMPLEMENTED */
-}
-
-void PpcPrepInit()
-{
-    MachVtbl.ConsPutChar = PpcPrepPutChar;
-
-    printf("Serial on\n");
-
-    ide_setup( &ide1_desc );
-
-    MachVtbl.DiskReadLogicalSectors = PpcPrepDiskReadLogicalSectors;
-
-    MachVtbl.ConsKbHit   = PpcPrepConsKbHit;
-    MachVtbl.ConsGetCh   = PpcPrepConsGetCh;
-
-    MachVtbl.VideoClearScreen = PpcPrepVideoClearScreen;
-    MachVtbl.VideoSetDisplayMode = PpcPrepVideoSetDisplayMode;
-    MachVtbl.VideoGetDisplaySize = PpcPrepVideoGetDisplaySize;
-
-    MachVtbl.GetMemoryMap = PpcPrepGetMemoryMap;
-    MachVtbl.HwDetect = PpcPrepHwDetect;
-    MachVtbl.HwIdle = PcPrepHwIdle;
-
-    printf( "FreeLDR version [%s]\n", FrLdrVersionString );
-
-    BootMain( "" );
-}
-
diff --git a/boot/freeldr/freeldr/arch/powerpc/prep.h 
b/boot/freeldr/freeldr/arch/powerpc/prep.h
deleted file mode 100644
index c539b88bc8c..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/prep.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-
-extern struct _pci_desc pci1_desc;
-extern struct _idectl_desc ide1_desc;
-extern struct _vga_desc vga1_desc;
-struct _pci_bar {
-    unsigned long data;
-};
-
-void sync( void );
-void PpcPrepInit( void );
-void ide_seek( void *extension, int low, int high );
-int  ide_read( void *extension, char *buffer, int bytes );
-void ide_setup( void *extension );
-
-void print_bar( struct _pci_bar *bar );
-void pci_setup
-( PCONFIGURATION_COMPONENT_DATA pci_bus,
-  struct _pci_desc *pci_desc );
-void pci_read_bar
-( struct _pci_desc *pci_desc,
-  int bus, int dev, int fn, int bar,
-  struct _pci_bar *bar_data );
-
-void vga_setup
-( PCONFIGURATION_COMPONENT_DATA pci_bus,
-  struct _pci_desc *pci_desc, struct _vga_desc *vga_desc,
-  int bus, int dev, int fn );
diff --git a/boot/freeldr/freeldr/arch/powerpc/prep_ide.c 
b/boot/freeldr/freeldr/arch/powerpc/prep_ide.c
deleted file mode 100644
index a96bf4d14f2..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/prep_ide.c
+++ /dev/null
@@ -1,106 +0,0 @@
-#include "freeldr.h"
-#include "machine.h"
-#include "ppcmmu/mmu.h"
-#include "prep.h"
-
-#define SWAP_W(x) ((((x) & 0xff) << 8) | (((x) >> 8) & 0xff))
-
-typedef struct _idectl_desc {
-    int port;
-    long long seekto;
-    int seek_cylinder, seek_head, seek_sector;
-    int cylinders, heads, sectors, bytespersec;
-} idectl_desc;
-
-idectl_desc ide1_desc = { 0x800001f0 };
-
-void ide_seek( void *extension, int low, int high ) {
-    idectl_desc *desc = (idectl_desc *)extension;
-    long long seekto = ((((long long)high) << 32) | (low & 0xffffffff));
-    /* order = sector, head, cylinder */
-    desc->seek_sector = seekto % desc->sectors;
-    seekto /= desc->sectors;
-    desc->seek_head = seekto % desc->heads;
-    seekto /= desc->heads;
-    desc->seek_cylinder = seekto;
-    desc->seekto = seekto;
-}
-
-/* Thanks chuck moore.  This is based on the color forth ide code */
-/* Wait for ready */
-void ide_rdy( void *extension ) {
-    idectl_desc *desc = (idectl_desc *)extension;
-    while( !(GetPhysByte(desc->port+7) & 0x40) ) sync();
-}
-
-void ide_drq( void *extension ) {
-    idectl_desc *desc = (idectl_desc *)extension;
-    while( !(GetPhysByte(desc->port+7) & 0x08) ) sync();
-}
-
-void ide_bsy( void *extension ) {
-    idectl_desc *desc = (idectl_desc *)extension;
-    while( GetPhysByte(desc->port+7) & 0x80 )
-    {
-    printf("Waiting for not busy\n");
-    sync();
-    }
-}
-
-int ide_read( void *extension, char *buffer, int bytes ) {
-    idectl_desc *desc = (idectl_desc *)extension;
-    short *databuf = (short *)buffer;
-    int inwords;
-
-    ide_bsy( extension );
-    SetPhysByte(desc->port+2, bytes / desc->bytespersec);
-    SetPhysByte(desc->port+3, desc->seek_sector + 1);
-    SetPhysByte(desc->port+4, desc->seek_cylinder);
-    SetPhysByte(desc->port+5, desc->seek_cylinder >> 8);
-    SetPhysByte(desc->port+6, desc->seek_head | 0xa0);
-    SetPhysByte(desc->port+7, 0x20);
-
-    for( inwords = 0; inwords < desc->bytespersec / sizeof(short); inwords++ ) 
{
-    databuf[inwords] = GetPhysHalf(desc->port);
-    }
-
-    desc->seekto += desc->bytespersec;
-    ide_seek( extension, desc->seekto, desc->seekto >> 32 );
-
-    return bytes - (bytes % desc->bytespersec);
-}
-
-void ide_setup( void *extension ) {
-    idectl_desc *desc = (idectl_desc *)extension;
-    short identbuffer[256];
-    char namebuf[41];
-    short *databuf = (short *)identbuffer, in;
-    int inwords;
-
-    ide_rdy( extension );
-    ide_bsy( extension );
-    desc->bytespersec = 512;
-    SetPhysByte(desc->port+2, 1);
-    SetPhysByte(desc->port+3, 0);
-    SetPhysByte(desc->port+4, 0);
-    SetPhysByte(desc->port+5, 0);
-    SetPhysByte(desc->port+6, 0);
-    SetPhysByte(desc->port+7, 0xec);
-    ide_drq( extension );
-
-    for( inwords = 0; inwords < desc->bytespersec / sizeof(short); inwords++ ) 
{
-    in = GetPhysHalf(desc->port);
-    databuf[inwords] = SWAP_W(in);
-    sync();
-    }
-
-    desc->cylinders = identbuffer[1];
-    desc->heads = identbuffer[3];
-    desc->sectors = identbuffer[6];
-
-    /* Debug: Write out hard disc model */
-
-    strncpy(namebuf, (char *)(identbuffer+0x1b), 41);
-    printf("HARD DISC MODEL: %s c,h,s %d,%d,%d\n",
-       namebuf, desc->cylinders, desc->heads, desc->sectors);
-}
diff --git a/boot/freeldr/freeldr/arch/powerpc/prep_pci.c 
b/boot/freeldr/freeldr/arch/powerpc/prep_pci.c
deleted file mode 100644
index df92704e1a4..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/prep_pci.c
+++ /dev/null
@@ -1,127 +0,0 @@
-#include <freeldr.h>
-#include "prep.h"
-
-typedef struct _pci_cfg {
-    unsigned long addr;
-    unsigned long data;
-} pci_cfg;
-
-typedef struct _pci_desc {
-    pci_cfg *cfg;
-} pci_desc;
-
-pci_desc pci1_desc = { (void *)0x80000cf8 };
-#define rev16(x) ((((x)>>8)&0xff)|(((x)&0xff)<<8))
-#define rev32(x) 
((((x)>>24)&0xff)|(((x)>>8)&0xff00)|(((x)&0xff00)<<8)|(((x)&0xff)<<24))
-#define pci_addr(bus,dev,fn,reg) \
-         (0x80000000 | \
-          ((bus & 0xff) << 16) | \
-          ((dev & 0x1f) << 11) | \
-          ((fn & 7) << 8) | \
-          (reg & 0xfc))
-#if 0
-#define pci_cfg_addr(bus,dev,fn,reg) \
-        ((bus == 0) ? \
-         ((1 << (dev + 16)) | \
-          (dev << 11) | \
-          (fn << 8) | \
-          ((reg & 0xfc) | 1)) : pci_addr(bus,dev,fn,reg))
-#else
-#define pci_cfg_addr(bus,dev,fn,reg) pci_addr(bus,dev,fn,reg)
-#endif
-    unsigned long pci_read( pci_desc *desc, int bus, int dev, int fn, int reg, 
int len ) {
-    sync();
-    unsigned long save_state = desc->cfg->addr, ret = 0;
-    unsigned long addr = pci_cfg_addr(bus,dev,fn,reg);
-    unsigned long offset = reg & 3;
-    desc->cfg->addr = rev32(addr);
-    sync();
-    switch( len ) {
-    case 4:
-        ret = desc->cfg->data;
-        break;
-    case 2:
-        ret = desc->cfg->data;
-        ret = (ret >> (offset << 3)) & 0xffff;
-        break;
-    case 1:
-        ret = desc->cfg->data;
-        ret = (ret >> (offset << 3)) & 0xff;
-        break;
-    }
-    desc->cfg->addr = save_state;
-    sync();
-    return ret;
-    }
-
-void pci_read_bar( pci_desc *desc, int bus, int dev, int fn, int bar,
-           struct _pci_bar *bar_data ) {
-    bar_data->data = pci_read( desc, bus, dev, fn, 0x10 + (bar * 4), 4 );
-}
-
-/*
- * Imagine: offset 3, len 1
- * let oldval = 0x12345678 and val = 0xabcd1234;
- * mask = ((1 << 8) - 1) << 24; // 0xff000000
- * oldval = (0x12345678 & 0x00ffffff) | (0xabcd1234 & 0xff000000) = 0xab345678;
- */
-void pci_write( pci_desc *desc, int bus, int dev, int fn, int reg, int len, 
int val ) {
-    unsigned long save_state = desc->cfg->addr;
-    unsigned long addr = pci_cfg_addr(bus,dev,fn,reg);
-    unsigned long offset = reg & 3;
-    unsigned long oldval = pci_read( desc, bus, dev, fn, reg & ~3, 4 );
-    unsigned long mask = ((1 << (len * 8)) - 1) << (offset << 3);
-    oldval = (oldval & ~mask) | ((val << (offset << 3)) & mask);
-    desc->cfg->addr = rev32(addr);
-    sync();
-    desc->cfg->data = rev32(oldval);
-    sync();
-    desc->cfg->addr = save_state;
-    sync();
-}
-
-void pci_write_bar( pci_desc *desc, int bus, int dev, int fn, int bar, struct 
_pci_bar *bar_data ) {
-    pci_write( desc, bus, dev, fn, 0x10 + (bar * 4), 4, bar_data->data );
-}
-
-void print_bar( struct _pci_bar *bar ) {
-    printf("BAR: %x\n", bar->data);
-}
-
-#define PCI_VENDORID 0
-#define PCI_DEVICEID 2
-#define PCI_HEADER_TYPE 0xe
-#define PCI_BASECLASS   0xb
-
-void pci_setup( PCONFIGURATION_COMPONENT_DATA pcibus, pci_desc *desc ) {
-    unsigned char type;
-    unsigned short vendor, device, devclass;
-    int funcs, bus, dev, fn;
-
-    pci1_desc.cfg = (pci_cfg *)0x80000cf8;
-
-    printf("PCI Bus:\n");
-    for( bus = 0; bus < 1; bus++ ) {
-        for( dev = 0; dev < 32; dev++ ) {
-            type = pci_read(desc,bus,dev,0,PCI_HEADER_TYPE,1);
-            vendor = pci_read(desc,bus,dev,0,PCI_VENDORID,2);
-            device = pci_read(desc,bus,dev,0,PCI_DEVICEID,2);
-
-            if(vendor == 0 || vendor == 0xffff) continue;
-            if(type & 0x80) funcs = 8; else funcs = 1;
-
-            for( fn = 0; fn < funcs; fn++ ) {
-                devclass = pci_read(desc,bus,dev,fn,PCI_BASECLASS,1);
-        printf(" %d:%d -> vendor:device:class %x:%x:%x\n",
-               bus, dev, vendor, device, devclass);
-
-                if( devclass == 3 ) {
-            printf("Setting up vga...\n");
-                    vga_setup(pcibus,desc,&vga1_desc,bus,dev,fn);
-            printf("Done with vga\n");
-                }
-            }
-        }
-    }
-    printf("^-- end PCI\n");
-}
diff --git a/boot/freeldr/freeldr/arch/powerpc/prep_vga.c 
b/boot/freeldr/freeldr/arch/powerpc/prep_vga.c
deleted file mode 100644
index ee8fdbbf4e7..00000000000
--- a/boot/freeldr/freeldr/arch/powerpc/prep_vga.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <freeldr.h>
-#include "prep.h"
-
-struct _vga_desc {
-    char *port;
-    char *addr;
-};
-
-#define VGA_WIDTH 1024
-#define VGA_HEIGHT 768
-struct _vga_desc vga1_desc = { (char *)0x800003c0 };
-
-void vga_setup( PCONFIGURATION_COMPONENT_DATA pcibus,
-                struct _pci_desc *desc, struct _vga_desc *vga_desc,
-        int bus, int dev, int fn ) {
-    struct _pci_bar bar_data;
-    int i;
-
-    for( i = 0; i < 6; i++ ) {
-        pci_read_bar( desc, bus, dev, fn, i, &bar_data );
-        print_bar( &bar_data );
-        if( (bar_data.data > 0x10000) || ((bar_data.data&1) == 1) ) {
-            vga_desc->addr = (char *)(0xc0000000 + (bar_data.data & ~0x7ff));
-//        BootInfo.dispDeviceBase = vga_desc->addr;
-            break;
-        }
-    }
-}
diff --git a/boot/freeldr/freeldr/include/arch/powerpc/hardware.h 
b/boot/freeldr/freeldr/include/arch/powerpc/hardware.h
deleted file mode 100644
index fcf663ad50a..00000000000
--- a/boot/freeldr/freeldr/include/arch/powerpc/hardware.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  FreeLoader
- *
- *  Copyright (C) 2003  Eric Kohl
- *
- *  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.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#pragma once
-
-#ifndef __REGISTRY_H
-#include "../../reactos/registry.h"
-#endif
-
-/* PROTOTYPES ***************************************************************/
-
-/* hardware.c */
-
-VOID StallExecutionProcessor(ULONG Microseconds);
-
-VOID HalpCalibrateStallExecution(VOID);
-
-ULONGLONG RDTSC(VOID);
-
-/* EOF */
diff --git a/boot/freeldr/freeldr/include/of.h 
b/boot/freeldr/freeldr/include/of.h
deleted file mode 100644
index 76c9d2162ce..00000000000
--- a/boot/freeldr/freeldr/include/of.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#define OF_FAILED 0
-#define ERR_NOT_FOUND 0xc0000010
-
-#include "of_call.h"
-#include <string.h>
-
-typedef int (*of_proxy)
-    ( int table_off, void *arg1, void *arg2, void *arg3, void *arg4, void 
*arg5, void *arg6 );
-typedef long jmp_buf[100];
-extern of_proxy ofproxy;
-
-int setjmp( jmp_buf buf );
-int longjmp( jmp_buf buf, int retval );
-int ofw_callmethod_ret(const char *method, int handle, int nargs, int *args, 
int ret);
diff --git a/hal/CMakeLists.txt b/hal/CMakeLists.txt
index f11bad8f864..299dc891acc 100644
--- a/hal/CMakeLists.txt
+++ b/hal/CMakeLists.txt
@@ -4,6 +4,4 @@ if((ARCH STREQUAL "i386") OR (ARCH STREQUAL "amd64"))
     add_subdirectory(halx86)
 elseif(ARCH STREQUAL "arm")
     add_subdirectory(halarm)
-elseif(ARCH STREQUAL "powerpc")
-#    add_subdirectory(halppc)
 endif()
diff --git a/hal/halppc/generic/beep.c b/hal/halppc/generic/beep.c
deleted file mode 100644
index 178b7755086..00000000000
--- a/hal/halppc/generic/beep.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS kernel
- * FILE:            hal/halppc/generic/beep.c
- * PURPOSE:         Speaker function (it's only one)
- * PROGRAMMER:      Eric Kohl
- * UPDATE HISTORY:
- *                  Created 31/01/99
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <hal.h>
-#define NDEBUG
-#include <debug.h>
-
-
-/* CONSTANTS *****************************************************************/
-
-#define TIMER2     0x42
-#define TIMER3     0x43
-#define PORT_B     0x61
-#define CLOCKFREQ  1193167
-
-
-/* FUNCTIONS *****************************************************************/
-/*
- * FUNCTION: Beeps the speaker.
- * ARGUMENTS:
- *       Frequency = If 0, the speaker will be switched off, otherwise
- *                   the speaker beeps with the specified frequency.
- */
-
-BOOLEAN
-NTAPI
-HalMakeBeep (
-       ULONG   Frequency
-       )
-{
-    return TRUE;
-}
-
diff --git a/hal/halppc/generic/bus.c b/hal/halppc/generic/bus.c
deleted file mode 100644
index 23a9a07c8a4..00000000000
--- a/hal/halppc/generic/bus.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * PROJECT:         ReactOS HAL
- * LICENSE:         GPL - See COPYING in the top level directory
- * FILE:            hal/halppc/generic/bus.c
- * PURPOSE:         Bus Support Routines
- * PROGRAMMERS:     Alex Ionescu ([email protected])
- */
-
-/* INCLUDES ******************************************************************/
-
-#include <hal.h>
-#define NDEBUG
-#include <debug.h>
-
-/* GLOBALS *******************************************************************/
-
-ULONG HalpBusType;
-
-/* PRIVATE FUNCTIONS *********************************************************/
-
-VOID
-NTAPI
-HalpRegisterKdSupportFunctions(VOID)
-{
-    /* Register PCI Device Functions */
-    KdSetupPciDeviceForDebugging = HalpSetupPciDeviceForDebugging;
-    KdReleasePciDeviceforDebugging = HalpReleasePciDeviceForDebugging;
-
-    /* Register memory functions */
-    KdMapPhysicalMemory64 = HalpMapPhysicalMemory64;
-    KdUnmapVirtualAddress = HalpUnmapVirtualAddress;
-
-    /* Register ACPI stub */
-    KdCheckPowerButton = HalpCheckPowerButton;
-}
-
-NTSTATUS
-NTAPI
-HalpAssignSlotResources(IN PUNICODE_STRING RegistryPath,
-                        IN PUNICODE_STRING DriverClassName,
-                        IN PDRIVER_OBJECT DriverObject,
-                        IN PDEVICE_OBJECT DeviceObject,
-                        IN INTERFACE_TYPE BusType,
-                        IN ULONG BusNumber,
-                        IN ULONG SlotNumber,
-                        IN OUT PCM_RESOURCE_LIST *AllocatedResources)
-{
-    BUS_HANDLER BusHandler;
-    PAGED_CODE();
-
-    /* Only PCI is supported */
-    if (BusType != PCIBus) return STATUS_NOT_IMPLEMENTED;
-
-    /* Setup fake PCI Bus handler */
-    RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, sizeof(BUS_HANDLER));
-    BusHandler.BusNumber = BusNumber;
-
-    /* Call the PCI function */
-    return HalpAssignPCISlotResources(&BusHandler,
-                                      &BusHandler,
-                                      RegistryPath,
-                                      DriverClassName,
-                                      DriverObject,
-                                      DeviceObject,
-                                      SlotNumber,
-                                      AllocatedResources);
-}
-
-BOOLEAN
-NTAPI
-HalpTranslateBusAddress(IN INTERFACE_TYPE InterfaceType,
-                        IN ULONG BusNumber,
-                        IN PHYSICAL_ADDRESS BusAddress,
-                        IN OUT PULONG AddressSpace,
-                        OUT PPHYSICAL_ADDRESS TranslatedAddress)
-{
-    /* Translation is easy */
-    TranslatedAddress->QuadPart = BusAddress.QuadPart;
-    return TRUE;
-}
-
-ULONG
-NTAPI
-HalpGetSystemInterruptVector(IN ULONG BusNumber,
-                             IN ULONG BusInterruptLevel,
-                             IN ULONG BusInterruptVector,
-                             OUT PKIRQL Irql,
-                             OUT PKAFFINITY Affinity)
-{
-    ULONG Vector = IRQ2VECTOR(BusInterruptLevel);
-    *Irql = (KIRQL)VECTOR2IRQL(Vector);
-    *Affinity = 0xFFFFFFFF;
-    return Vector;
-}
-
-BOOLEAN
-NTAPI
-HalpFindBusAddressTranslation(IN PHYSICAL_ADDRESS BusAddress,
-                              IN OUT PULONG AddressSpace,
-                              OUT PPHYSICAL_ADDRESS TranslatedAddress,
-                              IN OUT PULONG_PTR Context,
-                              IN BOOLEAN NextBus)
-{
-    /* Make sure we have a context */
-    if (!Context) return FALSE;
-
-    /* If we have data in the context, then this shouldn't be a new lookup */
-    if ((*Context != 0) && (NextBus != FALSE)) return FALSE;
-
-    /* Return bus data */
-    TranslatedAddress->QuadPart = BusAddress.QuadPart;
-
-    /* Set context value and return success */
-    *Context = 1;
-    return TRUE;
-}
-
-VOID
-NTAPI
-HalpInitNonBusHandler(VOID)
-{
-    /* These should be written by the PCI driver later, but we give defaults */
-    HalPciTranslateBusAddress = HalpTranslateBusAddress;
-    HalPciAssignSlotResources = HalpAssignSlotResources;
-    HalFindBusAddressTranslation = HalpFindBusAddressTranslation;
-}
-
-/* PUBLIC FUNCTIONS **********************************************************/
-
-/*
- * @implemented
- */
-NTSTATUS
-NTAPI
-HalAdjustResourceList(IN PCM_RESOURCE_LIST Resources)
-{
-    /* Deprecated, return success */
-    return STATUS_SUCCESS;
-}
-
-/*
- * @implemented
- */
-NTSTATUS
-NTAPI
-HalAssignSlotResources(IN PUNICODE_STRING RegistryPath,
-                       IN PUNICODE_STRING DriverClassName,
-                       IN PDRIVER_OBJECT DriverObject,
-                       IN PDEVICE_OBJECT DeviceObject,
-                       IN INTERFACE_TYPE BusType,
-                       IN ULONG BusNumber,
-                       IN ULONG SlotNumber,
-                       IN OUT PCM_RESOURCE_LIST *AllocatedResources)
-{
-    /* Check the bus type */
-    if (BusType != PCIBus)
-    {
-        /* Call our internal handler */
-        return HalpAssignSlotResources(RegistryPath,
-                                       DriverClassName,
-                                       DriverObject,
-                                       DeviceObject,
-                                       BusType,
-                                       BusNumber,
-                                       SlotNumber,
-                                       AllocatedResources);
-    }
-    else
-    {
-        /* Call the PCI registered function */
-        return HalPciAssignSlotResources(RegistryPath,
-                                         DriverClassName,
-                                         DriverObject,
-                                         DeviceObject,
-                                         PCIBus,
-                                         BusNumber,
-                                         SlotNumber,
-                                         AllocatedResources);
-    }
-}
-
-/*
- * @implemented
- */
-ULONG
-NTAPI
-HalGetBusData(IN BUS_DATA_TYPE BusDataType,
-              IN ULONG BusNumber,
-              IN ULONG SlotNumber,
-              IN PVOID Buffer,
-              IN ULONG Length)
-{
-    /* Call the extended function */
-    return HalGetBusDataByOffset(BusDataType,
-                                 BusNumber,
-                                 SlotNumber,
-                                 Buffer,
-                                 0,
-                                 Length);
-}
-
-/*
- * @implemented
- */
-ULONG
-NTAPI
-HalGetBusDataByOffset(IN BUS_DATA_TYPE BusDataType,
-                      IN ULONG BusNumber,
-                      IN ULONG SlotNumber,
-                      IN PVOID Buffer,
-                      IN ULONG Offset,
-                      IN ULONG Length)
-{
-    BUS_HANDLER BusHandler;
-
-    /* Look as the bus type */
-    if (BusDataType == Cmos)
-    {
-        /* Call CMOS Function */
-        return HalpGetCmosData(0, SlotNumber, Buffer, Length);
-    }
-    else if (BusDataType == EisaConfiguration)
-    {
-        /* FIXME: TODO */
-        ASSERT(FALSE);
-    }
-    else if ((BusDataType == PCIConfiguration) &&
-             (HalpPCIConfigInitialized) &&
-             ((BusNumber >= HalpMinPciBus) && (BusNumber <= HalpMaxPciBus)))
-    {
-        /* Setup fake PCI Bus handler */
-        RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, 
sizeof(BUS_HANDLER));
-        BusHandler.BusNumber = BusNumber;
-
-        /* Call PCI function */
-        return HalpGetPCIData(&BusHandler,
-                              &BusHandler,
-                              *(PPCI_SLOT_NUMBER)&SlotNumber,
-                              Buffer,
-                              Offset,
-                              Length);
-    }
-
-    /* Invalid bus */
-    return 0;
-}
-
-/*
- * @implemented
- */
-ULONG
-NTAPI
-HalGetInterruptVector(IN INTERFACE_TYPE InterfaceType,
-                      IN ULONG BusNumber,
-                      IN ULONG BusInterruptLevel,
-                      IN ULONG BusInterruptVector,
-                      OUT PKIRQL Irql,
-                      OUT PKAFFINITY Affinity)
-{
-    /* Call the system bus translator */
-    return HalpGetSystemInterruptVector(BusNumber,
-                                        BusInterruptLevel,
-                                        BusInterruptVector,
-                                        Irql,
-                                        Affinity);
-}
-
-/*
- * @implemented
- */
-ULONG
-NTAPI
-HalSetBusData(IN BUS_DATA_TYPE BusDataType,
-              IN ULONG BusNumber,
-              IN ULONG SlotNumber,
-              IN PVOID Buffer,
-              IN ULONG Length)
-{
-    /* Call the extended function */
-    return HalSetBusDataByOffset(BusDataType,
-                                 BusNumber,
-                                 SlotNumber,
-                                 Buffer,
-                                 0,
-                                 Length);
-}
-
-/*
- * @implemented
- */
-ULONG
-NTAPI
-HalSetBusDataByOffset(IN BUS_DATA_TYPE BusDataType,
-                      IN ULONG BusNumber,
-                      IN ULONG SlotNumber,
-                      IN PVOID Buffer,
-                      IN ULONG Offset,
-                      IN ULONG Length)
-{
-    BUS_HANDLER BusHandler;
-
-    /* Look as the bus type */
-    if (BusDataType == Cmos)
-    {
-        /* Call CMOS Function */
-        return HalpSetCmosData(0, SlotNumber, Buffer, Length);
-    }
-    else if ((BusDataType == PCIConfiguration) && (HalpPCIConfigInitialized))
-    {
-        /* Setup fake PCI Bus handler */
-        RtlCopyMemory(&BusHandler, &HalpFakePciBusHandler, 
sizeof(BUS_HANDLER));
-        BusHandler.BusNumber = BusNumber;
-
-        /* Call PCI function */
-        return HalpSetPCIData(&BusHandler,
-                              &BusHandler,
-                              *(PPCI_SLOT_NUMBER)&SlotNumber,
-                              Buffer,
-                              Offset,
-                              Length);
-    }
-
-    /* Invalid bus */
-    return 0;
-}
-
-/*
- * @implemented
- */
-BOOLEAN
-NTAPI
-HalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType,
-                       IN ULONG BusNumber,
-                       IN PHYSICAL_ADDRESS BusAddress,
-                       IN OUT PULONG AddressSpace,
-                       OUT PPHYSICAL_ADDRESS TranslatedAddress)
-{
-    /* Look as the bus type */
-    if (InterfaceType == PCIBus)
-    {
-        /* Call the PCI registered function */
-        return HalPciTranslateBusAddress(PCIBus,
-                                         BusNumber,
-                                         BusAddress,
-                                         AddressSpace,
-                                         TranslatedAddress);
-    }
-    else
-    {
-        /* Translation is easy */
-        TranslatedAddress->QuadPart = BusAddress.QuadPart;
-        return TRUE;
-    }
-}
-
-/* EOF */
diff --git a/hal/halppc/generic/cmos.c b/hal/halppc/generic/cmos.c
deleted file mode 100644
index faecb99cbb5..00000000000
--- a/hal/halppc/generic/cmos.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * PROJECT:         ReactOS HAL
- * LICENSE:         GPL - See COPYING in the top level directory
- * FILE:            hal/halppc/generic/cmos.c
- * PURPOSE:         CMOS Access Routines (Real Time Clock and LastKnownGood)
- * PROGRAMMERS:     Alex Ionescu ([email protected])
- *                  Eric Kohl
- */
-
-/* INCLUDES ******************************************************************/
-
-#include <hal.h>
-#define NDEBUG
-#include <debug.h>
-
-/* GLOBALS *******************************************************************/
-
-KSPIN_LOCK HalpSystemHardwareLock;
-
-/* PRIVATE FUNCTIONS *********************************************************/
-
-UCHAR
-FORCEINLINE
-HalpReadCmos(IN UCHAR Reg)
-{
-    /* Select the register */
-    WRITE_PORT_UCHAR(CMOS_CONTROL_PORT, Reg);
-
-    /* Query the value */
-    return READ_PORT_UCHAR(CMOS_DATA_PORT);
-}
-
-VOID
-FORCEINLINE
-HalpWriteCmos(IN UCHAR Reg,
-              IN UCHAR Value)
-{
-    /* Select the register */
-    WRITE_PORT_UCHAR(CMOS_CONTROL_PORT, Reg);
-
-    /* Write the value */
-    WRITE_PORT_UCHAR(CMOS_DATA_PORT, Value);
-}
-
-ULONG
-NTAPI
-HalpGetCmosData(IN ULONG BusNumber,
-                IN ULONG SlotNumber,
-                IN PVOID Buffer,
-                IN ULONG Length)
-{
-    PUCHAR Ptr = (PUCHAR)Buffer;
-    ULONG Address = SlotNumber;
-    ULONG Len = Length;
-
-    /* FIXME: Acquire CMOS Lock */
-
-    /* Do nothing if we don't have a length */
-    if (!Length) return 0;
-
-    /* Check if this is simple CMOS */
-    if (!BusNumber)
-    {
-        /* Loop the buffer up to 0xFF */
-        while ((Len > 0) && (Address < 0x100))
-        {
-            /* Read the data */
-            *Ptr = HalpReadCmos((UCHAR)Address);
-
-            /* Update position and length */
-            Ptr++;
-            Address++;
-            Len--;
-        }
-    }
-    else if (BusNumber == 1)
-    {
-        /* Loop the buffer up to 0xFFFF */
-        while ((Len > 0) && (Address < 0x10000))
-        {
-            /* Write the data */
-            *Ptr = HalpReadCmos((UCHAR)Address);
-
-            /* Update position and length */
-            Ptr++;
-            Address++;
-            Len--;
-        }
-    }
-
-    /* FIXME: Release the CMOS Lock */
-
-    /* Return length read */
-    return Length - Len;
-}
-
-ULONG
-NTAPI
-HalpSetCmosData(IN ULONG BusNumber,
-                IN ULONG SlotNumber,
-                IN PVOID Buffer,
-                IN ULONG Length)
-{
-    PUCHAR Ptr = (PUCHAR)Buffer;
-    ULONG Address = SlotNumber;
-    ULONG Len = Length;
-
-    /* FIXME: Acquire CMOS Lock */
-
-    /* Do nothing if we don't have a length */
-    if (!Length) return 0;
-
-    /* Check if this is simple CMOS */
-    if (!BusNumber)
-    {
-        /* Loop the buffer up to 0xFF */
-        while ((Len > 0) && (Address < 0x100))
-        {
-            /* Write the data */
-            HalpWriteCmos((UCHAR)Address, *Ptr);
-
-            /* Update position and length */
-            Ptr++;
-            Address++;
-            Len--;
-        }
-    }
-    else if (BusNumber == 1)
-    {
-        /* Loop the buffer up to 0xFFFF */
-        while ((Len > 0) && (Address < 0x10000))
-        {
-            /* Write the data */
-            HalpWriteCmos((UCHAR)Address, *Ptr);
-
-            /* Update position and length */
-            Ptr++;
-            Address++;
-            Len--;
-        }
-    }
-
-    /* FIXME: Release the CMOS Lock */
-
-    /* Return length read */
-    return Length - Len;
-}
-
-/* PUBLIC FUNCTIONS **********************************************************/
-
-/*
- * @implemented
- */
-ARC_STATUS
-NTAPI
-HalGetEnvironmentVariable(IN PCH Name,
-                          IN USHORT ValueLength,
-                          IN PCH Value)
-{
-    UCHAR Val;
-
-    /* Only variable supported on x86 */
-    if (_stricmp(Name, "LastKnownGood")) return ENOENT;
-
-    /* FIXME: Acquire CMOS Lock */
-
-    /* Query the current value */
-    Val = HalpReadCmos(RTC_REGISTER_B) & 0x01;
-
-    /* FIXME: Release CMOS lock */
-
-    /* Check the flag */
-    if (Val)
-    {
-        /* Return false */
-        strncpy(Value, "FALSE", ValueLength);
-    }
-    else
-    {
-        /* Return true */
-        strncpy(Value, "TRUE", ValueLength);
-    }
-
-    /* Return success */
-    return ESUCCESS;
-}
-
-/*
- * @implemented
- */
-ARC_STATUS
-NTAPI
-HalSetEnvironmentVariable(IN PCH Name,
-                          IN PCH Value)
-{
-    UCHAR Val;
-
-    /* Only variable supported on x86 */
-    if (_stricmp(Name, "LastKnownGood")) return ENOMEM;
-
-    /* Check if this is true or false */
-    if (!_stricmp(Value, "TRUE"))
-    {
-        /* It's true, acquire CMOS lock (FIXME) */
-
-        /* Read the current value and add the flag */
-        Val = HalpReadCmos(RTC_REGISTER_B) | 1;
-    }
-    else if (!_stricmp(Value, "FALSE"))
-    {
-        /* It's false, acquire CMOS lock (FIXME) */
-
-        /* Read the current value and mask out  the flag */
-        Val = HalpReadCmos(RTC_REGISTER_B) & ~1;
-    }
-    else
-    {
-        /* Fail */
-        return ENOMEM;
-    }
-
-    /* Write new value */
-    HalpWriteCmos(RTC_REGISTER_B, Val);
-
-    /* Release the lock and return success */
-    return ESUCCESS;
-}
-
-/*
- * @implemented
- */
-BOOLEAN
-NTAPI
-HalQueryRealTimeClock(OUT PTIME_FIELDS Time)
-{
-    /* FIXME: Acquire CMOS Lock */
-
-    /* Loop while update is in progress */
-    while ((HalpReadCmos(RTC_REGISTER_A)) & RTC_REG_A_UIP);
-
-    /* Set the time data */
-    Time->Second = BCD_INT(HalpReadCmos(0));
-    Time->Minute = BCD_INT(HalpReadCmos(2));
-    Time->Hour = BCD_INT(HalpReadCmos(4));
-    Time->Weekday = BCD_INT(HalpReadCmos(6));
-    Time->Day = BCD_INT(HalpReadCmos(7));
-    Time->Month = BCD_INT(HalpReadCmos(8));
-    Time->Year = BCD_INT(HalpReadCmos(9));
-    Time->Milliseconds = 0;
-
-    /* FIXME: Check century byte */
-
-    /* Compensate for the century field */
-    Time->Year += (Time->Year > 80) ? 1900: 2000;
-
-    /* FIXME: Release CMOS Lock */
-
-    /* Always return TRUE */
-    return TRUE;
-}
-
-/*
- * @implemented
- */
-BOOLEAN
-NTAPI
-HalSetRealTimeClock(IN PTIME_FIELDS Time)
-{
-    /* FIXME: Acquire CMOS Lock */
-
-    /* Loop while update is in progress */
-    while ((HalpReadCmos(RTC_REGISTER_A)) & RTC_REG_A_UIP);
-
-    /* Write time fields to CMOS RTC */
-    HalpWriteCmos(0, INT_BCD(Time->Second));
-    HalpWriteCmos(2, INT_BCD(Time->Minute));
-    HalpWriteCmos(4, INT_BCD(Time->Hour));
-    HalpWriteCmos(6, INT_BCD(Time->Weekday));
-    HalpWriteCmos(7, INT_BCD(Time->Day));
-    HalpWriteCmos(8, INT_BCD(Time->Month));
-    HalpWriteCmos(9, INT_BCD(Time->Year % 100));
-
-    /* FIXME: Set the century byte */
-
-    /* FIXME: Release the CMOS Lock */
-
-    /* Always return TRUE */
-    return TRUE;
-}
-
-/* EOF */
diff --git a/hal/halppc/generic/display.c b/hal/halppc/generic/display.c
deleted file mode 100644
index 846a37a1145..00000000000
--- a/hal/halppc/generic/display.c
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- *  ReactOS kernel
- *  Copyright (C) 1998, 1999, 2000, 2001, 2002 ReactOS Team
- *
- *  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.,
- *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS kernel
- * FILE:            hal/halppc/generic/display.c
- * PURPOSE:         Blue screen display
- * PROGRAMMER:      Eric Kohl
- * UPDATE HISTORY:
- *                  Created 08/10/99
- */
-
-/*
- * Portions of this code are from the XFree86 Project and available from the
- * following license:
- *
- * Copyright (C) 1994-2003 The XFree86 Project, Inc.  All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
- * XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
- * NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the XFree86 Project shall
- * not be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the
- * XFree86 Project.
-*/
-
-/* DISPLAY OWNERSHIP
- *
- * So, who owns the physical display and is allowed to write to it?
- *
- * In MS NT, upon boot HAL owns the display. Somewhere in the boot
- * sequence (haven't figured out exactly where or by who), some
- * component calls HalAcquireDisplayOwnership. From that moment on,
- * the display is owned by that component and is switched to graphics
- * mode. The display is not supposed to return to text mode, except
- * in case of a bug check. The bug check will call HalDisplayString
- * to output a string to the text screen. HAL will notice that it
- * currently doesn't own the display and will re-take ownership, by
- * calling the callback function passed to HalAcquireDisplayOwnership.
- * After the bugcheck, execution is halted. So, under NT, the only
- * possible sequence of display modes is text mode -> graphics mode ->
- * text mode (the latter hopefully happening very infrequently).
- *
- * Things are a little bit different in the current state of ReactOS.
- * We want to have a functional interactive text mode. We should be
- * able to switch from text mode to graphics mode when a GUI app is
- * started and switch back to text mode when it's finished. Then, when
- * another GUI app is started, another switch to and from graphics mode
- * is possible. Also, when the system bugchecks in graphics mode we want
- * to switch back to text mode to show the registers and stack trace.
- * Last but not least, HalDisplayString is used a lot more in ReactOS,
- * e.g. to print debug messages when the /DEBUGPORT=SCREEN boot option
- * is present.
- * 3 Components are involved in ReactOS: HAL, BLUE.SYS and VIDEOPRT.SYS.
- * As in NT, on boot HAL owns the display. When entering the text mode
- * command interpreter, BLUE.SYS kicks in. It will write directly to the
- * screen, more or less behind HALs back.
- * When a GUI app is started, WIN32K.SYS will open the DISPLAY device.
- * This open call will end up in VIDEOPRT.SYS. That component will then
- * take ownership of the display by calling HalAcquireDisplayOwnership.
- * When the GUI app terminates (WIN32K.SYS will close the DISPLAY device),
- * we want to give ownership of the display back to HAL. Using the
- * standard exported HAL functions, that's a bit of a problem, because
- * there is no function defined to do that. In NT, this is handled by
- * HalDisplayString, but that solution isn't satisfactory in ReactOS,
- * because HalDisplayString is (in some cases) also used to output debug
- * messages. If we do it the NT way, the first debug message output while
- * in graphics mode would switch the display back to text mode.
- * So, instead, if HalDisplayString detects that HAL doesn't have ownership
- * of the display, it doesn't do anything.
- * To return ownership to HAL, a new function is exported,
- * HalReleaseDisplayOwnership. This function is called by the DISPLAY
- * device Close routine in VIDEOPRT.SYS. It is also called at the beginning
- * of a bug check, so HalDisplayString is activated again.
- * Now, while the display is in graphics mode (not owned by HAL), BLUE.SYS
- * should also refrain from writing to the screen buffer. The text mode
- * screen buffer might overlap the graphics mode screen buffer, so changing
- * something in the text mode buffer might mess up the graphics screen. To
- * allow BLUE.SYS to detect if HAL owns the display, another new function is
- * exported, HalQueryDisplayOwnership. BLUE.SYS will call this function to
- * check if it's allowed to touch the text mode buffer.
- *
- * In an ideal world, when HAL takes ownership of the display, it should set
- * up the CRT using real-mode (actually V86 mode, but who cares) INT 0x10
- * calls. Unfortunately, this will require HAL to setup a real-mode interrupt
- * table etc. So, we chickened out of that by having the loader set up the
- * display before switching to protected mode. If HAL is given back ownership
- * after a GUI app terminates, the INT 0x10 calls are made by VIDEOPRT.SYS,
- * since there is already support for them via the VideoPortInt10 routine.
- */
-
-#include <hal.h>
-#include <ppcboot.h>
-#include <ppcdebug.h>
-
-#define NDEBUG
-#include <debug.h>
-
-boot_infos_t PpcEarlybootInfo;
-
-#define SCREEN_SYNCHRONIZATION
-
-/* VARIABLES ****************************************************************/
-
-static ULONG CursorX = 0;      /* Cursor Position */
-static ULONG CursorY = 0;
-static ULONG SizeX = 80;       /* Display size */
-static ULONG SizeY = 25;
-
-static BOOLEAN DisplayInitialized = FALSE;
-static BOOLEAN HalOwnsDisplay = TRUE;
-static ULONG GraphVideoBuffer = 0;
-static PHAL_RESET_DISPLAY_PARAMETERS HalResetDisplayParameters = NULL;
-
-extern UCHAR XboxFont8x16[];
-extern void SetPhys( ULONG Addr, ULONG Data );
-extern ULONG GetPhys( ULONG Addr );
-extern void SetPhysByte( ULONG Addr, ULONG Data );
-
-/* PRIVATE FUNCTIONS *********************************************************/
-
-VOID FASTCALL
-HalClearDisplay (UCHAR CharAttribute)
-{
-   ULONG i;
-   ULONG deviceSize =
-       PpcEarlybootInfo.dispDeviceRowBytes *
-       PpcEarlybootInfo.dispDeviceRect[3];
-   for(i = 0; i < deviceSize; i += sizeof(int) )
-       SetPhys(GraphVideoBuffer + i, CharAttribute);
-
-   CursorX = 0;
-   CursorY = 0;
-}
-
-
-/* STATIC FUNCTIONS *********************************************************/
-
-VOID STATIC
-HalScrollDisplay (VOID)
-{
-    ULONG i, deviceSize =
-       PpcEarlybootInfo.dispDeviceRowBytes *
-       PpcEarlybootInfo.dispDeviceRect[3];
-    ULONG Dest = (ULONG)GraphVideoBuffer,
-       Src = (ULONG)(GraphVideoBuffer + (16 * 
PpcEarlybootInfo.dispDeviceRowBytes));
-    ULONG End  = (ULONG)
-       GraphVideoBuffer +
-       (PpcEarlybootInfo.dispDeviceRowBytes *
-        (PpcEarlybootInfo.dispDeviceRect[3]-16));
-
-    while( Src < End )
-    {
-       SetPhys((ULONG)Dest, GetPhys(Src));
-       Src += 4; Dest += 4;
-    }
-
-    /* Clear the bottom row */
-    for(i = End; i < deviceSize; i += sizeof(int) )
-       SetPhys(GraphVideoBuffer + i, 1);
-}
-
-VOID STATIC FASTCALL
-HalPutCharacter (CHAR Character)
-{
-    WRITE_PORT_UCHAR((PVOID)0x3f8, Character);
-#if 0
-    int i,j,k;
-    ULONG Dest =
-       (GraphVideoBuffer +
-        (16 * PpcEarlybootInfo.dispDeviceRowBytes * CursorY) +
-        (8 * (PpcEarlybootInfo.dispDeviceDepth / 8) * CursorX)), RowDest;
-    UCHAR ByteToPlace;
-
-    for( i = 0; i < 16; i++ ) {
-       RowDest = Dest;
-       for( j = 0; j < 8; j++ ) {
-           ByteToPlace = ((128 >> j) & (XboxFont8x16[(16 * Character) + i])) ? 
0xff : 1;
-           for( k = 0; k < PpcEarlybootInfo.dispDeviceDepth / 8; k++, 
RowDest++ ) {
-               SetPhysByte(RowDest, ByteToPlace);
-           }
-       }
-       Dest += PpcEarlybootInfo.dispDeviceRowBytes;
-    }
-#endif
-}
-
-/* PRIVATE FUNCTIONS ********************************************************/
-
-VOID FASTCALL
-HalInitializeDisplay (PROS_LOADER_PARAMETER_BLOCK LoaderBlock)
-/*
- * FUNCTION: Initialize the display
- * ARGUMENTS:
- *         InitParameters = Parameters setup by the boot loader
- */
-{
-    if (! DisplayInitialized)
-    {
-      boot_infos_t *XBootInfo = (boot_infos_t *)LoaderBlock->ArchExtra;
-      GraphVideoBuffer = (ULONG)XBootInfo->dispDeviceBase;
-      memcpy(&PpcEarlybootInfo, XBootInfo, sizeof(*XBootInfo));
-
-      /* Set cursor position */
-      CursorX = 0;
-      CursorY = 0;
-
-      SizeX = XBootInfo->dispDeviceRowBytes / XBootInfo->dispDeviceDepth;
-      SizeY = XBootInfo->dispDeviceRect[3] / 16;
-
-      HalClearDisplay(1);
-
-      DisplayInitialized = TRUE;
-    }
-}
-
-
-/* PUBLIC FUNCTIONS *********************************************************/
-
-VOID NTAPI
-HalReleaseDisplayOwnership(VOID)
-/*
- * FUNCTION: Release ownership of display back to HAL
- */
-{
-  if (HalResetDisplayParameters == NULL)
-    return;
-
-  if (HalOwnsDisplay != FALSE)
-    return;
-
-  HalOwnsDisplay = TRUE;
-  HalClearDisplay(0);
-}
-
-
-VOID NTAPI
-HalAcquireDisplayOwnership(IN PHAL_RESET_DISPLAY_PARAMETERS 
ResetDisplayParameters)
-/*
- * FUNCTION:
- * ARGUMENTS:
- *         ResetDisplayParameters = Pointer to a driver specific
- *         reset routine.
- */
-{
-  HalOwnsDisplay = FALSE;
-  HalResetDisplayParameters = ResetDisplayParameters;
-}
-
-VOID NTAPI
-HalDisplayString(IN PCH String)
-/*
- * FUNCTION: Switches the screen to HAL console mode (BSOD) if not there
- * already and displays a string
- * ARGUMENT:
- *        string = ASCII string to display
- * NOTE: Use with care because there is no support for returning from BSOD
- * mode
- */
-{
-  PCH pch;
-  //static KSPIN_LOCK Lock;
-  KIRQL OldIrql;
-  BOOLEAN InterruptsEnabled = __readmsr();
-
-  /* See comment at top of file */
-  if (! HalOwnsDisplay || ! DisplayInitialized)
-    {
-      return;
-    }
-
-  pch = String;
-
-  KeRaiseIrql(HIGH_LEVEL, &OldIrql);
-  //KiAcquireSpinLock(&Lock);
-
-  _disable();
-
-  while (*pch != 0)
-    {
-      if (*pch == '\n')
-       {
-         CursorY++;
-         CursorX = 0;
-       }
-      else if (*pch == '\b')
-       {
-         if (CursorX > 0)
-           {
-             CursorX--;
-           }
-       }
-      else if (*pch != '\r')
-       {
-         HalPutCharacter (*pch);
-         CursorX++;
-
-         if (CursorX >= SizeX)
-           {
-             CursorY++;
-             CursorX = 0;
-           }
-       }
-
-      if (CursorY >= SizeY)
-       {
-         HalScrollDisplay ();
-         CursorY = SizeY - 1;
-       }
-
-      pch++;
-    }
-
-  __writemsr(InterruptsEnabled);
-
-  //KiReleaseSpinLock(&Lock);
-  KeLowerIrql(OldIrql);
-}
-
-VOID NTAPI
-HalQueryDisplayParameters(OUT PULONG DispSizeX,
-                         OUT PULONG DispSizeY,
-                         OUT PULONG CursorPosX,
-                         OUT PULONG CursorPosY)
-{
-  if (DispSizeX)
-    *DispSizeX = SizeX;
-  if (DispSizeY)
-    *DispSizeY = SizeY;
-  if (CursorPosX)
-    *CursorPosX = CursorX;
-  if (CursorPosY)
-    *CursorPosY = CursorY;
-}
-
-
-VOID NTAPI
-HalSetDisplayParameters(IN ULONG CursorPosX,
-                       IN ULONG CursorPosY)
-{
-  CursorX = (CursorPosX < SizeX) ? CursorPosX : SizeX - 1;
-  CursorY = (CursorPosY < SizeY) ? CursorPosY : SizeY - 1;
-}
-
-
-BOOLEAN NTAPI
-HalQueryDisplayOwnership(VOID)
-{
-  return !HalOwnsDisplay;
-}
-
-/* EOF */
diff --git a/hal/halppc/generic/dma.c b/hal/halppc/generic/dma.c
deleted file mode 100644
index fd50a00d349..00000000000
--- a/hal/halppc/generic/dma.c
+++ /dev/null
@@ -1,2020 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS kernel
- * FILE:            hal/halppc/generic/dma.c
- * PURPOSE:         DMA functions
- * PROGRAMMERS:     David Welch ([email protected])
- *                  Filip Navara ([email protected])
- * UPDATE HISTORY:
- *                  Created 22/05/98
- */
-
-/**
- * @page DMA Implementation Notes
- *
- * Concepts:
- *
- * - Map register
- *
- *   Abstract encapsulation of physically contiguous buffer that resides
- *   in memory accessible by both the DMA device / controller and the system.
- *   The map registers are allocated and distributed on demand and are
- *   scarce resource.
- *
- *   The actual use of map registers is to allow transfers from/to buffer
- *   located in physical memory at address inaccessible by the DMA device /
- *   controller directly. For such transfers the map register buffers
- *   are used as intermediate data storage.
- *
- * - Master adapter
- *
- *   A container for map registers (typically corresponding to one physical
- *   bus connection type). There can be master adapters for 24-bit address
- *   ranges, 32-bit address ranges, etc. Every time a new DMA adapter is
- *   created it's associated with a corresponding master adapter that
- *   is used for any map register allocation requests.
- *
- * - Bus-master / Slave DMA
- *
- *   Slave DMA is term used for DMA transfers done by the system (E)ISA
- *   controller as opposed to transfers mastered by the device itself
- *   (hence the name).
- *
- *   For slave DMA special care is taken to actually access the system
- *   controller and handle the transfers. The relevant code is in
- *   HalpDmaInitializeEisaAdapter, HalReadDmaCounter, IoFlushAdapterBuffers
- *   and IoMapTransfer.
- *
- * Implementation:
- *
- * - Allocation of map registers
- *
- *   Initial set of map registers is allocated on the system start to
- *   ensure that low memory won't get filled up later. Additional map
- *   registers are allocated as needed by HalpGrowMapBuffers. This
- *   routine is called on two places:
- *
- *   - HalGetAdapter, since we're at PASSIVE_LEVEL and it's known that
- *     more map registers will probably be needed.
- *   - IoAllocateAdapterChannel (indirectly using HalpGrowMapBufferWorker
- *     since we're at DISPATCH_LEVEL and call HalpGrowMapBuffers directly)
- *     when no more map registers are free.
- *
- *   Note that even if no more map registers can be allocated it's not
- *   the end of the world. The adapters waiting for free map registers
- *   are queued in the master adapter's queue and once one driver hands
- *   back it's map registers (using IoFreeMapRegisters or indirectly using
- *   the execution routine callback in IoAllocateAdapterChannel) the
- *   queue gets processed and the map registers are reassigned.
- */
-
-/* INCLUDES *****************************************************************/
-
-#include <hal.h>
-#define NDEBUG
-#include <debug.h>
-
-static KEVENT HalpDmaLock;
-static LIST_ENTRY HalpDmaAdapterList;
-static PADAPTER_OBJECT HalpEisaAdapter[8];
-static BOOLEAN HalpEisaDma;
-static PADAPTER_OBJECT HalpMasterAdapter;
-
-static const ULONG_PTR HalpEisaPortPage[8] = {
-   FIELD_OFFSET(DMA_PAGE, Channel0),
-   FIELD_OFFSET(DMA_PAGE, Channel1),
-   FIELD_OFFSET(DMA_PAGE, Channel2),
-   FIELD_OFFSET(DMA_PAGE, Channel3),
-   0,
-   FIELD_OFFSET(DMA_PAGE, Channel5),
-   FIELD_OFFSET(DMA_PAGE, Channel6),
-   FIELD_OFFSET(DMA_PAGE, Channel7)
-};
-
-static DMA_OPERATIONS HalpDmaOperations = {
-   sizeof(DMA_OPERATIONS),
-   (PPUT_DMA_ADAPTER)HalPutDmaAdapter,
-   (PALLOCATE_COMMON_BUFFER)HalAllocateCommonBuffer,
-   (PFREE_COMMON_BUFFER)HalFreeCommonBuffer,
-   NULL, /* Initialized in HalpInitDma() */
-   NULL, /* Initialized in HalpInitDma() */
-   NULL, /* Initialized in HalpInitDma() */
-   NULL, /* Initialized in HalpInitDma() */
-   NULL, /* Initialized in HalpInitDma() */
-   (PGET_DMA_ALIGNMENT)HalpDmaGetDmaAlignment,
-   (PREAD_DMA_COUNTER)HalReadDmaCounter,
-   /* FIXME: Implement the S/G funtions. */
-   NULL /*(PGET_SCATTER_GATHER_LIST)HalGetScatterGatherList*/,
-   NULL /*(PPUT_SCATTER_GATHER_LIST)HalPutScatterGatherList*/,
-   NULL 
/*(PCALCULATE_SCATTER_GATHER_LIST_SIZE)HalCalculateScatterGatherListSize*/,
-   NULL /*(PBUILD_SCATTER_GATHER_LIST)HalBuildScatterGatherList*/,
-   NULL 
/*(PBUILD_MDL_FROM_SCATTER_GATHER_LIST)HalBuildMdlFromScatterGatherList*/
-};
-
-#define MAX_MAP_REGISTERS 64
-
-#define TAG_DMA ' AMD'
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-HalpInitDma(VOID)
-{
-   /*
-    * Initialize the DMA Operation table
-    */
-   HalpDmaOperations.AllocateAdapterChannel = 
(PALLOCATE_ADAPTER_CHANNEL)IoAllocateAdapterChannel;
-   HalpDmaOperations.FlushAdapterBuffers = 
(PFLUSH_ADAPTER_BUFFERS)IoFlushAdapterBuffers;
-   HalpDmaOperations.FreeAdapterChannel = 
(PFREE_ADAPTER_CHANNEL)IoFreeAdapterChannel;
-   HalpDmaOperations.FreeMapRegisters = 
(PFREE_MAP_REGISTERS)IoFreeMapRegisters;
-   HalpDmaOperations.MapTransfer = (PMAP_TRANSFER)IoMapTransfer;
-
-   /*
-    * Check if Extended DMA is available. We're just going to do a random
-    * read and write.
-    */
-
-   WRITE_PORT_UCHAR((PUCHAR)FIELD_OFFSET(EISA_CONTROL, 
DmaController2Pages.Channel2), 0x2A);
-   if (READ_PORT_UCHAR((PUCHAR)FIELD_OFFSET(EISA_CONTROL, 
DmaController2Pages.Channel2)) == 0x2A)
-      HalpEisaDma = TRUE;
-
-   /*
-    * Intialize all the global variables and allocate master adapter with
-    * first map buffers.
-    */
-
-   InitializeListHead(&HalpDmaAdapterList);
-   KeInitializeEvent(&HalpDmaLock, NotificationEvent, TRUE);
-
-   HalpMasterAdapter = HalpDmaAllocateMasterAdapter();
-
-   /*
-    * Setup the HalDispatchTable callback for creating PnP DMA adapters. It's
-    * used by IoGetDmaAdapter in the kernel.
-    */
-
-   HalGetDmaAdapter = HalpGetDmaAdapter;
-}
-
-/**
- * @name HalpGetAdapterMaximumPhysicalAddress
- *
- * Get the maximum physical address acceptable by the device represented
- * by the passed DMA adapter.
- */
-
-PHYSICAL_ADDRESS NTAPI
-HalpGetAdapterMaximumPhysicalAddress(
-   IN PADAPTER_OBJECT AdapterObject)
-{
-   PHYSICAL_ADDRESS HighestAddress;
-
-   if (AdapterObject->MasterDevice)
-   {
-      if (AdapterObject->Dma64BitAddresses)
-      {
-         HighestAddress.QuadPart = 0xFFFFFFFFFFFFFFFFULL;
-         return HighestAddress;
-      }
-      else if (AdapterObject->Dma32BitAddresses)
-      {
-         HighestAddress.QuadPart = 0xFFFFFFFF;
-         return HighestAddress;
-      }
-   }
-
-   HighestAddress.QuadPart = 0xFFFFFF;
-   return HighestAddress;
-}
-
-/**
- * @name HalpGrowMapBuffers
- *
- * Allocate initial, or additional, map buffers for DMA master adapter.
- *
- * @param MasterAdapter
- *        DMA master adapter to allocate buffers for.
- * @param SizeOfMapBuffers
- *        Size of the map buffers to allocate (not including the size
- *        already allocated).
- */
-
-BOOLEAN NTAPI
-HalpGrowMapBuffers(
-   IN PADAPTER_OBJECT AdapterObject,
-   IN ULONG SizeOfMapBuffers)
-{
-   PVOID VirtualAddress;
-   PHYSICAL_ADDRESS PhysicalAddress;
-   PHYSICAL_ADDRESS HighestAcceptableAddress;
-   PHYSICAL_ADDRESS LowestAcceptableAddress;
-   PHYSICAL_ADDRESS BoundryAddressMultiple;
-   KIRQL OldIrql;
-   ULONG MapRegisterCount;
-
-   /* FIXME: Check if enough map register slots are available. */
-
-   MapRegisterCount = BYTES_TO_PAGES(SizeOfMapBuffers);
-
-   /*
-    * Allocate memory for the new map registers. For 32-bit adapters we use
-    * two passes in order not to waste scare resource (low memory).
-    */
-
-   HighestAcceptableAddress =
-      HalpGetAdapterMaximumPhysicalAddress(AdapterObject);
-   LowestAcceptableAddress.HighPart = 0;
-   LowestAcceptableAddress.LowPart =
-      HighestAcceptableAddress.LowPart == 0xFFFFFFFF ? 0x1000000 : 0;
-   BoundryAddressMultiple.QuadPart = 0;
-
-   VirtualAddress = MmAllocateContiguousMemorySpecifyCache(
-      MapRegisterCount << PAGE_SHIFT, LowestAcceptableAddress,
-      HighestAcceptableAddress, BoundryAddressMultiple, MmNonCached);
-
-   if (VirtualAddress == NULL && LowestAcceptableAddress.LowPart != 0)
-   {
-      LowestAcceptableAddress.LowPart = 0;
-      VirtualAddress = MmAllocateContiguousMemorySpecifyCache(
-         MapRegisterCount << PAGE_SHIFT, LowestAcceptableAddress,
-         HighestAcceptableAddress, BoundryAddressMultiple, MmNonCached);
-   }
-
-   if (VirtualAddress == NULL)
-      return FALSE;
-
-   PhysicalAddress = MmGetPhysicalAddress(VirtualAddress);
-
-   /*
-    * All the following must be done with the master adapter lock held
-    * to prevent corruption.
-    */
-
-   OldIrql = KfAcquireSpinLock(&AdapterObject->SpinLock);
-
-   /*
-    * Setup map register entries for the buffer allocated. Each entry has
-    * a virtual and physical address and corresponds to PAGE_SIZE large
-    * buffer.
-    */
-
-   if (MapRegisterCount > 0)
-   {
-      PROS_MAP_REGISTER_ENTRY CurrentEntry, PreviousEntry;
-
-      CurrentEntry = AdapterObject->MapRegisterBase +
-                     AdapterObject->NumberOfMapRegisters;
-      do
-      {
-         /*
-          * Leave one entry free for every non-contiguous memory region
-          * in the map register bitmap. This ensures that we can search
-          * using RtlFindClearBits for contiguous map register regions.
-          *
-          * Also for non-EISA DMA leave one free entry for every 64Kb
-          * break, because the DMA controller can handle only coniguous
-          * 64Kb regions.
-          */
-
-         if (CurrentEntry != AdapterObject->MapRegisterBase)
-         {
-            PreviousEntry = CurrentEntry - 1;
-            if (PreviousEntry->PhysicalAddress.LowPart + PAGE_SIZE ==
-                PhysicalAddress.LowPart)
-            {
-               if (!HalpEisaDma)
-               {
-                  if ((PreviousEntry->PhysicalAddress.LowPart ^
-                       PhysicalAddress.LowPart) & 0xFFFF0000)
-                  {
-                     CurrentEntry++;
-                     AdapterObject->NumberOfMapRegisters++;
-                  }
-               }
-            }
-            else
-            {
-               CurrentEntry++;
-               AdapterObject->NumberOfMapRegisters++;
-            }
-         }
-
-         RtlClearBit(AdapterObject->MapRegisters,
-                     CurrentEntry - AdapterObject->MapRegisterBase);
-         CurrentEntry->VirtualAddress = VirtualAddress;
-         CurrentEntry->PhysicalAddress = PhysicalAddress;
-
-         PhysicalAddress.LowPart += PAGE_SIZE;
-         VirtualAddress = (PVOID)((ULONG_PTR)VirtualAddress + PAGE_SIZE);
-
-         CurrentEntry++;
-         AdapterObject->NumberOfMapRegisters++;
-         MapRegisterCount--;
-      }
-      while (MapRegisterCount != 0);
-   }
-
-   KfReleaseSpinLock(&AdapterObject->SpinLock, OldIrql);
-
-   return TRUE;
-}
-
-/**
- * @name HalpDmaAllocateMasterAdapter
- *
- * Helper routine to allocate and initialize master adapter object and it's
- * associated map register buffers.
- *
- * @see HalpInitDma
- */
-
-PADAPTER_OBJECT NTAPI
-HalpDmaAllocateMasterAdapter(VOID)
-{
-   PADAPTER_OBJECT MasterAdapter;
-   ULONG Size, SizeOfBitmap;
-
-   SizeOfBitmap = MAX_MAP_REGISTERS;
-   Size = sizeof(ADAPTER_OBJECT);
-   Size += sizeof(RTL_BITMAP);
-   Size += (SizeOfBitmap + 7) >> 3;
-
-   MasterAdapter = ExAllocatePoolWithTag(NonPagedPool, Size, TAG_DMA);
-   if (MasterAdapter == NULL)
-      return NULL;
-
-   RtlZeroMemory(MasterAdapter, Size);
-
-   KeInitializeSpinLock(&MasterAdapter->SpinLock);
-   InitializeListHead(&MasterAdapter->AdapterQueue);
-
-   MasterAdapter->MapRegisters = (PVOID)(MasterAdapter + 1);
-   RtlInitializeBitMap(
-      MasterAdapter->MapRegisters,
-      (PULONG)(MasterAdapter->MapRegisters + 1),
-      SizeOfBitmap);
-   RtlSetAllBits(MasterAdapter->MapRegisters);
-   MasterAdapter->NumberOfMapRegisters = 0;
-   MasterAdapter->CommittedMapRegisters = 0;
-
-   MasterAdapter->MapRegisterBase = ExAllocatePoolWithTag(
-      NonPagedPool,
-      SizeOfBitmap * sizeof(ROS_MAP_REGISTER_ENTRY),
-      TAG_DMA);
-   if (MasterAdapter->MapRegisterBase == NULL)
-   {
-      ExFreePool(MasterAdapter);
-      return NULL;
-   }
-
-   RtlZeroMemory(MasterAdapter->MapRegisterBase,
-                 SizeOfBitmap * sizeof(ROS_MAP_REGISTER_ENTRY));
-   if (!HalpGrowMapBuffers(MasterAdapter, 0x10000))
-   {
-      ExFreePool(MasterAdapter);
-      return NULL;
-   }
-
-   return MasterAdapter;
-}
-
-/**
- * @name HalpDmaAllocateChildAdapter
- *
- * Helper routine of HalGetAdapter. Allocate child adapter object and
- * fill out some basic fields.
- *
- * @see HalGetAdapter
- */
-
-PADAPTER_OBJECT NTAPI
-HalpDmaAllocateChildAdapter(
-   ULONG NumberOfMapRegisters,
-   PDEVICE_DESCRIPTION DeviceDescription)
-{
-   PADAPTER_OBJECT AdapterObject;
-   OBJECT_ATTRIBUTES ObjectAttributes;
-   NTSTATUS Status;
-   HANDLE Handle;
-
-   InitializeObjectAttributes(
-      &ObjectAttributes,
-      NULL,
-      OBJ_KERNEL_HANDLE | OBJ_PERMANENT,
-      NULL,
-      NULL);
-
-   Status = ObCreateObject(
-      KernelMode,
-      IoAdapterObjectType,
-      &ObjectAttributes,
-      KernelMode,
-      NULL,
-      sizeof(ADAPTER_OBJECT),
-      0,
-      0,
-      (PVOID)&AdapterObject);
-   if (!NT_SUCCESS(Status))
-      return NULL;
-
-   Status = ObReferenceObjectByPointer(
-      AdapterObject,
-      FILE_READ_DATA | FILE_WRITE_DATA,
-      IoAdapterObjectType,
-      KernelMode);
-   if (!NT_SUCCESS(Status))
-      return NULL;
-
-   RtlZeroMemory(AdapterObject, sizeof(ADAPTER_OBJECT));
-
-   Status = ObInsertObject(
-      AdapterObject,
-      NULL,
-      FILE_READ_DATA | FILE_WRITE_DATA,
-      0,
-      NULL,
-      &Handle);
-   if (!NT_SUCCESS(Status))
-      return NULL;
-
-   ZwClose(Handle);
-
-   AdapterObject->DmaHeader.Version = (USHORT)DeviceDescription->Version;
-   AdapterObject->DmaHeader.Size = sizeof(ADAPTER_OBJECT);
-   AdapterObject->DmaHeader.DmaOperations = &HalpDmaOperations;
-   AdapterObject->MapRegistersPerChannel = 1;
-   AdapterObject->Dma32BitAddresses = DeviceDescription->Dma32BitAddresses;
-   AdapterObject->ChannelNumber = 0xFF;
-   AdapterObject->MasterAdapter = HalpMasterAdapter;
-   KeInitializeDeviceQueue(&AdapterObject->ChannelWaitQueue);
-
-   return AdapterObject;
-}
-
-/**
- * @name HalpDmaInitializeEisaAdapter
- *
- * Setup DMA modes and extended modes for (E)ISA DMA adapter object.
- */
-
-BOOLEAN NTAPI
-HalpDmaInitializeEisaAdapter(
-   PADAPTER_OBJECT AdapterObject,
-   PDEVICE_DESCRIPTION DeviceDescription)
-{
-   UCHAR Controller;
-   DMA_MODE DmaMode = {{0 }};
-   DMA_EXTENDED_MODE ExtendedMode = {{ 0 }};
-   PVOID AdapterBaseVa;
-
-   Controller = (DeviceDescription->DmaChannel & 4) ? 2 : 1;
-
-   if (Controller == 1)
-      AdapterBaseVa = (PVOID)FIELD_OFFSET(EISA_CONTROL, DmaController1);
-   else
-      AdapterBaseVa = (PVOID)FIELD_OFFSET(EISA_CONTROL, DmaController2);
-
-   AdapterObject->AdapterNumber = Controller;
-   AdapterObject->ChannelNumber = (UCHAR)(DeviceDescription->DmaChannel & 3);
-   AdapterObject->PagePort = 
(PUCHAR)HalpEisaPortPage[DeviceDescription->DmaChannel];
-   AdapterObject->Width16Bits = FALSE;
-   AdapterObject->AdapterBaseVa = AdapterBaseVa;
-
-   if (HalpEisaDma)
-   {
-      ExtendedMode.ChannelNumber = AdapterObject->ChannelNumber;
-
-      switch (DeviceDescription->DmaSpeed)
-      {
-         case Compatible: ExtendedMode.TimingMode = COMPATIBLE_TIMING; break;
-         case TypeA: ExtendedMode.TimingMode = TYPE_A_TIMING; break;
-         case TypeB: ExtendedMode.TimingMode = TYPE_B_TIMING; break;
-         case TypeC: ExtendedMode.TimingMode = BURST_TIMING; break;
-         default:
-            return FALSE;
-      }
-
-      switch (DeviceDescription->DmaWidth)
-      {
-         case Width8Bits: ExtendedMode.TransferSize = B_8BITS; break;
-         case Width16Bits: ExtendedMode.TransferSize = B_16BITS; break;
-         case Width32Bits: ExtendedMode.TransferSize = B_32BITS; break;
-         default:
-            return FALSE;
-      }
-
-      if (Controller == 1)
-         WRITE_PORT_UCHAR((PUCHAR)FIELD_OFFSET(EISA_CONTROL, DmaExtendedMode1),
-                          ExtendedMode.Byte);
-      else
-         WRITE_PORT_UCHAR((PUCHAR)FIELD_OFFSET(EISA_CONTROL, DmaExtendedMode2),
-                          ExtendedMode.Byte);
-   }
-   else
-   {
-      /*
-       * Validate setup for non-busmaster DMA adapter. Secondary controller
-       * supports only 16-bit transfers and main controller supports only
-       * 8-bit transfers. Anything else is invalid.
-       */
-
-      if (!DeviceDescription->Master)
-      {
-         if (Controller == 2 && DeviceDescription->DmaWidth == Width16Bits)
-            AdapterObject->Width16Bits = TRUE;
-         else if (Controller != 1 || DeviceDescription->DmaWidth != Width8Bits)
-            return FALSE;
-      }
-   }
-
-   DmaMode.Channel = AdapterObject->ChannelNumber;
-   DmaMode.AutoInitialize = DeviceDescription->AutoInitialize;
-
-   /*
-    * Set the DMA request mode.
-    *
-    * For (E)ISA bus master devices just unmask (enable) the DMA channel
-    * and set it to cascade mode. Otherwise just select the right one
-    * bases on the passed device description.
-    */
-
-   if (DeviceDescription->Master)
-   {
-      DmaMode.RequestMode = CASCADE_REQUEST_MODE;
-      if (Controller == 1)
-      {
-         /* Set the Request Data */
-         WRITE_PORT_UCHAR(&((PDMA1_CONTROL)AdapterBaseVa)->Mode,
-                          DmaMode.Byte);
-         /* Unmask DMA Channel */
-         WRITE_PORT_UCHAR(&((PDMA1_CONTROL)AdapterBaseVa)->SingleMask,
-                          AdapterObject->ChannelNumber | DMA_CLEARMASK);
-      } else {
-         /* Set the Request Data */
-         WRITE_PORT_UCHAR(&((PDMA2_CONTROL)AdapterBaseVa)->Mode,
-                          DmaMode.Byte);
-         /* Unmask DMA Channel */
-         WRITE_PORT_UCHAR(&((PDMA2_CONTROL)AdapterBaseVa)->SingleMask,
-                          AdapterObject->ChannelNumber | DMA_CLEARMASK);
-      }
-   }
-   else
-   {
-      if (DeviceDescription->DemandMode)
-         DmaMode.RequestMode = DEMAND_REQUEST_MODE;
-      else
-         DmaMode.RequestMode = SINGLE_REQUEST_MODE;
-   }
-
-   AdapterObject->AdapterMode = DmaMode;
-
-   return TRUE;
-}
-
-/**
- * @name HalGetAdapter
- *
- * Allocate an adapter object for DMA device.
- *
- * @param DeviceDescription
- *        Structure describing the attributes of the device.
- * @param NumberOfMapRegisters
- *        On return filled with the maximum number of map registers the
- *        device driver can allocate for DMA transfer operations.
- *
- * @return The DMA adapter on success, NULL otherwise.
- *
- * @implemented
- */
-
-PADAPTER_OBJECT NTAPI
-HalGetAdapter(
-   PDEVICE_DESCRIPTION DeviceDescription,
-   PULONG NumberOfMapRegisters)
-{
-   PADAPTER_OBJECT AdapterObject = NULL;
-   PADAPTER_OBJECT MasterAdapter;
-   BOOLEAN EisaAdapter;
-   ULONG MapRegisters;
-   ULONG MaximumLength;
-
-   /* Validate parameters in device description */
-   if (DeviceDescription->Version > DEVICE_DESCRIPTION_VERSION2)
-      return NULL;
-
-   /*
-    * See if we're going to use ISA/EISA DMA adapter. These adapters are
-    * special since they're reused.
-    *
-    * Also note that we check for channel number since there are only 8 DMA
-    * channels on ISA, so any request above this requires new adapter.
-    */
-
-   if (DeviceDescription->InterfaceType == Isa || !DeviceDescription->Master)
-   {
-      if (DeviceDescription->InterfaceType == Isa &&
-          DeviceDescription->DmaChannel >= 8)
-         EisaAdapter = FALSE;
-      else
-         EisaAdapter = TRUE;
-   }
-   else
-   {
-      EisaAdapter = FALSE;
-   }
-
-   /*
-    * Disallow creating adapter for ISA/EISA DMA channel 4 since it's used
-    * for cascading the controllers and it's not available for software use.
-    */
-
-   if (EisaAdapter && DeviceDescription->DmaChannel == 4)
-      return NULL;
-
-   /*
-    * Calculate the number of map registers.
-    *
-    * - For EISA and PCI scatter/gather no map registers are needed.
-    * - For ISA slave scatter/gather one map register is needed.
-    * - For all other cases the number of map registers depends on
-    *   DeviceDescription->MaximumLength.
-    */
-
-   MaximumLength = DeviceDescription->MaximumLength & MAXLONG;
-   if (DeviceDescription->ScatterGather &&
-       (DeviceDescription->InterfaceType == Eisa ||
-        DeviceDescription->InterfaceType == PCIBus))
-   {
-      MapRegisters = 0;
-   }
-   else if (DeviceDescription->ScatterGather &&
-            !DeviceDescription->Master)
-   {
-      MapRegisters = 1;
-   }
-   else
-   {
-      /*
-       * In the equation below the additional map register added by
-       * the "+1" accounts for the case when a transfer does not start
-       * at a page-aligned address.
-       */
-      MapRegisters = BYTES_TO_PAGES(MaximumLength) + 1;
-      if (MapRegisters > 16)
-         MapRegisters = 16;
-   }
-
-   /*
-    * Acquire the DMA lock that is used to protect adapter lists and
-    * EISA adapter array.
-    */
-
-   KeWaitForSingleObject(&HalpDmaLock, Executive, KernelMode,
-                         FALSE, NULL);
-
-   /*
-    * Now we must get ahold of the adapter object. For first eight ISA/EISA
-    * channels there are static adapter objects that are reused and updated
-    * on succesive HalGetAdapter calls. In other cases a new adapter object
-    * is always created and it's to the DMA adapter list (HalpDmaAdapterList).
-    */
-
-   if (EisaAdapter)
-   {
-      AdapterObject = HalpEisaAdapter[DeviceDescription->DmaChannel];
-      if (AdapterObject != NULL)
-      {
-         if (AdapterObject->NeedsMapRegisters &&
-             MapRegisters > AdapterObject->MapRegistersPerChannel)
-            AdapterObject->MapRegistersPerChannel = MapRegisters;
-      }
-   }
-
-   if (AdapterObject == NULL)
-   {
-      AdapterObject = HalpDmaAllocateChildAdapter(
-         MapRegisters, DeviceDescription);
-      if (AdapterObject == NULL)
-      {
-         KeSetEvent(&HalpDmaLock, 0, 0);
-         return NULL;
-      }
-
-      if (EisaAdapter)
-      {
-         HalpEisaAdapter[DeviceDescription->DmaChannel] = AdapterObject;
-      }
-
-      if (MapRegisters > 0)
-      {
-         AdapterObject->NeedsMapRegisters = TRUE;
-         MasterAdapter = HalpMasterAdapter;
-         AdapterObject->MapRegistersPerChannel = MapRegisters;
-
-         /*
-          * FIXME: Verify that the following makes sense. Actually
-          * MasterAdapter->NumberOfMapRegisters contains even the number
-          * of gaps, so this will not work correctly all the time. It
-          * doesn't matter much since it's only optimization to avoid
-          * queuing work items in HalAllocateAdapterChannel.
-          */
-
-         MasterAdapter->CommittedMapRegisters += MapRegisters;
-         if (MasterAdapter->CommittedMapRegisters > 
MasterAdapter->NumberOfMapRegisters)
-            HalpGrowMapBuffers(MasterAdapter, 0x10000);
-      }
-      else
-      {
-         AdapterObject->NeedsMapRegisters = FALSE;
-         if (DeviceDescription->Master)
-            AdapterObject->MapRegistersPerChannel = 
BYTES_TO_PAGES(MaximumLength) + 1;
-         else
-            AdapterObject->MapRegistersPerChannel = 1;
-      }
-   }
-
-   if (!EisaAdapter)
-      InsertTailList(&HalpDmaAdapterList, &AdapterObject->AdapterList);
-
-   /*
-    * Release the DMA lock. HalpDmaAdapterList and HalpEisaAdapter will
-    * no longer be touched, so we don't need it.
-    */
-
-   KeSetEvent(&HalpDmaLock, 0, 0);
-
-   /*
-    * Setup the values in the adapter object that are common for all
-    * types of buses.
-    */
-
-   if (DeviceDescription->Version >= DEVICE_DESCRIPTION_VERSION1)
-      AdapterObject->IgnoreCount = DeviceDescription->IgnoreCount;
-   else
-      AdapterObject->IgnoreCount = 0;
-
-   AdapterObject->Dma32BitAddresses = DeviceDescription->Dma32BitAddresses;
-   AdapterObject->Dma64BitAddresses = DeviceDescription->Dma64BitAddresses;
-   AdapterObject->ScatterGather = DeviceDescription->ScatterGather;
-   AdapterObject->MasterDevice = DeviceDescription->Master;
-   *NumberOfMapRegisters = AdapterObject->MapRegistersPerChannel;
-
-   /*
... 13003 lines suppressed ...

Reply via email to