Ticket #5419: VMTranslationMap-cleanup-ppc.diff

File VMTranslationMap-cleanup-ppc.diff, 6.0 KB (added by kallisti5, 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
     13struct 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
     76protected:
     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

     
    9696#include "generic_vm_physical_page_ops.h"
    9797#include "GenericVMPhysicalPageMapper.h"
    9898
    99 
    10099static struct page_table_entry_group *sPageTable;
    101100static size_t sPageTableSize;
    102101static uint32 sPageTableHashMask;
     
    124123#define VSID_BASE_SHIFT 3
    125124#define VADDR_TO_VSID(vsidBase, vaddr) (vsidBase + ((vaddr) >> 28))
    126125
     126#include "PPCVMTranslationMap.h"
    127127
    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 
    181128void
    182129ppc_translation_map_change_asid(VMTranslationMap *map)
    183130{
     
    470417
    471418
    472419status_t
    473 PPCVMTranslationMap::UnmapPage(VMArea* area, addr_t address,
    474     bool updatePageQueue)
     420PPCVMTranslationMap::UnmapPage(VMArea* area, addr_t address, bool updatePageQueue)
    475421{
    476422    ASSERT(address % B_PAGE_SIZE == 0);
    477423
     
    546492    return B_OK;
    547493}
    548494
     495void
     496PPCVMTranslationMap::UnmapPages(VMArea* area, addr_t base, size_t size, bool updatePageQueue)
     497{
     498    // TODO: complete
     499}
    549500
     501void
     502PPCVMTranslationMap::UnmapArea(VMArea* area, bool deletingAddressSpace, bool ignoreTopCachePageFlags)
     503{
     504    // TODO: complete
     505}
     506
    550507status_t
    551508PPCVMTranslationMap::Query(addr_t va, addr_t *_outPhysical, uint32 *_outFlags)
    552509{
     
    590547    return B_ERROR;
    591548}
    592549
     550status_t
     551PPCVMTranslationMap::ProtectPage(VMArea* area, addr_t address, uint32 attributes)
     552{
     553    // TODO: Finish
     554    return B_ERROR;
     555}
    593556
    594557status_t
     558PPCVMTranslationMap::ProtectArea(VMArea* area, uint32 attributes)
     559{
     560    // TODO: Finish
     561    return B_ERROR;
     562}
     563
     564
     565
     566status_t
    595567PPCVMTranslationMap::ClearFlags(addr_t virtualAddress, uint32 flags)
    596568{
    597569    page_table_entry *entry = LookupPageTableEntry(virtualAddress);