summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/HALKit')
-rw-r--r--dev/kernel/HALKit/AMD64/HalDebugOutput.cc6
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc10
2 files changed, 11 insertions, 5 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalDebugOutput.cc b/dev/kernel/HALKit/AMD64/HalDebugOutput.cc
index 5d09f8b4..34b99ffe 100644
--- a/dev/kernel/HALKit/AMD64/HalDebugOutput.cc
+++ b/dev/kernel/HALKit/AMD64/HalDebugOutput.cc
@@ -13,15 +13,15 @@
namespace Kernel {
enum CommStatus : UInt16 {
- kStateInvalid = 0x64,
+ kStateInvalid = 0x64,
kStateReady = 0xCF,
kStateTransmit = 0xFC,
kStateCnt = 3
};
namespace Detail {
- constexpr ATTRIBUTE(unused) const UInt16 kPort = 0x3F8;
- STATIC ATTRIBUTE(unused) UInt16 kState = kStateInvalid;
+ constexpr ATTRIBUTE(unused) const UInt16 kPort = 0x3F8;
+ STATIC ATTRIBUTE(unused) UInt16 kState = kStateInvalid;
/// @brief Init COM1.
/// @return
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index b767e79c..d09fd71a 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -130,6 +130,11 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz
lba /= sector_sz;
+ if (lba > kSATASectorCount) {
+ err_global_get() = kErrorDisk;
+ return;
+ }
+
if (!buffer || size_buffer == 0) {
kout << "Invalid buffer for AHCI I/O.\r";
err_global_get() = kErrorDisk;
@@ -146,7 +151,7 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz
volatile HbaCmdHeader* command_header =
(volatile HbaCmdHeader*) ((UInt64) kSATAHba->Ports[kSATAIndex].Clb);
-
+
command_header += slot;
MUST_PASS(command_header);
@@ -196,7 +201,7 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz
return;
}
- command_header->Prdtl = prdt_index;
+ command_header->Prdtl = prdt_index;
command_header->HbaFlags.Struct.Cfl = sizeof(FisRegH2D) / sizeof(UInt32);
command_header->HbaFlags.Struct.Write = Write;
@@ -241,6 +246,7 @@ STATIC Void drv_std_input_output_ahci(UInt64 lba, UInt8* buffer, SizeT sector_sz
rtl_dma_free(size_buffer);
err_global_get() = kErrorDiskIsCorrupted;
+
return;
} else {
if (!Write) {