1# Changelog 2 3## 0.7.0 4 5### Breaking changes 6 7- `Translation::allocate_table` and `Translation::deallocate_table` now takes `&mut self` rather 8 than `&self. 9 10### Other changes 11 12- The `Translation` type parameter to `Mapping` no longer needs to be `Clone`. 13- `IdMap`, `LinearMap`, `Mapping` and `RootTable` are now `Sync`. 14 15## 0.6.0 16 17### Breaking changes 18 19- Added support for EL2 and EL3 page tables. This requires a new parameter to `IdMap::new`, 20 `LinearMap::new`, `Mapping::new` and `RootTable::new`. 21- `Attributes::EXECUTE_NEVER` renamed to `Attributes::UXN`. 22- `Attributes::DEVICE_NGNRE` and `NORMAL` have been removed in favour of `ATTRIBUTE_INDEX_*`, 23 `OUTER_SHAREABLE` and `INNER_SHAREABLE`, to avoid making assumptions about how the MAIR registers 24 are programmed. 25 26### New features 27 28- Added `root_address`, `mark_active` and `mark_inactive` methods to `IdMap`, `LinearMap` and 29 `Mapping`. These may be used to activate and deactivate the page table manually rather than 30 calling `activate` and `deactivate`. 31- Added `NS` and `PXN` bits to `Attributes`. 32 33### Bug fixes 34 35- When an invalid descriptor is split into a table, the table descriptors aren't set unless to 36 non-zero values unless the original descriptor was. 37 38### Other changes 39 40- `Attributes::ACCESSED` is no longer automatically set on all new mappings. To maintain existing 41 behaviour you should explicitly set `Attributes::ACCESSED` whenever calling `map_range` for a 42 valid mapping. 43 44## 0.5.0 45 46### Bug fixes 47 48- Reject the `PAGE_OR_TABLE` flag when passed to `map_range`, which would result in corrupt table 49 mappings to be created. 50 51### Breaking changes 52 53- Updated `modify_range` to split block entries before traversing them, and pass only the 54 descriptors and subregions that are completely covered by the given region to the updater callback 55 function. 56- Updated `modify_range` to only pass block or page descriptors to the callback function and prevent 57 them from being converted into table descriptors inadvertently. 58- Added rigid break-before-make (BBM) checks to `map_range` and `modify_range`. 59- Marked `activate` and `deactivate` methods as unsafe. 60 61### New features 62 63- Added new `map_range()` alternative `map_range_with_constraints()` with extra `contraints` 64 argument. 65- Added `walk_range` method that iterates over all block or page descriptorsthat intersect with a 66 given region, without permitting the callback to make changes to the descriptors 67 68## 0.4.1 69 70### Bug fixes 71 72- `RootTable`, `Mapping`, `IdMap` and `LinearMap` are now correctly marked as `Send`, as it doesn't 73 matter where they are used from. 74 75## 0.4.0 76 77### Breaking changes 78 79- Updated `bitflags` to 2.0.2, which changes the API of `Attributes` a bit. 80- Updated `map_range` method to support mapping leaf page table entries without the `VALID` flag. 81 `Attributes::VALID` is no longer implicitly set when mapping leaf page table entries. 82 83### New features 84 85- Added `modify_range` method to `IdMap`, `LinearMap` and `Mapping` to update details of a mapped 86 range. This can be used e.g. to change flags for some range which is already mapped. As part of 87 this, the `Descriptor` struct was added to the public API. 88- Added `DBM` and software flags to `Attributes`. 89 90## 0.3.0 91 92### Breaking changes 93 94- Made `Translation` trait responsible for allocating page tables. This should help make it possible 95 to use more complex mapping schemes, and to construct page tables in a different context to where 96 they are used. 97- Renamed `AddressRangeError` to `MapError`, which is now an enum with three variants and implements 98 `Display`. 99- `From<*const T>` and `From<*mut T>` are no longer implemented for `VirtualAddress`. 100- Added support for using TTBR1 as well as TTBR0; this changes various constructors to take an extra 101 parameter. 102 103### New features 104 105- Made `alloc` dependency optional via a feature flag. 106- Added support for linear mappings with new `LinearMap`. 107- Implemented subtraction of usize from address types. 108 109### Bugfixes 110 111- Fixed memory leak introduced in 0.2.0: dropping a page table will now actually free its memory. 112 113## 0.2.1 114 115### New features 116 117- Implemented `Debug` and `Display` for `MemoryRegion`. 118- Implemented `From<Range<VirtualAddress>>` for `MemoryRegion`. 119- Implemented arithmetic operations for `PhysicalAddress` and `VirtualAddress`. 120 121## 0.2.0 122 123### Breaking changes 124 125- Added bounds check to `IdMap::map_range`; it will now return an error if you attempt to map a 126 virtual address outside the range of the page table given its configured root level. 127 128### New features 129 130- Implemented `Debug` for `PhysicalAddress` and `VirtualAddress`. 131- Validate that chosen root level is supported. 132 133### Bugfixes 134 135- Fixed bug in `Display` and `Drop` implementation for `RootTable` that would result in a crash for 136 any pagetable with non-zero mappings. 137- Fixed `Display` implementation for `PhysicalAddress` and `VirtualAddress` to use correct number of 138 digits. 139 140## 0.1.0 141 142Initial release. 143