https://git.reactos.org/?p=reactos.git;a=commitdiff;h=571407c7d2bafa1051505f8bb03426c34588b7fe

commit 571407c7d2bafa1051505f8bb03426c34588b7fe
Author:     Stanislav Motylkov <[email protected]>
AuthorDate: Fri Dec 27 23:02:38 2019 +0300
Commit:     Hermès BÉLUSCA - MAÏTO <[email protected]>
CommitDate: Fri Feb 14 16:02:04 2020 +0100

    [FREELDR] Separate PC and Xbox platform-specific code (#2185)
    
    CORE-16216
---
 boot/freeldr/freeldr/CMakeLists.txt               | 41 ++++++++++++---------
 boot/freeldr/freeldr/arch/i386/archmach.c         | 44 -----------------------
 boot/freeldr/freeldr/arch/i386/pc/machpc.c        | 12 ++++++-
 boot/freeldr/freeldr/arch/i386/xbox/machxbox.c    | 23 +++++++++++-
 boot/freeldr/freeldr/include/arch/amd64/amd64.h   |  1 -
 boot/freeldr/freeldr/include/arch/i386/machxbox.h |  2 --
 boot/freeldr/freeldr/include/arch/pc/machpc.h     |  2 --
 7 files changed, 58 insertions(+), 67 deletions(-)

diff --git a/boot/freeldr/freeldr/CMakeLists.txt 
b/boot/freeldr/freeldr/CMakeLists.txt
index 2573130ad02..5b32b2e74eb 100644
--- a/boot/freeldr/freeldr/CMakeLists.txt
+++ b/boot/freeldr/freeldr/CMakeLists.txt
@@ -113,7 +113,6 @@ if(ARCH STREQUAL "i386")
         lib/fs/pxe.c
         arch/i386/halstub.c
         arch/i386/ntoskrnl.c
-        arch/i386/archmach.c
         arch/i386/drivemap.c
         arch/i386/hardware.c
         arch/i386/hwacpi.c
@@ -124,22 +123,32 @@ if(ARCH STREQUAL "i386")
         arch/i386/i386idt.c
         arch/i386/i386rtl.c
         arch/i386/i386vid.c
-        arch/i386/pc/machpc.c
-        arch/i386/pc/pccons.c
-        arch/i386/pc/pcdisk.c
-        arch/i386/pc/pcmem.c
-        arch/i386/pc/pcrtc.c
-        arch/i386/pc/pcvideo.c
-        arch/i386/xbox/machxbox.c
-        arch/i386/xbox/xboxcons.c
-        arch/i386/xbox/xboxdisk.c
-        arch/i386/xbox/xboxfont.c
-        arch/i386/xbox/xboxi2c.c
-        arch/i386/xbox/xboxmem.c
-        arch/i386/xbox/xboxrtc.c
-        arch/i386/xbox/xboxvideo.c
         disk/scsiport.c)
 
