diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-25 20:07:48 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-03-25 20:13:14 +0100 |
| commit | ec11d85709965521ba7151fa18d0f71ea9c2eae2 (patch) | |
| tree | 3539bebe985ed55af7e874323cbdd684d7ff7cb2 /dev/kernel/HALKit | |
| parent | 0ead895f52d24dad009f738037a7795d4e3d840a (diff) | |
cli(diutil): moved CommandLine.cc to src/
ahci(generic): set err_global_get() when probing or command fails, use
HbaMemRef when refering to HbaMem*
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit')
| -rw-r--r-- | dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc index b1584c80..e3be5fb6 100644 --- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc +++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc @@ -56,16 +56,16 @@ 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 HbaMemRef kSATAHba; +STATIC Lba kSATASectorCount = 0UL; +STATIC UInt16 kSATAIndex = 0U; +STATIC Char kCurrentDiskModel[50] = {"UNKNOWN AHCI DRIVE"}; +STATIC UInt16 kSATAPortsImplemented = 0U; template <BOOL Write, BOOL CommandOrCTRL, BOOL Identify> STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz, SizeT size_buffer) noexcept; -STATIC Int32 drv_find_cmd_slot(HbaPort* port) noexcept; +STATIC Int32 drv_find_cmd_slot_ahci(HbaPort* port) noexcept; STATIC Void drv_compute_disk_ahci() noexcept; @@ -96,7 +96,7 @@ STATIC Void drv_compute_disk_ahci() noexcept /// @brief Finds a command slot for a HBA port. /// @param port The port to search on. /// @return The slot, or ~0. -STATIC Int32 drv_find_cmd_slot(HbaPort* port) noexcept +STATIC Int32 drv_find_cmd_slot_ahci(HbaPort* port) noexcept { UInt32 slots = (port->Sact | port->Ci); @@ -121,10 +121,14 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz { UIntPtr slot = 0UL; - slot = drv_find_cmd_slot(&kSATAHba->Ports[kSATAIndex]); + slot = drv_find_cmd_slot_ahci(&kSATAHba->Ports[kSATAIndex]); if (slot == ~0) + { + err_global_get() = kErrorDisk; + return; + } if (!Write) { @@ -297,7 +301,7 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi) if (mem_ahci->Ports[ahci_index].Sig == kSATASignature) { - kout << "Detect: /dev/sat" << number(ahci_index) << kendl; + kout << "detect device: /dev/sat" << number(ahci_index) << kendl; kSATAIndex = ahci_index; kSATAHba = mem_ahci; @@ -308,7 +312,7 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi) } else if (atapi && kSATAPISignature == mem_ahci->Ports[ahci_index].Sig) { - kout << "Detect: /dev/atp" << number(ahci_index) << kendl; + kout << "detect device: /dev/atp" << number(ahci_index) << kendl; kSATAIndex = ahci_index; kSATAHba = mem_ahci; @@ -326,6 +330,8 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL& atapi) } } + err_global_get() = kErrorDisk; + return NO; } @@ -359,6 +365,8 @@ namespace NeOS { AHCIDeviceInterface* dev = (AHCIDeviceInterface*)self; + err_global_get() = kErrorDisk; + if (!dev) return; @@ -367,6 +375,8 @@ namespace NeOS if (!disk) return; + err_global_get() = kErrorSuccess; + drv_std_input_output_ahci<NO, YES, NO>(disk->fPacket.fPacketLba, (UInt8*)disk->fPacket.fPacketContent, kAHCISectorSize, disk->fPacket.fPacketSize); } @@ -377,6 +387,8 @@ namespace NeOS { AHCIDeviceInterface* dev = (AHCIDeviceInterface*)self; + err_global_get() = kErrorDisk; + if (!dev) return; @@ -385,6 +397,8 @@ namespace NeOS if (!disk) return; + err_global_get() = kErrorSuccess; + drv_std_input_output_ahci<YES, YES, NO>(disk->fPacket.fPacketLba, (UInt8*)disk->fPacket.fPacketContent, kAHCISectorSize, disk->fPacket.fPacketSize); } } // namespace Detail |
