|
|
@@ -98,6 +98,8 @@ enum class MemoryAttribute : u32 {
|
|
|
DeviceMapped = 4,
|
|
|
/// Uncached memory
|
|
|
Uncached = 8,
|
|
|
+
|
|
|
+ IpcAndDeviceMapped = LockedForIPC | DeviceMapped,
|
|
|
};
|
|
|
|
|
|
constexpr MemoryAttribute operator|(MemoryAttribute lhs, MemoryAttribute rhs) {
|
|
|
@@ -654,6 +656,35 @@ public:
|
|
|
/// is scheduled.
|
|
|
Common::PageTable page_table{Memory::PAGE_BITS};
|
|
|
|
|
|
+ using CheckResults = ResultVal<std::tuple<MemoryState, VMAPermission, MemoryAttribute>>;
|
|
|
+
|
|
|
+ /// Checks if an address range adheres to the specified states provided.
|
|
|
+ ///
|
|
|
+ /// @param address The starting address of the address range.
|
|
|
+ /// @param size The size of the address range.
|
|
|
+ /// @param state_mask The memory state mask.
|
|
|
+ /// @param state The state to compare the individual VMA states against,
|
|
|
+ /// which is done in the form of: (vma.state & state_mask) != state.
|
|
|
+ /// @param permission_mask The memory permissions mask.
|
|
|
+ /// @param permissions The permission to compare the individual VMA permissions against,
|
|
|
+ /// which is done in the form of:
|
|
|
+ /// (vma.permission & permission_mask) != permission.
|
|
|
+ /// @param attribute_mask The memory attribute mask.
|
|
|
+ /// @param attribute The memory attributes to compare the individual VMA attributes
|
|
|
+ /// against, which is done in the form of:
|
|
|
+ /// (vma.attributes & attribute_mask) != attribute.
|
|
|
+ /// @param ignore_mask The memory attributes to ignore during the check.
|
|
|
+ ///
|
|
|
+ /// @returns If successful, returns a tuple containing the memory attributes
|
|
|
+ /// (with ignored bits specified by ignore_mask unset), memory permissions, and
|
|
|
+ /// memory state across the memory range.
|
|
|
+ /// @returns If not successful, returns ERR_INVALID_ADDRESS_STATE.
|
|
|
+ ///
|
|
|
+ CheckResults CheckRangeState(VAddr address, u64 size, MemoryState state_mask, MemoryState state,
|
|
|
+ VMAPermission permission_mask, VMAPermission permissions,
|
|
|
+ MemoryAttribute attribute_mask, MemoryAttribute attribute,
|
|
|
+ MemoryAttribute ignore_mask) const;
|
|
|
+
|
|
|
private:
|
|
|
using VMAIter = VMAMap::iterator;
|
|
|
|
|
|
@@ -707,35 +738,6 @@ private:
|
|
|
/// Clears out the page table
|
|
|
void ClearPageTable();
|
|
|
|
|
|
- using CheckResults = ResultVal<std::tuple<MemoryState, VMAPermission, MemoryAttribute>>;
|
|
|
-
|
|
|
- /// Checks if an address range adheres to the specified states provided.
|
|
|
- ///
|
|
|
- /// @param address The starting address of the address range.
|
|
|
- /// @param size The size of the address range.
|
|
|
- /// @param state_mask The memory state mask.
|
|
|
- /// @param state The state to compare the individual VMA states against,
|
|
|
- /// which is done in the form of: (vma.state & state_mask) != state.
|
|
|
- /// @param permission_mask The memory permissions mask.
|
|
|
- /// @param permissions The permission to compare the individual VMA permissions against,
|
|
|
- /// which is done in the form of:
|
|
|
- /// (vma.permission & permission_mask) != permission.
|
|
|
- /// @param attribute_mask The memory attribute mask.
|
|
|
- /// @param attribute The memory attributes to compare the individual VMA attributes
|
|
|
- /// against, which is done in the form of:
|
|
|
- /// (vma.attributes & attribute_mask) != attribute.
|
|
|
- /// @param ignore_mask The memory attributes to ignore during the check.
|
|
|
- ///
|
|
|
- /// @returns If successful, returns a tuple containing the memory attributes
|
|
|
- /// (with ignored bits specified by ignore_mask unset), memory permissions, and
|
|
|
- /// memory state across the memory range.
|
|
|
- /// @returns If not successful, returns ERR_INVALID_ADDRESS_STATE.
|
|
|
- ///
|
|
|
- CheckResults CheckRangeState(VAddr address, u64 size, MemoryState state_mask, MemoryState state,
|
|
|
- VMAPermission permission_mask, VMAPermission permissions,
|
|
|
- MemoryAttribute attribute_mask, MemoryAttribute attribute,
|
|
|
- MemoryAttribute ignore_mask) const;
|
|
|
-
|
|
|
/// Gets the amount of memory currently mapped (state != Unmapped) in a range.
|
|
|
ResultVal<std::size_t> SizeOfAllocatedVMAsInRange(VAddr address, std::size_t size) const;
|
|
|
|