+    if(SARCH STREQUAL "xbox")
+        list(APPEND FREELDR_ARC_SOURCE
+            # FIXME: Abstract things better so we don't need to include /pc/* 
here
+            arch/i386/pc/machpc.c       # machxbox.c depends on it
+            arch/i386/pc/pcdisk.c       # hwdisk.c depends on it
+            arch/i386/pc/pcmem.c        # hwacpi.c/xboxmem.c depends on it
+            arch/i386/xbox/machxbox.c
+            arch/i386/xbox/xboxcons.c
+            arch/i386/xbox/xboxdisk.c
+            arch/i386/xbox/xboxfont.c
+            arch/i386/xbox/xboxi2c.c
+            arch/i386/xbox/xboxmem.c
+            arch/i386/xbox/xboxrtc.c
+            arch/i386/xbox/xboxvideo.c)
+    else()
+        list(APPEND FREELDR_ARC_SOURCE
+            arch/i386/pc/machpc.c
+            arch/i386/pc/pccons.c
+            arch/i386/pc/pcdisk.c
+            arch/i386/pc/pcmem.c
+            arch/i386/pc/pcrtc.c
+            arch/i386/pc/pcvideo.c)
+    endif()
+
 elseif(ARCH STREQUAL "amd64")
     list(APPEND FREELDR_COMMON_ASM_SOURCE
         arch/amd64/entry.S
@@ -196,7 +205,7 @@ if(USE_CLANG_CL)
     # We need to reduce the binary size
     add_target_compile_flags(freeldr_common "/Os")
 endif()
-if(NOT MSVC AND ARCH STREQUAL "i386")
+if(NOT MSVC AND ARCH STREQUAL "i386" AND SARCH STREQUAL "xbox")
   # Prevent a warning when doing a memcmp with address 0
   set_source_files_properties(arch/i386/xbox/xboxmem.c PROPERTIES 
COMPILE_FLAGS "-Wno-nonnull")
 endif()
diff --git a/boot/freeldr/freeldr/arch/i386/archmach.c 
b/boot/freeldr/freeldr/arch/i386/archmach.c
deleted file mode 100644
index 293f9481529..00000000000
--- a/boot/freeldr/freeldr/arch/i386/archmach.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  FreeLoader
- *
- *  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>
-
-VOID
-MachInit(const char *CmdLine)
-{
-    ULONG PciId;
-
-    memset(&MachVtbl, 0, sizeof(MACHVTBL));
-
-    /* Check for Xbox by identifying device at PCI 0:0:0, if it's
-     * 0x10de/0x02a5 then we're running on an Xbox */
-    WRITE_PORT_ULONG((ULONG*)0xcf8, CONFIG_CMD(0, 0, 0));
-    PciId = READ_PORT_ULONG((ULONG*)0xcfc);
-    if (PciId == 0x02a510de)
-    {
-        XboxMachInit(CmdLine);
-    }
-    else
-    {
-        PcMachInit(CmdLine);
-    }
-
-    HalpCalibrateStallExecution();
-}
-
-/* EOF */
diff --git a/boot/freeldr/freeldr/arch/i386/pc/machpc.c 
b/boot/freeldr/freeldr/arch/i386/pc/machpc.c
index 3ca5578aa4b..b0b1ee9694b 100644
--- a/boot/freeldr/freeldr/arch/i386/pc/machpc.c
+++ b/boot/freeldr/freeldr/arch/i386/pc/machpc.c
@@ -1348,6 +1348,8 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, 
ULONG *BusNumber)
     /* FIXME: Detect more ISA devices */
 }
 
+/* FIXME: Abstract things better so we don't need to place define here */
+#if !defined(SARCH_XBOX)
 static
 UCHAR
 PcGetFloppyCount(VOID)
@@ -1359,6 +1361,7 @@ PcGetFloppyCount(VOID)
 
     return ((Data & 0xF0) ? 1 : 0) + ((Data & 0x0F) ? 1 : 0);
 }
+#endif
 
 PCONFIGURATION_COMPONENT_DATA
 PcHwDetect(VOID)
@@ -1416,9 +1419,13 @@ PcHwIdle(VOID)
 
 
/******************************************************************************/
 
+/* FIXME: Abstract things better so we don't need to place define here */
+#if !defined(SARCH_XBOX)
 VOID
-PcMachInit(const char *CmdLine)
+MachInit(const char *CmdLine)
 {
+    memset(&MachVtbl, 0, sizeof(MACHVTBL));
+
     /* Setup vtbl */
     MachVtbl.ConsPutChar = PcConsPutChar;
     MachVtbl.ConsKbHit = PcConsKbHit;
@@ -1448,6 +1455,8 @@ PcMachInit(const char *CmdLine)
     MachVtbl.InitializeBootDevices = PcInitializeBootDevices;
     MachVtbl.HwDetect = PcHwDetect;
     MachVtbl.HwIdle = PcHwIdle;
+
+    HalpCalibrateStallExecution();
 }
 
 VOID
