1
0
mirror of https://github.com/taigrr/gopher-os synced 2025-01-18 04:43:13 -08:00

13 Commits

Author SHA1 Message Date
Achilleas Anagnostopoulos
76532089c5 Define PageDirectoryTable and helpers that support inactive tables
The Map/Unmap methods of PageDirectoryTable operate similar to the
global Map/Unmap functions. While the global functions work with the
currently active PDT, the PageDirectoryTable methods can also
work with inactive page tables by temporarily modifying the recursive
mapping of the active PDT to point to the inactive PDT frame before
delegating the mapping/unmapping to the global Map/Unmap functions.
2017-06-06 19:35:07 +01:00
Achilleas Anagnostopoulos
8e38ff969d Implement API for mapping virtual addresses to physical frames
The API provides the Map() and MapTemporary() functions that establish
virtual -> physical address mappings using the currently active page
directory table.

Mapped pages can be unmapped using the Unmap() function. When unmapping
virtual addresses, the page tables leading to them will not be
automatically released even if they are empty. This will be addressed by
a future commit.
2017-06-06 11:02:48 +01:00
Achilleas Anagnostopoulos
6e03af069a Add support for virtual -> physical address translation 2017-06-06 07:30:13 +01:00
Achilleas Anagnostopoulos
319f868a14 Implement page table entry walker
The page table walker provides a mechanism for accessing the individual
page table entries that correspond to a particular virtual memory
address. This implementation will serve as the basis for implementing
page mapping/unmapping and virtual to physical address translation.
2017-06-06 07:30:13 +01:00
Achilleas Anagnostopoulos
35eaa1a13c Define page table entry type 2017-06-06 07:30:07 +01:00
Achilleas Anagnostopoulos
b67a2045b9 Define virtual memory page type
This is equivalent to pmm.Frame (also a uintptr) but having different
types for physical and virtual frames serves as an additional layer of
protection for functions/methods that receive physical and/or virtual
page arguments.
2017-06-04 21:48:21 +01:00
Achilleas Anagnostopoulos
c596bc96c3 Define paging-related constants for the amd64 architecture 2017-06-04 21:48:15 +01:00
Achilleas Anagnostopoulos
1a6ade8ced Cleanup Frame tests and rename Frame.IsValid to Frame.Valid 2017-05-31 17:02:34 +01:00
Achilleas Anagnostopoulos
7156b09656 Change boot allocator signature so it returns a kernel error 2017-05-31 15:24:41 +01:00
Achilleas Anagnostopoulos
d7eb2547dd Change the Frame type to uintptr and remove Size/Order methods
To keep the implementation portable, the Frame type had to be changed
from uint64 to uintptr. Using uintptr ensures that the frame will always
match the pointer size of the platform.
2017-05-31 15:07:09 +01:00
Achilleas Anagnostopoulos
13d5f494e2 Rename pfn pkg to pmm and export boot allocator Init method 2017-05-31 14:16:51 +01:00
Achilleas Anagnostopoulos
8c619e38e1 Implement early page allocator 2017-05-15 07:35:58 +01:00
Achilleas Anagnostopoulos
61314a9c33 Define memory Size and implement optimized memset 2017-05-15 07:30:49 +01:00