Ticket #5419: VMTranslationMap-cleanup-ppc.diff
File VMTranslationMap-cleanup-ppc.diff, 6.0 KB (added by , 14 years ago) |
---|
-
src/system/kernel/arch/ppc/PPCVMTranslationMap.h
1 2 /* 3 * Copyright 2010, Alexander von Gluck, 4 * Distributed under the terms of the MIT License. 5 */ 6 7 #ifndef KERNEL_ARCH_PPC_PPC_VM_TRANSLATION_MAP_H 8 #define KERNEL_ARCH_PPC_PPC_VM_TRANSLATION_MAP_H 9 10 11 #include <vm/VMTranslationMap.h> 12 13 struct PPCVMTranslationMap : VMTranslationMap { 14 PPCVMTranslationMap(); 15 virtual ~PPCVMTranslationMap(); 16 17 status_t Init(bool kernel); 18 19 inline int VSIDBase() const { return fVSIDBase; } 20 21 page_table_entry* LookupPageTableEntry(addr_t virtualAddress); 22 bool RemovePageTableEntry(addr_t virtualAddress); 23 24 virtual status_t InitPostSem(); 25 26 virtual bool Lock(); 27 virtual void Unlock(); 28 29 virtual addr_t MappedSize() const; 30 virtual size_t MaxPagesNeededToMap(addr_t start, 31 addr_t end) const; 32 33 virtual status_t Map(addr_t virtualAddress, 34 addr_t physicalAddress, 35 uint32 attributes, 36 vm_page_reservation* reservation); 37 virtual status_t Unmap(addr_t start, addr_t end); 38 39 virtual status_t UnmapPage(VMArea* area, addr_t address, 40 bool updatePageQueue); 41 virtual void UnmapPages(VMArea* area, addr_t base, 42 size_t size, bool updatePageQueue); 43 44 virtual void UnmapArea(VMArea* area, 45 bool deletingAddressSpace, 46 bool ignoreTopCachePageFlags); 47 48 49 50 51 virtual status_t Query(addr_t virtualAddress, 52 addr_t* _physicalAddress, 53 uint32* _flags); 54 virtual status_t QueryInterrupt(addr_t virtualAddress, 55 addr_t* _physicalAddress, 56 uint32* _flags); 57 58 virtual status_t Protect(addr_t base, addr_t top, 59 uint32 attributes); 60 status_t ProtectPage(VMArea* area, addr_t address, 61 uint32 attributes); 62 status_t ProtectArea(VMArea* area, 63 uint32 attributes); 64 65 66 virtual status_t ClearFlags(addr_t virtualAddress, 67 uint32 flags); 68 69 virtual bool ClearAccessedAndModified( 70 VMArea* area, addr_t address, 71 bool unmapIfUnaccessed, 72 bool& _modified); 73 74 virtual void Flush(); 75 76 protected: 77 int fVSIDBase; 78 }; 79 80 #endif // KERNEL_ARCH_PPC_PPC_VM_TRANSLATION_MAP_H -
src/system/kernel/arch/ppc/arch_vm_translation_map.cpp
96 96 #include "generic_vm_physical_page_ops.h" 97 97 #include "GenericVMPhysicalPageMapper.h" 98 98 99 100 99 static struct page_table_entry_group *sPageTable; 101 100 static size_t sPageTableSize; 102 101 static uint32 sPageTableHashMask; … … 124 123 #define VSID_BASE_SHIFT 3 125 124 #define VADDR_TO_VSID(vsidBase, vaddr) (vsidBase + ((vaddr) >> 28)) 126 125 126 #include "PPCVMTranslationMap.h" 127 127 128 struct PPCVMTranslationMap : VMTranslationMap {129 PPCVMTranslationMap();130 virtual ~PPCVMTranslationMap();131 132 status_t Init(bool kernel);133 134 inline int VSIDBase() const { return fVSIDBase; }135 136 page_table_entry* LookupPageTableEntry(addr_t virtualAddress);137 bool RemovePageTableEntry(addr_t virtualAddress);138 139 virtual status_t InitPostSem();140 141 virtual bool Lock();142 virtual void Unlock();143 144 virtual addr_t MappedSize() const;145 virtual size_t MaxPagesNeededToMap(addr_t start,146 addr_t end) const;147 148 virtual status_t Map(addr_t virtualAddress,149 addr_t physicalAddress,150 uint32 attributes,151 vm_page_reservation* reservation);152 virtual status_t Unmap(addr_t start, addr_t end);153 154 virtual status_t UnmapPage(VMArea* area, addr_t address,155 bool updatePageQueue);156 157 virtual status_t Query(addr_t virtualAddress,158 addr_t* _physicalAddress,159 uint32* _flags);160 virtual status_t QueryInterrupt(addr_t virtualAddress,161 addr_t* _physicalAddress,162 uint32* _flags);163 164 virtual status_t Protect(addr_t base, addr_t top,165 uint32 attributes);166 virtual status_t ClearFlags(addr_t virtualAddress,167 uint32 flags);168 169 virtual bool ClearAccessedAndModified(170 VMArea* area, addr_t address,171 bool unmapIfUnaccessed,172 bool& _modified);173 174 virtual void Flush();175 176 protected:177 int fVSIDBase;178 };179 180 181 128 void 182 129 ppc_translation_map_change_asid(VMTranslationMap *map) 183 130 { … … 470 417 471 418 472 419 status_t 473 PPCVMTranslationMap::UnmapPage(VMArea* area, addr_t address, 474 bool updatePageQueue) 420 PPCVMTranslationMap::UnmapPage(VMArea* area, addr_t address, bool updatePageQueue) 475 421 { 476 422 ASSERT(address % B_PAGE_SIZE == 0); 477 423 … … 546 492 return B_OK; 547 493 } 548 494 495 void 496 PPCVMTranslationMap::UnmapPages(VMArea* area, addr_t base, size_t size, bool updatePageQueue) 497 { 498 // TODO: complete 499 } 549 500 501 void 502 PPCVMTranslationMap::UnmapArea(VMArea* area, bool deletingAddressSpace, bool ignoreTopCachePageFlags) 503 { 504 // TODO: complete 505 } 506 550 507 status_t 551 508 PPCVMTranslationMap::Query(addr_t va, addr_t *_outPhysical, uint32 *_outFlags) 552 509 { … … 590 547 return B_ERROR; 591 548 } 592 549 550 status_t 551 PPCVMTranslationMap::ProtectPage(VMArea* area, addr_t address, uint32 attributes) 552 { 553 // TODO: Finish 554 return B_ERROR; 555 } 593 556 594 557 status_t 558 PPCVMTranslationMap::ProtectArea(VMArea* area, uint32 attributes) 559 { 560 // TODO: Finish 561 return B_ERROR; 562 } 563 564 565 566 status_t 595 567 PPCVMTranslationMap::ClearFlags(addr_t virtualAddress, uint32 flags) 596 568 { 597 569 page_table_entry *entry = LookupPageTableEntry(virtualAddress);