summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-04-28 09:06:35 +0200
committerAmlal <amlal@nekernel.org>2025-04-28 09:06:35 +0200
commit2ead335ccc7afd8e1b2a6533e966c10f49fbdfe9 (patch)
treeca447cda4307a2e51990d901be29a72829b2ea4c /dev/kernel/HALKit
parent8a7396493c3effb356d2dc4484b993b4698bc422 (diff)
dev, kernel: HeFS, Tooling: reworked the mkfs.hefs tool for the new filesystem.
other/related: - Add new KPC codes. - Final refactors for HeFS's Format method. - Dma pool improvements. - Better standard disk I/O names. - Add mm_memory_fence function inside HalPagingMgrAMD64.cc Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit')
-rw-r--r--dev/kernel/HALKit/AMD64/HalKernelMain.cc2
-rw-r--r--dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc16
-rw-r--r--dev/kernel/HALKit/AMD64/Processor.h2
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc14
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/DMA+Generic.cc6
-rw-r--r--dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc4
6 files changed, 28 insertions, 16 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
index 66793aa6..a6bf09c7 100644
--- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
@@ -142,4 +142,4 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept {
++team_index;
}
}
-#endif // ifndef __NE_MODULAR_KERNEL_COMPONENTS__ \ No newline at end of file
+#endif // ifndef __NE_MODULAR_KERNEL_COMPONENTS__ \ No newline at end of file
diff --git a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
index d7a8baf6..b6176e39 100644
--- a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
+++ b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc
@@ -94,6 +94,18 @@ UIntPtr hal_get_phys_address(VoidPtr virt) {
}
/***********************************************************************************/
+/// @brief clflush+mfence helper function.
+/***********************************************************************************/
+EXTERN_C Int32 mm_memory_fence(VoidPtr virtual_address) {
+ if (!virtual_address || !hal_get_phys_address(virtual_address)) return kErrorInvalidData;
+
+ asm volatile("clflush (%0)" : : "r"(virtual_address) : "memory");
+ asm volatile("mfence" ::: "memory");
+
+ return kErrorSuccess;
+}
+
+/***********************************************************************************/
/// @brief Maps or allocates a page from virtual_address.
/// @param virtual_address a valid virtual address.
/// @param phys_addr point to physical address.
@@ -136,9 +148,7 @@ EXTERN_C Int32 mm_map_page(VoidPtr virtual_address, VoidPtr physical_address, UI
hal_invl_tlb(virtual_address);
- asm volatile("clflush (%0)" : : "r"(virtual_address) : "memory");
-
- asm volatile("mfence" ::: "memory");
+ mm_memory_fence(virtual_address);
mmi_page_status(pte);
diff --git a/dev/kernel/HALKit/AMD64/Processor.h b/dev/kernel/HALKit/AMD64/Processor.h
index 1319277f..b57e9abf 100644
--- a/dev/kernel/HALKit/AMD64/Processor.h
+++ b/dev/kernel/HALKit/AMD64/Processor.h
@@ -272,6 +272,8 @@ EXTERN_C Void rt_cli();
EXTERN_C Void rt_sti();
EXTERN_C Void rt_cld();
EXTERN_C Void rt_std();
+
+EXTERN_C Int32 mm_memory_fence(VoidPtr virtual_address);
} // namespace Kernel::HAL
EXTERN_C Kernel::Void idt_handle_generic(Kernel::UIntPtr rsp);
diff --git a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
index 06c7781c..050826e3 100644
--- a/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/AHCI+Generic.cc
@@ -257,7 +257,7 @@ SizeT drv_get_sector_count_ahci() {
/// @brief Get the drive size.
/// @return Disk size in bytes.
SizeT drv_get_size_ahci() {
- return drv_get_sector_count() * kAHCISectorSize;
+ return drv_std_get_sector_count() * kAHCISectorSize;
}
/// @brief Enable Host and probe using the IDENTIFY command.
@@ -426,16 +426,16 @@ Bool drv_std_detected_ahci() {
///
////////////////////////////////////////////////////
Void drv_std_write(UInt64 lba, Char* buffer, SizeT sector_sz, SizeT size_buffer) {
- drv_std_input_output_ahci<YES, YES, NO>(lba / sector_sz, reinterpret_cast<UInt8*>(buffer), sector_sz,
- size_buffer);
+ drv_std_input_output_ahci<YES, YES, NO>(lba / sector_sz, reinterpret_cast<UInt8*>(buffer),
+ sector_sz, size_buffer);
}
////////////////////////////////////////////////////
///
////////////////////////////////////////////////////
Void drv_std_read(UInt64 lba, Char* buffer, SizeT sector_sz, SizeT size_buffer) {
- drv_std_input_output_ahci<NO, YES, NO>(lba / sector_sz, reinterpret_cast<UInt8*>(buffer), sector_sz,
- size_buffer);
+ drv_std_input_output_ahci<NO, YES, NO>(lba / sector_sz, reinterpret_cast<UInt8*>(buffer),
+ sector_sz, size_buffer);
}
////////////////////////////////////////////////////
@@ -459,7 +459,7 @@ Bool drv_std_detected(Void) {
@return Sector size in bytes.
*/
////////////////////////////////////////////////////
-SizeT drv_get_sector_count() {
+SizeT drv_std_get_sector_count() {
return drv_get_sector_count_ahci();
}
@@ -467,7 +467,7 @@ SizeT drv_get_sector_count() {
/// @brief Get the drive size.
/// @return Disk size in bytes.
////////////////////////////////////////////////////
-SizeT drv_get_size() {
+SizeT drv_std_get_size() {
return drv_get_size_ahci();
}
diff --git a/dev/kernel/HALKit/AMD64/Storage/DMA+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/DMA+Generic.cc
index ca3e9ee4..4688203f 100644
--- a/dev/kernel/HALKit/AMD64/Storage/DMA+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/DMA+Generic.cc
@@ -183,15 +183,15 @@ Boolean drv_std_detected(Void) {
@return Number of sectors, or zero.
*/
/***********************************************************************************/
-Kernel::SizeT drv_get_sector_count() {
+Kernel::SizeT drv_std_get_sector_count() {
return (kATAIdentifyData[61] << 16) | kATAIdentifyData[60];
}
/***********************************************************************************/
/// @brief Get the size of the current drive.
/***********************************************************************************/
-Kernel::SizeT drv_get_size() {
- return (drv_get_sector_count()) * kATASectorSize;
+Kernel::SizeT drv_std_get_size() {
+ return (drv_std_get_sector_count()) * kATASectorSize;
}
#endif /* ifdef __ATA_DMA__ */
diff --git a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
index a024d2fe..e57494a7 100644
--- a/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
+++ b/dev/kernel/HALKit/AMD64/Storage/PIO+Generic.cc
@@ -245,11 +245,11 @@ Void drv_std_write(UInt64 Lba, UInt16 IO, UInt8 Master, Char* Buf, SizeT SectorS
drv_pio_std_write(Lba, IO, Master, Buf, SectorSz, Size);
}
-SizeT drv_get_size() {
+SizeT drv_std_get_size() {
return drv_pio_get_size();
}
-SizeT drv_get_sector_count() {
+SizeT drv_std_get_sector_count() {
return drv_pio_get_sector_count();
}