From 0abf169695caa6dc71401aa7923a52d5577e4e73 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Sat, 6 Oct 2007 07:53:20 +0000 Subject: [PATCH] All remaining changes from the PPC branch. Not well tested yet. Many things are indeed still stubs or WIP code. Some people have been interested in helping out from some time and I'm sorry I haven't been able to do this merge finally for a while. svn path=/trunk/; revision=29407 --- reactos/Makefile | 2 +- reactos/ReactOS-i386.rbuild | 2 + reactos/ReactOS-ppc.rbuild | 46 +- .../boot/freeldr/freeldr/arch/powerpc/boot.s | 10 +- .../boot/freeldr/freeldr/arch/powerpc/mach.c | 8 +- reactos/boot/freeldr/freeldr/freeldr.rbuild | 1 + reactos/boot/freeldr/freeldr/fs/fat.c | 2 +- reactos/boot/freeldr/freeldr/include/arch.h | 6 + reactos/config-ppc.template.rbuild | 4 + reactos/include/ddk/winddk.h | 29 + reactos/include/psdk/intrin_ppc.h | 214 +- reactos/include/psdk/winnt.h | 14 +- reactos/lib/lib.rbuild | 3 + reactos/lib/pseh/powerpc/framebased.S | 82 + reactos/lib/pseh/pseh.rbuild | 5 + reactos/lib/rtl/powerpc/rtlmem.s | 105 + reactos/lib/rtl/powerpc/rtlswap.s | 41 + reactos/lib/rtl/rtl.rbuild | 2 + .../sdk/libcntpr/except/powerpc/chkstk_asm.s | 23 + reactos/lib/sdk/libcntpr/except/powerpc/seh.s | 75 + reactos/lib/sdk/libcntpr/libcntpr.rbuild | 7 +- reactos/ntoskrnl/config/powerpc/cmhardwr.c | 834 ++++++++ reactos/ntoskrnl/ex/powerpc/fastinterlck.c | 262 +++ reactos/ntoskrnl/ex/powerpc/ioport.s | 171 ++ reactos/ntoskrnl/ex/sysinfo.c | 2 +- .../ntoskrnl/include/internal/i386/intrin_i.h | 3 + reactos/ntoskrnl/include/internal/kd.h | 5 + reactos/ntoskrnl/include/internal/ke_x.h | 10 +- reactos/ntoskrnl/include/internal/ntoskrnl.h | 4 +- .../include/internal/powerpc/intrin_i.h | 2 + .../ntoskrnl/include/internal/powerpc/ke.h | 61 +- reactos/ntoskrnl/kd/kdmain.c | 8 + .../ntoskrnl/kd/wrappers/gdbstub_powerpc.c | 1714 +++++++++++++++++ reactos/ntoskrnl/ke/bug.c | 15 +- reactos/ntoskrnl/ke/powerpc/cpu.c | 277 +++ reactos/ntoskrnl/ke/powerpc/exp.c | 114 ++ reactos/ntoskrnl/ke/powerpc/kiinit.c | 322 ++++ reactos/ntoskrnl/ke/powerpc/main_asm.S | 81 + reactos/ntoskrnl/ke/powerpc/ppc_irq.c | 841 ++++++++ reactos/ntoskrnl/ke/powerpc/stubs.c | 234 +++ reactos/ntoskrnl/ke/powerpc/systimer.c | 21 + reactos/ntoskrnl/ke/profobj.c | 4 + reactos/ntoskrnl/mm/mm.c | 2 + reactos/ntoskrnl/mm/pagefile.c | 2 + reactos/ntoskrnl/mm/powerpc/page.c | 630 ++++++ reactos/ntoskrnl/mm/powerpc/pfault.c | 96 + reactos/ntoskrnl/ntoskrnl.rbuild | 37 +- .../{ntoskrnl.lnk => ntoskrnl_i386.lnk} | 0 reactos/ntoskrnl/ntoskrnl_powerpc.lnk | 69 + reactos/ntoskrnl/ps/debug.c | 4 + reactos/ntoskrnl/ps/thread.c | 3 +- reactos/ntoskrnl/rtl/libsupp.c | 4 + reactos/subsystems/win32/win32k/win32k.rbuild | 5 +- reactos/tools/ppc.lost+found/bootcd | 4 +- reactos/tools/ppc.lost+found/link-freeldr | 7 - reactos/tools/ppc.lost+found/pmake | 14 - reactos/tools/rbuild/backend/mingw/mingw.cpp | 3 +- .../rbuild/backend/mingw/modulehandler.cpp | 31 +- .../rbuild/backend/mingw/modulehandler.h | 2 +- reactos/tools/tools.mak | 4 +- 60 files changed, 6403 insertions(+), 180 deletions(-) create mode 100644 reactos/lib/pseh/powerpc/framebased.S create mode 100644 reactos/lib/rtl/powerpc/rtlmem.s create mode 100644 reactos/lib/rtl/powerpc/rtlswap.s create mode 100644 reactos/lib/sdk/libcntpr/except/powerpc/chkstk_asm.s create mode 100644 reactos/lib/sdk/libcntpr/except/powerpc/seh.s create mode 100644 reactos/ntoskrnl/config/powerpc/cmhardwr.c create mode 100644 reactos/ntoskrnl/ex/powerpc/fastinterlck.c create mode 100644 reactos/ntoskrnl/ex/powerpc/ioport.s create mode 100644 reactos/ntoskrnl/kd/wrappers/gdbstub_powerpc.c create mode 100644 reactos/ntoskrnl/ke/powerpc/cpu.c create mode 100644 reactos/ntoskrnl/ke/powerpc/exp.c create mode 100644 reactos/ntoskrnl/ke/powerpc/kiinit.c create mode 100644 reactos/ntoskrnl/ke/powerpc/main_asm.S create mode 100644 reactos/ntoskrnl/ke/powerpc/ppc_irq.c create mode 100644 reactos/ntoskrnl/ke/powerpc/stubs.c create mode 100644 reactos/ntoskrnl/ke/powerpc/systimer.c create mode 100644 reactos/ntoskrnl/mm/powerpc/page.c create mode 100644 reactos/ntoskrnl/mm/powerpc/pfault.c rename reactos/ntoskrnl/{ntoskrnl.lnk => ntoskrnl_i386.lnk} (100%) create mode 100644 reactos/ntoskrnl/ntoskrnl_powerpc.lnk delete mode 100755 reactos/tools/ppc.lost+found/link-freeldr delete mode 100755 reactos/tools/ppc.lost+found/pmake diff --git a/reactos/Makefile b/reactos/Makefile index 89ac3ddbb9d..63d8c4ccc87 100644 --- a/reactos/Makefile +++ b/reactos/Makefile @@ -401,7 +401,7 @@ ifeq ($(ARCH),powerpc) PREAUTO += $(OFW_INTERFACE_SERVICE_FILES) $(PPCMMU_TARGETS) endif -$(ROS_AUTOMAKE): $(RBUILD_TARGET) $(PREAUTO) $(XMLBUILDFILES) +$(ROS_AUTOMAKE): $(RBUILD_TARGET) $(XMLBUILDFILES) | $(PREAUTO) ${mkdir} $(OUTPUT_)media$(SEP)inf 2>$(NUL) $(ECHO_RBUILD) $(Q)$(RBUILD_TARGET) $(RBUILD_FLAGS) $(ROS_RBUILDFLAGS) mingw diff --git a/reactos/ReactOS-i386.rbuild b/reactos/ReactOS-i386.rbuild index 1c4acdd35d2..f7fc299b509 100644 --- a/reactos/ReactOS-i386.rbuild +++ b/reactos/ReactOS-i386.rbuild @@ -13,6 +13,8 @@ + + -Os diff --git a/reactos/ReactOS-ppc.rbuild b/reactos/ReactOS-ppc.rbuild index 0a5f712b0af..a0882d399f5 100644 --- a/reactos/ReactOS-ppc.rbuild +++ b/reactos/ReactOS-ppc.rbuild @@ -9,27 +9,31 @@ - + + - - - - - - - - - - - - 1 - - -fshort-wchar - -fsigned-char - -mfull-toc - -meabi - -O2 - -Wno-strict-aliasing - -Wno-trampolines + + + + + + + + + + + + + + + extern + + + -fshort-wchar + -fsigned-char + -mfull-toc + -meabi + -O2 + -Wno-strict-aliasing diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/boot.s b/reactos/boot/freeldr/freeldr/arch/powerpc/boot.s index 7efff45fb7b..62e0f3cb9d6 100644 --- a/reactos/boot/freeldr/freeldr/arch/powerpc/boot.s +++ b/reactos/boot/freeldr/freeldr/arch/powerpc/boot.s @@ -28,10 +28,18 @@ _start: lwz %r3,ofw_call_addr@l(%r3) cmpw %r3,%r31 /* Zero? */ mr %r3,%r31 - beq bootme + 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 diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c b/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c index de937c04bd0..64882187b55 100644 --- a/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c +++ b/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c @@ -591,9 +591,11 @@ void MachInit(const char *CmdLine) { } if( strlen(BootPart) == 0 ) { - len = ofw_getprop(chosen_package, "bootpath", - BootPath, sizeof(BootPath)); - + if (ofproxy) + len = ofw_getprop(chosen_package, "bootpath", + BootPath, sizeof(BootPath)); + else + len = 0; if( len < 0 ) len = 0; BootPath[len] = 0; printf( "Boot Path: %s\n", BootPath ); diff --git a/reactos/boot/freeldr/freeldr/freeldr.rbuild b/reactos/boot/freeldr/freeldr/freeldr.rbuild index 5e129deeae9..e4d4dbfeed9 100644 --- a/reactos/boot/freeldr/freeldr/freeldr.rbuild +++ b/reactos/boot/freeldr/freeldr/freeldr.rbuild @@ -26,6 +26,7 @@ cmlib rtl libcntpr + ppcmmu diff --git a/reactos/boot/freeldr/freeldr/fs/fat.c b/reactos/boot/freeldr/freeldr/fs/fat.c index 49156110a4e..74528fb3a2c 100644 --- a/reactos/boot/freeldr/freeldr/fs/fat.c +++ b/reactos/boot/freeldr/freeldr/fs/fat.c @@ -242,7 +242,7 @@ BOOLEAN FatOpenVolume(ULONG DriveNumber, ULONG VolumeStartSector, ULONG Partitio // // Check the boot sector magic // - if (! ISFATX(FatType) && SWAPW(FatVolumeBootSector->BootSectorMagic) != 0xaa55) + if (! ISFATX(FatType) && FatVolumeBootSector->BootSectorMagic != 0xaa55) { sprintf(ErrMsg, "Invalid boot sector magic on drive 0x%x (expected 0xaa55 found 0x%x)", DriveNumber, FatVolumeBootSector->BootSectorMagic); diff --git a/reactos/boot/freeldr/freeldr/include/arch.h b/reactos/boot/freeldr/freeldr/include/arch.h index 037f1cf4310..c92c4c91e56 100644 --- a/reactos/boot/freeldr/freeldr/include/arch.h +++ b/reactos/boot/freeldr/freeldr/include/arch.h @@ -34,11 +34,17 @@ #define STACK16ADDR 0x7000 /* The 16-bit stack top will be at 0000:7000 */ #define STACK32ADDR 0x78000 /* The 32-bit stack top will be at 7000:8000, or 0x78000 */ +#ifdef _M_IX86 #define BIOSCALLBUFFER 0x78000 /* Buffer to store temporary data for any Int386() call */ #define BIOSCALLBUFSEGMENT 0x7800 /* Buffer to store temporary data for any Int386() call */ #define BIOSCALLBUFOFFSET 0x0000 /* Buffer to store temporary data for any Int386() call */ #define FILESYSBUFFER 0x80000 /* Buffer to store file system data (e.g. cluster buffer for FAT) */ #define DISKREADBUFFER 0x90000 /* Buffer to store data read in from the disk via the BIOS */ +#elif defined(_M_PPC) +extern PVOID FsStaticBufferDisk, FsStaticBufferData; +#define DISKREADBUFFER FsStaticBufferDisk +#define FILESYSBUFFER FsStaticBufferData +#endif /* Makes "x" a global variable or label */ #define EXTERN(x) .global x; x: diff --git a/reactos/config-ppc.template.rbuild b/reactos/config-ppc.template.rbuild index 36f36b8690b..9eca1ed4696 100644 --- a/reactos/config-ppc.template.rbuild +++ b/reactos/config-ppc.template.rbuild @@ -35,6 +35,10 @@ --> + +