The Pedigree Project  0.1
kernel/core/processor/ppc_common/PhysicalMemoryManager.h
1 /*
2  * Copyright (c) 2008-2014, Pedigree Developers
3  *
4  * Please see the CONTRIB file in the root of the source tree for a full
5  * list of contributors.
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef KERNEL_PROCESSOR_PPC32_COMMON_PHYSICALMEMORYMANAGER_H
21 #define KERNEL_PROCESSOR_PPC32_COMMON_PHYSICALMEMORYMANAGER_H
22 
23 #include "../ppc32/Translation.h"
24 #include "pedigree/kernel/processor/PhysicalMemoryManager.h"
25 #include "pedigree/kernel/utilities/RangeList.h"
26 
43 {
44  public:
48  {
49  return m_Instance;
50  }
51 
52  //
53  // PhysicalMemoryManager Interface
54  //
55  virtual physical_uintptr_t allocatePage();
56  virtual void freePage(physical_uintptr_t page);
57  virtual bool allocateRegion(
58  MemoryRegion &Region, size_t cPages, size_t pageConstraints,
59  size_t Flags, physical_uintptr_t start = -1);
60 
61  void initialise(Translations &translations, uintptr_t ramMax);
62 
63  void unmapRegion(MemoryRegion *pRegion);
64 
65  protected:
70 
71  private:
79 
81  class PageStack
82  {
83  public:
88  physical_uintptr_t allocate();
91  void free(uintptr_t physicalAddress);
93  inline ~PageStack()
94  {
95  }
96 
97  private:
100  PageStack(const PageStack &);
103  PageStack &operator=(const PageStack &);
104 
107  physical_uintptr_t *m_Stack;
109  size_t m_StackMax;
111  size_t m_StackSize;
112  };
113 
116 
119 
122  physical_uintptr_t m_NextPage;
123 
126 
129 
132 };
133 
134 //
135 // Initial physical layout.
136 //
137 #define PMM_INITIAL_START 0x2000000
138 
141 #endif
PageStack & operator=(const PageStack &)
uintptr_t physicalAddress(physical_uintptr_t address) PURE
Definition: utils.h:38
Special memory entity in the kernel's virtual address space.
Definition: MemoryRegion.h:35
Implementation of the PhysicalMemoryManager for common ppc.
virtual void freePage(physical_uintptr_t page)
virtual bool allocateRegion(MemoryRegion &Region, size_t cPages, size_t pageConstraints, size_t Flags, physical_uintptr_t start=-1)
PpcCommonPhysicalMemoryManager & operator=(const PpcCommonPhysicalMemoryManager &)