From abb9aca8e7e86e28875b211a47f1a59dd02098b6 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 11 Mar 2025 12:25:04 +0100 Subject: ADD: A better AHCI driver. --- dev/Boot/amd64-desktop.make | 15 +++++++-------- dev/Kernel/HALKit/AMD64/Storage/AHCI.cc | 6 ++++-- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'dev') diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make index 2c8c5321..362c74cf 100644 --- a/dev/Boot/amd64-desktop.make +++ b/dev/Boot/amd64-desktop.make @@ -50,14 +50,12 @@ endif ifeq ($(shell uname), Darwin) EMU_FLAGS=-M q35 -net none -smp 4 -m 8G \ - -bios $(BIOS) -cdrom $(BOOT) -boot d -drive \ - file=fat:rw:src/Root/,index=3,format=raw + -bios $(BIOS) -cdrom $(BOOT) -boot d endif ifneq ($(shell uname), Darwin) EMU_FLAGS=-net none -smp 4 -m 8G \ - -bios $(BIOS) -M q35 -cdrom $(BOOT) -boot d -accel kvm -drive \ - file=fat:rw:src/Root/,index=3,format=raw + -bios $(BIOS) -M q35 -cdrom $(BOOT) -boot d -accel kvm endif LD_FLAGS=-e Main --subsystem=10 @@ -96,11 +94,12 @@ all: compile-amd64 $(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER) xorriso -as mkisofs \ -iso-level 3 \ - -r -V NeOS \ - -J -joliet-long \ - -append_partition 2 0xef src/Root/EFI/BOOT/BOOTX64.EFI \ - -partition_cyl_align all \ + -full-iso9660-filenames \ + -volid "NEOS_ISO" \ -o $(BOOT) \ + -e EFI/BOOT/BOOTX64.EFI \ + -no-emul-boot -boot-load-size 4 -boot-info-table \ + -no-emul-boot -isohybrid-gpt-basdat \ src/Root/ diff --git a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc index f2e0fda5..f36b8e28 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc @@ -20,6 +20,8 @@ #include #include +#include + #include #include #include @@ -138,9 +140,9 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz for (; i < (command_header->Prdtl - 1); i++) { - command_table->Prdt[i].Dba = ((UInt32)(UInt64)buffer_phys); - command_table->Prdt[i].Dbau = (((UInt64)(buffer_phys) >> 32)); command_table->Prdt[i].Dbc = ((size_buffer / command_header->Prdtl - 1) - 1); + command_table->Prdt[i].Dba = ((UInt32)(UInt64)buffer_phys + (i * command_table->Prdt[i].Dbc)); + command_table->Prdt[i].Dbau = (((UInt64)(buffer_phys) >> 32) + (i * command_table->Prdt[i].Dbc)); command_table->Prdt[i].Ie = YES; } -- cgit v1.2.3