diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-10 08:07:00 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-10 08:07:00 +0200 |
| commit | 26932fb28c6d8724222fc80705976369f2f5dbb3 (patch) | |
| tree | d592aabd27265355e8bfba6cb05f9fe7b1abf36b /dev | |
| parent | ed7987748e6d55fb17cd965f4eb2abf948c1f81a (diff) | |
dev, meta: minor tweaks and improvements.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/boot/modules/SysChk/SysChk.cc | 4 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc | 20 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/PCI/Device.cc | 6 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/PCI/Device.h | 2 | ||||
| -rw-r--r-- | dev/kernel/src/BitMapMgr.cc | 8 | ||||
| -rw-r--r-- | dev/kernel/src/DriveMgr.cc | 2 |
6 files changed, 29 insertions, 13 deletions
diff --git a/dev/boot/modules/SysChk/SysChk.cc b/dev/boot/modules/SysChk/SysChk.cc index 471b89a4..ed14d2cd 100644 --- a/dev/boot/modules/SysChk/SysChk.cc +++ b/dev/boot/modules/SysChk/SysChk.cc @@ -35,10 +35,10 @@ EXTERN_C Int32 SysChkModuleMain(Kernel::HEL::BootInfoHeader* handover) return kEfiOk; Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor desc{}; - + desc.fFileName[0] = '/'; desc.fFileName[1] = 0; - desc.fKind = kNeFSCatalogKindDir; + desc.fKind = kNeFSCatalogKindDir; partition_factory.Format(kMachineModel, &desc, sizeof(Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor)); diff --git a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc index c4898dfc..040b6fd9 100644 --- a/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc +++ b/dev/kernel/HALKit/AMD64/HalPagingMgrAMD64.cc @@ -12,8 +12,11 @@ namespace Kernel::HAL { - /// @brief Go over the Page structure and find the address of *virtual_address* - + /***********************************************************************************/ + /// @brief Gets a physical address from a virtual address. + /// @param virt a valid virtual address. + /// @return Physical address. + /***********************************************************************************/ UIntPtr hal_get_phys_address(VoidPtr virt) { const UInt64 vaddr = (UInt64)virt; @@ -25,18 +28,21 @@ namespace Kernel::HAL // Level 4 auto pml4 = reinterpret_cast<UInt64*>(cr3); UInt64 pml4e = pml4[(vaddr >> 39) & kMask9Bits]; + if (!(pml4e & 1)) return 0; // Level 3 auto pdpt = reinterpret_cast<UInt64*>(pml4e & ~kPageOffsetMask); UInt64 pdpte = pdpt[(vaddr >> 30) & kMask9Bits]; + if (!(pdpte & 1)) return 0; // Level 2 auto pd = reinterpret_cast<UInt64*>(pdpte & ~kPageOffsetMask); UInt64 pde = pd[(vaddr >> 21) & kMask9Bits]; + if (!(pde & 1)) return 0; @@ -49,6 +55,7 @@ namespace Kernel::HAL // Level 1 auto pt = reinterpret_cast<UInt64*>(pde & ~kPageOffsetMask); UInt64 pte = pt[(vaddr >> 12) & kMask9Bits]; + if (!(pte & 1)) return 0; @@ -86,16 +93,19 @@ namespace Kernel::HAL auto pml4 = reinterpret_cast<UInt64*>(cr3); UInt64 pml4e = pml4[(vaddr >> 39) & kMask9]; + if (!(pml4e & 1)) return 1; auto pdpt = reinterpret_cast<UInt64*>(pml4e & ~kPageMask); UInt64 pdpte = pdpt[(vaddr >> 30) & kMask9]; + if (!(pdpte & 1)) return 1; auto pd = reinterpret_cast<UInt64*>(pdpte & ~kPageMask); UInt64 pde = pd[(vaddr >> 21) & kMask9]; + if (!(pde & 1)) return 1; @@ -104,10 +114,16 @@ namespace Kernel::HAL // Set the new PTE pte = (reinterpret_cast<UInt64>(physical_address) & ~0xFFFULL) | 0x01ULL; // Present + + if (flags & ~kMMFlagsPresent) + pte &= ~(0x01ULL); // Not Present + if (flags & kMMFlagsWr) pte |= 1 << 1; // Writable + if (flags & kMMFlagsUser) pte |= 1 << 2; // User + if (flags & kMMFlagsNX) pte |= 1ULL << 63; // NX diff --git a/dev/kernel/HALKit/AMD64/PCI/Device.cc b/dev/kernel/HALKit/AMD64/PCI/Device.cc index 7ad19360..ced473ed 100644 --- a/dev/kernel/HALKit/AMD64/PCI/Device.cc +++ b/dev/kernel/HALKit/AMD64/PCI/Device.cc @@ -11,7 +11,7 @@ #define PCI_BAR_LOWMEM (0x02) #define PCI_BAR_64 (0x04) #define PCI_BAR_PREFETCH (0x08) -#define PCI_ENABLE_BIT (0x80000000) +#define PCI_ENABLE_BIT (0x80000000) static Kernel::UInt NE_PCIReadRaw(Kernel::UInt bar, Kernel::UShort bus, Kernel::UShort dev, Kernel::UShort fun) { @@ -77,7 +77,7 @@ namespace Kernel::PCI else if (sz == 2) { UInt temp = HAL::rt_in32((UShort)PciConfigKind::ConfigData); - + temp &= ~(0xFFFF << ((bar & 2) * 8)); temp |= (data & 0xFFFF) << ((bar & 2) * 8); @@ -89,7 +89,7 @@ namespace Kernel::PCI temp &= ~(0xFF << ((bar & 3) * 8)); temp |= (data & 0xFF) << ((bar & 3) * 8); - + HAL::rt_out32((UShort)PciConfigKind::ConfigAddress, temp); } } diff --git a/dev/kernel/KernelKit/PCI/Device.h b/dev/kernel/KernelKit/PCI/Device.h index 64dd9062..0c434b0b 100644 --- a/dev/kernel/KernelKit/PCI/Device.h +++ b/dev/kernel/KernelKit/PCI/Device.h @@ -27,7 +27,7 @@ namespace Kernel::PCI Device(UShort bus, UShort device, UShort function, UInt32 bar); Device& operator=(const Device&) = default; - Device(const Device&) = default; + Device(const Device&) = default; ~Device(); diff --git a/dev/kernel/src/BitMapMgr.cc b/dev/kernel/src/BitMapMgr.cc index 51c4aed1..4f27e654 100644 --- a/dev/kernel/src/BitMapMgr.cc +++ b/dev/kernel/src/BitMapMgr.cc @@ -142,10 +142,10 @@ namespace Kernel } UIntPtr raw_base = reinterpret_cast<UIntPtr>(base); - UIntPtr offset = (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) - ? (size + pad) - : ptr_bit_set[kBitMapSizeIdx]; - + UIntPtr offset = (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) + ? (size + pad) + : ptr_bit_set[kBitMapSizeIdx]; + base = reinterpret_cast<VoidPtr>(raw_base + offset); if (base == nullptr) diff --git a/dev/kernel/src/DriveMgr.cc b/dev/kernel/src/DriveMgr.cc index 36e0a7e4..0d24d4f8 100644 --- a/dev/kernel/src/DriveMgr.cc +++ b/dev/kernel/src/DriveMgr.cc @@ -110,7 +110,7 @@ namespace Kernel { return "ATA-DMA"; } -#elif defined( __AHCI__) +#elif defined(__AHCI__) const Char* io_drv_kind(Void) { return "AHCI"; |
