Translation::allocate_table
and Translation::deallocate_table
now takes &mut self
rather than `&self.Translation
type parameter to Mapping
no longer needs to be Clone
.IdMap
, LinearMap
, Mapping
and RootTable
are now Sync
.IdMap::new
, LinearMap::new
, Mapping::new
and RootTable::new
.Attributes::EXECUTE_NEVER
renamed to Attributes::UXN
.Attributes::DEVICE_NGNRE
and NORMAL
have been removed in favour of ATTRIBUTE_INDEX_*
, OUTER_SHAREABLE
and INNER_SHAREABLE
, to avoid making assumptions about how the MAIR registers are programmed.root_address
, mark_active
and mark_inactive
methods to IdMap
, LinearMap
and Mapping
. These may be used to activate and deactivate the page table manually rather than calling activate
and deactivate
.NS
and PXN
bits to Attributes
.Attributes::ACCESSED
is no longer automatically set on all new mappings. To maintain existing behaviour you should explicitly set Attributes::ACCESSED
whenever calling map_range
for a valid mapping.PAGE_OR_TABLE
flag when passed to map_range
, which would result in corrupt table mappings to be created.modify_range
to split block entries before traversing them, and pass only the descriptors and subregions that are completely covered by the given region to the updater callback function.modify_range
to only pass block or page descriptors to the callback function and prevent them from being converted into table descriptors inadvertently.map_range
and modify_range
.activate
and deactivate
methods as unsafe.map_range()
alternative map_range_with_constraints()
with extra contraints
argument.walk_range
method that iterates over all block or page descriptorsthat intersect with a given region, without permitting the callback to make changes to the descriptorsRootTable
, Mapping
, IdMap
and LinearMap
are now correctly marked as Send
, as it doesn't matter where they are used from.bitflags
to 2.0.2, which changes the API of Attributes
a bit.map_range
method to support mapping leaf page table entries without the VALID
flag. Attributes::VALID
is no longer implicitly set when mapping leaf page table entries.modify_range
method to IdMap
, LinearMap
and Mapping
to update details of a mapped range. This can be used e.g. to change flags for some range which is already mapped. As part of this, the Descriptor
struct was added to the public API.DBM
and software flags to Attributes
.Translation
trait responsible for allocating page tables. This should help make it possible to use more complex mapping schemes, and to construct page tables in a different context to where they are used.AddressRangeError
to MapError
, which is now an enum with three variants and implements Display
.From<*const T>
and From<*mut T>
are no longer implemented for VirtualAddress
.alloc
dependency optional via a feature flag.LinearMap
.Debug
and Display
for MemoryRegion
.From<Range<VirtualAddress>>
for MemoryRegion
.PhysicalAddress
and VirtualAddress
.IdMap::map_range
; it will now return an error if you attempt to map a virtual address outside the range of the page table given its configured root level.Debug
for PhysicalAddress
and VirtualAddress
.Display
and Drop
implementation for RootTable
that would result in a crash for any pagetable with non-zero mappings.Display
implementation for PhysicalAddress
and VirtualAddress
to use correct number of digits.Initial release.