1 /* 2 * Copyright 2022 Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #include "PMAPPhysicalPageMapper.h" 6 7 8 status_t 9 PMAPPhysicalPageMapper::GetPage( 10 phys_addr_t physicalAddress, addr_t* _virtualAddress, void** _handle) 11 { 12 ASSERT(physicalAddress < KERNEL_PMAP_SIZE); 13 14 *_virtualAddress = KERNEL_PMAP_BASE + physicalAddress; 15 *_handle = NULL; 16 17 return B_OK; 18 } 19 20 21 status_t 22 PMAPPhysicalPageMapper::PutPage(addr_t virtualAddress, void* handle) 23 { 24 return B_OK; 25 } 26 27 28 status_t 29 PMAPPhysicalPageMapper::MemsetPhysical(phys_addr_t address, int value, phys_size_t length) 30 { 31 ASSERT(address < KERNEL_PMAP_SIZE); 32 memset(reinterpret_cast<void*>(KERNEL_PMAP_BASE + address), value, length); 33 34 return B_OK; 35 } 36 37 38 status_t 39 PMAPPhysicalPageMapper::MemcpyFromPhysical(void* to, phys_addr_t from, size_t length, bool user) 40 { 41 if (user) 42 panic("MemcpyFromPhysical user not impl"); 43 44 ASSERT(from < KERNEL_PMAP_SIZE); 45 memcpy(to, reinterpret_cast<void*>(KERNEL_PMAP_BASE + from), length); 46 47 return B_OK; 48 } 49 50 51 status_t 52 PMAPPhysicalPageMapper::MemcpyToPhysical(phys_addr_t to, const void* from, size_t length, bool user) 53 { 54 if (user) 55 panic("MemcpyToPhysical user not impl"); 56 57 ASSERT(to < KERNEL_PMAP_SIZE); 58 memcpy(reinterpret_cast<void*>(KERNEL_PMAP_BASE + to), from, length); 59 60 return B_OK; 61 } 62 63 64 void 65 PMAPPhysicalPageMapper::MemcpyPhysicalPage(phys_addr_t to, phys_addr_t from) 66 { 67 ASSERT(to < KERNEL_PMAP_SIZE); 68 ASSERT(from < KERNEL_PMAP_SIZE); 69 memcpy(reinterpret_cast<void*>(KERNEL_PMAP_BASE + to), 70 reinterpret_cast<void*>(KERNEL_PMAP_BASE + from), B_PAGE_SIZE); 71 } 72