X-Git-Url: http://git.buserror.net/cgi-bin/gitweb.cgi?p=polintos%2Fscott%2Fpriv.git;a=blobdiff_plain;f=kernel%2Finclude%2Farch-x86%2Fpagetable.h;fp=kernel%2Finclude%2Farch-x86%2Fpagetable.h;h=d0d0cfc6297de2aba402041d6397f7ff7440e0bc;hp=0b3b7b4980381bd45ea492917e1d3d35bf31a12e;hb=1ac390fe1e18444008857b056c947710be9621a8;hpb=6e64b28821757af60447c790ae52a91831a9d4f0 diff --git a/kernel/include/arch-x86/pagetable.h b/kernel/include/arch-x86/pagetable.h index 0b3b7b4..d0d0cfc 100644 --- a/kernel/include/arch-x86/pagetable.h +++ b/kernel/include/arch-x86/pagetable.h @@ -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,