/* * Copyright 2022 Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #include "PMAPPhysicalPageMapper.h" status_t PMAPPhysicalPageMapper::GetPage( phys_addr_t physicalAddress, addr_t* _virtualAddress, void** _handle) { ASSERT(physicalAddress < KERNEL_PMAP_SIZE); *_virtualAddress = KERNEL_PMAP_BASE + physicalAddress; *_handle = NULL; return B_OK; } status_t PMAPPhysicalPageMapper::PutPage(addr_t virtualAddress, void* handle) { return B_OK; } status_t PMAPPhysicalPageMapper::MemsetPhysical(phys_addr_t address, int value, phys_size_t length) { ASSERT(address < KERNEL_PMAP_SIZE); memset(reinterpret_cast(KERNEL_PMAP_BASE + address), value, length); return B_OK; } status_t PMAPPhysicalPageMapper::MemcpyFromPhysical(void* to, phys_addr_t from, size_t length, bool user) { if (user) panic("MemcpyFromPhysical user not impl"); ASSERT(from < KERNEL_PMAP_SIZE); memcpy(to, reinterpret_cast(KERNEL_PMAP_BASE + from), length); return B_OK; } status_t PMAPPhysicalPageMapper::MemcpyToPhysical(phys_addr_t to, const void* from, size_t length, bool user) { if (user) panic("MemcpyToPhysical user not impl"); ASSERT(to < KERNEL_PMAP_SIZE); memcpy(reinterpret_cast(KERNEL_PMAP_BASE + to), from, length); return B_OK; } void PMAPPhysicalPageMapper::MemcpyPhysicalPage(phys_addr_t to, phys_addr_t from) { ASSERT(to < KERNEL_PMAP_SIZE); ASSERT(from < KERNEL_PMAP_SIZE); memcpy(reinterpret_cast(KERNEL_PMAP_BASE + to), reinterpret_cast(KERNEL_PMAP_BASE + from), B_PAGE_SIZE); }