From 76e1fc60997c7a5f16b0541aae0b4d320fbf48ed Mon Sep 17 00:00:00 2001
From: Rafal Kupiec <belliash@codingworkshop.eu.org>
Date: Tue, 4 Jun 2024 21:36:09 +0200
Subject: [PATCH] Enable hardware layer initialization code

---
 xtoskrnl/CMakeLists.txt      |  1 +
 xtoskrnl/hl/init.c           | 34 ++++++++++++++++++++++++++++++++++
 xtoskrnl/includes/hli.h      |  4 ++++
 xtoskrnl/ke/amd64/krnlinit.c | 10 ++++++++++
 xtoskrnl/ke/i686/krnlinit.c  | 10 ++++++++++
 5 files changed, 59 insertions(+)
 create mode 100644 xtoskrnl/hl/init.c

diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt
index b9588b15..27031611 100644
--- a/xtoskrnl/CMakeLists.txt
+++ b/xtoskrnl/CMakeLists.txt
@@ -18,6 +18,7 @@ list(APPEND XTOSKRNL_SOURCE
     ${XTOSKRNL_SOURCE_DIR}/hl/cport.c
     ${XTOSKRNL_SOURCE_DIR}/hl/fbdev.c
     ${XTOSKRNL_SOURCE_DIR}/hl/globals.c
+    ${XTOSKRNL_SOURCE_DIR}/hl/init.c
     ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/cpu.c
     ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/pic.c
     ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.c
diff --git a/xtoskrnl/hl/init.c b/xtoskrnl/hl/init.c
new file mode 100644
index 00000000..7b14e519
--- /dev/null
+++ b/xtoskrnl/hl/init.c
@@ -0,0 +1,34 @@
+/**
+ * PROJECT:         ExectOS
+ * COPYRIGHT:       See COPYING.md in the top level directory
+ * FILE:            xtoskrnl/hl/init.c
+ * DESCRIPTION:     Hardware layer initialization code
+ * DEVELOPERS:      Rafal Kupiec <belliash@codingworkshop.eu.org>
+ */
+
+#include <xtos.h>
+
+
+/**
+ * Initializes the hardware layer subsystem
+ *
+ * @return This routine returns a status code.
+ *
+ * @since XT 1.0
+ */
+XTAPI
+XTSTATUS
+HlInitializeSystem(VOID)
+{
+    XTSTATUS Status;
+
+    /* Initialize ACPI */
+    Status = HlpInitializeAcpi();
+    if(Status != STATUS_SUCCESS)
+    {
+        return Status;
+    }
+
+    /* Return success */
+    return STATUS_SUCCESS;
+}
diff --git a/xtoskrnl/includes/hli.h b/xtoskrnl/includes/hli.h
index 1ceecfc9..360cf643 100644
--- a/xtoskrnl/includes/hli.h
+++ b/xtoskrnl/includes/hli.h
@@ -68,6 +68,10 @@ XTAPI
 VOID
 HlInitializeProcessor();
 
+XTAPI
+XTSTATUS
+HlInitializeSystem(VOID);
+
 XTAPI
 VOID
 HlPutCharacter(IN ULONG PositionX,
diff --git a/xtoskrnl/ke/amd64/krnlinit.c b/xtoskrnl/ke/amd64/krnlinit.c
index 863fcda6..d1b3977c 100644
--- a/xtoskrnl/ke/amd64/krnlinit.c
+++ b/xtoskrnl/ke/amd64/krnlinit.c
@@ -20,6 +20,16 @@ XTAPI
 VOID
 KepInitializeKernel(VOID)
 {
+    XTSTATUS Status;
+
+    /* Initialize hardware layer subsystem */
+    Status = HlInitializeSystem();
+    if(Status != STATUS_SUCCESS)
+    {
+        /* Hardware layer initialization failed, kernel panic */
+        DebugPrint(L"Failed to initialize hardware layer subsystem!\n");
+        KePanic(0);
+    }
 }
 
 /**
diff --git a/xtoskrnl/ke/i686/krnlinit.c b/xtoskrnl/ke/i686/krnlinit.c
index e762941e..b10f9f8f 100644
--- a/xtoskrnl/ke/i686/krnlinit.c
+++ b/xtoskrnl/ke/i686/krnlinit.c
@@ -20,6 +20,16 @@ XTAPI
 VOID
 KepInitializeKernel(VOID)
 {
+    XTSTATUS Status;
+
+    /* Initialize hardware layer subsystem */
+    Status = HlInitializeSystem();
+    if(Status != STATUS_SUCCESS)
+    {
+        /* Hardware layer initialization failed, kernel panic */
+        DebugPrint(L"Failed to initialize hardware layer subsystem!\n");
+        KePanic(0);
+    }
 }
 
 /**