@@ -1457,5 +1466,6 @@ PcPrepareForReactOS(VOID)
     PcVideoPrepareForReactOS();
     DiskStopFloppyMotor();
 }
+#endif
 
 /* EOF */
diff --git a/boot/freeldr/freeldr/arch/i386/xbox/machxbox.c 
b/boot/freeldr/freeldr/arch/i386/xbox/machxbox.c
index ed99abbb72a..4d84089b9fb 100644
--- a/boot/freeldr/freeldr/arch/i386/xbox/machxbox.c
+++ b/boot/freeldr/freeldr/arch/i386/xbox/machxbox.c
@@ -253,8 +253,27 @@ VOID XboxHwIdle(VOID)
 
/******************************************************************************/
 
 VOID
-XboxMachInit(const char *CmdLine)
+MachInit(const char *CmdLine)
 {
+    ULONG PciId;
+
+    memset(&MachVtbl, 0, sizeof(MACHVTBL));
+
+    /* Check for Xbox by identifying device at PCI 0:0:0, if it's
+     * 0x10DE/0x02A5 then we're running on an Xbox */
+    WRITE_PORT_ULONG((ULONG *)0xCF8, CONFIG_CMD(0, 0, 0));
+    PciId = READ_PORT_ULONG((ULONG *)0xCFC);
+    if (PciId != 0x02A510DE)
+    {
+        ERR("This is not original Xbox!\n");
+
+        /* Disable and halt the CPU */
+        _disable();
+        __halt();
+
+        while (TRUE);
+    }
+
     /* Set LEDs to red before anything is initialized */
     XboxSetLED("rrrr");
 
@@ -294,6 +313,8 @@ XboxMachInit(const char *CmdLine)
 
     /* Set LEDs to orange after init */
     XboxSetLED("oooo");
+
+    HalpCalibrateStallExecution();
 }
 
 VOID
diff --git a/boot/freeldr/freeldr/include/arch/amd64/amd64.h 
b/boot/freeldr/freeldr/include/arch/amd64/amd64.h
index 8a5ccddecca..17d6214c1a8 100644
--- a/boot/freeldr/freeldr/include/arch/amd64/amd64.h
+++ b/boot/freeldr/freeldr/include/arch/amd64/amd64.h
@@ -39,7 +39,6 @@
 #ifndef ASM
 
 VOID FrLdrSetupGdtIdt(VOID);
-#define MachInit PcMachInit
 #endif
 
 /* EOF */
diff --git a/boot/freeldr/freeldr/include/arch/i386/machxbox.h 
b/boot/freeldr/freeldr/include/arch/i386/machxbox.h
index 4b85e9b59d3..062d74ff85b 100644
--- a/boot/freeldr/freeldr/include/arch/i386/machxbox.h
+++ b/boot/freeldr/freeldr/include/arch/i386/machxbox.h
@@ -48,8 +48,6 @@
 
 extern UCHAR XboxFont8x16[256 * 16];
 
-VOID XboxMachInit(const char *CmdLine);
-
 VOID XboxConsPutChar(int Ch);
 BOOLEAN XboxConsKbHit(VOID);
 int XboxConsGetCh(VOID);
diff --git a/boot/freeldr/freeldr/include/arch/pc/machpc.h 
b/boot/freeldr/freeldr/include/arch/pc/machpc.h
index b76e55e776a..35bf0e904c8 100644
--- a/boot/freeldr/freeldr/include/arch/pc/machpc.h
+++ b/boot/freeldr/freeldr/include/arch/pc/machpc.h
@@ -24,8 +24,6 @@
 #include "mm.h"
 #endif
 
-VOID PcMachInit(const char *CmdLine);
-
 VOID PcBeep(VOID);
 
 VOID PcConsPutChar(int Ch);

Reply via email to