forked from Bananymous/banan-os
Kernel: Implement WriteCombining memory
This makes framebuffer much faster on real hardware
This commit is contained in:
@@ -57,6 +57,13 @@ namespace CPUID
|
||||
return edx & CPUID::EDX_PGE;
|
||||
}
|
||||
|
||||
bool has_pat()
|
||||
{
|
||||
uint32_t ecx, edx;
|
||||
get_features(ecx, edx);
|
||||
return edx & CPUID::EDX_PAT;
|
||||
}
|
||||
|
||||
const char* feature_string_ecx(uint32_t feat)
|
||||
{
|
||||
switch (feat)
|
||||
|
||||
@@ -68,7 +68,8 @@ namespace Kernel
|
||||
m_video_memory_paddr & PAGE_ADDR_MASK,
|
||||
m_video_memory_vaddr,
|
||||
video_memory_pages * PAGE_SIZE,
|
||||
PageTable::Flags::ReadWrite | PageTable::Flags::Present
|
||||
PageTable::Flags::ReadWrite | PageTable::Flags::Present,
|
||||
PageTable::WriteCombining
|
||||
);
|
||||
|
||||
m_video_buffer = TRY(VirtualRange::create_to_vaddr_range(
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Kernel
|
||||
vaddr_guard.disable();
|
||||
paddr_guard.disable();
|
||||
|
||||
PageTable::kernel().map_range_at(paddr, vaddr, size, PageTable::Flags::CacheDisable | PageTable::Flags::ReadWrite | PageTable::Flags::Present);
|
||||
PageTable::kernel().map_range_at(paddr, vaddr, size, PageTable::Flags::ReadWrite | PageTable::Flags::Present);
|
||||
|
||||
return BAN::UniqPtr<DMARegion>::adopt(region_ptr);
|
||||
}
|
||||
|
||||
@@ -652,7 +652,8 @@ namespace Kernel::PCI
|
||||
m_vaddr = PageTable::kernel().reserve_free_contiguous_pages(needed_pages, KERNEL_OFFSET);
|
||||
if (m_vaddr == 0)
|
||||
return BAN::Error::from_errno(ENOMEM);
|
||||
PageTable::kernel().map_range_at(m_paddr, m_vaddr, m_size, PageTable::Flags::CacheDisable | PageTable::Flags::ReadWrite | PageTable::Flags::Present);
|
||||
|
||||
PageTable::kernel().map_range_at(m_paddr, m_vaddr, m_size, PageTable::Flags::ReadWrite | PageTable::Flags::Present);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user