ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

page.c
Go to the documentation of this file.
00001 /*
00002  * PROJECT:         ReactOS Kernel
00003  * LICENSE:         BSD - See COPYING.ARM in the top level directory
00004  * FILE:            ntoskrnl/mm/arm/page.c
00005  * PURPOSE:         Old-school Page Management
00006  * PROGRAMMERS:     ReactOS Portable Systems Group
00007  */
00008 
00009 /* INCLUDES *******************************************************************/
00010 
00011 #include <ntoskrnl.h>
00012 #define NDEBUG
00013 #include <debug.h>
00014 
00015 #define MODULE_INVOLVED_IN_ARM3
00016 #include "../ARM3/miarm.h"
00017 
00018 /* GLOBALS ********************************************************************/
00019 
00020 const
00021 ULONG
00022 MmProtectToPteMask[32] =
00023 {
00024     //
00025     // These are the base MM_ protection flags
00026     //
00027     0,
00028     PTE_READONLY            | PTE_ENABLE_CACHE,
00029     PTE_EXECUTE             | PTE_ENABLE_CACHE,
00030     PTE_EXECUTE_READ        | PTE_ENABLE_CACHE,
00031     PTE_READWRITE           | PTE_ENABLE_CACHE,
00032     PTE_WRITECOPY           | PTE_ENABLE_CACHE,
00033     PTE_EXECUTE_READWRITE   | PTE_ENABLE_CACHE,
00034     PTE_EXECUTE_WRITECOPY   | PTE_ENABLE_CACHE,
00035     //
00036     // These OR in the MM_NOCACHE flag
00037     //
00038     0,
00039     PTE_READONLY            | PTE_DISABLE_CACHE,
00040     PTE_EXECUTE             | PTE_DISABLE_CACHE,
00041     PTE_EXECUTE_READ        | PTE_DISABLE_CACHE,
00042     PTE_READWRITE           | PTE_DISABLE_CACHE,
00043     PTE_WRITECOPY           | PTE_DISABLE_CACHE,
00044     PTE_EXECUTE_READWRITE   | PTE_DISABLE_CACHE,
00045     PTE_EXECUTE_WRITECOPY   | PTE_DISABLE_CACHE,
00046     //
00047     // These OR in the MM_DECOMMIT flag, which doesn't seem supported on x86/64/ARM
00048     //
00049     0,
00050     PTE_READONLY            | PTE_ENABLE_CACHE,
00051     PTE_EXECUTE             | PTE_ENABLE_CACHE,
00052     PTE_EXECUTE_READ        | PTE_ENABLE_CACHE,
00053     PTE_READWRITE           | PTE_ENABLE_CACHE,
00054     PTE_WRITECOPY           | PTE_ENABLE_CACHE,
00055     PTE_EXECUTE_READWRITE   | PTE_ENABLE_CACHE,
00056     PTE_EXECUTE_WRITECOPY   | PTE_ENABLE_CACHE,
00057     //
00058     // These OR in the MM_NOACCESS flag, which seems to enable WriteCombining?
00059     //
00060     0,
00061     PTE_READONLY            | PTE_WRITECOMBINED_CACHE,
00062     PTE_EXECUTE             | PTE_WRITECOMBINED_CACHE,
00063     PTE_EXECUTE_READ        | PTE_WRITECOMBINED_CACHE,
00064     PTE_READWRITE           | PTE_WRITECOMBINED_CACHE,
00065     PTE_WRITECOPY           | PTE_WRITECOMBINED_CACHE,
00066     PTE_EXECUTE_READWRITE   | PTE_WRITECOMBINED_CACHE,
00067     PTE_EXECUTE_WRITECOPY   | PTE_WRITECOMBINED_CACHE,
00068 };
00069 
00070 const
00071 ULONG MmProtectToValue[32] =
00072 {
00073     PAGE_NOACCESS,
00074     PAGE_READONLY,
00075     PAGE_EXECUTE,
00076     PAGE_EXECUTE_READ,
00077     PAGE_READWRITE,
00078     PAGE_WRITECOPY,
00079     PAGE_EXECUTE_READWRITE,
00080     PAGE_EXECUTE_WRITECOPY,
00081     PAGE_NOACCESS,
00082     PAGE_NOCACHE | PAGE_READONLY,
00083     PAGE_NOCACHE | PAGE_EXECUTE,
00084     PAGE_NOCACHE | PAGE_EXECUTE_READ,
00085     PAGE_NOCACHE | PAGE_READWRITE,
00086     PAGE_NOCACHE | PAGE_WRITECOPY,
00087     PAGE_NOCACHE | PAGE_EXECUTE_READWRITE,
00088     PAGE_NOCACHE | PAGE_EXECUTE_WRITECOPY,
00089     PAGE_NOACCESS,
00090     PAGE_GUARD | PAGE_READONLY,
00091     PAGE_GUARD | PAGE_EXECUTE,
00092     PAGE_GUARD | PAGE_EXECUTE_READ,
00093     PAGE_GUARD | PAGE_READWRITE,
00094     PAGE_GUARD | PAGE_WRITECOPY,
00095     PAGE_GUARD | PAGE_EXECUTE_READWRITE,
00096     PAGE_GUARD | PAGE_EXECUTE_WRITECOPY,
00097     PAGE_NOACCESS,
00098     PAGE_WRITECOMBINE | PAGE_READONLY,
00099     PAGE_WRITECOMBINE | PAGE_EXECUTE,
00100     PAGE_WRITECOMBINE | PAGE_EXECUTE_READ,
00101     PAGE_WRITECOMBINE | PAGE_READWRITE,
00102     PAGE_WRITECOMBINE | PAGE_WRITECOPY,
00103     PAGE_WRITECOMBINE | PAGE_EXECUTE_READWRITE,
00104     PAGE_WRITECOMBINE | PAGE_EXECUTE_WRITECOPY
00105 };
00106 
00107 ULONG MmGlobalKernelPageDirectory[4096];
00108 
00109 /* Template PTE and PDE for a kernel page */
00110 MMPDE ValidKernelPde = {.u.Hard.Valid = 1};
00111 MMPTE ValidKernelPte = {.u.Hard.Valid = 1, .u.Hard.Sbo = 1};
00112 
00113 /* Template PDE for a demand-zero page */
00114 MMPDE DemandZeroPde  = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)};
00115 MMPTE DemandZeroPte  = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)};
00116 
00117 /* Template PTE for prototype page */
00118 MMPTE PrototypePte = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) | PTE_PROTOTYPE | (MI_PTE_LOOKUP_NEEDED << PAGE_SHIFT)};
00119 
00120 /* PRIVATE FUNCTIONS **********************************************************/
00121 
00122 VOID
00123 NTAPI
00124 MiFlushTlb(IN PMMPTE PointerPte,
00125            IN PVOID Address)
00126 {
00127     UNIMPLEMENTED;
00128     while (TRUE);
00129 }
00130 
00131 BOOLEAN
00132 NTAPI
00133 MmCreateProcessAddressSpace(IN ULONG MinWs,
00134                             IN PEPROCESS Process,
00135                             IN PULONG DirectoryTableBase)
00136 {
00137     UNIMPLEMENTED;
00138     while (TRUE);
00139     return FALSE;
00140 }
00141 
00142 VOID
00143 NTAPI
00144 MmUpdatePageDir(IN PEPROCESS Process,
00145                 IN PVOID Address,
00146                 IN ULONG Size)
00147 {
00148     /* Nothing to do */
00149     return;
00150 }
00151 
00152 PULONG
00153 NTAPI
00154 MmGetPageDirectory(VOID)
00155 {
00156     /* Return the TTB */
00157     return (PULONG)KeArmTranslationTableRegisterGet().AsUlong;
00158 }
00159 
00160 VOID
00161 NTAPI
00162 MmDisableVirtualMapping(IN PEPROCESS Process,
00163                         IN PVOID Address,
00164                         OUT PBOOLEAN WasDirty,
00165                         OUT PPFN_NUMBER Page)
00166 {
00167     UNIMPLEMENTED;
00168     while (TRUE);
00169 }
00170 
00171 VOID
00172 NTAPI
00173 MmEnableVirtualMapping(IN PEPROCESS Process,
00174                        IN PVOID Address)
00175 {
00176     UNIMPLEMENTED;
00177     while (TRUE);
00178 }
00179 
00180 NTSTATUS
00181 NTAPI
00182 MmCreateVirtualMappingUnsafe(IN PEPROCESS Process,
00183                              IN PVOID Address,
00184                              IN ULONG Protection,
00185                              IN PPFN_NUMBER Pages,
00186                              IN ULONG PageCount)
00187 {
00188     UNIMPLEMENTED;
00189     while (TRUE);
00190     return STATUS_SUCCESS;
00191 }
00192 
00193 NTSTATUS
00194 NTAPI
00195 MmCreateVirtualMapping(IN PEPROCESS Process,
00196                        IN PVOID Address,
00197                        IN ULONG Protection,
00198                        IN PPFN_NUMBER Pages,
00199                        IN ULONG PageCount)
00200 {
00201     UNIMPLEMENTED;
00202     while (TRUE);
00203     return STATUS_SUCCESS;
00204 }
00205 
00206 VOID
00207 NTAPI
00208 MmRawDeleteVirtualMapping(IN PVOID Address)
00209 {
00210     UNIMPLEMENTED;
00211     while (TRUE);
00212 }
00213 
00214 VOID
00215 NTAPI
00216 MmDeleteVirtualMapping(IN PEPROCESS Process,
00217                        IN PVOID Address,
00218                        IN BOOLEAN FreePage,
00219                        OUT PBOOLEAN WasDirty,
00220                        OUT PPFN_NUMBER Page)
00221 {
00222     UNIMPLEMENTED;
00223     while (TRUE);
00224 }
00225 
00226 VOID
00227 NTAPI
00228 MmDeletePageFileMapping(IN PEPROCESS Process,
00229                         IN PVOID Address,
00230                         IN SWAPENTRY *SwapEntry)
00231 {
00232     UNIMPLEMENTED;
00233     while (TRUE);
00234 }
00235 
00236 NTSTATUS
00237 NTAPI
00238 MmCreatePageFileMapping(IN PEPROCESS Process,
00239                         IN PVOID Address,
00240                         IN SWAPENTRY SwapEntry)
00241 {
00242     UNIMPLEMENTED;
00243     while (TRUE);
00244     return 0;
00245 }
00246 
00247 PFN_NUMBER
00248 NTAPI
00249 MmGetPfnForProcess(IN PEPROCESS Process,
00250                    IN PVOID Address)
00251 {
00252     UNIMPLEMENTED;
00253     while (TRUE);
00254     return 0;
00255 }
00256 
00257 BOOLEAN
00258 NTAPI
00259 MmIsDirtyPage(IN PEPROCESS Process,
00260               IN PVOID Address)
00261 {
00262     UNIMPLEMENTED;
00263     while (TRUE);
00264     return 0;
00265 }
00266 
00267 VOID
00268 NTAPI
00269 MmSetCleanPage(IN PEPROCESS Process,
00270                IN PVOID Address)
00271 {
00272     UNIMPLEMENTED;
00273     while (TRUE);
00274 }
00275 
00276 VOID
00277 NTAPI
00278 MmSetDirtyPage(IN PEPROCESS Process,
00279                IN PVOID Address)
00280 {
00281     UNIMPLEMENTED;
00282     while (TRUE);
00283 }
00284 
00285 BOOLEAN
00286 NTAPI
00287 MmIsPagePresent(IN PEPROCESS Process,
00288                 IN PVOID Address)
00289 {
00290     UNIMPLEMENTED;
00291     while (TRUE);
00292     return FALSE;
00293 }
00294 
00295 BOOLEAN
00296 NTAPI
00297 MmIsPageSwapEntry(IN PEPROCESS Process,
00298                   IN PVOID Address)
00299 {
00300     UNIMPLEMENTED;
00301     while (TRUE);
00302     return FALSE;
00303 }
00304 
00305 ULONG
00306 NTAPI
00307 MmGetPageProtect(IN PEPROCESS Process,
00308                  IN PVOID Address)
00309 {
00310     /* We don't enforce any protection on the pages -- they are all RWX */
00311     return PAGE_READWRITE;
00312 }
00313 
00314 VOID
00315 NTAPI
00316 MmSetPageProtect(IN PEPROCESS Process,
00317                  IN PVOID Address,
00318                  IN ULONG Protection)
00319 {
00320     /* We don't enforce any protection on the pages -- they are all RWX */
00321     return;
00322 }
00323 
00324 VOID
00325 NTAPI
00326 MmInitGlobalKernelPageDirectory(VOID)
00327 {
00328     ULONG i;
00329     PULONG CurrentPageDirectory = (PULONG)PDE_BASE;
00330 
00331 
00332     /* Loop the 2GB of address space which belong to the kernel */
00333     for (i = MiGetPdeOffset(MmSystemRangeStart); i < 2048; i++)
00334     {
00335         /* Check if we have an entry for this already */
00336         if ((i != MiGetPdeOffset(PTE_BASE)) &&
00337             (i != MiGetPdeOffset(HYPER_SPACE)) &&
00338             (!MmGlobalKernelPageDirectory[i]) &&
00339             (CurrentPageDirectory[i]))
00340         {
00341             /* We don't, link it in our global page directory */
00342             MmGlobalKernelPageDirectory[i] = CurrentPageDirectory[i];
00343         }
00344     }
00345 }
00346 
00347 /* PUBLIC FUNCTIONS ***********************************************************/
00348 
00349 /*
00350  * @implemented
00351  */
00352 PHYSICAL_ADDRESS
00353 NTAPI
00354 MmGetPhysicalAddress(IN PVOID Address)
00355 {
00356     PHYSICAL_ADDRESS PhysicalAddress;
00357     PhysicalAddress.QuadPart = 0;
00358 
00359     UNIMPLEMENTED;
00360     while (TRUE);
00361 
00362     return PhysicalAddress;
00363 }

Generated on Sun May 27 2012 04:27:04 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.