]> git.buserror.net Git - polintos/scott/priv.git/blobdiff - kernel/include/arch-x86/pagetable.h
update
[polintos/scott/priv.git] / kernel / include / arch-x86 / pagetable.h
index 0b3b7b4980381bd45ea492917e1d3d35bf31a12e..d0d0cfc6297de2aba402041d6397f7ff7440e0bc 100644 (file)
@@ -24,7 +24,7 @@ namespace Arch {
                        PhysAddr Global:1;
                        PhysAddr FaultOnWrite:1;
                        PhysAddr PermWrite:1;  // High-level permission-based write access
-                       PhysAddr Avail:1;
+                       PhysAddr AddressOnly:1;
                        PhysAddr Addr:20;
                };
                
@@ -79,15 +79,15 @@ namespace Arch {
                        maskout = 0;
                        flagsout = 0;
                        
-                       if (maskin.Valid) {
-                               maskout.Valid = 1;
-                               flagsout.Valid = flagsin.Valid;
-                       }
-                       
-                       if (maskin.FaultOnWrite) {
-                               maskout.FaultOnWrite = 1;
-                               flagsout.FaultOnWrite = flagsin.FaultOnWrite;
-                       }
+                       maskout.Valid = maskin.Valid;
+                       maskout.FaultOnWrite = maskin.FaultOnWrite;
+                       maskout.AddressOnly = maskin.AddressOnly;
+                       maskout.CacheDisable = maskin.Uncached;
+
+                       flagsout.Valid = flagsin.Valid;
+                       flagsout.FaultOnWrite = flagsin.FaultOnWrite;
+                       flagsout.AddressOnly = flagsin.AddressOnly;
+                       flagsout.CacheDisable = flagsin.Uncached;
                        
                        if (maskin.Writeable) {
                                maskout.Writeable = 1;
@@ -127,13 +127,15 @@ namespace Arch {
                        Mem::PTEFlags ret = 0;
                        
                        ret.Valid = Valid;
-                       ret.User = User;
                        
                        if (Valid) {
+                               ret.User = User;
                                ret.Readable = 1;
                                ret.Writeable = PermWrite;
                                ret.Executable = 1;
+                               ret.Uncached = CacheDisable;
                                ret.FaultOnWrite = FaultOnWrite;
+                               ret.AddressOnly = AddressOnly;
                        }
                        
                        return ret;
@@ -159,6 +161,11 @@ namespace Arch {
                        return Dirty;
                }
                
+               bool addronly_pte()
+               {
+                       return AddressOnly;
+               }
+               
                enum {
                        page_size = Arch::page_size,
                        page_shift = Arch::page_shift,