summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-02-12 08:17:05 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-02-12 08:17:05 +0100
commit701ab62ee9e3d723e01223f38ebd4d1804f6f2ad (patch)
treec605a779279e37bb5a9a4038f900e1a43b575a56 /dev
parent22b7b4427fd01384aad23b4669427aab75d32a42 (diff)
ADD: Close to a final AHCI product.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
-rw-r--r--dev/Boot/amd64-desktop.make8
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/SATA.cc19
-rw-r--r--dev/LibSCI/GPU.h4
-rw-r--r--dev/LibSCI/Macros.h8
-rw-r--r--dev/LibSCI/SCI.h2
5 files changed, 20 insertions, 21 deletions
diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make
index 37244c91..161d5f59 100644
--- a/dev/Boot/amd64-desktop.make
+++ b/dev/Boot/amd64-desktop.make
@@ -28,9 +28,17 @@ BIOS=OVMF.fd
IMG=epm-master-1.img
IMG_2=epm-master-2.img
+ifeq ($(shell uname), Darwin)
+EMU_FLAGS=-net none -smp 4 -m 8G \
+ -bios $(BIOS) -drive \
+ file=fat:rw:src/Root/,index=3,format=raw
+endif
+
+ifneq ($(shell uname), Darwin)
EMU_FLAGS=-net none -smp 4 -m 8G \
-bios $(BIOS) -drive \
file=fat:rw:src/Root/,index=3,format=raw -accel kvm
+endif
LD_FLAGS=-e Main --subsystem=10
diff --git a/dev/Kernel/HALKit/AMD64/Storage/SATA.cc b/dev/Kernel/HALKit/AMD64/Storage/SATA.cc
index 58435c8d..7764b55b 100644
--- a/dev/Kernel/HALKit/AMD64/Storage/SATA.cc
+++ b/dev/Kernel/HALKit/AMD64/Storage/SATA.cc
@@ -28,6 +28,7 @@
#define kHBAErrTaskFile (1 << 30)
#define kHBACmdGhc (1 << 31)
+#define kHBACmdAE (1 << 0)
#define kHBAPxCmdST 0x0001
#define kHBAPxCmdFre 0x0010
#define kHBAPxCmdFR 0x4000
@@ -116,9 +117,7 @@ Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented)
kSATAPortIdx = ahci_index;
kSATAPort = mem_ahci;
- kSATAPort->Ports[kSATAPortIdx].Cmd |= kHBAPxCmdFre;
- kSATAPort->Ports[kSATAPortIdx].Cmd |= kHBAPxCmdST;
- kSATAPort->Ghc |= kHBACmdGhc;
+ kSATAPort->Ghc |= kHBACmdAE;
drvi_calculate_disk_geometry();
@@ -178,7 +177,7 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf
if (size_buffer > mib_cast(4))
Kernel::ke_panic(RUNTIME_CHECK_FAILED, "AHCI only supports < 4mb DMA transfers.");
- HbaCmdHeader* command_header = ((HbaCmdHeader*)((Kernel::UInt64)(kSATAPort->Ports[kSATAPortIdx].Clbu << 32) | kSATAPort->Ports[kSATAPortIdx].Clb)) + slot;
+ HbaCmdHeader* command_header = ((HbaCmdHeader*)((Kernel::UInt64)(kSATAPort->Ports[kSATAPortIdx].Clbu) | kSATAPort->Ports[kSATAPortIdx].Clb)) + slot;
MUST_PASS(command_header);
@@ -229,11 +228,6 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf
h2d_fis->CountLow = sector_sz & 0xFF;
h2d_fis->CountHigh = (sector_sz >> 8) & 0xFF;
- while ((kSATAPort->Ports[kSATAPortIdx].Tfd & (kSATASRBsy | kSATASRDrq)))
- {
- kout << "Waiting for the TFD to be ready...\r";
- }
-
if (kSATAPort->Is & kHBAErrTaskFile)
Kernel::ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "AHCI Read disk failure, faulty component.");
@@ -244,18 +238,13 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf
if (kSATAPort->Ports[kSATAPortIdx].Ci == 0)
break;
- kout << "AHCI Interrupt Status: " << Kernel::hex_number(kSATAPort->Is) << endl;
+ kout << "PxCI: " << Kernel::hex_number(kSATAPort->Ports[kSATAPortIdx].Ci) << endl;
kout << "PxCMD: " << Kernel::hex_number(kSATAPort->Ports[kSATAPortIdx].Cmd) << endl;
if (kSATAPort->Is & kHBAErrTaskFile)
Kernel::ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "AHCI Read disk failure, faulty component.");
}
- while ((kSATAPort->Ports[kSATAPortIdx].Tfd & (kSATASRBsy | kSATASRDrq)))
- {
- kout << "Waiting for the TFD to be ready...\r";
- }
-
delete command_table;
command_table = nullptr;
}
diff --git a/dev/LibSCI/GPU.h b/dev/LibSCI/GPU.h
index 6ee937f5..fee621e6 100644
--- a/dev/LibSCI/GPU.h
+++ b/dev/LibSCI/GPU.h
@@ -10,7 +10,7 @@ Purpose: GFX System Calls.
#ifndef SCIKIT_GPU_H
#define SCIKIT_GPU_H
-#include <SCI.h>
+#include <LibSCI/SCI.h>
struct GPUCmdBuffer;
@@ -31,7 +31,7 @@ struct GPUCmdBuffer final
Bool isGPGPUData()
{
- return !this->BufferFirst && this->IsGPGPUData;
+ return this->isValid() && !this->BufferFirst && this->IsGPGPUData;
}
Bool isValid()
diff --git a/dev/LibSCI/Macros.h b/dev/LibSCI/Macros.h
index 62d522c9..e57df6ee 100644
--- a/dev/LibSCI/Macros.h
+++ b/dev/LibSCI/Macros.h
@@ -14,7 +14,7 @@ Purpose: LibSCI Macros header.
/// @brief Macros and core types.
/***********************************************************************************/
-#include <CompilerHint.h>
+#include <LibSCI/CompilerHint.h>
#define ATTRIBUTE(X) __attribute__((X))
@@ -29,6 +29,8 @@ Purpose: LibSCI Macros header.
#define FILE_MAX_LEN 256
typedef bool Bool;
+typedef bool BOOL;
+typedef bool Boolean;
typedef void Void;
typedef __UINT64_TYPE__ UInt64;
@@ -57,10 +59,10 @@ typedef SCIObject SocketObject;
#ifdef __cplusplus
typedef decltype(nullptr) nullPtr;
-typedef decltype(nullptr) NullPtr;
+typedef nullPtr NullPtr;
#endif
-EXTERN_C void _rtl_assert(Bool expr, const Char* origin);
+IMPORT_C void _rtl_assert(Bool expr, const Char* origin);
#define MUST_PASS(X) _rtl_assert(X, __FILE__)
diff --git a/dev/LibSCI/SCI.h b/dev/LibSCI/SCI.h
index 19bd1aa1..ca77c515 100644
--- a/dev/LibSCI/SCI.h
+++ b/dev/LibSCI/SCI.h
@@ -10,7 +10,7 @@ Purpose: System Calls.
#ifndef SCIKIT_FOUNDATION_H
#define SCIKIT_FOUNDATION_H
-#include <Macros.h>
+#include <LibSCI/Macros.h>
// ------------------------------------------------------------------------------------------ //
/// @brief Dynamic Loader API.