summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-03-25 20:07:48 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-03-25 20:13:14 +0100
commitec11d85709965521ba7151fa18d0f71ea9c2eae2 (patch)
tree3539bebe985ed55af7e874323cbdd684d7ff7cb2 /dev/kernel
parent0ead895f52d24dad009f738037a7795d4e3d840a (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')
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc34
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