sforkowany z xt-sys/exectos
		
	Implement PML2/PML3 page table routines
This commit is contained in:
		| @@ -9,6 +9,23 @@ | ||||
| #include <xtos.h> | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Clears the contents of a page table entry (PTE). | ||||
|  * | ||||
|  * @param PtePointer | ||||
|  *        Pointer to the page table entry (PTE) to be cleared. | ||||
|  * | ||||
|  * @return This routine does not return any value. | ||||
|  * | ||||
|  * @since XT 1.0 | ||||
|  */ | ||||
| XTAPI | ||||
| VOID | ||||
| MmpClearPte(PHARDWARE_PTE PtePointer) | ||||
| { | ||||
|     PtePointer->Long = 0; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Checks if eXtended Physical Addressing (XPA) is enabled. | ||||
|  * | ||||
| @@ -83,3 +100,143 @@ MmpGetPteAddress(PVOID Address) | ||||
|     Offset = ((((ULONG)(Address)) >> MM_PTI_SHIFT) << MmpPageMapInfo.PteShift); | ||||
|     return (PMMPTE)(MM_PTE_BASE + Offset); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Checks whether the given PML2 page table entry (PTE) is valid. | ||||
|  * | ||||
|  * @param PtePointer | ||||
|  *        Pointer to the page table entry (PTE) to check. | ||||
|  * | ||||
|  * @return Returns TRUE if the entry is valid, FALSE otherwise. | ||||
|  * | ||||
|  * @since XT 1.0 | ||||
|  */ | ||||
| XTAPI | ||||
| BOOLEAN | ||||
| MmpPml2PteValid(PHARDWARE_PTE PtePointer) | ||||
| { | ||||
|     return (BOOLEAN)PtePointer->Pml2.Valid; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Sets a PML2 page table entry (PTE) with the specified physical page and access flags. | ||||
|  * | ||||
|  * @param PtePointer | ||||
|  *        Pointer to the page table entry (PTE) to set. | ||||
|  * | ||||
|  * @param PageFrameNumber | ||||
|  *        Physical frame number to map. | ||||
|  * | ||||
|  * @param Writable | ||||
|  *        Indicates whether the page should be writable. | ||||
|  * | ||||
|  * @return This routine does not return any value. | ||||
|  * | ||||
|  * @since XT 1.0 | ||||
|  */ | ||||
| XTAPI | ||||
| VOID | ||||
| MmpSetPml2Pte(PHARDWARE_PTE PtePointer, | ||||
|             PFN_NUMBER PageFrameNumber, | ||||
|             BOOLEAN Writable) | ||||
| { | ||||
|     PtePointer->Pml2.PageFrameNumber = PageFrameNumber; | ||||
|     PtePointer->Pml2.Valid = 1; | ||||
|     PtePointer->Pml2.Writable = Writable; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Sets caching attributes for a PML2 page table entry (PTE). | ||||
|  * | ||||
|  * @param PtePointer | ||||
|  *        Pointer to the page table entry (PTE) to modify. | ||||
|  * | ||||
|  * @param CacheDisable | ||||
|  *        Indicates whether caching should be disabled for this page. | ||||
|  * | ||||
|  * @param WriteThrough | ||||
|  *        Indicates whether write-through caching should be enabled. | ||||
|  * | ||||
|  * @return This routine does not return any value. | ||||
|  * | ||||
|  * @since XT 1.0 | ||||
|  */ | ||||
| XTAPI | ||||
| VOID | ||||
| MmpSetPml2PteCaching(PHARDWARE_PTE PtePointer, | ||||
|                     BOOLEAN CacheDisable, | ||||
|                     BOOLEAN WriteThrough) | ||||
| { | ||||
|     PtePointer->Pml2.CacheDisable = CacheDisable; | ||||
|     PtePointer->Pml2.WriteThrough = WriteThrough; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Checks whether the given PML3 page table entry (PTE) is valid. | ||||
|  * | ||||
|  * @param PtePointer | ||||
|  *        Pointer to the page table entry (PTE) to check. | ||||
|  * | ||||
|  * @return Returns TRUE if the entry is valid, FALSE otherwise. | ||||
|  * | ||||
|  * @since XT 1.0 | ||||
|  */ | ||||
| XTAPI | ||||
| BOOLEAN | ||||
| MmpPml3PteValid(PHARDWARE_PTE PtePointer) | ||||
| { | ||||
|     return PtePointer->Pml3.Valid; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Sets a PML3 page table entry (PTE) with the specified physical page and access flags. | ||||
|  * | ||||
|  * @param PtePointer | ||||
|  *        Pointer to the page table entry (PTE) to set. | ||||
|  * | ||||
|  * @param PageFrameNumber | ||||
|  *        Physical frame number to map. | ||||
|  * | ||||
|  * @param Writable | ||||
|  *        Indicates whether the page should be writable. | ||||
|  * | ||||
|  * @return This routine does not return any value. | ||||
|  * | ||||
|  * @since XT 1.0 | ||||
|  */ | ||||
| XTAPI | ||||
| VOID | ||||
| MmpSetPml3Pte(PHARDWARE_PTE PtePointer, | ||||
|             PFN_NUMBER PageFrameNumber, | ||||
|             BOOLEAN Writable) | ||||
| { | ||||
|     PtePointer->Pml3.PageFrameNumber = PageFrameNumber; | ||||
|     PtePointer->Pml3.Valid = 1; | ||||
|     PtePointer->Pml3.Writable = Writable; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Sets caching attributes for a PML3 page table entry (PTE). | ||||
|  * | ||||
|  * @param PtePointer | ||||
|  *        Pointer to the page table entry (PTE) to modify. | ||||
|  * | ||||
|  * @param CacheDisable | ||||
|  *        Indicates whether caching should be disabled for this page. | ||||
|  * | ||||
|  * @param WriteThrough | ||||
|  *        Indicates whether write-through caching should be enabled. | ||||
|  * | ||||
|  * @return This routine does not return any value. | ||||
|  * | ||||
|  * @since XT 1.0 | ||||
|  */ | ||||
| XTAPI | ||||
| VOID | ||||
| MmpSetPml3PteCaching(PHARDWARE_PTE PtePointer, | ||||
|                     BOOLEAN CacheDisable, | ||||
|                     BOOLEAN WriteThrough) | ||||
| { | ||||
|     PtePointer->Pml3.CacheDisable = CacheDisable; | ||||
|     PtePointer->Pml3.WriteThrough = WriteThrough; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user