diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-11 12:25:04 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-11 12:25:04 +0100 |
| commit | abb9aca8e7e86e28875b211a47f1a59dd02098b6 (patch) | |
| tree | ff9494fef9b4d2346286db4a3eda639f77e3ce77 /dev | |
| parent | 0a2760d8a5ce09ae77cfc097ece4100579164f9d (diff) | |
ADD: A better AHCI driver.
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/Boot/amd64-desktop.make | 15 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/Storage/AHCI.cc | 6 |
2 files changed, 11 insertions, 10 deletions
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 <KernelKit/UserProcessScheduler.h> #include <KernelKit/LPC.h> +#include <FirmwareKit/EPM.h> + #include <Mod/ATA/ATA.h> #include <Mod/AHCI/AHCI.h> #include <KernelKit/PCI/Iterator.h> @@ -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; } |
