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