The Pedigree Project 0.1
kernel/core/processor/armv7/PhysicalMemoryManager.h
1#ifndef KERNEL_PROCESSOR_ARMV7_PHYSICALMEMORYMANAGER_H
2#define KERNEL_PROCESSOR_ARMV7_PHYSICALMEMORYMANAGER_H
3
4#include "pedigree/kernel/BootstrapInfo.h"
5#include "pedigree/kernel/Spinlock.h"
6#include "pedigree/kernel/processor/PhysicalMemoryManager.h"
7
8extern size_t g_AllocedPages;
9extern size_t g_FreePages;
10
12 public:
13 static Armv7PhysicalMemoryManager& instance();
14 void initialise(const BootstrapStruct_t& info);
15
16 physical_uintptr_t allocatePage(size_t constraints = 0) override;
17 physical_uintptr_t tryAllocatePage() override;
18 physical_uintptr_t allocateAlignedPages(size_t pages);
19 void freePage(physical_uintptr_t page) override;
20 void pin(physical_uintptr_t page) override;
21 bool copyPhysicalPageToBuffer(physical_uintptr_t page, void* buffer) override;
22 bool copyPhysicalPageFromBuffer(physical_uintptr_t page, const void* buffer) override;
23 MemorySnapshot memorySnapshot() const override;
24 size_t freePageCount() const override;
25 bool allocateRegion(MemoryRegion& region, size_t pages, size_t constraints, size_t flags,
26 physical_uintptr_t start = -1) override;
27
28 private:
30 void freePageUnlocked(physical_uintptr_t page) override;
31 void unmapRegion(MemoryRegion* region) override;
32 bool pageAvailable(size_t page) const;
33 void markPage(size_t page, bool available);
34 size_t pageLimit(size_t constraints) const;
35 physical_uintptr_t allocatePageUnlocked(size_t constraints);
36 physical_uintptr_t allocateContinuousPagesUnlocked(size_t pages, size_t constraints);
37
38 mutable Spinlock m_Lock;
39 Spinlock m_RegionLock;
40 uint16_t* m_References;
41 uint8_t* m_FreeBitmap;
42 size_t m_MaxPage;
43 size_t m_NextPage;
44 size_t m_TotalPages;
45 size_t m_FreePages;
46 uintptr_t m_NextRegion;
47};
48
49#endif
void freePage(physical_uintptr_t page) override
void unmapRegion(MemoryRegion *region) override
void freePageUnlocked(physical_uintptr_t page) override
bool allocateRegion(MemoryRegion &region, size_t pages, size_t constraints, size_t flags, physical_uintptr_t start=-1) override
void pin(physical_uintptr_t page) override
physical_uintptr_t allocatePage(size_t constraints=0) override
Special memory entity in the kernel's virtual address space.