summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-12 05:45:50 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-12 05:45:50 +0100
commit5f1939a987a776f25abd971ebd2366f1a1c481f2 (patch)
tree918b83de095e59fe7d96a1eb187415d00abe9b9c /dev
parent91769a67225c0be49ccafeea85a7f699735ad0b3 (diff)
AHCI.cc: Better AHCI driver.
Build: Use FAT32 emulated on a USB-stick. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
-rw-r--r--dev/Boot/amd64-desktop.make18
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/AHCI.cc28
2 files changed, 24 insertions, 22 deletions
diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make
index 362c74cf..a62a779b 100644
--- a/dev/Boot/amd64-desktop.make
+++ b/dev/Boot/amd64-desktop.make
@@ -28,7 +28,7 @@ BIOS=OVMF.fd
IMG=epm-master-1.img
IMG_2=epm-master-2.img
-BOOT=neos.iso
+BOOT=./src/fat32.img
DISK_DRV =
@@ -92,15 +92,11 @@ all: compile-amd64
$(COPY) ./Mod/SysChk/$(SYSCHK) src/Root/$(SYSCHK)
$(COPY) ../LibSCI/$(SCIKIT) src/Root/$(SCIKIT)
$(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER)
- xorriso -as mkisofs \
- -iso-level 3 \
- -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/
+
+.PHONY: disk
+disk:
+ dd if=/dev/zero of=$(BOOT) bs=1M count=100
+ mformat -i $(BOOT) -F -v "NEOS_ESP"
ifneq ($(DEBUG_SUPPORT), )
@@ -117,7 +113,7 @@ compile-amd64:
.PHONY: run-efi-amd64-ahci
run-efi-amd64-ahci:
- $(EMU) $(EMU_FLAGS) -drive id=disk,file=$(IMG),if=none -device ich9-ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -s -S -trace ahci_* -boot menu=on
+ $(EMU) $(EMU_FLAGS) -hda $(IMG) -s -S -trace ahci_* -boot menu=on
.PHONY: run-efi-amd64-ata-pio
run-efi-amd64-ata-pio:
diff --git a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
index 0e82aa31..e33f7126 100644
--- a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
+++ b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc
@@ -54,10 +54,10 @@ using namespace NeOS;
STATIC PCI::Device kSATADev;
STATIC HbaMem* kSATAHba;
-STATIC Lba kSATASectorCount = 0UL;
-STATIC UInt16 kSATAIndex = 0U;
-STATIC Char kCurrentDiskModel[50] = {"UNKNOWN AHCI DRIVE"};
-STATIC UInt16 kSATAPortsImplemented = 0U;
+STATIC Lba kSATASectorCount = 0UL;
+STATIC UInt16 kSATAIndex = 0U;
+STATIC Char kCurrentDiskModel[50] = {"UNKNOWN AHCI DRIVE"};
+STATIC UInt16 kSATAPortsImplemented = 0U;
BOOL kAHCICommandIssued = NO;
@@ -119,7 +119,7 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
if (slot == ~0)
return;
- HbaCmdHeader* command_header = ((HbaCmdHeader*)((VoidPtr)((UInt64)kSATAHba->Ports[kSATAIndex].Clb)));
+ HbaCmdHeader* command_header = ((HbaCmdHeader*)(((UInt64)kSATAHba->Ports[kSATAIndex].Clb)));
command_header += slot;
@@ -163,7 +163,7 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
h2d_fis->Lba1 = (lba >> 8) & 0xFF;
h2d_fis->Lba2 = (lba >> 16) & 0xFF;
- h2d_fis->Device = kSATALBAMode;
+ h2d_fis->Device = Identify ? 0 : kSATALBAMode;
h2d_fis->Lba3 = (lba >> 24) & 0xFF;
h2d_fis->Lba4 = (lba >> 32) & 0xFF;
@@ -198,7 +198,6 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz
*/
SizeT drv_get_sector_count_ahci()
{
- MUST_PASS(kSATASectorCount > 0);
return kSATASectorCount;
}
@@ -251,7 +250,11 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
kout << "Detect: /dev/sat" << number(ahci_index) << kendl;
kSATAIndex = ahci_index;
- kSATAHba->Ports[ahci_index].Cmd |= kHBAPxCmdFre | kHBAPxCmdST;
+
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdFre;
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdST;
+
+ drv_compute_disk_ahci();
break;
}
@@ -262,6 +265,11 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
kSATAIndex = ahci_index;
kSATAHba->Ports[ahci_index].Cmd |= kHBAPxCmdFre | kHBAPxCmdST;
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdFre;
+ kSATAHba->Ports[kSATAIndex].Cmd |= kHBAPxCmdST;
+
+ drv_compute_disk_ahci();
+
break;
}
@@ -269,15 +277,13 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi)
++ahci_index;
}
- drv_compute_disk_ahci();
-
pi = mem_ahci->Pi;
return YES;
}
}
- return No;
+ return NO;
}
Bool drv_std_detected_ahci()