summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/Boot/amd64-desktop.make5
-rw-r--r--dev/Kernel/HALKit/AMD64/HalDebugOutput.cc2
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/SATA.cc53
-rw-r--r--dev/Kernel/KernelKit/DriveMgr.h8
-rw-r--r--dev/Kernel/KernelKit/PCI/Device.h2
-rw-r--r--dev/Kernel/NewKit/Array.h2
-rw-r--r--dev/Kernel/NewKit/ArrayList.h4
-rw-r--r--dev/Usr/LibCF/Array.h6
-rw-r--r--dev/Usr/LibCF/Property.h18
-rw-r--r--dev/Usr/LibCF/Ref.h2
10 files changed, 42 insertions, 60 deletions
diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make
index 7d25645e..f1bd60f1 100644
--- a/dev/Boot/amd64-desktop.make
+++ b/dev/Boot/amd64-desktop.make
@@ -30,8 +30,7 @@ IMG_2=epm-master-2.img
EMU_FLAGS=-net none -smp 4 -m 8G \
-bios $(BIOS) -drive \
- file=fat:rw:src/Root/,index=3,format=raw \
- -serial stdio
+ file=fat:rw:src/Root/,index=3,format=raw
LD_FLAGS=-e Main --subsystem=10
@@ -82,7 +81,7 @@ compile-amd64:
.PHONY: run-efi-amd64-ahci
run-efi-amd64-ahci:
- $(EMU) $(EMU_FLAGS) -M q35 -hda $(IMG) -s -S
+ $(EMU) $(EMU_FLAGS) -M q35 -hda $(IMG) -s -S -trace ahci_*
.PHONY: run-efi-amd64-ata-pio
run-efi-amd64-ata-pio:
diff --git a/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc b/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc
index a95b444e..a51a1e15 100644
--- a/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc
+++ b/dev/Kernel/HALKit/AMD64/HalDebugOutput.cc
@@ -126,7 +126,7 @@ namespace Kernel
fb_init();
FBDrawInRegion(fb_get_clear_clr(), FB::UIAccessibilty::Height(), FB::UIAccessibilty::Width(),
- 0, 0);
+ 0, 0);
fb_clear();
}
diff --git a/dev/Kernel/HALKit/AMD64/Storage/SATA.cc b/dev/Kernel/HALKit/AMD64/Storage/SATA.cc
index 2d53fa37..58435c8d 100644
--- a/dev/Kernel/HALKit/AMD64/Storage/SATA.cc
+++ b/dev/Kernel/HALKit/AMD64/Storage/SATA.cc
@@ -27,6 +27,7 @@
#ifdef __AHCI__
#define kHBAErrTaskFile (1 << 30)
+#define kHBACmdGhc (1 << 31)
#define kHBAPxCmdST 0x0001
#define kHBAPxCmdFre 0x0010
#define kHBAPxCmdFR 0x4000
@@ -91,7 +92,7 @@ Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented)
HbaMem* mem_ahci = (HbaMem*)kPCIDevice.Bar(kSATABar5);
- kout << hex_number((UIntPtr)mem_ahci) << endl;
+ kout << hex_number((UIntPtr)mem_ahci) << endl;
Kernel::UInt32 ports_implemented = mem_ahci->Pi;
Kernel::UInt16 ahci_index = 0;
@@ -115,32 +116,9 @@ Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented)
kSATAPortIdx = ahci_index;
kSATAPort = mem_ahci;
- kSATAPort->Ports[kSATAPortIdx].Cmd &= ~kHBAPxCmdST;
- kSATAPort->Ports[kSATAPortIdx].Cmd &= ~kHBAPxCmdFre;
-
- while (YES)
- {
- if (kSATAPort->Ports[kSATAPortIdx].Cmd & kHBAPxCmdCR)
- continue;
-
- if (kSATAPort->Ports[kSATAPortIdx].Cmd & kHBAPxCmdFR)
- continue;
-
- break;
- }
-
- kSATAPort->Ghc |= (1 << 31);
-
- while (YES)
- {
- if (kSATAPort->Ports[kSATAPortIdx].Cmd & kHBAPxCmdCR)
- continue;
-
- break;
- }
-
kSATAPort->Ports[kSATAPortIdx].Cmd |= kHBAPxCmdFre;
kSATAPort->Ports[kSATAPortIdx].Cmd |= kHBAPxCmdST;
+ kSATAPort->Ghc |= kHBACmdGhc;
drvi_calculate_disk_geometry();
@@ -204,10 +182,10 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf
MUST_PASS(command_header);
- command_header->Cfl = sizeof(FisRegH2D) / sizeof(Kernel::UInt32);
- command_header->Write = Write;
- command_header->Prdtl = 1;
- command_header->Atapi = 0;
+ command_header->Cfl = sizeof(FisRegH2D) / sizeof(Kernel::UInt32);
+ command_header->Write = Write;
+ command_header->Prdtl = 1;
+ command_header->Atapi = 0;
command_header->Prefetchable = 1;
HbaCmdTbl* command_table = new HbaCmdTbl();
@@ -216,15 +194,17 @@ static Kernel::Void drvi_std_input_output(Kernel::UInt64 lba, Kernel::UInt8* buf
MUST_PASS(command_table);
- command_table->Prdt[0].Dba = ((Kernel::UInt32)(Kernel::UInt64)Kernel::HAL::hal_get_phys_address(buffer) & 0xFFFFFFFF);
- command_table->Prdt[0].Dbau = (((Kernel::UInt64)Kernel::HAL::hal_get_phys_address(buffer) >> 32));
+ auto phys_dma_buf = Kernel::HAL::hal_get_phys_address(buffer);
+
+ command_table->Prdt[0].Dba = ((Kernel::UInt32)(Kernel::UInt64)phys_dma_buf & 0xFFFFFFFF);
+ command_table->Prdt[0].Dbau = (((Kernel::UInt64)phys_dma_buf << 32));
command_table->Prdt[0].Dbc = ((size_buffer)-1);
command_table->Prdt[0].IE = 1;
- auto phys_dma = Kernel::HAL::hal_get_phys_address(command_table);
-
- command_header->Ctba = ((Kernel::UInt32)(Kernel::UInt64)phys_dma & 0xFFFFFFFF);
- command_header->Ctbau = ((Kernel::UInt32)((Kernel::UInt64)phys_dma >> 32));
+ auto phys_dma_tbl = Kernel::HAL::hal_get_phys_address(command_table);
+
+ command_header->Ctba = ((Kernel::UInt32)(Kernel::UInt64)phys_dma_tbl & 0xFFFFFFFF);
+ command_header->Ctbau = ((Kernel::UInt32)((Kernel::UInt64)phys_dma_tbl << 32));
FisRegH2D* h2d_fis = (FisRegH2D*)((Kernel::UInt64)&command_table->Cfis);
@@ -264,6 +244,9 @@ 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 << "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.");
}
diff --git a/dev/Kernel/KernelKit/DriveMgr.h b/dev/Kernel/KernelKit/DriveMgr.h
index 28c2fdad..997db1f9 100644
--- a/dev/Kernel/KernelKit/DriveMgr.h
+++ b/dev/Kernel/KernelKit/DriveMgr.h
@@ -30,11 +30,11 @@ namespace Kernel
kInvalidDrive = -1,
/// Storage types, combine with flags.
- kBlockDevice = 0xAD,
+ kBlockDevice = 0xAD,
kMassStorageDrive = 0xDA,
- kFloppyDrive = 0xCD,
- kOpticalDrive = 0xDC, // CD-ROM/DVD-ROM/Blu-Ray
- kTapeDrive = 0xD7,
+ kFloppyDrive = 0xCD,
+ kOpticalDrive = 0xDC, // CD-ROM/DVD-ROM/Blu-Ray
+ kTapeDrive = 0xD7,
/// Storage flags, combine with types.
kReadOnlyDrive = 0x10, // Read only drive
diff --git a/dev/Kernel/KernelKit/PCI/Device.h b/dev/Kernel/KernelKit/PCI/Device.h
index 7af2381d..cb463485 100644
--- a/dev/Kernel/KernelKit/PCI/Device.h
+++ b/dev/Kernel/KernelKit/PCI/Device.h
@@ -13,7 +13,7 @@ namespace Kernel::PCI
{
ConfigAddress = 0xCF8,
ConfigData = 0xCFC,
- CommandReg = 0x0004,
+ CommandReg = 0x0004,
Invalid = 0xFFFF,
};
diff --git a/dev/Kernel/NewKit/Array.h b/dev/Kernel/NewKit/Array.h
index aab3ba91..43c67586 100644
--- a/dev/Kernel/NewKit/Array.h
+++ b/dev/Kernel/NewKit/Array.h
@@ -24,7 +24,7 @@ namespace Kernel
T& operator[](const SizeT& at)
{
- MUST_PASS(at < this->Count());
+ MUST_PASS(at < this->Count());
return fArray[at];
}
diff --git a/dev/Kernel/NewKit/ArrayList.h b/dev/Kernel/NewKit/ArrayList.h
index a0d4388e..e05480f0 100644
--- a/dev/Kernel/NewKit/ArrayList.h
+++ b/dev/Kernel/NewKit/ArrayList.h
@@ -36,7 +36,7 @@ namespace Kernel
T& operator[](int index) const
{
- MUST_PASS(index < this->Count());
+ MUST_PASS(index < this->Count());
return fList[index];
}
@@ -51,7 +51,7 @@ namespace Kernel
}
private:
- T* fList{nullptr};
+ T* fList{nullptr};
SizeT fLen{0};
};
diff --git a/dev/Usr/LibCF/Array.h b/dev/Usr/LibCF/Array.h
index 8533b649..acd72f95 100644
--- a/dev/Usr/LibCF/Array.h
+++ b/dev/Usr/LibCF/Array.h
@@ -15,14 +15,14 @@ namespace LibCF
{
public:
explicit CFArray() = default;
- ~CFArray() = default;
+ ~CFArray() = default;
CFArray& operator=(const CFArray&) = default;
CFArray(const CFArray&) = default;
T& operator[](const SizeT& at)
{
- MUST_PASS(at < this->Count());
+ MUST_PASS(at < this->Count());
return fArray[at];
}
@@ -60,4 +60,4 @@ namespace LibCF
{
return CFArray<ValueType, ARRAY_SIZE(val)>{val};
}
-} // namespace Kernel
+} // namespace LibCF
diff --git a/dev/Usr/LibCF/Property.h b/dev/Usr/LibCF/Property.h
index 629dba27..5c2916f4 100644
--- a/dev/Usr/LibCF/Property.h
+++ b/dev/Usr/LibCF/Property.h
@@ -14,11 +14,11 @@
namespace LibCF
{
- class CFString;
- class CFProperty;
+ class CFString;
+ class CFProperty;
class CFGUID;
- template<typename Cls, SizeT N>
+ template <typename Cls, SizeT N>
class CFArray;
/// @brief handle to anything (number, ptr, string...)
@@ -36,18 +36,18 @@ namespace LibCF
CFProperty& operator=(const CFProperty&) = default;
CFProperty(const CFProperty&) = default;
- Bool StringEquals(CFString& name);
+ Bool StringEquals(CFString& name);
CFPropertyId& GetValue();
- CFString& GetKey();
+ CFString& GetKey();
private:
- CFString* fName{nullptr};
- CFPropertyId fValue{0UL};
- Ref<CFGUID> fGUID{};
+ CFString* fName{nullptr};
+ CFPropertyId fValue{0UL};
+ Ref<CFGUID> fGUID{};
};
template <SizeT N>
using CFPropertyArray = CFArray<CFProperty, N>;
-} // namespace CFKit
+} // namespace LibCF
#endif // !CFKIT_PROPS_H
diff --git a/dev/Usr/LibCF/Ref.h b/dev/Usr/LibCF/Ref.h
index faad67c5..18321e3b 100644
--- a/dev/Usr/LibCF/Ref.h
+++ b/dev/Usr/LibCF/Ref.h
@@ -101,6 +101,6 @@ namespace LibCF
private:
Ref<T> fRef{nullptr};
};
-} // namespace Kernel
+} // namespace LibCF
#endif // ifndef _NEWKIT_REF_H_