diff options
Diffstat (limited to 'dev/Kernel')
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/Storage/SATA.cc | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/dev/Kernel/HALKit/AMD64/Storage/SATA.cc b/dev/Kernel/HALKit/AMD64/Storage/SATA.cc index 58435c8d..7764b55b 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/SATA.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/SATA.cc @@ -28,6 +28,7 @@ #define kHBAErrTaskFile (1 << 30) #define kHBACmdGhc (1 << 31) +#define kHBACmdAE (1 << 0) #define kHBAPxCmdST 0x0001 #define kHBAPxCmdFre 0x0010 #define kHBAPxCmdFR 0x4000 @@ -116,9 +117,7 @@ Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented) kSATAPortIdx = ahci_index; kSATAPort = mem_ahci; - kSATAPort->Ports[kSATAPortIdx].Cmd |= kHBAPxCmdFre; - kSATAPort->Ports[kSATAPortIdx].Cmd |= kHBAPxCmdST; - kSATAPort->Ghc |= kHBACmdGhc; + kSATAPort->Ghc |= kHBACmdAE; drvi_calculate_disk_geometry(); @@ -178,7 +177,7 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf if (size_buffer > mib_cast(4)) Kernel::ke_panic(RUNTIME_CHECK_FAILED, "AHCI only supports < 4mb DMA transfers."); - HbaCmdHeader* command_header = ((HbaCmdHeader*)((Kernel::UInt64)(kSATAPort->Ports[kSATAPortIdx].Clbu << 32) | kSATAPort->Ports[kSATAPortIdx].Clb)) + slot; + HbaCmdHeader* command_header = ((HbaCmdHeader*)((Kernel::UInt64)(kSATAPort->Ports[kSATAPortIdx].Clbu) | kSATAPort->Ports[kSATAPortIdx].Clb)) + slot; MUST_PASS(command_header); @@ -229,11 +228,6 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf h2d_fis->CountLow = sector_sz & 0xFF; h2d_fis->CountHigh = (sector_sz >> 8) & 0xFF; - while ((kSATAPort->Ports[kSATAPortIdx].Tfd & (kSATASRBsy | kSATASRDrq))) - { - kout << "Waiting for the TFD to be ready...\r"; - } - if (kSATAPort->Is & kHBAErrTaskFile) Kernel::ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "AHCI Read disk failure, faulty component."); @@ -244,18 +238,13 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf if (kSATAPort->Ports[kSATAPortIdx].Ci == 0) break; - kout << "AHCI Interrupt Status: " << Kernel::hex_number(kSATAPort->Is) << endl; + kout << "PxCI: " << Kernel::hex_number(kSATAPort->Ports[kSATAPortIdx].Ci) << endl; kout << "PxCMD: " << Kernel::hex_number(kSATAPort->Ports[kSATAPortIdx].Cmd) << endl; if (kSATAPort->Is & kHBAErrTaskFile) Kernel::ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "AHCI Read disk failure, faulty component."); } - while ((kSATAPort->Ports[kSATAPortIdx].Tfd & (kSATASRBsy | kSATASRDrq))) - { - kout << "Waiting for the TFD to be ready...\r"; - } - delete command_table; command_table = nullptr; } |
