diff --git a/doc/frame_allocator/all.html b/doc/frame_allocator/all.html index 21afb19553..56652ea3b8 100644 --- a/doc/frame_allocator/all.html +++ b/doc/frame_allocator/all.html @@ -1 +1 @@ -List of all items in this crate

List of all items

Structs

Enums

Functions

\ No newline at end of file +List of all items in this crate

List of all items

Structs

Enums

Functions

Type Definitions

\ No newline at end of file diff --git a/doc/frame_allocator/enum.MemoryRegionType.html b/doc/frame_allocator/enum.MemoryRegionType.html index 72c7d6ad61..c1b2a48ac5 100644 --- a/doc/frame_allocator/enum.MemoryRegionType.html +++ b/doc/frame_allocator/enum.MemoryRegionType.html @@ -1,4 +1,4 @@ -MemoryRegionType in frame_allocator - Rust
pub enum MemoryRegionType {
+MemoryRegionType in frame_allocator - Rust
pub enum MemoryRegionType {
     Free,
     Reserved,
     Unknown,
@@ -10,9 +10,9 @@
 
§

Unknown

Memory of an unknown type. This is a default value that acts as a sanity check, because it is invalid to do any real work (e.g., allocation, access) with an unknown memory region.

-

Trait Implementations§

source§

impl Clone for MemoryRegionType

source§

fn clone(&self) -> MemoryRegionType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MemoryRegionType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MemoryRegionType> for MemoryRegionType

source§

fn eq(&self, other: &MemoryRegionType) -> bool

This method tests for self and other values to be equal, and is used +

Trait Implementations§

source§

impl Clone for MemoryRegionType

source§

fn clone(&self) -> MemoryRegionType

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for MemoryRegionType

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl PartialEq<MemoryRegionType> for MemoryRegionType

source§

fn eq(&self, other: &MemoryRegionType) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Copy for MemoryRegionType

source§

impl Eq for MemoryRegionType

source§

impl StructuralEq for MemoryRegionType

source§

impl StructuralPartialEq for MemoryRegionType

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

source§

impl Copy for MemoryRegionType

source§

impl Eq for MemoryRegionType

source§

impl StructuralEq for MemoryRegionType

source§

impl StructuralPartialEq for MemoryRegionType

Auto Trait Implementations§

§

impl RefUnwindSafe for MemoryRegionType

§

impl Send for MemoryRegionType

§

impl Sync for MemoryRegionType

§

impl Unpin for MemoryRegionType

§

impl UnwindSafe for MemoryRegionType

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/doc/frame_allocator/fn.allocate_frames.html b/doc/frame_allocator/fn.allocate_frames.html index 6836fdff83..94d95aceee 100644 --- a/doc/frame_allocator/fn.allocate_frames.html +++ b/doc/frame_allocator/fn.allocate_frames.html @@ -1,3 +1,3 @@ -allocate_frames in frame_allocator - Rust
pub fn allocate_frames(num_frames: usize) -> Option<AllocatedFrames>
Expand description

Allocates the given number of frames with no constraints on the starting physical address.

+allocate_frames in frame_allocator - Rust
pub fn allocate_frames(num_frames: usize) -> Option<AllocatedFrames>
Expand description

Allocates the given number of frames with no constraints on the starting physical address.

See allocate_frames_deferred() for more details.

\ No newline at end of file diff --git a/doc/frame_allocator/fn.allocate_frames_at.html b/doc/frame_allocator/fn.allocate_frames_at.html index 3a46c9668c..7b384bdd29 100644 --- a/doc/frame_allocator/fn.allocate_frames_at.html +++ b/doc/frame_allocator/fn.allocate_frames_at.html @@ -1,6 +1,6 @@ -allocate_frames_at in frame_allocator - Rust
pub fn allocate_frames_at(
+allocate_frames_at in frame_allocator - Rust
pub fn allocate_frames_at(
     paddr: PhysicalAddress,
     num_frames: usize
-) -> Result<AllocatedFrames, &'static str>
Expand description

Allocates the given number of frames starting at (inclusive of) the frame containing the given PhysicalAddress.

+) -> Result<AllocatedFrames, &'static str>
Expand description

Allocates the given number of frames starting at (inclusive of) the frame containing the given PhysicalAddress.

See allocate_frames_deferred() for more details.

\ No newline at end of file diff --git a/doc/frame_allocator/fn.allocate_frames_by_bytes.html b/doc/frame_allocator/fn.allocate_frames_by_bytes.html index ff7432b795..0625737e39 100644 --- a/doc/frame_allocator/fn.allocate_frames_by_bytes.html +++ b/doc/frame_allocator/fn.allocate_frames_by_bytes.html @@ -1,4 +1,4 @@ -allocate_frames_by_bytes in frame_allocator - Rust
pub fn allocate_frames_by_bytes(num_bytes: usize) -> Option<AllocatedFrames>
Expand description

Allocates frames with no constraints on the starting physical address, +allocate_frames_by_bytes in frame_allocator - Rust

pub fn allocate_frames_by_bytes(num_bytes: usize) -> Option<AllocatedFrames>
Expand description

Allocates frames with no constraints on the starting physical address, with a size given by the number of bytes.

This function still allocates whole frames by rounding up the number of bytes. See allocate_frames_deferred() for more details.

diff --git a/doc/frame_allocator/fn.allocate_frames_by_bytes_at.html b/doc/frame_allocator/fn.allocate_frames_by_bytes_at.html index 34cd5ecdf5..727af2c307 100644 --- a/doc/frame_allocator/fn.allocate_frames_by_bytes_at.html +++ b/doc/frame_allocator/fn.allocate_frames_by_bytes_at.html @@ -1,7 +1,7 @@ -allocate_frames_by_bytes_at in frame_allocator - Rust
pub fn allocate_frames_by_bytes_at(
+allocate_frames_by_bytes_at in frame_allocator - Rust
pub fn allocate_frames_by_bytes_at(
     paddr: PhysicalAddress,
     num_bytes: usize
-) -> Result<AllocatedFrames, &'static str>
Expand description

Allocates frames starting at the given PhysicalAddress with a size given in number of bytes.

+) -> Result<AllocatedFrames, &'static str>
Expand description

Allocates frames starting at the given PhysicalAddress with a size given in number of bytes.

This function still allocates whole frames by rounding up the number of bytes. See allocate_frames_deferred() for more details.

\ No newline at end of file diff --git a/doc/frame_allocator/fn.allocate_frames_by_bytes_deferred.html b/doc/frame_allocator/fn.allocate_frames_by_bytes_deferred.html index 8e64591405..b5e816fbdc 100644 --- a/doc/frame_allocator/fn.allocate_frames_by_bytes_deferred.html +++ b/doc/frame_allocator/fn.allocate_frames_by_bytes_deferred.html @@ -1,7 +1,7 @@ -allocate_frames_by_bytes_deferred in frame_allocator - Rust
pub fn allocate_frames_by_bytes_deferred(
+allocate_frames_by_bytes_deferred in frame_allocator - Rust
pub fn allocate_frames_by_bytes_deferred(
     requested_paddr: Option<PhysicalAddress>,
     num_bytes: usize
-) -> Result<(AllocatedFrames, DeferredAllocAction<'static>), &'static str>
Expand description
Expand description

Similar to allocated_frames_deferred(), but accepts a size value for the allocated frames in number of bytes instead of number of frames.

This function still allocates whole frames by rounding up the number of bytes.

\ No newline at end of file diff --git a/doc/frame_allocator/fn.allocate_frames_deferred.html b/doc/frame_allocator/fn.allocate_frames_deferred.html index 38050ccfbc..08bbca10e2 100644 --- a/doc/frame_allocator/fn.allocate_frames_deferred.html +++ b/doc/frame_allocator/fn.allocate_frames_deferred.html @@ -1,7 +1,7 @@ -allocate_frames_deferred in frame_allocator - Rust
pub fn allocate_frames_deferred(
+allocate_frames_deferred in frame_allocator - Rust
pub fn allocate_frames_deferred(
     requested_paddr: Option<PhysicalAddress>,
     num_frames: usize
-) -> Result<(AllocatedFrames, DeferredAllocAction<'static>), &'static str>
Expand description

The core frame allocation routine that allocates the given number of physical frames, +) -> Result<(AllocatedFrames, DeferredAllocAction<'static>), &'static str>

Expand description

The core frame allocation routine that allocates the given number of physical frames, optionally at the requested starting PhysicalAddress.

This simply reserves a range of frames; it does not perform any memory mapping. Thus, the memory represented by the returned AllocatedFrames isn’t directly accessible diff --git a/doc/frame_allocator/fn.init.html b/doc/frame_allocator/fn.init.html index 42febf57db..d2e0bc28b1 100644 --- a/doc/frame_allocator/fn.init.html +++ b/doc/frame_allocator/fn.init.html @@ -1,7 +1,7 @@ -init in frame_allocator - Rust

Function frame_allocator::init

source ·
pub fn init<F, R, P>(
+init in frame_allocator - Rust

Function frame_allocator::init

source ·
pub fn init<F, R, P>(
     free_physical_memory_areas: F,
     reserved_physical_memory_areas: R
-) -> Result<fn(_: FrameRange) -> AllocatedFrames, &'static str>where
+) -> Result<fn(_: FrameRange) -> UnmappedFrames, &'static str>where
     P: Borrow<PhysicalMemoryRegion>,
     F: IntoIterator<Item = P>,
     R: IntoIterator<Item = P> + Clone,
Expand description

Initialize the frame allocator with the given list of available and reserved physical memory regions.

@@ -13,5 +13,5 @@

Return

Upon success, this function returns a callback function that allows the caller (the memory subsystem init function) to convert a range of unmapped frames -back into an AllocatedFrames object.

+back into an UnmappedFrames object.

\ No newline at end of file diff --git a/doc/frame_allocator/index.html b/doc/frame_allocator/index.html index 749c750db5..ca299c2127 100644 --- a/doc/frame_allocator/index.html +++ b/doc/frame_allocator/index.html @@ -1,4 +1,4 @@ -frame_allocator - Rust

Crate frame_allocator

source ·
Expand description

Provides an allocator for physical memory frames. +frame_allocator - Rust

Crate frame_allocator

source ·
Expand description

Provides an allocator for physical memory frames. The minimum unit of allocation is a single frame.

This is currently a modified and more complex version of the page_allocator crate. TODO: extract the common code and create a generic allocator that can be specialized to allocate pages or frames.

@@ -9,11 +9,13 @@

The core allocation function is allocate_frames_deferred(), but there are several convenience functions that offer simpler interfaces for general usage.

Notes and Missing Features

-

This allocator currently does not merge freed chunks (de-fragmentation). -We don’t need to do so until we actually run out of address space or until -a requested address is in a chunk that needs to be merged.

-

Structs

Enums

Functions

  • Allocates the given number of frames with no constraints on the starting physical address.
  • Allocates the given number of frames starting at (inclusive of) the frame containing the given PhysicalAddress.
  • Allocates frames with no constraints on the starting physical address, +

    This allocator only makes one attempt to merge deallocated frames into existing +free chunks for de-fragmentation. It does not iteratively merge adjacent chunks in order to +maximally combine separate chunks into the biggest single chunk. +Instead, free chunks are merged only when they are dropped or when needed to fulfill a specific request.

    +

Structs

  • A reference to a single frame within a range of AllocatedFrames.
  • An iterator over each AllocatedFrame in a range of AllocatedFrames.
  • A series of pending actions related to frame allocator bookkeeping, +which may result in heap allocation.
  • A range of contiguous frames in physical memory.
  • PhysicalMemoryRegion represents a range of contiguous frames in physical memory for bookkeeping purposes. +It does not give access to the underlying frames.
  • The result of splitting a Frames object into multiple smaller Frames objects.

Enums

Functions

  • Allocates the given number of frames with no constraints on the starting physical address.
  • Allocates the given number of frames starting at (inclusive of) the frame containing the given PhysicalAddress.
  • Allocates frames with no constraints on the starting physical address, with a size given by the number of bytes.
  • Allocates frames starting at the given PhysicalAddress with a size given in number of bytes.
  • Similar to allocated_frames_deferred(), but accepts a size value for the allocated frames in number of bytes instead of number of frames.
  • The core frame allocation routine that allocates the given number of physical frames, -optionally at the requested starting PhysicalAddress.
  • Initialize the frame allocator with the given list of available and reserved physical memory regions.
\ No newline at end of file +optionally at the requested starting PhysicalAddress.
  • Initialize the frame allocator with the given list of available and reserved physical memory regions.
  • Type Definitions

    \ No newline at end of file diff --git a/doc/frame_allocator/sidebar-items.js b/doc/frame_allocator/sidebar-items.js index 7a4b637571..88e49be4bd 100644 --- a/doc/frame_allocator/sidebar-items.js +++ b/doc/frame_allocator/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":["MemoryRegionType"],"fn":["allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_frames_by_bytes_deferred","allocate_frames_deferred","init"],"struct":["AllocatedFrame","AllocatedFrames","AllocatedFramesIter","DeferredAllocAction","PhysicalMemoryRegion"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["MemoryRegionType"],"fn":["allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_frames_by_bytes_deferred","allocate_frames_deferred","init"],"struct":["AllocatedFrame","AllocatedFramesIter","DeferredAllocAction","Frames","PhysicalMemoryRegion","SplitFrames"],"type":["AllocatedFrames","FreeFrames","MappedFrames","UnmappedFrames"]}; \ No newline at end of file diff --git a/doc/frame_allocator/struct.AllocatedFrame.html b/doc/frame_allocator/struct.AllocatedFrame.html index e0ad7e8cde..f8887b9346 100644 --- a/doc/frame_allocator/struct.AllocatedFrame.html +++ b/doc/frame_allocator/struct.AllocatedFrame.html @@ -1,8 +1,8 @@ -AllocatedFrame in frame_allocator - Rust
    pub struct AllocatedFrame<'f> { /* private fields */ }
    Expand description

    A reference to a single frame within a range of AllocatedFrames.

    +AllocatedFrame in frame_allocator - Rust
    pub struct AllocatedFrame<'f> { /* private fields */ }
    Expand description

    A reference to a single frame within a range of AllocatedFrames.

    The lifetime of this type is tied to the lifetime of its owning AllocatedFrames.

    Methods from Deref<Target = Frame>§

    pub fn start_address(&self) -> PhysicalAddress

    Returns the PhysicalAddress at the start of this Frame.

    pub fn number(&self) -> usize

    Returns the number of this Frame.

    -

    Trait Implementations§

    source§

    impl<'f> Debug for AllocatedFrame<'f>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'f> Deref for AllocatedFrame<'f>

    §

    type Target = Frame

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.

    Auto Trait Implementations§

    §

    impl<'f> RefUnwindSafe for AllocatedFrame<'f>

    §

    impl<'f> Send for AllocatedFrame<'f>

    §

    impl<'f> Sync for AllocatedFrame<'f>

    §

    impl<'f> Unpin for AllocatedFrame<'f>

    §

    impl<'f> UnwindSafe for AllocatedFrame<'f>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl<'f> Debug for AllocatedFrame<'f>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'f> Deref for AllocatedFrame<'f>

    §

    type Target = Frame

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &Self::Target

    Dereferences the value.

    Auto Trait Implementations§

    §

    impl<'f> RefUnwindSafe for AllocatedFrame<'f>

    §

    impl<'f> Send for AllocatedFrame<'f>

    §

    impl<'f> Sync for AllocatedFrame<'f>

    §

    impl<'f> Unpin for AllocatedFrame<'f>

    §

    impl<'f> UnwindSafe for AllocatedFrame<'f>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/frame_allocator/struct.AllocatedFrames.html b/doc/frame_allocator/struct.AllocatedFrames.html deleted file mode 100644 index 6303acef08..0000000000 --- a/doc/frame_allocator/struct.AllocatedFrames.html +++ /dev/null @@ -1,67 +0,0 @@ -AllocatedFrames in frame_allocator - Rust
    pub struct AllocatedFrames { /* private fields */ }
    Expand description

    Represents a range of allocated physical memory [Frame]s; derefs to [FrameRange].

    -

    These frames are not immediately accessible because they’re not yet mapped -by any virtual memory pages. -You must do that separately in order to create a MappedPages type, -which can then be used to access the contents of these frames.

    -

    This object represents ownership of the range of allocated physical frames; -if this object falls out of scope, its allocated frames will be auto-deallocated upon drop.

    -

    Implementations§

    source§

    impl AllocatedFrames

    source

    pub const fn empty() -> AllocatedFrames

    Returns an empty AllocatedFrames object that performs no frame allocation. -Can be used as a placeholder, but will not permit any real usage.

    -
    source

    pub fn merge(&mut self, other: AllocatedFrames) -> Result<(), AllocatedFrames>

    Merges the given AllocatedFrames object other into this AllocatedFrames object (self). -This is just for convenience and usability purposes, it performs no allocation or remapping.

    -

    The given other must be physically contiguous with self, i.e., come immediately before or after self. -That is, either self.start == other.end + 1 or self.end + 1 == other.start must be true.

    -

    If either of those conditions are met, self is modified and Ok(()) is returned, -otherwise Err(other) is returned.

    -
    source

    pub fn split( - self, - at_frame: Frame -) -> Result<(AllocatedFrames, AllocatedFrames), AllocatedFrames>

    Splits this AllocatedFrames into two separate AllocatedFrames objects:

    -
      -
    • [beginning : at_frame - 1]
    • -
    • [at_frame : end]
    • -
    -

    This function follows the behavior of core::slice::split_at(), -thus, either one of the returned AllocatedFrames objects may be empty.

    -
      -
    • If at_frame == self.start, the first returned AllocatedFrames object will be empty.
    • -
    • If at_frame == self.end + 1, the second returned AllocatedFrames object will be empty.
    • -
    -

    Returns an Err containing this AllocatedFrames if at_frame is otherwise out of bounds.

    -
    source

    pub fn as_allocated_frame(&self) -> AllocatedFrame<'_>

    Returns an AllocatedFrame if this AllocatedFrames object contains only one frame.

    -
    Panic
    -

    Panics if this AllocatedFrame contains multiple frames or zero frames.

    -

    Methods from Deref<Target = FrameRange>§

    pub fn start_address(&self) -> PhysicalAddress

    Returns the [PhysicalAddress] of the starting [Frame] in this FrameRange.

    -

    pub fn size_in_frames(&self) -> usize

    Returns the number of [Frame]s covered by this iterator.

    -

    Use this instead of Iterator::count() method. This is instant, because it doesn’t need to iterate over each entry, unlike normal iterators.

    -

    pub fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    -

    pub fn contains_address(&self, addr: PhysicalAddress) -> bool

    Returns true if this FrameRange contains the given [PhysicalAddress].

    -

    pub fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>

    Returns the offset of the given [PhysicalAddress] within this FrameRange, i.e., addr - self.start_address().

    -

    If the given addr is not covered by this range of [Frame]s, this returns None.

    -
    Examples
    -

    If the range covers addresses 0x2000 to 0x4000, then offset_of_address(0x3500) would return Some(0x1500).

    -

    pub fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>

    Returns the [PhysicalAddress] at the given offset into this FrameRangewithin this FrameRange, i.e., self.start_address() + offset.

    -

    If the given offset is not within this range of [Frame]s, this returns None.

    -
    Examples
    -

    If the range covers addresses 0x2000 through 0x3FFF, then address_at_offset(0x1500) would return Some(0x3500), and address_at_offset(0x2000) would return None.

    -

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given [Frame].

    -

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the [Frame]s that overlap across this FrameRange and the given other FrameRange.

    -

    If there is no overlap between the two ranges, None is returned.

    -

    Methods from Deref<Target = RangeInclusive<Frame>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    -
    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    -
    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    -
    source

    pub fn iter(&self) -> RangeInclusiveIterator<Idx>

    Returns an iterator with the same start and end values as the range.

    -
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere - Idx: PartialOrd<U>, - U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    -

    Trait Implementations§

    source§

    impl Debug for AllocatedFrames

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for AllocatedFrames

    §

    type Target = FrameRange

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &FrameRange

    Dereferences the value.
    source§

    impl Drop for AllocatedFrames

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    source§

    impl<'f> IntoIterator for &'f AllocatedFrames

    §

    type IntoIter = AllocatedFramesIter<'f>

    Which kind of iterator are we turning this into?
    §

    type Item = AllocatedFrame<'f>

    The type of the elements being iterated over.
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    -

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/frame_allocator/struct.AllocatedFramesIter.html b/doc/frame_allocator/struct.AllocatedFramesIter.html index 3b944be02f..397967df6d 100644 --- a/doc/frame_allocator/struct.AllocatedFramesIter.html +++ b/doc/frame_allocator/struct.AllocatedFramesIter.html @@ -1,11 +1,11 @@ -AllocatedFramesIter in frame_allocator - Rust
    pub struct AllocatedFramesIter<'f> { /* private fields */ }
    Expand description

    An iterator over each AllocatedFrame in a range of AllocatedFrames.

    +AllocatedFramesIter in frame_allocator - Rust
    pub struct AllocatedFramesIter<'f> { /* private fields */ }
    Expand description

    An iterator over each AllocatedFrame in a range of AllocatedFrames.

    We must implement our own iterator type here in order to tie the lifetime 'f of a returned AllocatedFrame<'f> type to the lifetime of its containing AllocatedFrames. This is because the underlying type of AllocatedFrames is a [FrameRange], which itself is a RangeInclusive of [Frame]s. -Currently, the RangeInclusiveIterator type creates a clone of the original +Currently, the [RangeInclusiveIterator] type creates a clone of the original RangeInclusive instances rather than borrowing a reference to it.

    -

    Trait Implementations§

    source§

    impl<'f> Iterator for AllocatedFramesIter<'f>

    §

    type Item = AllocatedFrame<'f>

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( +

    Trait Implementations§

    source§

    impl<'f> Iterator for AllocatedFramesIter<'f>

    §

    type Item = AllocatedFrame<'f>

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usizewhere diff --git a/doc/frame_allocator/struct.DeferredAllocAction.html b/doc/frame_allocator/struct.DeferredAllocAction.html index 466debb55d..1ff3b1a59c 100644 --- a/doc/frame_allocator/struct.DeferredAllocAction.html +++ b/doc/frame_allocator/struct.DeferredAllocAction.html @@ -1,4 +1,4 @@ -DeferredAllocAction in frame_allocator - Rust
    pub struct DeferredAllocAction<'list> { /* private fields */ }
    Expand description

    A series of pending actions related to frame allocator bookkeeping, +DeferredAllocAction in frame_allocator - Rust

    pub struct DeferredAllocAction<'list> { /* private fields */ }
    Expand description

    A series of pending actions related to frame allocator bookkeeping, which may result in heap allocation.

    The actions are triggered upon dropping this struct. This struct can be returned from the allocate_frames() family of functions @@ -8,7 +8,7 @@

    The vast majority of use cases don’t care about such precise control, so you can simply drop this struct at any time or ignore it with a let _ = ... binding to instantly drop it.

    -

    Trait Implementations§

    source§

    impl<'list> Drop for DeferredAllocAction<'list>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl<'list> !RefUnwindSafe for DeferredAllocAction<'list>

    §

    impl<'list> Send for DeferredAllocAction<'list>

    §

    impl<'list> Sync for DeferredAllocAction<'list>

    §

    impl<'list> Unpin for DeferredAllocAction<'list>

    §

    impl<'list> !UnwindSafe for DeferredAllocAction<'list>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl<'list> Drop for DeferredAllocAction<'list>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl<'list> !RefUnwindSafe for DeferredAllocAction<'list>

    §

    impl<'list> Send for DeferredAllocAction<'list>

    §

    impl<'list> Sync for DeferredAllocAction<'list>

    §

    impl<'list> Unpin for DeferredAllocAction<'list>

    §

    impl<'list> !UnwindSafe for DeferredAllocAction<'list>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/frame_allocator/struct.Frames.html b/doc/frame_allocator/struct.Frames.html new file mode 100644 index 0000000000..c45c61e43a --- /dev/null +++ b/doc/frame_allocator/struct.Frames.html @@ -0,0 +1,114 @@ +Frames in frame_allocator - Rust

    Struct frame_allocator::Frames

    source ·
    pub struct Frames<const S: MemoryState> { /* private fields */ }
    Expand description

    A range of contiguous frames in physical memory.

    +

    Each Frames object is globally unique, meaning that the owner of a Frames object +has globally-exclusive access to the range of frames it contains.

    +

    A Frames object can be in one of four states:

    +
      +
    • Free: frames are owned by the frame allocator and have not been allocated for any use.
    • +
    • Allocated: frames have been removed from the allocator’s free list and are owned elsewhere; +they can now be used for mapping purposes.
    • +
    • Mapped: frames have been (and are currently) mapped by a range of virtual memory pages.
    • +
    • Unmapped: frames have been unmapped and can be returned to the frame allocator.
    • +
    +

    The drop behavior for a Frames object is based on its state:

    +
      +
    • Free: the frames will be added back to the frame allocator’s free list.
    • +
    • Allocated: the frames will be transitioned into the Free state.
    • +
    • Unmapped: the frames will be transitioned into the Allocated state.
    • +
    • Mapped: currently, Theseus does not actually drop mapped Frames, but rather they are forgotten +when they are mapped by virtual pages, and then re-created in the Unmapped state +after being unmapped from the page tables.
    • +
    +

    As such, one can visualize the Frames state diagram as such:

    + +
    (Free) <---> (Allocated) --> (Mapped) --> (Unmapped) --> (Allocated) <---> (Free)
    +

    Ordering and Equality

    +

    Frames implements the Ord trait, and its total ordering is ONLY based on +its starting Frame. This is useful so we can store Frames in a sorted collection.

    +

    Similarly, Frames implements equality traits, Eq and PartialEq, +both of which are also based ONLY on the starting Frame of the Frames. +Thus, comparing two Frames with the == or != operators may not work as expected. +since it ignores their actual range of frames.

    +

    Similarly, Frames implements the Borrow trait to return a Frame, +not a FrameRange. This is required so we can search for Frames in a sorted collection +using a Frame value. +It differs from the behavior of the Deref trait which returns a FrameRange.

    +

    Implementations§

    source§

    impl Frames<{MemoryState::Free}>

    source

    pub fn into_allocated_frames(self) -> AllocatedFrames

    Consumes this Frames in the Free state and converts them into the Allocated state.

    +
    source§

    impl Frames<{MemoryState::Allocated}>

    source

    pub fn into_mapped_frames(self) -> MappedFrames

    Consumes this Frames in the Allocated state and converts them into the Mapped state. +This should only be called once a MappedPages has been created from the Frames.

    +
    source

    pub fn as_allocated_frame(&self) -> AllocatedFrame<'_>

    Returns an AllocatedFrame if this AllocatedFrames object contains only one frame.

    +
    Panic
    +

    Panics if this AllocatedFrame contains multiple frames or zero frames.

    +
    source§

    impl Frames<{MemoryState::Unmapped}>

    source

    pub fn into_allocated_frames(self) -> AllocatedFrames

    Consumes this Frames in the Unmapped state and converts them into the Allocated state.

    +
    source§

    impl<const S: MemoryState> Frames<S>

    source

    pub const fn empty() -> Frames<S>

    Returns a new Frames with an empty range of frames. +Can be used as a placeholder, but will not permit any real usage.

    +
    source

    pub fn merge(&mut self, other: Self) -> Result<(), Self>

    Merges the given other Frames object into this Frames object (self).

    +

    This function performs no allocation or re-mapping, it exists for convenience and usability purposes.

    +

    The given other must be physically contiguous with self, i.e., come immediately before or after self. +That is, either self.start == other.end + 1 or self.end + 1 == other.start must be true.

    +

    If either of those conditions are met, self is modified and Ok(()) is returned, +otherwise Err(other) is returned.

    +
    source

    pub fn split_range( + self, + frames_to_extract: FrameRange +) -> Result<SplitFrames<S>, Self>

    Splits up the given Frames into multiple smaller Frames.

    +

    Returns a SplitFrames instance containing three Frames:

    +
      +
    1. The range of frames in self that are before the beginning of frames_to_extract.
    2. +
    3. The Frames containing the requested range of frames, frames_to_extract.
    4. +
    5. The range of frames in self that are after the end of frames_to_extract.
    6. +
    +

    If frames_to_extract is not contained within self, then self is returned unchanged within an Err.

    +
    source

    pub fn split_at(self, at_frame: Frame) -> Result<(Self, Self), Self>

    Splits this Frames into two separate Frames objects:

    +
      +
    • [beginning : at_frame - 1]
    • +
    • [at_frame : end]
    • +
    +

    This function follows the behavior of core::slice::split_at(), +thus, either one of the returned Frames objects may be empty.

    +
      +
    • If at_frame == self.start, the first returned Frames object will be empty.
    • +
    • If at_frame == self.end + 1, the second returned Frames object will be empty.
    • +
    +

    Returns an Err containing this Frames if at_frame is otherwise out of bounds, or if self was empty.

    +

    Methods from Deref<Target = FrameRange>§

    pub fn start_address(&self) -> PhysicalAddress

    Returns the [PhysicalAddress] of the starting [Frame] in this FrameRange.

    +

    pub fn size_in_frames(&self) -> usize

    Returns the number of [Frame]s covered by this iterator.

    +

    Use this instead of Iterator::count() method. This is instant, because it doesn’t need to iterate over each entry, unlike normal iterators.

    +

    pub fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    +

    pub fn contains_address(&self, addr: PhysicalAddress) -> bool

    Returns true if this FrameRange contains the given [PhysicalAddress].

    +

    pub fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>

    Returns the offset of the given [PhysicalAddress] within this FrameRange, i.e., addr - self.start_address().

    +

    If the given addr is not covered by this range of [Frame]s, this returns None.

    +
    Examples
    +

    If the range covers addresses 0x2000 to 0x4000, then offset_of_address(0x3500) would return Some(0x1500).

    +

    pub fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>

    Returns the [PhysicalAddress] at the given offset into this FrameRangewithin this FrameRange, i.e., self.start_address() + offset.

    +

    If the given offset is not within this range of [Frame]s, this returns None.

    +
    Examples
    +

    If the range covers addresses 0x2000 through 0x3FFF, then address_at_offset(0x1500) would return Some(0x3500), and address_at_offset(0x2000) would return None.

    +

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given [Frame].

    +

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the [Frame]s that overlap across this FrameRange and the given other FrameRange.

    +

    If there is no overlap between the two ranges, None is returned.

    +

    pub fn contains_range(&self, other: &FrameRange) -> bool

    Returns true if the other FrameRange is fully contained within this FrameRange.

    +

    Methods from Deref<Target = RangeInclusive<Frame>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    +
    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    +
    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    +
    source

    pub fn iter(&self) -> RangeInclusiveIterator<Idx>

    Returns an iterator with the same start and end values as the range.

    +
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere + Idx: PartialOrd<U>, + U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    +

    Trait Implementations§

    source§

    impl<const S: MemoryState> Borrow<Frame> for &Frames<S>

    source§

    fn borrow(&self) -> &Frame

    Immutably borrows from an owned value. Read more
    source§

    impl<const S: MemoryState> Debug for Frames<S>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<const S: MemoryState> Deref for Frames<S>

    §

    type Target = FrameRange

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &FrameRange

    Dereferences the value.
    source§

    impl<const S: MemoryState> Drop for Frames<S>

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    source§

    impl<const S: MemoryState> Ord for Frames<S>

    source§

    fn cmp(&self, other: &Self) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl<const S: MemoryState> PartialEq<Frames<S>> for Frames<S>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<const S: MemoryState> PartialOrd<Frames<S>> for Frames<S>

    source§

    fn partial_cmp(&self, other: &Self) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl<const S: MemoryState> Eq for Frames<S>

    source§

    impl<const S: MemoryState> StructuralEq for Frames<S>

    Auto Trait Implementations§

    §

    impl<const S: MemoryState> RefUnwindSafe for Frames<S>

    §

    impl<const S: MemoryState> Send for Frames<S>

    §

    impl<const S: MemoryState> Sync for Frames<S>

    §

    impl<const S: MemoryState> Unpin for Frames<S>

    §

    impl<const S: MemoryState> UnwindSafe for Frames<S>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/frame_allocator/struct.PhysicalMemoryRegion.html b/doc/frame_allocator/struct.PhysicalMemoryRegion.html index a18940be9a..4bdd1be1cc 100644 --- a/doc/frame_allocator/struct.PhysicalMemoryRegion.html +++ b/doc/frame_allocator/struct.PhysicalMemoryRegion.html @@ -1,8 +1,18 @@ -PhysicalMemoryRegion in frame_allocator - Rust
    pub struct PhysicalMemoryRegion {
    +PhysicalMemoryRegion in frame_allocator - Rust
    pub struct PhysicalMemoryRegion {
         pub frames: FrameRange,
         pub typ: MemoryRegionType,
    -}
    Expand description

    A region of physical memory.

    -

    Fields§

    §frames: FrameRange§typ: MemoryRegionType

    Implementations§

    Methods from Deref<Target = FrameRange>§

    pub fn start_address(&self) -> PhysicalAddress

    Returns the [PhysicalAddress] of the starting [Frame] in this FrameRange.

    +}
    Expand description

    PhysicalMemoryRegion represents a range of contiguous frames in physical memory for bookkeeping purposes. +It does not give access to the underlying frames.

    +

    Ordering and Equality

    +

    PhysicalMemoryRegion implements the Ord trait, and its total ordering is ONLY based on +its starting Frame. This is useful so we can store PhysicalMemoryRegions in a sorted collection.

    +

    Similarly, PhysicalMemoryRegion implements equality traits, Eq and PartialEq, +both of which are also based ONLY on the starting Frame of the PhysicalMemoryRegion. +Thus, comparing two PhysicalMemoryRegions with the == or != operators may not work as expected. +since it ignores their actual range of frames.

    +

    Fields§

    §frames: FrameRange

    The Frames covered by this region, an inclusive range.

    +
    §typ: MemoryRegionType

    The type of this memory region, e.g., whether it’s in a free or reserved region.

    +

    Implementations§

    Methods from Deref<Target = FrameRange>§

    pub fn start_address(&self) -> PhysicalAddress

    Returns the [PhysicalAddress] of the starting [Frame] in this FrameRange.

    pub fn size_in_frames(&self) -> usize

    Returns the number of [Frame]s covered by this iterator.

    Use this instead of Iterator::count() method. This is instant, because it doesn’t need to iterate over each entry, unlike normal iterators.

    pub fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    @@ -18,6 +28,7 @@
    Examples

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given [Frame].

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the [Frame]s that overlap across this FrameRange and the given other FrameRange.

    If there is no overlap between the two ranges, None is returned.

    +

    pub fn contains_range(&self, other: &FrameRange) -> bool

    Returns true if the other FrameRange is fully contained within this FrameRange.

    Methods from Deref<Target = RangeInclusive<Frame>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    @@ -25,9 +36,16 @@
    Examples
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere Idx: PartialOrd<U>, U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    -

    Trait Implementations§

    source§

    impl Clone for PhysicalMemoryRegion

    source§

    fn clone(&self) -> PhysicalMemoryRegion

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysicalMemoryRegion

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for PhysicalMemoryRegion

    §

    type Target = FrameRange

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &FrameRange

    Dereferences the value.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Borrow<Frame> for &PhysicalMemoryRegion

    source§

    fn borrow(&self) -> &Frame

    Immutably borrows from an owned value. Read more
    source§

    impl Clone for PhysicalMemoryRegion

    source§

    fn clone(&self) -> PhysicalMemoryRegion

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysicalMemoryRegion

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for PhysicalMemoryRegion

    §

    type Target = FrameRange

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &FrameRange

    Dereferences the value.
    source§

    impl Ord for PhysicalMemoryRegion

    source§

    fn cmp(&self, other: &Self) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere + Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PhysicalMemoryRegion> for PhysicalMemoryRegion

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PhysicalMemoryRegion> for PhysicalMemoryRegion

    source§

    fn partial_cmp(&self, other: &Self) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= +operator. Read more
    source§

    impl Eq for PhysicalMemoryRegion

    source§

    impl StructuralEq for PhysicalMemoryRegion

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    source§

    impl<T, U> Into<U> for Twhere U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    diff --git a/doc/frame_allocator/struct.SplitFrames.html b/doc/frame_allocator/struct.SplitFrames.html new file mode 100644 index 0000000000..d53ddccd25 --- /dev/null +++ b/doc/frame_allocator/struct.SplitFrames.html @@ -0,0 +1,12 @@ +SplitFrames in frame_allocator - Rust
    pub struct SplitFrames<const S: MemoryState> { /* private fields */ }
    Expand description

    The result of splitting a Frames object into multiple smaller Frames objects.

    +

    Auto Trait Implementations§

    §

    impl<const S: MemoryState> RefUnwindSafe for SplitFrames<S>

    §

    impl<const S: MemoryState> Send for SplitFrames<S>

    §

    impl<const S: MemoryState> Sync for SplitFrames<S>

    §

    impl<const S: MemoryState> Unpin for SplitFrames<S>

    §

    impl<const S: MemoryState> UnwindSafe for SplitFrames<S>

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/frame_allocator/type.AllocatedFrames.html b/doc/frame_allocator/type.AllocatedFrames.html new file mode 100644 index 0000000000..8acb4df7f5 --- /dev/null +++ b/doc/frame_allocator/type.AllocatedFrames.html @@ -0,0 +1,7 @@ +AllocatedFrames in frame_allocator - Rust

    Type Definition frame_allocator::AllocatedFrames

    source ·
    pub type AllocatedFrames = Frames<{ MemoryState::Allocated }>;
    Expand description

    A type alias for Frames in the Allocated state.

    +

    Implementations§

    source§

    impl AllocatedFrames

    source

    pub fn into_mapped_frames(self) -> MappedFrames

    Consumes this Frames in the Allocated state and converts them into the Mapped state. +This should only be called once a MappedPages has been created from the Frames.

    +
    source

    pub fn as_allocated_frame(&self) -> AllocatedFrame<'_>

    Returns an AllocatedFrame if this AllocatedFrames object contains only one frame.

    +
    Panic
    +

    Panics if this AllocatedFrame contains multiple frames or zero frames.

    +

    Trait Implementations§

    source§

    impl<'f> IntoIterator for &'f AllocatedFrames

    §

    type IntoIter = AllocatedFramesIter<'f>

    Which kind of iterator are we turning this into?
    §

    type Item = AllocatedFrame<'f>

    The type of the elements being iterated over.
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    \ No newline at end of file diff --git a/doc/frame_allocator/type.FreeFrames.html b/doc/frame_allocator/type.FreeFrames.html new file mode 100644 index 0000000000..2bb70e9465 --- /dev/null +++ b/doc/frame_allocator/type.FreeFrames.html @@ -0,0 +1,3 @@ +FreeFrames in frame_allocator - Rust

    Type Definition frame_allocator::FreeFrames

    source ·
    pub type FreeFrames = Frames<{ MemoryState::Free }>;
    Expand description

    A type alias for Frames in the Free state.

    +

    Implementations§

    source§

    impl FreeFrames

    source

    pub fn into_allocated_frames(self) -> AllocatedFrames

    Consumes this Frames in the Free state and converts them into the Allocated state.

    +
    \ No newline at end of file diff --git a/doc/frame_allocator/type.MappedFrames.html b/doc/frame_allocator/type.MappedFrames.html new file mode 100644 index 0000000000..3971509f30 --- /dev/null +++ b/doc/frame_allocator/type.MappedFrames.html @@ -0,0 +1,2 @@ +MappedFrames in frame_allocator - Rust

    Type Definition frame_allocator::MappedFrames

    source ·
    pub type MappedFrames = Frames<{ MemoryState::Mapped }>;
    Expand description

    A type alias for Frames in the Mapped state.

    +
    \ No newline at end of file diff --git a/doc/frame_allocator/type.UnmappedFrames.html b/doc/frame_allocator/type.UnmappedFrames.html new file mode 100644 index 0000000000..e450119f41 --- /dev/null +++ b/doc/frame_allocator/type.UnmappedFrames.html @@ -0,0 +1,3 @@ +UnmappedFrames in frame_allocator - Rust

    Type Definition frame_allocator::UnmappedFrames

    source ·
    pub type UnmappedFrames = Frames<{ MemoryState::Unmapped }>;
    Expand description

    A type alias for Frames in the Unmapped state.

    +

    Implementations§

    source§

    impl UnmappedFrames

    source

    pub fn into_allocated_frames(self) -> AllocatedFrames

    Consumes this Frames in the Unmapped state and converts them into the Allocated state.

    +
    \ No newline at end of file diff --git a/doc/implementors/core/borrow/trait.Borrow.js b/doc/implementors/core/borrow/trait.Borrow.js index a8653fe16b..dee1bcfa0e 100644 --- a/doc/implementors/core/borrow/trait.Borrow.js +++ b/doc/implementors/core/borrow/trait.Borrow.js @@ -1,4 +1,5 @@ (function() {var implementors = { +"frame_allocator":[["impl Borrow<Frame> for &PhysicalMemoryRegion"],["impl<const S: MemoryState> Borrow<Frame> for &Frames<S>"]], "memory":[["impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Borrow<[T]> for BorrowedSliceMappedPages<T, M, B>"],["impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Borrow<T> for BorrowedMappedPages<T, M, B>"]], "str_ref":[["impl Borrow<str> for StrRef"],["impl Borrow<[u8]> for StrRef"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js index 045583c68f..4442ae6058 100644 --- a/doc/implementors/core/clone/trait.Clone.js +++ b/doc/implementors/core/clone/trait.Clone.js @@ -27,7 +27,7 @@ "ixgbe":[["impl Clone for RxBufferSizeKiB"]], "keycodes_ascii":[["impl Clone for KeyEvent"],["impl Clone for KeyAction"],["impl Clone for KeyboardModifiers"],["impl Clone for Keycode"]], "madt":[["impl<'t> Clone for MadtEntry<'t>"],["impl<'t> Clone for MadtIter<'t>"],["impl Clone for MadtLocalX2Apic"],["impl Clone for MadtIntSrcOverride"],["impl Clone for MadtNonMaskableInterrupt"],["impl Clone for MadtLocalApicAddressOverride"],["impl Clone for MadtIoApic"],["impl Clone for MadtLocalApic"]], -"memory_structs":[["impl Clone for PageRange"],["impl Clone for Frame"],["impl Clone for Page"],["impl Clone for CopyablePageRange"],["impl Clone for PhysicalAddress"],["impl Clone for VirtualAddress"],["impl Clone for CopyableFrameRange"],["impl Clone for FrameRange"]], +"memory_structs":[["impl Clone for PhysicalAddress"],["impl Clone for Frame"],["impl Clone for CopyablePageRange"],["impl Clone for PageRange"],["impl Clone for Page"],["impl Clone for VirtualAddress"],["impl Clone for FrameRange"],["impl Clone for CopyableFrameRange"]], "mlx_ethernet":[["impl Clone for Tisn"],["impl Clone for Tirn"],["impl Clone for FtId"],["impl Clone for AccessRegisterOpMod"],["impl Clone for Lkey"],["impl Clone for Pd"],["impl Clone for Sqn"],["impl Clone for Rqn"],["impl Clone for Cqn"],["impl Clone for CommandOpcode"],["impl Clone for FgId"],["impl Clone for QueryHcaCapCurrentOpMod"],["impl Clone for QueryHcaCapMaxOpMod"],["impl Clone for Td"],["impl Clone for Eqn"]], "mod_mgmt":[["impl Clone for NamespaceDir"]], "mouse_data":[["impl Clone for MouseEvent"],["impl Clone for MouseMovementRelative"],["impl Clone for MouseButtons"]], diff --git a/doc/implementors/core/cmp/trait.Eq.js b/doc/implementors/core/cmp/trait.Eq.js index 7733f7b258..2d0fa096e9 100644 --- a/doc/implementors/core/cmp/trait.Eq.js +++ b/doc/implementors/core/cmp/trait.Eq.js @@ -7,11 +7,11 @@ "cpu_local":[["impl Eq for PerCpuField"]], "crate_metadata":[["impl Eq for RelocationEntry"]], "crate_swap":[["impl Eq for SwapRequest"]], -"frame_allocator":[["impl Eq for MemoryRegionType"]], +"frame_allocator":[["impl Eq for MemoryRegionType"],["impl Eq for PhysicalMemoryRegion"],["impl<const S: MemoryState> Eq for Frames<S>"]], "interrupts":[["impl Eq for EoiBehaviour"]], "keycodes_ascii":[["impl Eq for KeyboardModifiers"]], "memory":[["impl<T: FromBytes + Eq, M: Mutability, B: Borrow<MappedPages>> Eq for BorrowedMappedPages<T, M, B>"],["impl<T: FromBytes + Eq, M: Mutability, B: Borrow<MappedPages>> Eq for BorrowedSliceMappedPages<T, M, B>"]], -"memory_structs":[["impl Eq for FrameRange"],["impl Eq for PageRange"],["impl Eq for PhysicalAddress"],["impl Eq for Frame"],["impl Eq for Page"],["impl Eq for VirtualAddress"]], +"memory_structs":[["impl Eq for PageRange"],["impl Eq for VirtualAddress"],["impl Eq for Page"],["impl Eq for Frame"],["impl Eq for FrameRange"],["impl Eq for MemoryState"],["impl Eq for PhysicalAddress"]], "mlx_ethernet":[["impl Eq for CmdState"]], "path":[["impl Eq for Path"]], "pci":[["impl Eq for PciLocation"]], diff --git a/doc/implementors/core/cmp/trait.Ord.js b/doc/implementors/core/cmp/trait.Ord.js index 8043300e0c..3e38995f7f 100644 --- a/doc/implementors/core/cmp/trait.Ord.js +++ b/doc/implementors/core/cmp/trait.Ord.js @@ -3,9 +3,10 @@ "ata":[["impl Ord for AtaError"],["impl Ord for AtaStatus"]], "boot_info":[["impl Ord for ElfSectionFlags"]], "cpu":[["impl Ord for CpuId"]], +"frame_allocator":[["impl Ord for PhysicalMemoryRegion"],["impl<const S: MemoryState> Ord for Frames<S>"]], "keycodes_ascii":[["impl Ord for KeyboardModifiers"]], "memory":[["impl<T: FromBytes + Ord, M: Mutability, B: Borrow<MappedPages>> Ord for BorrowedSliceMappedPages<T, M, B>"],["impl<T: FromBytes + Ord, M: Mutability, B: Borrow<MappedPages>> Ord for BorrowedMappedPages<T, M, B>"]], -"memory_structs":[["impl Ord for PhysicalAddress"],["impl Ord for Page"],["impl Ord for VirtualAddress"],["impl Ord for Frame"]], +"memory_structs":[["impl Ord for Page"],["impl Ord for PhysicalAddress"],["impl Ord for VirtualAddress"],["impl Ord for Frame"]], "pte_flags":[["impl Ord for PteFlagsAarch64"],["impl Ord for PteFlagsX86_64"],["impl Ord for PteFlags"]], "runqueue_priority":[["impl Ord for PriorityTaskRef"]], "shapes":[["impl Ord for Coord"]], diff --git a/doc/implementors/core/cmp/trait.PartialEq.js b/doc/implementors/core/cmp/trait.PartialEq.js index 6588d3ad93..5911f33b75 100644 --- a/doc/implementors/core/cmp/trait.PartialEq.js +++ b/doc/implementors/core/cmp/trait.PartialEq.js @@ -10,12 +10,12 @@ "crate_metadata_serde":[["impl PartialEq<SectionType> for SectionType"]], "crate_swap":[["impl PartialEq<SwapRequest> for SwapRequest"]], "fault_log":[["impl PartialEq<RecoveryAction> for RecoveryAction"]], -"frame_allocator":[["impl PartialEq<MemoryRegionType> for MemoryRegionType"]], +"frame_allocator":[["impl PartialEq<PhysicalMemoryRegion> for PhysicalMemoryRegion"],["impl<const S: MemoryState> PartialEq<Frames<S>> for Frames<S>"],["impl PartialEq<MemoryRegionType> for MemoryRegionType"]], "interrupts":[["impl PartialEq<EoiBehaviour> for EoiBehaviour"]], "ixgbe":[["impl PartialEq<LinkSpeedMbps> for LinkSpeedMbps"]], "keycodes_ascii":[["impl PartialEq<KeyAction> for KeyAction"],["impl PartialEq<Keycode> for Keycode"],["impl PartialEq<KeyboardModifiers> for KeyboardModifiers"]], "memory":[["impl<T: FromBytes + PartialEq, M: Mutability, B: Borrow<MappedPages>> PartialEq<BorrowedSliceMappedPages<T, M, B>> for BorrowedSliceMappedPages<T, M, B>"],["impl<T: FromBytes + PartialEq, M: Mutability, B: Borrow<MappedPages>> PartialEq<BorrowedMappedPages<T, M, B>> for BorrowedMappedPages<T, M, B>"]], -"memory_structs":[["impl PartialEq<PhysicalAddress> for PhysicalAddress"],["impl PartialEq<PageRange> for PageRange"],["impl PartialEq<Frame> for Frame"],["impl PartialEq<FrameRange> for FrameRange"],["impl PartialEq<VirtualAddress> for VirtualAddress"],["impl PartialEq<Page> for Page"]], +"memory_structs":[["impl PartialEq<FrameRange> for FrameRange"],["impl PartialEq<Frame> for Frame"],["impl PartialEq<PageRange> for PageRange"],["impl PartialEq<PhysicalAddress> for PhysicalAddress"],["impl PartialEq<MemoryState> for MemoryState"],["impl PartialEq<Page> for Page"],["impl PartialEq<VirtualAddress> for VirtualAddress"]], "mlx_ethernet":[["impl PartialEq<CommandOpcode> for CommandOpcode"],["impl PartialEq<CmdState> for CmdState"]], "path":[["impl PartialEq<Path> for Path"]], "pci":[["impl PartialEq<PciLocation> for PciLocation"]], diff --git a/doc/implementors/core/cmp/trait.PartialOrd.js b/doc/implementors/core/cmp/trait.PartialOrd.js index 9faee80832..ce4e9537e3 100644 --- a/doc/implementors/core/cmp/trait.PartialOrd.js +++ b/doc/implementors/core/cmp/trait.PartialOrd.js @@ -3,9 +3,10 @@ "ata":[["impl PartialOrd<AtaError> for AtaError"],["impl PartialOrd<AtaStatus> for AtaStatus"]], "boot_info":[["impl PartialOrd<ElfSectionFlags> for ElfSectionFlags"]], "cpu":[["impl PartialOrd<CpuId> for CpuId"]], +"frame_allocator":[["impl PartialOrd<PhysicalMemoryRegion> for PhysicalMemoryRegion"],["impl<const S: MemoryState> PartialOrd<Frames<S>> for Frames<S>"]], "keycodes_ascii":[["impl PartialOrd<KeyboardModifiers> for KeyboardModifiers"]], "memory":[["impl<T: FromBytes + PartialOrd, M: Mutability, B: Borrow<MappedPages>> PartialOrd<BorrowedSliceMappedPages<T, M, B>> for BorrowedSliceMappedPages<T, M, B>"],["impl<T: FromBytes + PartialOrd, M: Mutability, B: Borrow<MappedPages>> PartialOrd<BorrowedMappedPages<T, M, B>> for BorrowedMappedPages<T, M, B>"]], -"memory_structs":[["impl PartialOrd<PhysicalAddress> for PhysicalAddress"],["impl PartialOrd<Frame> for Frame"],["impl PartialOrd<Page> for Page"],["impl PartialOrd<VirtualAddress> for VirtualAddress"]], +"memory_structs":[["impl PartialOrd<Frame> for Frame"],["impl PartialOrd<VirtualAddress> for VirtualAddress"],["impl PartialOrd<PhysicalAddress> for PhysicalAddress"],["impl PartialOrd<Page> for Page"]], "pte_flags":[["impl PartialOrd<PteFlags> for PteFlags"],["impl PartialOrd<PteFlagsX86_64> for PteFlagsX86_64"],["impl PartialOrd<PteFlagsAarch64> for PteFlagsAarch64"]], "runqueue_priority":[["impl PartialOrd<PriorityTaskRef> for PriorityTaskRef"]], "shapes":[["impl PartialOrd<Coord> for Coord"]], diff --git a/doc/implementors/core/convert/trait.From.js b/doc/implementors/core/convert/trait.From.js index 7621fc9981..e9f84923e7 100644 --- a/doc/implementors/core/convert/trait.From.js +++ b/doc/implementors/core/convert/trait.From.js @@ -3,7 +3,7 @@ "cpu":[["impl From<CpuId> for ApicId"],["impl From<ApicId> for CpuId"],["impl From<OptionalCpuId> for Option<CpuId>"],["impl From<Option<CpuId>> for OptionalCpuId"]], "framebuffer":[["impl From<Color> for AlphaPixel"],["impl From<Color> for RGBPixel"]], "io":[["impl From<IoError> for String"],["impl<'io, IO, L, B> From<B> for LockableIo<'io, IO, L, B>where\n IO: 'io + ?Sized,\n L: for<'a> Lockable<'a, IO> + ?Sized,\n B: Borrow<L>,"],["impl<RW> From<RW> for ByteWriterWrapper<RW>where\n RW: BlockReader + BlockWriter,"],["impl From<IoError> for Error"],["impl From<IoError> for &'static str"],["impl<RW> From<RW> for ByteReaderWriterWrapper<RW>where\n RW: BlockReader + BlockWriter,"],["impl From<&'static str> for IoError"],["impl<R> From<R> for ByteReaderWrapper<R>where\n R: BlockReader,"]], -"memory_structs":[["impl From<CopyablePageRange> for PageRange"],["impl From<PageRange> for CopyablePageRange"],["impl From<FrameRange> for CopyableFrameRange"],["impl From<CopyableFrameRange> for FrameRange"]], +"memory_structs":[["impl From<CopyableFrameRange> for FrameRange"],["impl From<CopyablePageRange> for PageRange"],["impl From<FrameRange> for CopyableFrameRange"],["impl From<PageRange> for CopyablePageRange"]], "mlx_ethernet":[["impl From<CommandQueueError> for &'static str"]], "page_allocator":[["impl From<AllocationError> for &'static str"]], "page_attribute_table":[["impl From<PageAttributeTable> for u64where\n [(); 64]: IsU64Compatible,"],["impl From<u64> for PageAttributeTablewhere\n [(); 64]: IsU64Compatible,"]], diff --git a/doc/implementors/core/convert/trait.Into.js b/doc/implementors/core/convert/trait.Into.js index 85f3fc65e2..034e6842e0 100644 --- a/doc/implementors/core/convert/trait.Into.js +++ b/doc/implementors/core/convert/trait.Into.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"memory_structs":[["impl Into<usize> for VirtualAddress"],["impl Into<usize> for PhysicalAddress"]] +"memory_structs":[["impl Into<usize> for PhysicalAddress"],["impl Into<usize> for VirtualAddress"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/default/trait.Default.js b/doc/implementors/core/default/trait.Default.js index 0b4fc7b9e9..9a8efedfd1 100644 --- a/doc/implementors/core/default/trait.Default.js +++ b/doc/implementors/core/default/trait.Default.js @@ -7,7 +7,7 @@ "irq_safety":[["impl<T: ?Sized + Default> Default for RwLockIrqSafe<T>"],["impl Default for HeldInterrupts"],["impl<T: ?Sized + Default> Default for MutexIrqSafe<T>"]], "keycodes_ascii":[["impl Default for KeyboardModifiers"]], "libterm":[["impl Default for Cursor"]], -"memory_structs":[["impl Default for PhysicalAddress"],["impl Default for VirtualAddress"]], +"memory_structs":[["impl Default for VirtualAddress"],["impl Default for PhysicalAddress"]], "mlx_ethernet":[["impl Default for DoorbellRecord"],["impl Default for CommandQueueEntry"],["impl Default for CompletionQueueEntry"],["impl Default for WorkQueueEntrySend"],["impl Default for EventQueueEntry"],["impl Default for CompletionQueueDoorbellRecord"],["impl Default for WorkQueueEntryReceive"]], "pte_flags":[["impl Default for PteFlags"],["impl Default for PteFlagsAarch64"],["impl Default for PteFlagsX86_64"]], "slabmalloc":[["impl<'a> Default for ZoneAllocator<'a>"],["impl<'a> Default for ObjectPage8k<'a>"],["impl<T> Default for Rawlink<T>"]], diff --git a/doc/implementors/core/fmt/trait.Binary.js b/doc/implementors/core/fmt/trait.Binary.js index 824cbba41f..771f89bd7c 100644 --- a/doc/implementors/core/fmt/trait.Binary.js +++ b/doc/implementors/core/fmt/trait.Binary.js @@ -4,7 +4,7 @@ "boot_info":[["impl Binary for ElfSectionFlags"]], "cpu":[["impl Binary for CpuId"]], "keycodes_ascii":[["impl Binary for KeyboardModifiers"]], -"memory_structs":[["impl Binary for VirtualAddress"],["impl Binary for PhysicalAddress"]], +"memory_structs":[["impl Binary for PhysicalAddress"],["impl Binary for VirtualAddress"]], "pte_flags":[["impl Binary for PteFlagsAarch64"],["impl Binary for PteFlags"],["impl Binary for PteFlagsX86_64"]], "text_terminal":[["impl Binary for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.Debug.js b/doc/implementors/core/fmt/trait.Debug.js index c1583f9385..a862a538b3 100644 --- a/doc/implementors/core/fmt/trait.Debug.js +++ b/doc/implementors/core/fmt/trait.Debug.js @@ -21,7 +21,7 @@ "external_unwind_info":[["impl Debug for ExternalUnwindInfo"]], "fadt":[["impl Debug for Fadt"]], "fault_log":[["impl Debug for FaultEntry"],["impl Debug for RecoveryAction"],["impl Debug for FaultType"]], -"frame_allocator":[["impl Debug for PhysicalMemoryRegion"],["impl Debug for AllocatedFrames"],["impl<'f> Debug for AllocatedFrame<'f>"],["impl Debug for MemoryRegionType"]], +"frame_allocator":[["impl<const S: MemoryState> Debug for Frames<S>"],["impl Debug for PhysicalMemoryRegion"],["impl<'f> Debug for AllocatedFrame<'f>"],["impl Debug for MemoryRegionType"]], "framebuffer":[["impl Debug for RGBPixel"],["impl Debug for AlphaPixel"]], "fs_node":[["impl Debug for FileOrDir"]], "gdt":[["impl Debug for AvailableSegmentSelector"]], @@ -37,7 +37,7 @@ "madt":[["impl Debug for MadtIoApic"],["impl Debug for MadtLocalApic"],["impl Debug for MadtLocalX2Apic"],["impl<'t> Debug for MadtEntry<'t>"],["impl Debug for MadtNonMaskableInterrupt"],["impl Debug for MadtIntSrcOverride"],["impl Debug for MadtLocalApicAddressOverride"]], "memory":[["impl Debug for MemoryManagementInfo"],["impl Debug for EarlyIdentityMappedPages"],["impl Debug for PageTable"],["impl Debug for MappedPages"],["impl Debug for InitialMemoryMappings"]], "memory_aarch64":[["impl Debug for AggregatedSectionMemoryBounds"],["impl Debug for SectionMemoryBounds"]], -"memory_structs":[["impl Debug for PageRange"],["impl Debug for Page"],["impl Debug for FrameRange"],["impl Debug for PhysicalAddress"],["impl Debug for Frame"],["impl Debug for VirtualAddress"]], +"memory_structs":[["impl Debug for VirtualAddress"],["impl Debug for Page"],["impl Debug for PageRange"],["impl Debug for PhysicalAddress"],["impl Debug for FrameRange"],["impl Debug for Frame"]], "memory_x86_64":[["impl Debug for SectionMemoryBounds"],["impl Debug for AggregatedSectionMemoryBounds"]], "mlx_ethernet":[["impl Debug for Tirn"],["impl Debug for FtId"],["impl Debug for Lkey"],["impl Debug for CommandReturnStatus"],["impl Debug for CommandOpcode"],["impl Debug for CompletionQueueEntry"],["impl Debug for EventQueueEntry"],["impl Debug for Tisn"],["impl Debug for HcaPortType"],["impl Debug for Td"],["impl Debug for CommandCompletionStatus"],["impl Debug for ReceiveQueueState"],["impl Debug for HCACapabilities"],["impl Debug for CommandQueueEntry"],["impl Debug for Rqn"],["impl Debug for Eqn"],["impl Debug for Cqn"],["impl Debug for InitializationSegment"],["impl Debug for CommandDeliveryStatus"],["impl Debug for Sqn"],["impl Debug for FgId"],["impl Debug for Pd"],["impl Debug for SendQueueState"]], "mod_mgmt":[["impl Debug for IntoCrateObjectFile"],["impl Debug for NamespaceDir"]], diff --git a/doc/implementors/core/fmt/trait.LowerHex.js b/doc/implementors/core/fmt/trait.LowerHex.js index dcf506b933..c28e28669b 100644 --- a/doc/implementors/core/fmt/trait.LowerHex.js +++ b/doc/implementors/core/fmt/trait.LowerHex.js @@ -4,7 +4,7 @@ "boot_info":[["impl LowerHex for ElfSectionFlags"]], "cpu":[["impl LowerHex for CpuId"]], "keycodes_ascii":[["impl LowerHex for KeyboardModifiers"]], -"memory_structs":[["impl LowerHex for PhysicalAddress"],["impl LowerHex for VirtualAddress"]], +"memory_structs":[["impl LowerHex for VirtualAddress"],["impl LowerHex for PhysicalAddress"]], "pte_flags":[["impl LowerHex for PteFlagsAarch64"],["impl LowerHex for PteFlags"],["impl LowerHex for PteFlagsX86_64"]], "text_terminal":[["impl LowerHex for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.Pointer.js b/doc/implementors/core/fmt/trait.Pointer.js index 412c5bad89..043cf2e08f 100644 --- a/doc/implementors/core/fmt/trait.Pointer.js +++ b/doc/implementors/core/fmt/trait.Pointer.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"memory_structs":[["impl Pointer for PhysicalAddress"],["impl Pointer for VirtualAddress"]] +"memory_structs":[["impl Pointer for VirtualAddress"],["impl Pointer for PhysicalAddress"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.UpperHex.js b/doc/implementors/core/fmt/trait.UpperHex.js index 82c1be1947..5c8ae36d7d 100644 --- a/doc/implementors/core/fmt/trait.UpperHex.js +++ b/doc/implementors/core/fmt/trait.UpperHex.js @@ -4,7 +4,7 @@ "boot_info":[["impl UpperHex for ElfSectionFlags"]], "cpu":[["impl UpperHex for CpuId"]], "keycodes_ascii":[["impl UpperHex for KeyboardModifiers"]], -"memory_structs":[["impl UpperHex for PhysicalAddress"],["impl UpperHex for VirtualAddress"]], +"memory_structs":[["impl UpperHex for VirtualAddress"],["impl UpperHex for PhysicalAddress"]], "pte_flags":[["impl UpperHex for PteFlagsX86_64"],["impl UpperHex for PteFlagsAarch64"],["impl UpperHex for PteFlags"]], "text_terminal":[["impl UpperHex for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/iter/range/trait.Step.js b/doc/implementors/core/iter/range/trait.Step.js index 59e577d40c..6aec7130a1 100644 --- a/doc/implementors/core/iter/range/trait.Step.js +++ b/doc/implementors/core/iter/range/trait.Step.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"memory_structs":[["impl Step for Page"],["impl Step for Frame"]] +"memory_structs":[["impl Step for Frame"],["impl Step for Page"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/iter/traits/collect/trait.IntoIterator.js b/doc/implementors/core/iter/traits/collect/trait.IntoIterator.js index aca77d99d5..198e72b582 100644 --- a/doc/implementors/core/iter/traits/collect/trait.IntoIterator.js +++ b/doc/implementors/core/iter/traits/collect/trait.IntoIterator.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"frame_allocator":[["impl<'f> IntoIterator for &'f AllocatedFrames"]], -"memory_structs":[["impl IntoIterator for FrameRange"],["impl IntoIterator for PageRange"]], +"frame_allocator":[["impl<'f> IntoIterator for &'f AllocatedFrames"]], +"memory_structs":[["impl IntoIterator for PageRange"],["impl IntoIterator for FrameRange"]], "range_inclusive":[["impl<'a, Idx: Clone + PartialOrd + Step> IntoIterator for &'a RangeInclusive<Idx>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.ConstParamTy.js b/doc/implementors/core/marker/trait.ConstParamTy.js index cb61476cc3..65d6ba2e55 100644 --- a/doc/implementors/core/marker/trait.ConstParamTy.js +++ b/doc/implementors/core/marker/trait.ConstParamTy.js @@ -1,3 +1,4 @@ (function() {var implementors = { +"memory_structs":[["impl ConstParamTy for MemoryState"]], "mlx_ethernet":[["impl ConstParamTy for CmdState"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Copy.js b/doc/implementors/core/marker/trait.Copy.js index 4fcef0d48f..08a2899f0e 100644 --- a/doc/implementors/core/marker/trait.Copy.js +++ b/doc/implementors/core/marker/trait.Copy.js @@ -19,7 +19,7 @@ "ixgbe":[["impl Copy for RxBufferSizeKiB"]], "keycodes_ascii":[["impl Copy for KeyAction"],["impl Copy for KeyEvent"],["impl Copy for KeyboardModifiers"],["impl Copy for Keycode"]], "madt":[["impl Copy for MadtLocalApicAddressOverride"],["impl Copy for MadtIntSrcOverride"],["impl Copy for MadtIoApic"],["impl<'t> Copy for MadtEntry<'t>"],["impl Copy for MadtLocalApic"],["impl Copy for MadtLocalX2Apic"],["impl Copy for MadtNonMaskableInterrupt"]], -"memory_structs":[["impl Copy for CopyablePageRange"],["impl Copy for Page"],["impl Copy for PhysicalAddress"],["impl Copy for CopyableFrameRange"],["impl Copy for Frame"],["impl Copy for VirtualAddress"]], +"memory_structs":[["impl Copy for PhysicalAddress"],["impl Copy for Frame"],["impl Copy for CopyablePageRange"],["impl Copy for CopyableFrameRange"],["impl Copy for Page"],["impl Copy for VirtualAddress"]], "mlx_ethernet":[["impl Copy for Cqn"],["impl Copy for Td"],["impl Copy for QueryHcaCapMaxOpMod"],["impl Copy for Tirn"],["impl Copy for QueryHcaCapCurrentOpMod"],["impl Copy for CommandOpcode"],["impl Copy for FgId"],["impl Copy for FtId"],["impl Copy for AccessRegisterOpMod"],["impl Copy for Lkey"],["impl Copy for Pd"],["impl Copy for Sqn"],["impl Copy for Eqn"],["impl Copy for Tisn"],["impl Copy for Rqn"]], "multicore_bringup":[["impl Copy for GraphicInfo"]], "page_attribute_table":[["impl Copy for MemoryCachingType"],["impl Copy for PageAttributeTable"]], diff --git a/doc/implementors/core/marker/trait.Freeze.js b/doc/implementors/core/marker/trait.Freeze.js index 7d24d6ca0f..df6f1b07dd 100644 --- a/doc/implementors/core/marker/trait.Freeze.js +++ b/doc/implementors/core/marker/trait.Freeze.js @@ -36,7 +36,7 @@ "fadt":[["impl Freeze for Fadt",1,["fadt::Fadt"]]], "fault_crate_swap":[["impl Freeze for SwapRanges",1,["fault_crate_swap::SwapRanges"]]], "fault_log":[["impl Freeze for FaultType",1,["fault_log::FaultType"]],["impl Freeze for RecoveryAction",1,["fault_log::RecoveryAction"]],["impl Freeze for FaultEntry",1,["fault_log::FaultEntry"]]], -"frame_allocator":[["impl Freeze for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Freeze for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl Freeze for AllocatedFrames",1,["frame_allocator::AllocatedFrames"]],["impl<'f> Freeze for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Freeze for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<'list> Freeze for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], +"frame_allocator":[["impl Freeze for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Freeze for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl<const S: MemoryState> Freeze for Frames<S>",1,["frame_allocator::Frames"]],["impl<'f> Freeze for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Freeze for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<const S: MemoryState> Freeze for SplitFrames<S>",1,["frame_allocator::SplitFrames"]],["impl<'list> Freeze for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], "framebuffer":[["impl Freeze for RGBPixel",1,["framebuffer::pixel::RGBPixel"]],["impl Freeze for AlphaPixel",1,["framebuffer::pixel::AlphaPixel"]],["impl<P> Freeze for Framebuffer<P>",1,["framebuffer::Framebuffer"]]], "framebuffer_compositor":[["impl Freeze for CacheBlock",1,["framebuffer_compositor::CacheBlock"]],["impl Freeze for FrameCompositor",1,["framebuffer_compositor::FrameCompositor"]]], "fs_node":[["impl Freeze for FileOrDir",1,["fs_node::FileOrDir"]]], @@ -61,7 +61,7 @@ "memfs":[["impl Freeze for MemFile",1,["memfs::MemFile"]]], "memory":[["impl Freeze for Mapper",1,["memory::paging::mapper::Mapper"]],["impl Freeze for MappedPages",1,["memory::paging::mapper::MappedPages"]],["impl<T, M, B> Freeze for BorrowedMappedPages<T, M, B>where\n B: Freeze,",1,["memory::paging::mapper::BorrowedMappedPages"]],["impl<T, M, B> Freeze for BorrowedSliceMappedPages<T, M, B>where\n B: Freeze,",1,["memory::paging::mapper::BorrowedSliceMappedPages"]],["impl Freeze for Mutable",1,["memory::paging::mapper::Mutable"]],["impl Freeze for Immutable",1,["memory::paging::mapper::Immutable"]],["impl Freeze for PageTable",1,["memory::paging::PageTable"]],["impl Freeze for MemoryManagementInfo",1,["memory::MemoryManagementInfo"]],["impl Freeze for InitialMemoryMappings",1,["memory::InitialMemoryMappings"]],["impl Freeze for EarlyIdentityMappedPages",1,["memory::EarlyIdentityMappedPages"]]], "memory_aarch64":[["impl Freeze for MmuConfig",1,["memory_aarch64::MmuConfig"]],["impl Freeze for SectionMemoryBounds",1,["memory_aarch64::SectionMemoryBounds"]],["impl Freeze for AggregatedSectionMemoryBounds",1,["memory_aarch64::AggregatedSectionMemoryBounds"]]], -"memory_structs":[["impl Freeze for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Freeze for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Freeze for Page",1,["memory_structs::Page"]],["impl Freeze for Frame",1,["memory_structs::Frame"]],["impl Freeze for PageRange",1,["memory_structs::PageRange"]],["impl Freeze for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Freeze for FrameRange",1,["memory_structs::FrameRange"]],["impl Freeze for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], +"memory_structs":[["impl Freeze for MemoryState",1,["memory_structs::MemoryState"]],["impl Freeze for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Freeze for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Freeze for Page",1,["memory_structs::Page"]],["impl Freeze for Frame",1,["memory_structs::Frame"]],["impl Freeze for PageRange",1,["memory_structs::PageRange"]],["impl Freeze for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Freeze for FrameRange",1,["memory_structs::FrameRange"]],["impl Freeze for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], "memory_x86_64":[["impl Freeze for SectionMemoryBounds",1,["memory_x86_64::SectionMemoryBounds"]],["impl Freeze for AggregatedSectionMemoryBounds",1,["memory_x86_64::AggregatedSectionMemoryBounds"]]], "mlx5":[["impl Freeze for ConnectX5Nic",1,["mlx5::ConnectX5Nic"]]], "mlx_ethernet":[["impl Freeze for InitializationSegment",1,["mlx_ethernet::initialization_segment::InitializationSegment"]],["impl Freeze for InitializingState",1,["mlx_ethernet::initialization_segment::InitializingState"]],["impl Freeze for CommandTransportType",1,["mlx_ethernet::command_queue::CommandTransportType"]],["impl Freeze for CommandQueueError",1,["mlx_ethernet::command_queue::CommandQueueError"]],["impl Freeze for CommandDeliveryStatus",1,["mlx_ethernet::command_queue::CommandDeliveryStatus"]],["impl Freeze for CommandOpcode",1,["mlx_ethernet::command_queue::CommandOpcode"]],["impl Freeze for CommandReturnStatus",1,["mlx_ethernet::command_queue::CommandReturnStatus"]],["impl Freeze for ManagePagesOpMod",1,["mlx_ethernet::command_queue::ManagePagesOpMod"]],["impl Freeze for QueryPagesOpMod",1,["mlx_ethernet::command_queue::QueryPagesOpMod"]],["impl Freeze for QueryVportStateOpMod",1,["mlx_ethernet::command_queue::QueryVportStateOpMod"]],["impl Freeze for QueryHcaCapMaxOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapMaxOpMod"]],["impl Freeze for QueryHcaCapCurrentOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapCurrentOpMod"]],["impl Freeze for AccessRegisterOpMod",1,["mlx_ethernet::command_queue::AccessRegisterOpMod"]],["impl Freeze for HcaPortType",1,["mlx_ethernet::command_queue::HcaPortType"]],["impl Freeze for CmdState",1,["mlx_ethernet::command_queue::CmdState"]],["impl<const S: CmdState> Freeze for Command<S>",1,["mlx_ethernet::command_queue::Command"]],["impl Freeze for CommandCompletionStatus",1,["mlx_ethernet::command_queue::CommandCompletionStatus"]],["impl Freeze for CommandBuilder",1,["mlx_ethernet::command_queue::CommandBuilder"]],["impl Freeze for CommandQueue",1,["mlx_ethernet::command_queue::CommandQueue"]],["impl Freeze for CommandQueueEntry",1,["mlx_ethernet::command_queue::CommandQueueEntry"]],["impl Freeze for HCACapabilities",1,["mlx_ethernet::command_queue::HCACapabilities"]],["impl Freeze for EventQueueEntry",1,["mlx_ethernet::event_queue::EventQueueEntry"]],["impl Freeze for EventQueue",1,["mlx_ethernet::event_queue::EventQueue"]],["impl Freeze for CompletionQueueEntry",1,["mlx_ethernet::completion_queue::CompletionQueueEntry"]],["impl Freeze for CompletionQueueDoorbellRecord",1,["mlx_ethernet::completion_queue::CompletionQueueDoorbellRecord"]],["impl Freeze for CompletionQueue",1,["mlx_ethernet::completion_queue::CompletionQueue"]],["impl Freeze for SendQueueState",1,["mlx_ethernet::send_queue::SendQueueState"]],["impl Freeze for SendQueue",1,["mlx_ethernet::send_queue::SendQueue"]],["impl Freeze for ReceiveQueueState",1,["mlx_ethernet::receive_queue::ReceiveQueueState"]],["impl Freeze for ReceiveQueue",1,["mlx_ethernet::receive_queue::ReceiveQueue"]],["impl Freeze for DoorbellRecord",1,["mlx_ethernet::work_queue::DoorbellRecord"]],["impl Freeze for WorkQueueEntrySend",1,["mlx_ethernet::work_queue::WorkQueueEntrySend"]],["impl Freeze for WorkQueueEntryReceive",1,["mlx_ethernet::work_queue::WorkQueueEntryReceive"]],["impl Freeze for Rqn",1,["mlx_ethernet::Rqn"]],["impl Freeze for Sqn",1,["mlx_ethernet::Sqn"]],["impl Freeze for Cqn",1,["mlx_ethernet::Cqn"]],["impl Freeze for Pd",1,["mlx_ethernet::Pd"]],["impl Freeze for Td",1,["mlx_ethernet::Td"]],["impl Freeze for Lkey",1,["mlx_ethernet::Lkey"]],["impl Freeze for Eqn",1,["mlx_ethernet::Eqn"]],["impl Freeze for Tirn",1,["mlx_ethernet::Tirn"]],["impl Freeze for Tisn",1,["mlx_ethernet::Tisn"]],["impl Freeze for FtId",1,["mlx_ethernet::FtId"]],["impl Freeze for FgId",1,["mlx_ethernet::FgId"]]], @@ -77,7 +77,7 @@ "owned_borrowed_trait":[["impl<T> Freeze for Owned<T>where\n T: Freeze,",1,["owned_borrowed_trait::Owned"]],["impl<'t, T> Freeze for Borrowed<'t, T>",1,["owned_borrowed_trait::Borrowed"]]], "page_allocator":[["impl Freeze for AllocatedPages",1,["page_allocator::AllocatedPages"]],["impl<'list> Freeze for DeferredAllocAction<'list>",1,["page_allocator::DeferredAllocAction"]],["impl Freeze for AllocationError",1,["page_allocator::AllocationError"]],["impl<'r> Freeze for AllocationRequest<'r>",1,["page_allocator::AllocationRequest"]]], "page_attribute_table":[["impl Freeze for PageAttributeTable",1,["page_attribute_table::PageAttributeTable"]],["impl Freeze for MemoryCachingType",1,["page_attribute_table::MemoryCachingType"]],["impl Freeze for PatNotSupported",1,["page_attribute_table::PatNotSupported"]]], -"page_table_entry":[["impl Freeze for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Freeze for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Freeze for UnmappedFrames",1,["page_table_entry::UnmappedFrames"]]], +"page_table_entry":[["impl Freeze for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Freeze for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Freeze for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Freeze for Path",1,["path::Path"]],["impl Freeze for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Freeze for PciCapability",1,["pci::PciCapability"]],["impl Freeze for InterruptPin",1,["pci::InterruptPin"]],["impl Freeze for PciBus",1,["pci::PciBus"]],["impl Freeze for PciLocation",1,["pci::PciLocation"]],["impl Freeze for PciDevice",1,["pci::PciDevice"]],["impl Freeze for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Freeze for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Freeze for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], "per_cpu":[["impl Freeze for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Freeze for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], diff --git a/doc/implementors/core/marker/trait.Send.js b/doc/implementors/core/marker/trait.Send.js index 1f29313b20..fed3989220 100644 --- a/doc/implementors/core/marker/trait.Send.js +++ b/doc/implementors/core/marker/trait.Send.js @@ -36,7 +36,7 @@ "fadt":[["impl Send for Fadt",1,["fadt::Fadt"]]], "fault_crate_swap":[["impl Send for SwapRanges",1,["fault_crate_swap::SwapRanges"]]], "fault_log":[["impl Send for FaultType",1,["fault_log::FaultType"]],["impl Send for RecoveryAction",1,["fault_log::RecoveryAction"]],["impl Send for FaultEntry",1,["fault_log::FaultEntry"]]], -"frame_allocator":[["impl Send for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Send for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl Send for AllocatedFrames",1,["frame_allocator::AllocatedFrames"]],["impl<'f> Send for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Send for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<'list> Send for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], +"frame_allocator":[["impl Send for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Send for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl<const S: MemoryState> Send for Frames<S>",1,["frame_allocator::Frames"]],["impl<'f> Send for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Send for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<const S: MemoryState> Send for SplitFrames<S>",1,["frame_allocator::SplitFrames"]],["impl<'list> Send for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], "framebuffer":[["impl Send for RGBPixel",1,["framebuffer::pixel::RGBPixel"]],["impl Send for AlphaPixel",1,["framebuffer::pixel::AlphaPixel"]],["impl<P> Send for Framebuffer<P>where\n P: Send,",1,["framebuffer::Framebuffer"]]], "framebuffer_compositor":[["impl Send for CacheBlock",1,["framebuffer_compositor::CacheBlock"]],["impl Send for FrameCompositor",1,["framebuffer_compositor::FrameCompositor"]]], "fs_node":[["impl Send for FileOrDir",1,["fs_node::FileOrDir"]]], @@ -61,7 +61,7 @@ "memfs":[["impl Send for MemFile",1,["memfs::MemFile"]]], "memory":[["impl Send for Mapper",1,["memory::paging::mapper::Mapper"]],["impl Send for MappedPages",1,["memory::paging::mapper::MappedPages"]],["impl<T, M, B> Send for BorrowedMappedPages<T, M, B>where\n B: Send,\n M: Send,\n T: Send,",1,["memory::paging::mapper::BorrowedMappedPages"]],["impl<T, M, B> Send for BorrowedSliceMappedPages<T, M, B>where\n B: Send,\n M: Send,\n T: Send,",1,["memory::paging::mapper::BorrowedSliceMappedPages"]],["impl Send for Mutable",1,["memory::paging::mapper::Mutable"]],["impl Send for Immutable",1,["memory::paging::mapper::Immutable"]],["impl Send for PageTable",1,["memory::paging::PageTable"]],["impl Send for MemoryManagementInfo",1,["memory::MemoryManagementInfo"]],["impl Send for InitialMemoryMappings",1,["memory::InitialMemoryMappings"]],["impl Send for EarlyIdentityMappedPages",1,["memory::EarlyIdentityMappedPages"]]], "memory_aarch64":[["impl Send for MmuConfig",1,["memory_aarch64::MmuConfig"]],["impl Send for SectionMemoryBounds",1,["memory_aarch64::SectionMemoryBounds"]],["impl Send for AggregatedSectionMemoryBounds",1,["memory_aarch64::AggregatedSectionMemoryBounds"]]], -"memory_structs":[["impl Send for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Send for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Send for Page",1,["memory_structs::Page"]],["impl Send for Frame",1,["memory_structs::Frame"]],["impl Send for PageRange",1,["memory_structs::PageRange"]],["impl Send for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Send for FrameRange",1,["memory_structs::FrameRange"]],["impl Send for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], +"memory_structs":[["impl Send for MemoryState",1,["memory_structs::MemoryState"]],["impl Send for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Send for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Send for Page",1,["memory_structs::Page"]],["impl Send for Frame",1,["memory_structs::Frame"]],["impl Send for PageRange",1,["memory_structs::PageRange"]],["impl Send for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Send for FrameRange",1,["memory_structs::FrameRange"]],["impl Send for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], "memory_x86_64":[["impl Send for SectionMemoryBounds",1,["memory_x86_64::SectionMemoryBounds"]],["impl Send for AggregatedSectionMemoryBounds",1,["memory_x86_64::AggregatedSectionMemoryBounds"]]], "mlx5":[["impl Send for ConnectX5Nic",1,["mlx5::ConnectX5Nic"]]], "mlx_ethernet":[["impl Send for InitializationSegment",1,["mlx_ethernet::initialization_segment::InitializationSegment"]],["impl Send for InitializingState",1,["mlx_ethernet::initialization_segment::InitializingState"]],["impl Send for CommandTransportType",1,["mlx_ethernet::command_queue::CommandTransportType"]],["impl Send for CommandQueueError",1,["mlx_ethernet::command_queue::CommandQueueError"]],["impl Send for CommandDeliveryStatus",1,["mlx_ethernet::command_queue::CommandDeliveryStatus"]],["impl Send for CommandOpcode",1,["mlx_ethernet::command_queue::CommandOpcode"]],["impl Send for CommandReturnStatus",1,["mlx_ethernet::command_queue::CommandReturnStatus"]],["impl Send for ManagePagesOpMod",1,["mlx_ethernet::command_queue::ManagePagesOpMod"]],["impl Send for QueryPagesOpMod",1,["mlx_ethernet::command_queue::QueryPagesOpMod"]],["impl Send for QueryVportStateOpMod",1,["mlx_ethernet::command_queue::QueryVportStateOpMod"]],["impl Send for QueryHcaCapMaxOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapMaxOpMod"]],["impl Send for QueryHcaCapCurrentOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapCurrentOpMod"]],["impl Send for AccessRegisterOpMod",1,["mlx_ethernet::command_queue::AccessRegisterOpMod"]],["impl Send for HcaPortType",1,["mlx_ethernet::command_queue::HcaPortType"]],["impl Send for CmdState",1,["mlx_ethernet::command_queue::CmdState"]],["impl<const S: CmdState> Send for Command<S>",1,["mlx_ethernet::command_queue::Command"]],["impl Send for CommandCompletionStatus",1,["mlx_ethernet::command_queue::CommandCompletionStatus"]],["impl Send for CommandBuilder",1,["mlx_ethernet::command_queue::CommandBuilder"]],["impl Send for CommandQueue",1,["mlx_ethernet::command_queue::CommandQueue"]],["impl Send for CommandQueueEntry",1,["mlx_ethernet::command_queue::CommandQueueEntry"]],["impl Send for HCACapabilities",1,["mlx_ethernet::command_queue::HCACapabilities"]],["impl Send for EventQueueEntry",1,["mlx_ethernet::event_queue::EventQueueEntry"]],["impl Send for EventQueue",1,["mlx_ethernet::event_queue::EventQueue"]],["impl Send for CompletionQueueEntry",1,["mlx_ethernet::completion_queue::CompletionQueueEntry"]],["impl Send for CompletionQueueDoorbellRecord",1,["mlx_ethernet::completion_queue::CompletionQueueDoorbellRecord"]],["impl Send for CompletionQueue",1,["mlx_ethernet::completion_queue::CompletionQueue"]],["impl Send for SendQueueState",1,["mlx_ethernet::send_queue::SendQueueState"]],["impl Send for SendQueue",1,["mlx_ethernet::send_queue::SendQueue"]],["impl Send for ReceiveQueueState",1,["mlx_ethernet::receive_queue::ReceiveQueueState"]],["impl Send for ReceiveQueue",1,["mlx_ethernet::receive_queue::ReceiveQueue"]],["impl Send for DoorbellRecord",1,["mlx_ethernet::work_queue::DoorbellRecord"]],["impl Send for WorkQueueEntrySend",1,["mlx_ethernet::work_queue::WorkQueueEntrySend"]],["impl Send for WorkQueueEntryReceive",1,["mlx_ethernet::work_queue::WorkQueueEntryReceive"]],["impl Send for Rqn",1,["mlx_ethernet::Rqn"]],["impl Send for Sqn",1,["mlx_ethernet::Sqn"]],["impl Send for Cqn",1,["mlx_ethernet::Cqn"]],["impl Send for Pd",1,["mlx_ethernet::Pd"]],["impl Send for Td",1,["mlx_ethernet::Td"]],["impl Send for Lkey",1,["mlx_ethernet::Lkey"]],["impl Send for Eqn",1,["mlx_ethernet::Eqn"]],["impl Send for Tirn",1,["mlx_ethernet::Tirn"]],["impl Send for Tisn",1,["mlx_ethernet::Tisn"]],["impl Send for FtId",1,["mlx_ethernet::FtId"]],["impl Send for FgId",1,["mlx_ethernet::FgId"]]], @@ -77,7 +77,7 @@ "owned_borrowed_trait":[["impl<T> Send for Owned<T>where\n T: Send,",1,["owned_borrowed_trait::Owned"]],["impl<'t, T> Send for Borrowed<'t, T>where\n T: Sync,",1,["owned_borrowed_trait::Borrowed"]]], "page_allocator":[["impl Send for AllocatedPages",1,["page_allocator::AllocatedPages"]],["impl<'list> Send for DeferredAllocAction<'list>",1,["page_allocator::DeferredAllocAction"]],["impl Send for AllocationError",1,["page_allocator::AllocationError"]],["impl<'r> Send for AllocationRequest<'r>",1,["page_allocator::AllocationRequest"]]], "page_attribute_table":[["impl Send for PageAttributeTable",1,["page_attribute_table::PageAttributeTable"]],["impl Send for MemoryCachingType",1,["page_attribute_table::MemoryCachingType"]],["impl Send for PatNotSupported",1,["page_attribute_table::PatNotSupported"]]], -"page_table_entry":[["impl Send for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Send for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Send for UnmappedFrames",1,["page_table_entry::UnmappedFrames"]]], +"page_table_entry":[["impl Send for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Send for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Send for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Send for Path",1,["path::Path"]],["impl Send for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Send for PciCapability",1,["pci::PciCapability"]],["impl Send for InterruptPin",1,["pci::InterruptPin"]],["impl Send for PciBus",1,["pci::PciBus"]],["impl Send for PciLocation",1,["pci::PciLocation"]],["impl Send for PciDevice",1,["pci::PciDevice"]],["impl Send for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Send for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Send for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], "per_cpu":[["impl !Send for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Send for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], diff --git a/doc/implementors/core/marker/trait.StructuralEq.js b/doc/implementors/core/marker/trait.StructuralEq.js index a7d278fd22..74cd78cee0 100644 --- a/doc/implementors/core/marker/trait.StructuralEq.js +++ b/doc/implementors/core/marker/trait.StructuralEq.js @@ -6,10 +6,10 @@ "cpu_local":[["impl StructuralEq for PerCpuField"]], "crate_metadata":[["impl StructuralEq for RelocationEntry"]], "crate_swap":[["impl StructuralEq for SwapRequest"]], -"frame_allocator":[["impl StructuralEq for MemoryRegionType"]], +"frame_allocator":[["impl StructuralEq for PhysicalMemoryRegion"],["impl StructuralEq for MemoryRegionType"],["impl<const S: MemoryState> StructuralEq for Frames<S>"]], "interrupts":[["impl StructuralEq for EoiBehaviour"]], "keycodes_ascii":[["impl StructuralEq for KeyboardModifiers"]], -"memory_structs":[["impl StructuralEq for Frame"],["impl StructuralEq for PhysicalAddress"],["impl StructuralEq for Page"],["impl StructuralEq for FrameRange"],["impl StructuralEq for VirtualAddress"],["impl StructuralEq for PageRange"]], +"memory_structs":[["impl StructuralEq for Frame"],["impl StructuralEq for PhysicalAddress"],["impl StructuralEq for PageRange"],["impl StructuralEq for MemoryState"],["impl StructuralEq for FrameRange"],["impl StructuralEq for VirtualAddress"],["impl StructuralEq for Page"]], "mlx_ethernet":[["impl StructuralEq for CmdState"]], "path":[["impl StructuralEq for Path"]], "pci":[["impl StructuralEq for PciLocation"]], diff --git a/doc/implementors/core/marker/trait.StructuralPartialEq.js b/doc/implementors/core/marker/trait.StructuralPartialEq.js index 4e51493ebf..821befa184 100644 --- a/doc/implementors/core/marker/trait.StructuralPartialEq.js +++ b/doc/implementors/core/marker/trait.StructuralPartialEq.js @@ -13,7 +13,7 @@ "interrupts":[["impl StructuralPartialEq for EoiBehaviour"]], "ixgbe":[["impl StructuralPartialEq for LinkSpeedMbps"]], "keycodes_ascii":[["impl StructuralPartialEq for KeyAction"],["impl StructuralPartialEq for KeyboardModifiers"],["impl StructuralPartialEq for Keycode"]], -"memory_structs":[["impl StructuralPartialEq for Page"],["impl StructuralPartialEq for Frame"],["impl StructuralPartialEq for VirtualAddress"],["impl StructuralPartialEq for PhysicalAddress"],["impl StructuralPartialEq for FrameRange"],["impl StructuralPartialEq for PageRange"]], +"memory_structs":[["impl StructuralPartialEq for MemoryState"],["impl StructuralPartialEq for PageRange"],["impl StructuralPartialEq for PhysicalAddress"],["impl StructuralPartialEq for Page"],["impl StructuralPartialEq for FrameRange"],["impl StructuralPartialEq for VirtualAddress"],["impl StructuralPartialEq for Frame"]], "mlx_ethernet":[["impl StructuralPartialEq for CmdState"],["impl StructuralPartialEq for CommandOpcode"]], "path":[["impl StructuralPartialEq for Path"]], "pci":[["impl StructuralPartialEq for PciLocation"]], diff --git a/doc/implementors/core/marker/trait.Sync.js b/doc/implementors/core/marker/trait.Sync.js index 068036dc9f..5532bbb9f4 100644 --- a/doc/implementors/core/marker/trait.Sync.js +++ b/doc/implementors/core/marker/trait.Sync.js @@ -36,7 +36,7 @@ "fadt":[["impl Sync for Fadt",1,["fadt::Fadt"]]], "fault_crate_swap":[["impl Sync for SwapRanges",1,["fault_crate_swap::SwapRanges"]]], "fault_log":[["impl Sync for FaultType",1,["fault_log::FaultType"]],["impl Sync for RecoveryAction",1,["fault_log::RecoveryAction"]],["impl Sync for FaultEntry",1,["fault_log::FaultEntry"]]], -"frame_allocator":[["impl Sync for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Sync for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl Sync for AllocatedFrames",1,["frame_allocator::AllocatedFrames"]],["impl<'f> Sync for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Sync for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<'list> Sync for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], +"frame_allocator":[["impl Sync for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Sync for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl<const S: MemoryState> Sync for Frames<S>",1,["frame_allocator::Frames"]],["impl<'f> Sync for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Sync for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<const S: MemoryState> Sync for SplitFrames<S>",1,["frame_allocator::SplitFrames"]],["impl<'list> Sync for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], "framebuffer":[["impl Sync for RGBPixel",1,["framebuffer::pixel::RGBPixel"]],["impl Sync for AlphaPixel",1,["framebuffer::pixel::AlphaPixel"]],["impl<P> Sync for Framebuffer<P>where\n P: Sync,",1,["framebuffer::Framebuffer"]]], "framebuffer_compositor":[["impl Sync for CacheBlock",1,["framebuffer_compositor::CacheBlock"]],["impl Sync for FrameCompositor",1,["framebuffer_compositor::FrameCompositor"]]], "fs_node":[["impl Sync for FileOrDir",1,["fs_node::FileOrDir"]]], @@ -61,7 +61,7 @@ "memfs":[["impl Sync for MemFile",1,["memfs::MemFile"]]], "memory":[["impl Sync for Mapper",1,["memory::paging::mapper::Mapper"]],["impl Sync for MappedPages",1,["memory::paging::mapper::MappedPages"]],["impl<T, M, B> Sync for BorrowedMappedPages<T, M, B>where\n B: Sync,\n M: Sync,\n T: Sync,",1,["memory::paging::mapper::BorrowedMappedPages"]],["impl<T, M, B> Sync for BorrowedSliceMappedPages<T, M, B>where\n B: Sync,\n M: Sync,\n T: Sync,",1,["memory::paging::mapper::BorrowedSliceMappedPages"]],["impl Sync for Mutable",1,["memory::paging::mapper::Mutable"]],["impl Sync for Immutable",1,["memory::paging::mapper::Immutable"]],["impl Sync for PageTable",1,["memory::paging::PageTable"]],["impl Sync for MemoryManagementInfo",1,["memory::MemoryManagementInfo"]],["impl Sync for InitialMemoryMappings",1,["memory::InitialMemoryMappings"]],["impl Sync for EarlyIdentityMappedPages",1,["memory::EarlyIdentityMappedPages"]]], "memory_aarch64":[["impl Sync for MmuConfig",1,["memory_aarch64::MmuConfig"]],["impl Sync for SectionMemoryBounds",1,["memory_aarch64::SectionMemoryBounds"]],["impl Sync for AggregatedSectionMemoryBounds",1,["memory_aarch64::AggregatedSectionMemoryBounds"]]], -"memory_structs":[["impl Sync for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Sync for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Sync for Page",1,["memory_structs::Page"]],["impl Sync for Frame",1,["memory_structs::Frame"]],["impl Sync for PageRange",1,["memory_structs::PageRange"]],["impl Sync for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Sync for FrameRange",1,["memory_structs::FrameRange"]],["impl Sync for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], +"memory_structs":[["impl Sync for MemoryState",1,["memory_structs::MemoryState"]],["impl Sync for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Sync for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Sync for Page",1,["memory_structs::Page"]],["impl Sync for Frame",1,["memory_structs::Frame"]],["impl Sync for PageRange",1,["memory_structs::PageRange"]],["impl Sync for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Sync for FrameRange",1,["memory_structs::FrameRange"]],["impl Sync for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], "memory_x86_64":[["impl Sync for SectionMemoryBounds",1,["memory_x86_64::SectionMemoryBounds"]],["impl Sync for AggregatedSectionMemoryBounds",1,["memory_x86_64::AggregatedSectionMemoryBounds"]]], "mlx5":[["impl Sync for ConnectX5Nic",1,["mlx5::ConnectX5Nic"]]], "mlx_ethernet":[["impl Sync for InitializationSegment",1,["mlx_ethernet::initialization_segment::InitializationSegment"]],["impl Sync for InitializingState",1,["mlx_ethernet::initialization_segment::InitializingState"]],["impl Sync for CommandTransportType",1,["mlx_ethernet::command_queue::CommandTransportType"]],["impl Sync for CommandQueueError",1,["mlx_ethernet::command_queue::CommandQueueError"]],["impl Sync for CommandDeliveryStatus",1,["mlx_ethernet::command_queue::CommandDeliveryStatus"]],["impl Sync for CommandOpcode",1,["mlx_ethernet::command_queue::CommandOpcode"]],["impl Sync for CommandReturnStatus",1,["mlx_ethernet::command_queue::CommandReturnStatus"]],["impl Sync for ManagePagesOpMod",1,["mlx_ethernet::command_queue::ManagePagesOpMod"]],["impl Sync for QueryPagesOpMod",1,["mlx_ethernet::command_queue::QueryPagesOpMod"]],["impl Sync for QueryVportStateOpMod",1,["mlx_ethernet::command_queue::QueryVportStateOpMod"]],["impl Sync for QueryHcaCapMaxOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapMaxOpMod"]],["impl Sync for QueryHcaCapCurrentOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapCurrentOpMod"]],["impl Sync for AccessRegisterOpMod",1,["mlx_ethernet::command_queue::AccessRegisterOpMod"]],["impl Sync for HcaPortType",1,["mlx_ethernet::command_queue::HcaPortType"]],["impl Sync for CmdState",1,["mlx_ethernet::command_queue::CmdState"]],["impl<const S: CmdState> Sync for Command<S>",1,["mlx_ethernet::command_queue::Command"]],["impl Sync for CommandCompletionStatus",1,["mlx_ethernet::command_queue::CommandCompletionStatus"]],["impl Sync for CommandBuilder",1,["mlx_ethernet::command_queue::CommandBuilder"]],["impl Sync for CommandQueue",1,["mlx_ethernet::command_queue::CommandQueue"]],["impl Sync for CommandQueueEntry",1,["mlx_ethernet::command_queue::CommandQueueEntry"]],["impl Sync for HCACapabilities",1,["mlx_ethernet::command_queue::HCACapabilities"]],["impl Sync for EventQueueEntry",1,["mlx_ethernet::event_queue::EventQueueEntry"]],["impl Sync for EventQueue",1,["mlx_ethernet::event_queue::EventQueue"]],["impl Sync for CompletionQueueEntry",1,["mlx_ethernet::completion_queue::CompletionQueueEntry"]],["impl Sync for CompletionQueueDoorbellRecord",1,["mlx_ethernet::completion_queue::CompletionQueueDoorbellRecord"]],["impl Sync for CompletionQueue",1,["mlx_ethernet::completion_queue::CompletionQueue"]],["impl Sync for SendQueueState",1,["mlx_ethernet::send_queue::SendQueueState"]],["impl Sync for SendQueue",1,["mlx_ethernet::send_queue::SendQueue"]],["impl Sync for ReceiveQueueState",1,["mlx_ethernet::receive_queue::ReceiveQueueState"]],["impl Sync for ReceiveQueue",1,["mlx_ethernet::receive_queue::ReceiveQueue"]],["impl Sync for DoorbellRecord",1,["mlx_ethernet::work_queue::DoorbellRecord"]],["impl Sync for WorkQueueEntrySend",1,["mlx_ethernet::work_queue::WorkQueueEntrySend"]],["impl Sync for WorkQueueEntryReceive",1,["mlx_ethernet::work_queue::WorkQueueEntryReceive"]],["impl Sync for Rqn",1,["mlx_ethernet::Rqn"]],["impl Sync for Sqn",1,["mlx_ethernet::Sqn"]],["impl Sync for Cqn",1,["mlx_ethernet::Cqn"]],["impl Sync for Pd",1,["mlx_ethernet::Pd"]],["impl Sync for Td",1,["mlx_ethernet::Td"]],["impl Sync for Lkey",1,["mlx_ethernet::Lkey"]],["impl Sync for Eqn",1,["mlx_ethernet::Eqn"]],["impl Sync for Tirn",1,["mlx_ethernet::Tirn"]],["impl Sync for Tisn",1,["mlx_ethernet::Tisn"]],["impl Sync for FtId",1,["mlx_ethernet::FtId"]],["impl Sync for FgId",1,["mlx_ethernet::FgId"]]], @@ -77,7 +77,7 @@ "owned_borrowed_trait":[["impl<T> Sync for Owned<T>where\n T: Sync,",1,["owned_borrowed_trait::Owned"]],["impl<'t, T> Sync for Borrowed<'t, T>where\n T: Sync,",1,["owned_borrowed_trait::Borrowed"]]], "page_allocator":[["impl Sync for AllocatedPages",1,["page_allocator::AllocatedPages"]],["impl<'list> Sync for DeferredAllocAction<'list>",1,["page_allocator::DeferredAllocAction"]],["impl Sync for AllocationError",1,["page_allocator::AllocationError"]],["impl<'r> Sync for AllocationRequest<'r>",1,["page_allocator::AllocationRequest"]]], "page_attribute_table":[["impl Sync for PageAttributeTable",1,["page_attribute_table::PageAttributeTable"]],["impl Sync for MemoryCachingType",1,["page_attribute_table::MemoryCachingType"]],["impl Sync for PatNotSupported",1,["page_attribute_table::PatNotSupported"]]], -"page_table_entry":[["impl Sync for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Sync for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Sync for UnmappedFrames",1,["page_table_entry::UnmappedFrames"]]], +"page_table_entry":[["impl Sync for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Sync for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Sync for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Sync for Path",1,["path::Path"]],["impl Sync for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Sync for PciCapability",1,["pci::PciCapability"]],["impl Sync for InterruptPin",1,["pci::InterruptPin"]],["impl Sync for PciBus",1,["pci::PciBus"]],["impl Sync for PciLocation",1,["pci::PciLocation"]],["impl Sync for PciDevice",1,["pci::PciDevice"]],["impl Sync for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Sync for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Sync for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], "per_cpu":[["impl Sync for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Sync for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], diff --git a/doc/implementors/core/marker/trait.Unpin.js b/doc/implementors/core/marker/trait.Unpin.js index 78d27fc093..ab1eba9363 100644 --- a/doc/implementors/core/marker/trait.Unpin.js +++ b/doc/implementors/core/marker/trait.Unpin.js @@ -36,7 +36,7 @@ "fadt":[["impl Unpin for Fadt",1,["fadt::Fadt"]]], "fault_crate_swap":[["impl Unpin for SwapRanges",1,["fault_crate_swap::SwapRanges"]]], "fault_log":[["impl Unpin for FaultType",1,["fault_log::FaultType"]],["impl Unpin for RecoveryAction",1,["fault_log::RecoveryAction"]],["impl Unpin for FaultEntry",1,["fault_log::FaultEntry"]]], -"frame_allocator":[["impl Unpin for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Unpin for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl Unpin for AllocatedFrames",1,["frame_allocator::AllocatedFrames"]],["impl<'f> Unpin for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Unpin for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<'list> Unpin for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], +"frame_allocator":[["impl Unpin for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl Unpin for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl<const S: MemoryState> Unpin for Frames<S>",1,["frame_allocator::Frames"]],["impl<'f> Unpin for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> Unpin for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<const S: MemoryState> Unpin for SplitFrames<S>",1,["frame_allocator::SplitFrames"]],["impl<'list> Unpin for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], "framebuffer":[["impl Unpin for RGBPixel",1,["framebuffer::pixel::RGBPixel"]],["impl Unpin for AlphaPixel",1,["framebuffer::pixel::AlphaPixel"]],["impl<P> Unpin for Framebuffer<P>where\n P: Unpin,",1,["framebuffer::Framebuffer"]]], "framebuffer_compositor":[["impl Unpin for CacheBlock",1,["framebuffer_compositor::CacheBlock"]],["impl Unpin for FrameCompositor",1,["framebuffer_compositor::FrameCompositor"]]], "fs_node":[["impl Unpin for FileOrDir",1,["fs_node::FileOrDir"]]], @@ -61,7 +61,7 @@ "memfs":[["impl Unpin for MemFile",1,["memfs::MemFile"]]], "memory":[["impl Unpin for Mapper",1,["memory::paging::mapper::Mapper"]],["impl Unpin for MappedPages",1,["memory::paging::mapper::MappedPages"]],["impl<T, M, B> Unpin for BorrowedMappedPages<T, M, B>where\n B: Unpin,\n M: Unpin,\n T: Unpin,",1,["memory::paging::mapper::BorrowedMappedPages"]],["impl<T, M, B> Unpin for BorrowedSliceMappedPages<T, M, B>where\n B: Unpin,\n M: Unpin,\n T: Unpin,",1,["memory::paging::mapper::BorrowedSliceMappedPages"]],["impl Unpin for Mutable",1,["memory::paging::mapper::Mutable"]],["impl Unpin for Immutable",1,["memory::paging::mapper::Immutable"]],["impl Unpin for PageTable",1,["memory::paging::PageTable"]],["impl Unpin for MemoryManagementInfo",1,["memory::MemoryManagementInfo"]],["impl Unpin for InitialMemoryMappings",1,["memory::InitialMemoryMappings"]],["impl Unpin for EarlyIdentityMappedPages",1,["memory::EarlyIdentityMappedPages"]]], "memory_aarch64":[["impl Unpin for MmuConfig",1,["memory_aarch64::MmuConfig"]],["impl Unpin for SectionMemoryBounds",1,["memory_aarch64::SectionMemoryBounds"]],["impl Unpin for AggregatedSectionMemoryBounds",1,["memory_aarch64::AggregatedSectionMemoryBounds"]]], -"memory_structs":[["impl Unpin for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Unpin for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Unpin for Page",1,["memory_structs::Page"]],["impl Unpin for Frame",1,["memory_structs::Frame"]],["impl Unpin for PageRange",1,["memory_structs::PageRange"]],["impl Unpin for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Unpin for FrameRange",1,["memory_structs::FrameRange"]],["impl Unpin for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], +"memory_structs":[["impl Unpin for MemoryState",1,["memory_structs::MemoryState"]],["impl Unpin for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl Unpin for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl Unpin for Page",1,["memory_structs::Page"]],["impl Unpin for Frame",1,["memory_structs::Frame"]],["impl Unpin for PageRange",1,["memory_structs::PageRange"]],["impl Unpin for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl Unpin for FrameRange",1,["memory_structs::FrameRange"]],["impl Unpin for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], "memory_x86_64":[["impl Unpin for SectionMemoryBounds",1,["memory_x86_64::SectionMemoryBounds"]],["impl Unpin for AggregatedSectionMemoryBounds",1,["memory_x86_64::AggregatedSectionMemoryBounds"]]], "mlx5":[["impl Unpin for ConnectX5Nic",1,["mlx5::ConnectX5Nic"]]], "mlx_ethernet":[["impl Unpin for InitializationSegment",1,["mlx_ethernet::initialization_segment::InitializationSegment"]],["impl Unpin for InitializingState",1,["mlx_ethernet::initialization_segment::InitializingState"]],["impl Unpin for CommandTransportType",1,["mlx_ethernet::command_queue::CommandTransportType"]],["impl Unpin for CommandQueueError",1,["mlx_ethernet::command_queue::CommandQueueError"]],["impl Unpin for CommandDeliveryStatus",1,["mlx_ethernet::command_queue::CommandDeliveryStatus"]],["impl Unpin for CommandOpcode",1,["mlx_ethernet::command_queue::CommandOpcode"]],["impl Unpin for CommandReturnStatus",1,["mlx_ethernet::command_queue::CommandReturnStatus"]],["impl Unpin for ManagePagesOpMod",1,["mlx_ethernet::command_queue::ManagePagesOpMod"]],["impl Unpin for QueryPagesOpMod",1,["mlx_ethernet::command_queue::QueryPagesOpMod"]],["impl Unpin for QueryVportStateOpMod",1,["mlx_ethernet::command_queue::QueryVportStateOpMod"]],["impl Unpin for QueryHcaCapMaxOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapMaxOpMod"]],["impl Unpin for QueryHcaCapCurrentOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapCurrentOpMod"]],["impl Unpin for AccessRegisterOpMod",1,["mlx_ethernet::command_queue::AccessRegisterOpMod"]],["impl Unpin for HcaPortType",1,["mlx_ethernet::command_queue::HcaPortType"]],["impl Unpin for CmdState",1,["mlx_ethernet::command_queue::CmdState"]],["impl<const S: CmdState> Unpin for Command<S>",1,["mlx_ethernet::command_queue::Command"]],["impl Unpin for CommandCompletionStatus",1,["mlx_ethernet::command_queue::CommandCompletionStatus"]],["impl Unpin for CommandBuilder",1,["mlx_ethernet::command_queue::CommandBuilder"]],["impl Unpin for CommandQueue",1,["mlx_ethernet::command_queue::CommandQueue"]],["impl Unpin for CommandQueueEntry",1,["mlx_ethernet::command_queue::CommandQueueEntry"]],["impl Unpin for HCACapabilities",1,["mlx_ethernet::command_queue::HCACapabilities"]],["impl Unpin for EventQueueEntry",1,["mlx_ethernet::event_queue::EventQueueEntry"]],["impl Unpin for EventQueue",1,["mlx_ethernet::event_queue::EventQueue"]],["impl Unpin for CompletionQueueEntry",1,["mlx_ethernet::completion_queue::CompletionQueueEntry"]],["impl Unpin for CompletionQueueDoorbellRecord",1,["mlx_ethernet::completion_queue::CompletionQueueDoorbellRecord"]],["impl Unpin for CompletionQueue",1,["mlx_ethernet::completion_queue::CompletionQueue"]],["impl Unpin for SendQueueState",1,["mlx_ethernet::send_queue::SendQueueState"]],["impl Unpin for SendQueue",1,["mlx_ethernet::send_queue::SendQueue"]],["impl Unpin for ReceiveQueueState",1,["mlx_ethernet::receive_queue::ReceiveQueueState"]],["impl Unpin for ReceiveQueue",1,["mlx_ethernet::receive_queue::ReceiveQueue"]],["impl Unpin for DoorbellRecord",1,["mlx_ethernet::work_queue::DoorbellRecord"]],["impl Unpin for WorkQueueEntrySend",1,["mlx_ethernet::work_queue::WorkQueueEntrySend"]],["impl Unpin for WorkQueueEntryReceive",1,["mlx_ethernet::work_queue::WorkQueueEntryReceive"]],["impl Unpin for Rqn",1,["mlx_ethernet::Rqn"]],["impl Unpin for Sqn",1,["mlx_ethernet::Sqn"]],["impl Unpin for Cqn",1,["mlx_ethernet::Cqn"]],["impl Unpin for Pd",1,["mlx_ethernet::Pd"]],["impl Unpin for Td",1,["mlx_ethernet::Td"]],["impl Unpin for Lkey",1,["mlx_ethernet::Lkey"]],["impl Unpin for Eqn",1,["mlx_ethernet::Eqn"]],["impl Unpin for Tirn",1,["mlx_ethernet::Tirn"]],["impl Unpin for Tisn",1,["mlx_ethernet::Tisn"]],["impl Unpin for FtId",1,["mlx_ethernet::FtId"]],["impl Unpin for FgId",1,["mlx_ethernet::FgId"]]], @@ -77,7 +77,7 @@ "owned_borrowed_trait":[["impl<T> Unpin for Owned<T>where\n T: Unpin,",1,["owned_borrowed_trait::Owned"]],["impl<'t, T> Unpin for Borrowed<'t, T>",1,["owned_borrowed_trait::Borrowed"]]], "page_allocator":[["impl Unpin for AllocatedPages",1,["page_allocator::AllocatedPages"]],["impl<'list> Unpin for DeferredAllocAction<'list>",1,["page_allocator::DeferredAllocAction"]],["impl Unpin for AllocationError",1,["page_allocator::AllocationError"]],["impl<'r> Unpin for AllocationRequest<'r>",1,["page_allocator::AllocationRequest"]]], "page_attribute_table":[["impl Unpin for PageAttributeTable",1,["page_attribute_table::PageAttributeTable"]],["impl Unpin for MemoryCachingType",1,["page_attribute_table::MemoryCachingType"]],["impl Unpin for PatNotSupported",1,["page_attribute_table::PatNotSupported"]]], -"page_table_entry":[["impl Unpin for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Unpin for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Unpin for UnmappedFrames",1,["page_table_entry::UnmappedFrames"]]], +"page_table_entry":[["impl Unpin for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl Unpin for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl Unpin for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl Unpin for Path",1,["path::Path"]],["impl Unpin for PathComponent",1,["path::PathComponent"]]], "pci":[["impl Unpin for PciCapability",1,["pci::PciCapability"]],["impl Unpin for InterruptPin",1,["pci::InterruptPin"]],["impl Unpin for PciBus",1,["pci::PciBus"]],["impl Unpin for PciLocation",1,["pci::PciLocation"]],["impl Unpin for PciDevice",1,["pci::PciDevice"]],["impl Unpin for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl Unpin for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl Unpin for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], "per_cpu":[["impl Unpin for PerCpuData",1,["per_cpu::PerCpuData"]],["impl Unpin for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], diff --git a/doc/implementors/core/ops/arith/trait.Add.js b/doc/implementors/core/ops/arith/trait.Add.js index 376db4b0ac..e02e3141ac 100644 --- a/doc/implementors/core/ops/arith/trait.Add.js +++ b/doc/implementors/core/ops/arith/trait.Add.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"memory_structs":[["impl Add<usize> for Frame"],["impl Add<usize> for PhysicalAddress"],["impl Add<VirtualAddress> for VirtualAddress"],["impl Add<usize> for VirtualAddress"],["impl Add<PhysicalAddress> for PhysicalAddress"],["impl Add<usize> for Page"]], +"memory_structs":[["impl Add<usize> for Frame"],["impl Add<PhysicalAddress> for PhysicalAddress"],["impl Add<VirtualAddress> for VirtualAddress"],["impl Add<usize> for Page"],["impl Add<usize> for PhysicalAddress"],["impl Add<usize> for VirtualAddress"]], "shapes":[["impl Add<Coord> for Coord"],["impl Add<(isize, isize)> for Coord"],["impl Add<Coord> for Rectangle"]], "text_terminal":[["impl Add<ScreenPoint> for ScreenPoint"],["impl Add<Column> for Column"],["impl Add<Row> for Row"],["impl Add<UnitIndex> for UnitIndex"],["impl Add<LineIndex> for LineIndex"],["impl Add<ScrollbackBufferPoint> for ScrollbackBufferPoint"]], "time":[["impl Add<Duration> for Instant"]] diff --git a/doc/implementors/core/ops/arith/trait.AddAssign.js b/doc/implementors/core/ops/arith/trait.AddAssign.js index 509c683700..cc6a718cbb 100644 --- a/doc/implementors/core/ops/arith/trait.AddAssign.js +++ b/doc/implementors/core/ops/arith/trait.AddAssign.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"memory_structs":[["impl AddAssign<usize> for PhysicalAddress"],["impl AddAssign<PhysicalAddress> for PhysicalAddress"],["impl AddAssign<usize> for Frame"],["impl AddAssign<usize> for VirtualAddress"],["impl AddAssign<VirtualAddress> for VirtualAddress"],["impl AddAssign<usize> for Page"]], +"memory_structs":[["impl AddAssign<VirtualAddress> for VirtualAddress"],["impl AddAssign<usize> for Page"],["impl AddAssign<usize> for PhysicalAddress"],["impl AddAssign<usize> for Frame"],["impl AddAssign<usize> for VirtualAddress"],["impl AddAssign<PhysicalAddress> for PhysicalAddress"]], "text_terminal":[["impl AddAssign<ScrollbackBufferPoint> for ScrollbackBufferPoint"],["impl AddAssign<Row> for Row"],["impl AddAssign<UnitIndex> for UnitIndex"],["impl AddAssign<ScreenPoint> for ScreenPoint"],["impl AddAssign<LineIndex> for LineIndex"],["impl AddAssign<Column> for Column"]], "time":[["impl AddAssign<Duration> for Instant"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/arith/trait.Sub.js b/doc/implementors/core/ops/arith/trait.Sub.js index d08ea177e6..341b2462f8 100644 --- a/doc/implementors/core/ops/arith/trait.Sub.js +++ b/doc/implementors/core/ops/arith/trait.Sub.js @@ -2,7 +2,7 @@ "ata":[["impl Sub<AtaStatus> for AtaStatus"],["impl Sub<AtaError> for AtaError"]], "boot_info":[["impl Sub<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl Sub<KeyboardModifiers> for KeyboardModifiers"]], -"memory_structs":[["impl Sub<usize> for VirtualAddress"],["impl Sub<VirtualAddress> for VirtualAddress"],["impl Sub<usize> for PhysicalAddress"],["impl Sub<usize> for Frame"],["impl Sub<PhysicalAddress> for PhysicalAddress"],["impl Sub<usize> for Page"]], +"memory_structs":[["impl Sub<usize> for Page"],["impl Sub<PhysicalAddress> for PhysicalAddress"],["impl Sub<usize> for Frame"],["impl Sub<usize> for VirtualAddress"],["impl Sub<usize> for PhysicalAddress"],["impl Sub<VirtualAddress> for VirtualAddress"]], "pte_flags":[["impl Sub<PteFlagsAarch64> for PteFlagsAarch64"],["impl Sub<PteFlagsX86_64> for PteFlagsX86_64"],["impl Sub<PteFlags> for PteFlags"]], "shapes":[["impl Sub<(isize, isize)> for Coord"],["impl Sub<Coord> for Coord"],["impl Sub<Coord> for Rectangle"]], "text_terminal":[["impl Sub<ScrollbackBufferPoint> for ScrollbackBufferPoint"],["impl Sub<UnitIndex> for UnitIndex"],["impl Sub<ScreenPoint> for ScreenPoint"],["impl Sub<FormatFlags> for FormatFlags"],["impl Sub<Row> for Row"],["impl Sub<LineIndex> for LineIndex"],["impl Sub<Column> for Column"]], diff --git a/doc/implementors/core/ops/arith/trait.SubAssign.js b/doc/implementors/core/ops/arith/trait.SubAssign.js index 07046506bd..6138630666 100644 --- a/doc/implementors/core/ops/arith/trait.SubAssign.js +++ b/doc/implementors/core/ops/arith/trait.SubAssign.js @@ -2,7 +2,7 @@ "ata":[["impl SubAssign<AtaStatus> for AtaStatus"],["impl SubAssign<AtaError> for AtaError"]], "boot_info":[["impl SubAssign<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl SubAssign<KeyboardModifiers> for KeyboardModifiers"]], -"memory_structs":[["impl SubAssign<usize> for Frame"],["impl SubAssign<usize> for Page"],["impl SubAssign<PhysicalAddress> for PhysicalAddress"],["impl SubAssign<VirtualAddress> for VirtualAddress"],["impl SubAssign<usize> for PhysicalAddress"],["impl SubAssign<usize> for VirtualAddress"]], +"memory_structs":[["impl SubAssign<usize> for PhysicalAddress"],["impl SubAssign<VirtualAddress> for VirtualAddress"],["impl SubAssign<usize> for Frame"],["impl SubAssign<usize> for VirtualAddress"],["impl SubAssign<usize> for Page"],["impl SubAssign<PhysicalAddress> for PhysicalAddress"]], "pte_flags":[["impl SubAssign<PteFlagsX86_64> for PteFlagsX86_64"],["impl SubAssign<PteFlagsAarch64> for PteFlagsAarch64"],["impl SubAssign<PteFlags> for PteFlags"]], "text_terminal":[["impl SubAssign<Row> for Row"],["impl SubAssign<Column> for Column"],["impl SubAssign<LineIndex> for LineIndex"],["impl SubAssign<UnitIndex> for UnitIndex"],["impl SubAssign<ScrollbackBufferPoint> for ScrollbackBufferPoint"],["impl SubAssign<FormatFlags> for FormatFlags"],["impl SubAssign<ScreenPoint> for ScreenPoint"]], "time":[["impl SubAssign<Duration> for Instant"]] diff --git a/doc/implementors/core/ops/bit/trait.BitAnd.js b/doc/implementors/core/ops/bit/trait.BitAnd.js index 269ec1e3ec..9bd05ee38c 100644 --- a/doc/implementors/core/ops/bit/trait.BitAnd.js +++ b/doc/implementors/core/ops/bit/trait.BitAnd.js @@ -2,7 +2,7 @@ "ata":[["impl BitAnd<AtaError> for AtaError"],["impl BitAnd<AtaStatus> for AtaStatus"]], "boot_info":[["impl BitAnd<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitAnd<KeyboardModifiers> for KeyboardModifiers"]], -"memory_structs":[["impl BitAnd<VirtualAddress> for VirtualAddress"],["impl BitAnd<PhysicalAddress> for PhysicalAddress"]], +"memory_structs":[["impl BitAnd<PhysicalAddress> for PhysicalAddress"],["impl BitAnd<VirtualAddress> for VirtualAddress"]], "pte_flags":[["impl BitAnd<PteFlags> for PteFlags"],["impl BitAnd<PteFlagsX86_64> for PteFlagsX86_64"],["impl BitAnd<PteFlagsAarch64> for PteFlagsAarch64"]], "text_terminal":[["impl BitAnd<FormatFlags> for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitAndAssign.js b/doc/implementors/core/ops/bit/trait.BitAndAssign.js index d78e06e179..2eec3773f2 100644 --- a/doc/implementors/core/ops/bit/trait.BitAndAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitAndAssign.js @@ -2,7 +2,7 @@ "ata":[["impl BitAndAssign<AtaStatus> for AtaStatus"],["impl BitAndAssign<AtaError> for AtaError"]], "boot_info":[["impl BitAndAssign<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitAndAssign<KeyboardModifiers> for KeyboardModifiers"]], -"memory_structs":[["impl BitAndAssign<VirtualAddress> for VirtualAddress"],["impl BitAndAssign<PhysicalAddress> for PhysicalAddress"]], +"memory_structs":[["impl BitAndAssign<PhysicalAddress> for PhysicalAddress"],["impl BitAndAssign<VirtualAddress> for VirtualAddress"]], "pte_flags":[["impl BitAndAssign<PteFlagsAarch64> for PteFlagsAarch64"],["impl BitAndAssign<PteFlags> for PteFlags"],["impl BitAndAssign<PteFlagsX86_64> for PteFlagsX86_64"]], "text_terminal":[["impl BitAndAssign<FormatFlags> for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitOr.js b/doc/implementors/core/ops/bit/trait.BitOr.js index ddd41bbfd8..89e9e1f719 100644 --- a/doc/implementors/core/ops/bit/trait.BitOr.js +++ b/doc/implementors/core/ops/bit/trait.BitOr.js @@ -2,7 +2,7 @@ "ata":[["impl BitOr<AtaError> for AtaError"],["impl BitOr<AtaStatus> for AtaStatus"]], "boot_info":[["impl BitOr<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitOr<KeyboardModifiers> for KeyboardModifiers"]], -"memory_structs":[["impl BitOr<PhysicalAddress> for PhysicalAddress"],["impl BitOr<VirtualAddress> for VirtualAddress"]], +"memory_structs":[["impl BitOr<VirtualAddress> for VirtualAddress"],["impl BitOr<PhysicalAddress> for PhysicalAddress"]], "pte_flags":[["impl BitOr<PteFlags> for PteFlags"],["impl BitOr<PteFlagsX86_64> for PteFlagsX86_64"],["impl BitOr<PteFlagsAarch64> for PteFlagsAarch64"]], "text_terminal":[["impl BitOr<FormatFlags> for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitOrAssign.js b/doc/implementors/core/ops/bit/trait.BitOrAssign.js index 4afbc77c85..9b996d76fc 100644 --- a/doc/implementors/core/ops/bit/trait.BitOrAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitOrAssign.js @@ -2,7 +2,7 @@ "ata":[["impl BitOrAssign<AtaStatus> for AtaStatus"],["impl BitOrAssign<AtaError> for AtaError"]], "boot_info":[["impl BitOrAssign<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitOrAssign<KeyboardModifiers> for KeyboardModifiers"]], -"memory_structs":[["impl BitOrAssign<VirtualAddress> for VirtualAddress"],["impl BitOrAssign<PhysicalAddress> for PhysicalAddress"]], +"memory_structs":[["impl BitOrAssign<PhysicalAddress> for PhysicalAddress"],["impl BitOrAssign<VirtualAddress> for VirtualAddress"]], "pte_flags":[["impl BitOrAssign<PteFlagsX86_64> for PteFlagsX86_64"],["impl BitOrAssign<PteFlags> for PteFlags"],["impl BitOrAssign<PteFlagsAarch64> for PteFlagsAarch64"]], "text_terminal":[["impl BitOrAssign<FormatFlags> for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitXorAssign.js b/doc/implementors/core/ops/bit/trait.BitXorAssign.js index bb38a4ae34..92dac8e057 100644 --- a/doc/implementors/core/ops/bit/trait.BitXorAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitXorAssign.js @@ -2,7 +2,7 @@ "ata":[["impl BitXorAssign<AtaError> for AtaError"],["impl BitXorAssign<AtaStatus> for AtaStatus"]], "boot_info":[["impl BitXorAssign<ElfSectionFlags> for ElfSectionFlags"]], "keycodes_ascii":[["impl BitXorAssign<KeyboardModifiers> for KeyboardModifiers"]], -"memory_structs":[["impl BitXorAssign<PhysicalAddress> for PhysicalAddress"],["impl BitXorAssign<VirtualAddress> for VirtualAddress"]], +"memory_structs":[["impl BitXorAssign<VirtualAddress> for VirtualAddress"],["impl BitXorAssign<PhysicalAddress> for PhysicalAddress"]], "pte_flags":[["impl BitXorAssign<PteFlags> for PteFlags"],["impl BitXorAssign<PteFlagsX86_64> for PteFlagsX86_64"],["impl BitXorAssign<PteFlagsAarch64> for PteFlagsAarch64"]], "text_terminal":[["impl BitXorAssign<FormatFlags> for FormatFlags"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/deref/trait.Deref.js b/doc/implementors/core/ops/deref/trait.Deref.js index 20588f07bb..a5319dbf9a 100644 --- a/doc/implementors/core/ops/deref/trait.Deref.js +++ b/doc/implementors/core/ops/deref/trait.Deref.js @@ -1,17 +1,17 @@ (function() {var implementors = { "dereffer":[["impl<Inner, Ref: ?Sized> Deref for DerefsToMut<Inner, Ref>"],["impl<Inner, Ref: ?Sized> Deref for DerefsTo<Inner, Ref>"]], "dfqueue":[["impl<T> Deref for PeekedData<T>"],["impl<T> Deref for QueuedData<T>"]], -"frame_allocator":[["impl<'f> Deref for AllocatedFrame<'f>"],["impl Deref for AllocatedFrames"],["impl Deref for PhysicalMemoryRegion"]], +"frame_allocator":[["impl<const S: MemoryState> Deref for Frames<S>"],["impl<'f> Deref for AllocatedFrame<'f>"],["impl Deref for PhysicalMemoryRegion"]], "io":[["impl<'io, IO, L, B> Deref for LockableIo<'io, IO, L, B>where\n IO: 'io + ?Sized,\n L: for<'a> Lockable<'a, IO> + ?Sized,\n B: Borrow<L>,"],["impl<IO> Deref for ReaderWriter<IO>"]], "irq_safety":[["impl<'a, T: ?Sized> Deref for MutexIrqSafeGuard<'a, T>"],["impl<'rwlock, T: ?Sized> Deref for RwLockIrqSafeReadGuard<'rwlock, T>"],["impl<'rwlock, T: ?Sized> Deref for RwLockIrqSafeWriteGuard<'rwlock, T>"]], "memory":[["impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedSliceMappedPages<T, M, B>"],["impl Deref for MappedPages"],["impl Deref for PageTable"],["impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedMappedPages<T, M, B>"]], -"memory_structs":[["impl Deref for FrameRange"],["impl Deref for PageRange"]], +"memory_structs":[["impl Deref for PageRange"],["impl Deref for FrameRange"]], "mod_mgmt":[["impl Deref for NamespaceDir"],["impl Deref for AppCrateRef"]], "net":[["impl<'a, T> Deref for LockedSocket<'a, T>where\n T: AnySocket<'static>,"]], "nic_buffers":[["impl Deref for TransmitBuffer"],["impl Deref for ReceiveBuffer"]], "no_drop":[["impl<T> Deref for NoDrop<T>"]], "owned_borrowed_trait":[["impl<'t, T> Deref for Borrowed<'t, T>"],["impl<T> Deref for Owned<T>"]], -"page_table_entry":[["impl Deref for UnmappedFrames"]], +"page_table_entry":[["impl Deref for UnmappedFrameRange"]], "path":[["impl Deref for Path"]], "pci":[["impl Deref for MsixVectorTable"],["impl Deref for PciDevice"]], "per_cpu":[["impl Deref for CpuLocalCpuId"]], diff --git a/doc/implementors/core/ops/deref/trait.DerefMut.js b/doc/implementors/core/ops/deref/trait.DerefMut.js index d0093ae9e9..0d2390b88c 100644 --- a/doc/implementors/core/ops/deref/trait.DerefMut.js +++ b/doc/implementors/core/ops/deref/trait.DerefMut.js @@ -3,7 +3,7 @@ "io":[["impl<IO> DerefMut for ReaderWriter<IO>"]], "irq_safety":[["impl<'rwlock, T: ?Sized> DerefMut for RwLockIrqSafeWriteGuard<'rwlock, T>"],["impl<'a, T: ?Sized> DerefMut for MutexIrqSafeGuard<'a, T>"]], "memory":[["impl<T: FromBytes, B: BorrowMut<MappedPages>> DerefMut for BorrowedMappedPages<T, Mutable, B>"],["impl DerefMut for PageTable"],["impl<T: FromBytes, B: BorrowMut<MappedPages>> DerefMut for BorrowedSliceMappedPages<T, Mutable, B>"]], -"memory_structs":[["impl DerefMut for PageRange"],["impl DerefMut for FrameRange"]], +"memory_structs":[["impl DerefMut for FrameRange"],["impl DerefMut for PageRange"]], "net":[["impl<'a, T> DerefMut for LockedSocket<'a, T>where\n T: AnySocket<'static>,"]], "nic_buffers":[["impl DerefMut for TransmitBuffer"],["impl DerefMut for ReceiveBuffer"]], "no_drop":[["impl<T> DerefMut for NoDrop<T>"]], diff --git a/doc/implementors/core/ops/drop/trait.Drop.js b/doc/implementors/core/ops/drop/trait.Drop.js index a14cbe2b95..e64d68ddaf 100644 --- a/doc/implementors/core/ops/drop/trait.Drop.js +++ b/doc/implementors/core/ops/drop/trait.Drop.js @@ -4,7 +4,7 @@ "atomic_linked_list":[["impl<K, V> Drop for AtomicMap<K, V>where\n K: PartialEq,"]], "crate_metadata":[["impl Drop for LoadedCrate"]], "dfqueue":[["impl<T> Drop for MpscQueue<T>"]], -"frame_allocator":[["impl<'list> Drop for DeferredAllocAction<'list>"],["impl Drop for AllocatedFrames"]], +"frame_allocator":[["impl<const S: MemoryState> Drop for Frames<S>"],["impl<'list> Drop for DeferredAllocAction<'list>"]], "irq_safety":[["impl Drop for HeldInterrupts"]], "memory":[["impl Drop for MappedPages"]], "mod_mgmt":[["impl Drop for AppCrateRef"]], diff --git a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 5a6cfe77e5..bdc4752c30 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -36,7 +36,7 @@ "fadt":[["impl RefUnwindSafe for Fadt",1,["fadt::Fadt"]]], "fault_crate_swap":[["impl RefUnwindSafe for SwapRanges",1,["fault_crate_swap::SwapRanges"]]], "fault_log":[["impl RefUnwindSafe for FaultType",1,["fault_log::FaultType"]],["impl RefUnwindSafe for RecoveryAction",1,["fault_log::RecoveryAction"]],["impl RefUnwindSafe for FaultEntry",1,["fault_log::FaultEntry"]]], -"frame_allocator":[["impl RefUnwindSafe for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl RefUnwindSafe for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl RefUnwindSafe for AllocatedFrames",1,["frame_allocator::AllocatedFrames"]],["impl<'f> RefUnwindSafe for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> RefUnwindSafe for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<'list> !RefUnwindSafe for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], +"frame_allocator":[["impl RefUnwindSafe for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl RefUnwindSafe for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl<const S: MemoryState> RefUnwindSafe for Frames<S>",1,["frame_allocator::Frames"]],["impl<'f> RefUnwindSafe for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> RefUnwindSafe for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<const S: MemoryState> RefUnwindSafe for SplitFrames<S>",1,["frame_allocator::SplitFrames"]],["impl<'list> !RefUnwindSafe for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], "framebuffer":[["impl RefUnwindSafe for RGBPixel",1,["framebuffer::pixel::RGBPixel"]],["impl RefUnwindSafe for AlphaPixel",1,["framebuffer::pixel::AlphaPixel"]],["impl<P> RefUnwindSafe for Framebuffer<P>where\n P: RefUnwindSafe,",1,["framebuffer::Framebuffer"]]], "framebuffer_compositor":[["impl RefUnwindSafe for CacheBlock",1,["framebuffer_compositor::CacheBlock"]],["impl RefUnwindSafe for FrameCompositor",1,["framebuffer_compositor::FrameCompositor"]]], "fs_node":[["impl !RefUnwindSafe for FileOrDir",1,["fs_node::FileOrDir"]]], @@ -61,7 +61,7 @@ "memfs":[["impl !RefUnwindSafe for MemFile",1,["memfs::MemFile"]]], "memory":[["impl RefUnwindSafe for Mapper",1,["memory::paging::mapper::Mapper"]],["impl RefUnwindSafe for MappedPages",1,["memory::paging::mapper::MappedPages"]],["impl<T, M, B> RefUnwindSafe for BorrowedMappedPages<T, M, B>where\n B: RefUnwindSafe,\n M: RefUnwindSafe,\n T: RefUnwindSafe,",1,["memory::paging::mapper::BorrowedMappedPages"]],["impl<T, M, B> RefUnwindSafe for BorrowedSliceMappedPages<T, M, B>where\n B: RefUnwindSafe,\n M: RefUnwindSafe,\n T: RefUnwindSafe,",1,["memory::paging::mapper::BorrowedSliceMappedPages"]],["impl RefUnwindSafe for Mutable",1,["memory::paging::mapper::Mutable"]],["impl RefUnwindSafe for Immutable",1,["memory::paging::mapper::Immutable"]],["impl RefUnwindSafe for PageTable",1,["memory::paging::PageTable"]],["impl RefUnwindSafe for MemoryManagementInfo",1,["memory::MemoryManagementInfo"]],["impl RefUnwindSafe for InitialMemoryMappings",1,["memory::InitialMemoryMappings"]],["impl RefUnwindSafe for EarlyIdentityMappedPages",1,["memory::EarlyIdentityMappedPages"]]], "memory_aarch64":[["impl RefUnwindSafe for MmuConfig",1,["memory_aarch64::MmuConfig"]],["impl RefUnwindSafe for SectionMemoryBounds",1,["memory_aarch64::SectionMemoryBounds"]],["impl RefUnwindSafe for AggregatedSectionMemoryBounds",1,["memory_aarch64::AggregatedSectionMemoryBounds"]]], -"memory_structs":[["impl RefUnwindSafe for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl RefUnwindSafe for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl RefUnwindSafe for Page",1,["memory_structs::Page"]],["impl RefUnwindSafe for Frame",1,["memory_structs::Frame"]],["impl RefUnwindSafe for PageRange",1,["memory_structs::PageRange"]],["impl RefUnwindSafe for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl RefUnwindSafe for FrameRange",1,["memory_structs::FrameRange"]],["impl RefUnwindSafe for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], +"memory_structs":[["impl RefUnwindSafe for MemoryState",1,["memory_structs::MemoryState"]],["impl RefUnwindSafe for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl RefUnwindSafe for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl RefUnwindSafe for Page",1,["memory_structs::Page"]],["impl RefUnwindSafe for Frame",1,["memory_structs::Frame"]],["impl RefUnwindSafe for PageRange",1,["memory_structs::PageRange"]],["impl RefUnwindSafe for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl RefUnwindSafe for FrameRange",1,["memory_structs::FrameRange"]],["impl RefUnwindSafe for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], "memory_x86_64":[["impl RefUnwindSafe for SectionMemoryBounds",1,["memory_x86_64::SectionMemoryBounds"]],["impl RefUnwindSafe for AggregatedSectionMemoryBounds",1,["memory_x86_64::AggregatedSectionMemoryBounds"]]], "mlx5":[["impl !RefUnwindSafe for ConnectX5Nic",1,["mlx5::ConnectX5Nic"]]], "mlx_ethernet":[["impl RefUnwindSafe for InitializationSegment",1,["mlx_ethernet::initialization_segment::InitializationSegment"]],["impl RefUnwindSafe for InitializingState",1,["mlx_ethernet::initialization_segment::InitializingState"]],["impl RefUnwindSafe for CommandTransportType",1,["mlx_ethernet::command_queue::CommandTransportType"]],["impl RefUnwindSafe for CommandQueueError",1,["mlx_ethernet::command_queue::CommandQueueError"]],["impl RefUnwindSafe for CommandDeliveryStatus",1,["mlx_ethernet::command_queue::CommandDeliveryStatus"]],["impl RefUnwindSafe for CommandOpcode",1,["mlx_ethernet::command_queue::CommandOpcode"]],["impl RefUnwindSafe for CommandReturnStatus",1,["mlx_ethernet::command_queue::CommandReturnStatus"]],["impl RefUnwindSafe for ManagePagesOpMod",1,["mlx_ethernet::command_queue::ManagePagesOpMod"]],["impl RefUnwindSafe for QueryPagesOpMod",1,["mlx_ethernet::command_queue::QueryPagesOpMod"]],["impl RefUnwindSafe for QueryVportStateOpMod",1,["mlx_ethernet::command_queue::QueryVportStateOpMod"]],["impl RefUnwindSafe for QueryHcaCapMaxOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapMaxOpMod"]],["impl RefUnwindSafe for QueryHcaCapCurrentOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapCurrentOpMod"]],["impl RefUnwindSafe for AccessRegisterOpMod",1,["mlx_ethernet::command_queue::AccessRegisterOpMod"]],["impl RefUnwindSafe for HcaPortType",1,["mlx_ethernet::command_queue::HcaPortType"]],["impl RefUnwindSafe for CmdState",1,["mlx_ethernet::command_queue::CmdState"]],["impl<const S: CmdState> RefUnwindSafe for Command<S>",1,["mlx_ethernet::command_queue::Command"]],["impl RefUnwindSafe for CommandCompletionStatus",1,["mlx_ethernet::command_queue::CommandCompletionStatus"]],["impl RefUnwindSafe for CommandBuilder",1,["mlx_ethernet::command_queue::CommandBuilder"]],["impl RefUnwindSafe for CommandQueue",1,["mlx_ethernet::command_queue::CommandQueue"]],["impl RefUnwindSafe for CommandQueueEntry",1,["mlx_ethernet::command_queue::CommandQueueEntry"]],["impl RefUnwindSafe for HCACapabilities",1,["mlx_ethernet::command_queue::HCACapabilities"]],["impl RefUnwindSafe for EventQueueEntry",1,["mlx_ethernet::event_queue::EventQueueEntry"]],["impl RefUnwindSafe for EventQueue",1,["mlx_ethernet::event_queue::EventQueue"]],["impl RefUnwindSafe for CompletionQueueEntry",1,["mlx_ethernet::completion_queue::CompletionQueueEntry"]],["impl RefUnwindSafe for CompletionQueueDoorbellRecord",1,["mlx_ethernet::completion_queue::CompletionQueueDoorbellRecord"]],["impl RefUnwindSafe for CompletionQueue",1,["mlx_ethernet::completion_queue::CompletionQueue"]],["impl RefUnwindSafe for SendQueueState",1,["mlx_ethernet::send_queue::SendQueueState"]],["impl RefUnwindSafe for SendQueue",1,["mlx_ethernet::send_queue::SendQueue"]],["impl RefUnwindSafe for ReceiveQueueState",1,["mlx_ethernet::receive_queue::ReceiveQueueState"]],["impl !RefUnwindSafe for ReceiveQueue",1,["mlx_ethernet::receive_queue::ReceiveQueue"]],["impl RefUnwindSafe for DoorbellRecord",1,["mlx_ethernet::work_queue::DoorbellRecord"]],["impl RefUnwindSafe for WorkQueueEntrySend",1,["mlx_ethernet::work_queue::WorkQueueEntrySend"]],["impl RefUnwindSafe for WorkQueueEntryReceive",1,["mlx_ethernet::work_queue::WorkQueueEntryReceive"]],["impl RefUnwindSafe for Rqn",1,["mlx_ethernet::Rqn"]],["impl RefUnwindSafe for Sqn",1,["mlx_ethernet::Sqn"]],["impl RefUnwindSafe for Cqn",1,["mlx_ethernet::Cqn"]],["impl RefUnwindSafe for Pd",1,["mlx_ethernet::Pd"]],["impl RefUnwindSafe for Td",1,["mlx_ethernet::Td"]],["impl RefUnwindSafe for Lkey",1,["mlx_ethernet::Lkey"]],["impl RefUnwindSafe for Eqn",1,["mlx_ethernet::Eqn"]],["impl RefUnwindSafe for Tirn",1,["mlx_ethernet::Tirn"]],["impl RefUnwindSafe for Tisn",1,["mlx_ethernet::Tisn"]],["impl RefUnwindSafe for FtId",1,["mlx_ethernet::FtId"]],["impl RefUnwindSafe for FgId",1,["mlx_ethernet::FgId"]]], @@ -77,7 +77,7 @@ "owned_borrowed_trait":[["impl<T> RefUnwindSafe for Owned<T>where\n T: RefUnwindSafe,",1,["owned_borrowed_trait::Owned"]],["impl<'t, T> RefUnwindSafe for Borrowed<'t, T>where\n T: RefUnwindSafe,",1,["owned_borrowed_trait::Borrowed"]]], "page_allocator":[["impl RefUnwindSafe for AllocatedPages",1,["page_allocator::AllocatedPages"]],["impl<'list> !RefUnwindSafe for DeferredAllocAction<'list>",1,["page_allocator::DeferredAllocAction"]],["impl RefUnwindSafe for AllocationError",1,["page_allocator::AllocationError"]],["impl<'r> RefUnwindSafe for AllocationRequest<'r>",1,["page_allocator::AllocationRequest"]]], "page_attribute_table":[["impl RefUnwindSafe for PageAttributeTable",1,["page_attribute_table::PageAttributeTable"]],["impl RefUnwindSafe for MemoryCachingType",1,["page_attribute_table::MemoryCachingType"]],["impl RefUnwindSafe for PatNotSupported",1,["page_attribute_table::PatNotSupported"]]], -"page_table_entry":[["impl RefUnwindSafe for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl RefUnwindSafe for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl RefUnwindSafe for UnmappedFrames",1,["page_table_entry::UnmappedFrames"]]], +"page_table_entry":[["impl RefUnwindSafe for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl RefUnwindSafe for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl RefUnwindSafe for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl RefUnwindSafe for Path",1,["path::Path"]],["impl RefUnwindSafe for PathComponent",1,["path::PathComponent"]]], "pci":[["impl RefUnwindSafe for PciCapability",1,["pci::PciCapability"]],["impl RefUnwindSafe for InterruptPin",1,["pci::InterruptPin"]],["impl RefUnwindSafe for PciBus",1,["pci::PciBus"]],["impl RefUnwindSafe for PciLocation",1,["pci::PciLocation"]],["impl RefUnwindSafe for PciDevice",1,["pci::PciDevice"]],["impl RefUnwindSafe for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl RefUnwindSafe for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl RefUnwindSafe for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], "per_cpu":[["impl !RefUnwindSafe for PerCpuData",1,["per_cpu::PerCpuData"]],["impl RefUnwindSafe for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], diff --git a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index 3b952ecc0e..b71f8bba78 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -36,7 +36,7 @@ "fadt":[["impl UnwindSafe for Fadt",1,["fadt::Fadt"]]], "fault_crate_swap":[["impl UnwindSafe for SwapRanges",1,["fault_crate_swap::SwapRanges"]]], "fault_log":[["impl UnwindSafe for FaultType",1,["fault_log::FaultType"]],["impl UnwindSafe for RecoveryAction",1,["fault_log::RecoveryAction"]],["impl UnwindSafe for FaultEntry",1,["fault_log::FaultEntry"]]], -"frame_allocator":[["impl UnwindSafe for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl UnwindSafe for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl UnwindSafe for AllocatedFrames",1,["frame_allocator::AllocatedFrames"]],["impl<'f> UnwindSafe for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> UnwindSafe for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<'list> !UnwindSafe for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], +"frame_allocator":[["impl UnwindSafe for PhysicalMemoryRegion",1,["frame_allocator::PhysicalMemoryRegion"]],["impl UnwindSafe for MemoryRegionType",1,["frame_allocator::MemoryRegionType"]],["impl<const S: MemoryState> UnwindSafe for Frames<S>",1,["frame_allocator::Frames"]],["impl<'f> UnwindSafe for AllocatedFramesIter<'f>",1,["frame_allocator::AllocatedFramesIter"]],["impl<'f> UnwindSafe for AllocatedFrame<'f>",1,["frame_allocator::AllocatedFrame"]],["impl<const S: MemoryState> UnwindSafe for SplitFrames<S>",1,["frame_allocator::SplitFrames"]],["impl<'list> !UnwindSafe for DeferredAllocAction<'list>",1,["frame_allocator::DeferredAllocAction"]]], "framebuffer":[["impl UnwindSafe for RGBPixel",1,["framebuffer::pixel::RGBPixel"]],["impl UnwindSafe for AlphaPixel",1,["framebuffer::pixel::AlphaPixel"]],["impl<P> UnwindSafe for Framebuffer<P>where\n P: UnwindSafe,",1,["framebuffer::Framebuffer"]]], "framebuffer_compositor":[["impl UnwindSafe for CacheBlock",1,["framebuffer_compositor::CacheBlock"]],["impl UnwindSafe for FrameCompositor",1,["framebuffer_compositor::FrameCompositor"]]], "fs_node":[["impl !UnwindSafe for FileOrDir",1,["fs_node::FileOrDir"]]], @@ -61,7 +61,7 @@ "memfs":[["impl !UnwindSafe for MemFile",1,["memfs::MemFile"]]], "memory":[["impl UnwindSafe for Mapper",1,["memory::paging::mapper::Mapper"]],["impl UnwindSafe for MappedPages",1,["memory::paging::mapper::MappedPages"]],["impl<T, M, B> UnwindSafe for BorrowedMappedPages<T, M, B>where\n B: UnwindSafe,\n M: UnwindSafe,\n T: UnwindSafe,",1,["memory::paging::mapper::BorrowedMappedPages"]],["impl<T, M, B> UnwindSafe for BorrowedSliceMappedPages<T, M, B>where\n B: UnwindSafe,\n M: UnwindSafe,\n T: UnwindSafe,",1,["memory::paging::mapper::BorrowedSliceMappedPages"]],["impl UnwindSafe for Mutable",1,["memory::paging::mapper::Mutable"]],["impl UnwindSafe for Immutable",1,["memory::paging::mapper::Immutable"]],["impl UnwindSafe for PageTable",1,["memory::paging::PageTable"]],["impl UnwindSafe for MemoryManagementInfo",1,["memory::MemoryManagementInfo"]],["impl UnwindSafe for InitialMemoryMappings",1,["memory::InitialMemoryMappings"]],["impl UnwindSafe for EarlyIdentityMappedPages",1,["memory::EarlyIdentityMappedPages"]]], "memory_aarch64":[["impl UnwindSafe for MmuConfig",1,["memory_aarch64::MmuConfig"]],["impl UnwindSafe for SectionMemoryBounds",1,["memory_aarch64::SectionMemoryBounds"]],["impl UnwindSafe for AggregatedSectionMemoryBounds",1,["memory_aarch64::AggregatedSectionMemoryBounds"]]], -"memory_structs":[["impl UnwindSafe for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl UnwindSafe for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl UnwindSafe for Page",1,["memory_structs::Page"]],["impl UnwindSafe for Frame",1,["memory_structs::Frame"]],["impl UnwindSafe for PageRange",1,["memory_structs::PageRange"]],["impl UnwindSafe for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl UnwindSafe for FrameRange",1,["memory_structs::FrameRange"]],["impl UnwindSafe for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], +"memory_structs":[["impl UnwindSafe for MemoryState",1,["memory_structs::MemoryState"]],["impl UnwindSafe for VirtualAddress",1,["memory_structs::VirtualAddress"]],["impl UnwindSafe for PhysicalAddress",1,["memory_structs::PhysicalAddress"]],["impl UnwindSafe for Page",1,["memory_structs::Page"]],["impl UnwindSafe for Frame",1,["memory_structs::Frame"]],["impl UnwindSafe for PageRange",1,["memory_structs::PageRange"]],["impl UnwindSafe for CopyablePageRange",1,["memory_structs::CopyablePageRange"]],["impl UnwindSafe for FrameRange",1,["memory_structs::FrameRange"]],["impl UnwindSafe for CopyableFrameRange",1,["memory_structs::CopyableFrameRange"]]], "memory_x86_64":[["impl UnwindSafe for SectionMemoryBounds",1,["memory_x86_64::SectionMemoryBounds"]],["impl UnwindSafe for AggregatedSectionMemoryBounds",1,["memory_x86_64::AggregatedSectionMemoryBounds"]]], "mlx5":[["impl !UnwindSafe for ConnectX5Nic",1,["mlx5::ConnectX5Nic"]]], "mlx_ethernet":[["impl UnwindSafe for InitializationSegment",1,["mlx_ethernet::initialization_segment::InitializationSegment"]],["impl UnwindSafe for InitializingState",1,["mlx_ethernet::initialization_segment::InitializingState"]],["impl UnwindSafe for CommandTransportType",1,["mlx_ethernet::command_queue::CommandTransportType"]],["impl UnwindSafe for CommandQueueError",1,["mlx_ethernet::command_queue::CommandQueueError"]],["impl UnwindSafe for CommandDeliveryStatus",1,["mlx_ethernet::command_queue::CommandDeliveryStatus"]],["impl UnwindSafe for CommandOpcode",1,["mlx_ethernet::command_queue::CommandOpcode"]],["impl UnwindSafe for CommandReturnStatus",1,["mlx_ethernet::command_queue::CommandReturnStatus"]],["impl UnwindSafe for ManagePagesOpMod",1,["mlx_ethernet::command_queue::ManagePagesOpMod"]],["impl UnwindSafe for QueryPagesOpMod",1,["mlx_ethernet::command_queue::QueryPagesOpMod"]],["impl UnwindSafe for QueryVportStateOpMod",1,["mlx_ethernet::command_queue::QueryVportStateOpMod"]],["impl UnwindSafe for QueryHcaCapMaxOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapMaxOpMod"]],["impl UnwindSafe for QueryHcaCapCurrentOpMod",1,["mlx_ethernet::command_queue::QueryHcaCapCurrentOpMod"]],["impl UnwindSafe for AccessRegisterOpMod",1,["mlx_ethernet::command_queue::AccessRegisterOpMod"]],["impl UnwindSafe for HcaPortType",1,["mlx_ethernet::command_queue::HcaPortType"]],["impl UnwindSafe for CmdState",1,["mlx_ethernet::command_queue::CmdState"]],["impl<const S: CmdState> UnwindSafe for Command<S>",1,["mlx_ethernet::command_queue::Command"]],["impl UnwindSafe for CommandCompletionStatus",1,["mlx_ethernet::command_queue::CommandCompletionStatus"]],["impl UnwindSafe for CommandBuilder",1,["mlx_ethernet::command_queue::CommandBuilder"]],["impl UnwindSafe for CommandQueue",1,["mlx_ethernet::command_queue::CommandQueue"]],["impl UnwindSafe for CommandQueueEntry",1,["mlx_ethernet::command_queue::CommandQueueEntry"]],["impl UnwindSafe for HCACapabilities",1,["mlx_ethernet::command_queue::HCACapabilities"]],["impl UnwindSafe for EventQueueEntry",1,["mlx_ethernet::event_queue::EventQueueEntry"]],["impl UnwindSafe for EventQueue",1,["mlx_ethernet::event_queue::EventQueue"]],["impl UnwindSafe for CompletionQueueEntry",1,["mlx_ethernet::completion_queue::CompletionQueueEntry"]],["impl UnwindSafe for CompletionQueueDoorbellRecord",1,["mlx_ethernet::completion_queue::CompletionQueueDoorbellRecord"]],["impl UnwindSafe for CompletionQueue",1,["mlx_ethernet::completion_queue::CompletionQueue"]],["impl UnwindSafe for SendQueueState",1,["mlx_ethernet::send_queue::SendQueueState"]],["impl UnwindSafe for SendQueue",1,["mlx_ethernet::send_queue::SendQueue"]],["impl UnwindSafe for ReceiveQueueState",1,["mlx_ethernet::receive_queue::ReceiveQueueState"]],["impl !UnwindSafe for ReceiveQueue",1,["mlx_ethernet::receive_queue::ReceiveQueue"]],["impl UnwindSafe for DoorbellRecord",1,["mlx_ethernet::work_queue::DoorbellRecord"]],["impl UnwindSafe for WorkQueueEntrySend",1,["mlx_ethernet::work_queue::WorkQueueEntrySend"]],["impl UnwindSafe for WorkQueueEntryReceive",1,["mlx_ethernet::work_queue::WorkQueueEntryReceive"]],["impl UnwindSafe for Rqn",1,["mlx_ethernet::Rqn"]],["impl UnwindSafe for Sqn",1,["mlx_ethernet::Sqn"]],["impl UnwindSafe for Cqn",1,["mlx_ethernet::Cqn"]],["impl UnwindSafe for Pd",1,["mlx_ethernet::Pd"]],["impl UnwindSafe for Td",1,["mlx_ethernet::Td"]],["impl UnwindSafe for Lkey",1,["mlx_ethernet::Lkey"]],["impl UnwindSafe for Eqn",1,["mlx_ethernet::Eqn"]],["impl UnwindSafe for Tirn",1,["mlx_ethernet::Tirn"]],["impl UnwindSafe for Tisn",1,["mlx_ethernet::Tisn"]],["impl UnwindSafe for FtId",1,["mlx_ethernet::FtId"]],["impl UnwindSafe for FgId",1,["mlx_ethernet::FgId"]]], @@ -77,7 +77,7 @@ "owned_borrowed_trait":[["impl<T> UnwindSafe for Owned<T>where\n T: UnwindSafe,",1,["owned_borrowed_trait::Owned"]],["impl<'t, T> UnwindSafe for Borrowed<'t, T>where\n T: RefUnwindSafe,",1,["owned_borrowed_trait::Borrowed"]]], "page_allocator":[["impl UnwindSafe for AllocatedPages",1,["page_allocator::AllocatedPages"]],["impl<'list> !UnwindSafe for DeferredAllocAction<'list>",1,["page_allocator::DeferredAllocAction"]],["impl UnwindSafe for AllocationError",1,["page_allocator::AllocationError"]],["impl<'r> UnwindSafe for AllocationRequest<'r>",1,["page_allocator::AllocationRequest"]]], "page_attribute_table":[["impl UnwindSafe for PageAttributeTable",1,["page_attribute_table::PageAttributeTable"]],["impl UnwindSafe for MemoryCachingType",1,["page_attribute_table::MemoryCachingType"]],["impl UnwindSafe for PatNotSupported",1,["page_attribute_table::PatNotSupported"]]], -"page_table_entry":[["impl UnwindSafe for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl UnwindSafe for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl UnwindSafe for UnmappedFrames",1,["page_table_entry::UnmappedFrames"]]], +"page_table_entry":[["impl UnwindSafe for PageTableEntry",1,["page_table_entry::PageTableEntry"]],["impl UnwindSafe for UnmapResult",1,["page_table_entry::UnmapResult"]],["impl UnwindSafe for UnmappedFrameRange",1,["page_table_entry::UnmappedFrameRange"]]], "path":[["impl UnwindSafe for Path",1,["path::Path"]],["impl UnwindSafe for PathComponent",1,["path::PathComponent"]]], "pci":[["impl UnwindSafe for PciCapability",1,["pci::PciCapability"]],["impl UnwindSafe for InterruptPin",1,["pci::InterruptPin"]],["impl UnwindSafe for PciBus",1,["pci::PciBus"]],["impl UnwindSafe for PciLocation",1,["pci::PciLocation"]],["impl UnwindSafe for PciDevice",1,["pci::PciDevice"]],["impl UnwindSafe for PciConfigSpaceAccessMechanism",1,["pci::PciConfigSpaceAccessMechanism"]],["impl UnwindSafe for MsixVectorTable",1,["pci::MsixVectorTable"]],["impl UnwindSafe for MsixVectorEntry",1,["pci::MsixVectorEntry"]]], "per_cpu":[["impl !UnwindSafe for PerCpuData",1,["per_cpu::PerCpuData"]],["impl UnwindSafe for CpuLocalCpuId",1,["per_cpu::CpuLocalCpuId"]]], diff --git a/doc/memory/all.html b/doc/memory/all.html index e3470fdb74..5653e0414f 100644 --- a/doc/memory/all.html +++ b/doc/memory/all.html @@ -1 +1 @@ -List of all items in this crate
    \ No newline at end of file +List of all items in this crate
    \ No newline at end of file diff --git a/doc/memory/constant.DMA_FLAGS.html b/doc/memory/constant.DMA_FLAGS.html index 412745742f..23febc8879 100644 --- a/doc/memory/constant.DMA_FLAGS.html +++ b/doc/memory/constant.DMA_FLAGS.html @@ -1,2 +1,2 @@ -DMA_FLAGS in memory - Rust

    Constant memory::DMA_FLAGS

    source ·
    pub const DMA_FLAGS: PteFlags;
    Expand description

    Mapping flags that can be used to map DMA (Direct Memory Access) memory.

    +DMA_FLAGS in memory - Rust

    Constant memory::DMA_FLAGS

    source ·
    pub const DMA_FLAGS: PteFlags;
    Expand description

    Mapping flags that can be used to map DMA (Direct Memory Access) memory.

    \ No newline at end of file diff --git a/doc/memory/constant.MMIO_FLAGS.html b/doc/memory/constant.MMIO_FLAGS.html index d78ac4b8e5..a7d96424cc 100644 --- a/doc/memory/constant.MMIO_FLAGS.html +++ b/doc/memory/constant.MMIO_FLAGS.html @@ -1,2 +1,2 @@ -MMIO_FLAGS in memory - Rust

    Constant memory::MMIO_FLAGS

    source ·
    pub const MMIO_FLAGS: PteFlags;
    Expand description

    Mapping flags that can be used to map MMIO registers.

    +MMIO_FLAGS in memory - Rust

    Constant memory::MMIO_FLAGS

    source ·
    pub const MMIO_FLAGS: PteFlags;
    Expand description

    Mapping flags that can be used to map MMIO registers.

    \ No newline at end of file diff --git a/doc/memory/enum.MemoryState.html b/doc/memory/enum.MemoryState.html new file mode 100644 index 0000000000..b0c81a4325 --- /dev/null +++ b/doc/memory/enum.MemoryState.html @@ -0,0 +1,23 @@ +MemoryState in memory - Rust

    Enum memory::MemoryState

    pub enum MemoryState {
    +    Free,
    +    Allocated,
    +    Mapped,
    +    Unmapped,
    +}
    Expand description

    The possible states that a range of exclusively-owned pages or frames can be in.

    +

    Variants§

    §

    Free

    Memory is free and owned by the allocator

    +
    §

    Allocated

    Memory is allocated and can be used for a mapping

    +
    §

    Mapped

    Memory is mapped (PTE has been set)

    +
    §

    Unmapped

    Memory has been unmapped (PTE has been cleared)

    +

    Trait Implementations§

    §

    impl PartialEq<MemoryState> for MemoryState

    §

    fn eq(&self, other: &MemoryState) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    §

    impl ConstParamTy for MemoryState

    §

    impl Eq for MemoryState

    §

    impl StructuralEq for MemoryState

    §

    impl StructuralPartialEq for MemoryState

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/memory/fn.allocate_frames.html b/doc/memory/fn.allocate_frames.html index b002482137..b4ff7c8f0b 100644 --- a/doc/memory/fn.allocate_frames.html +++ b/doc/memory/fn.allocate_frames.html @@ -1,3 +1,5 @@ -allocate_frames in memory - Rust

    Function memory::allocate_frames

    pub fn allocate_frames(num_frames: usize) -> Option<AllocatedFrames>
    Expand description

    Allocates the given number of frames with no constraints on the starting physical address.

    +allocate_frames in memory - Rust

    Function memory::allocate_frames

    pub fn allocate_frames(
    +    num_frames: usize
    +) -> Option<Frames<frame_allocator::::AllocatedFrames::{constant#0}>>
    Expand description

    Allocates the given number of frames with no constraints on the starting physical address.

    See allocate_frames_deferred() for more details.

    \ No newline at end of file diff --git a/doc/memory/fn.allocate_frames_at.html b/doc/memory/fn.allocate_frames_at.html index 07c42c6aa2..18a0cb74de 100644 --- a/doc/memory/fn.allocate_frames_at.html +++ b/doc/memory/fn.allocate_frames_at.html @@ -1,6 +1,6 @@ allocate_frames_at in memory - Rust

    Function memory::allocate_frames_at

    pub fn allocate_frames_at(
         paddr: PhysicalAddress,
         num_frames: usize
    -) -> Result<AllocatedFrames, &'static str>
    Expand description

    Allocates the given number of frames starting at (inclusive of) the frame containing the given PhysicalAddress.

    +) -> Result<Frames<frame_allocator::::AllocatedFrames::{constant#0}>, &'static str>
    Expand description

    Allocates the given number of frames starting at (inclusive of) the frame containing the given PhysicalAddress.

    See allocate_frames_deferred() for more details.

    \ No newline at end of file diff --git a/doc/memory/fn.allocate_frames_by_bytes.html b/doc/memory/fn.allocate_frames_by_bytes.html index fda140ace3..3a97945621 100644 --- a/doc/memory/fn.allocate_frames_by_bytes.html +++ b/doc/memory/fn.allocate_frames_by_bytes.html @@ -1,4 +1,6 @@ -allocate_frames_by_bytes in memory - Rust
    pub fn allocate_frames_by_bytes(num_bytes: usize) -> Option<AllocatedFrames>
    Expand description

    Allocates frames with no constraints on the starting physical address, +allocate_frames_by_bytes in memory - Rust

    pub fn allocate_frames_by_bytes(
    +    num_bytes: usize
    +) -> Option<Frames<frame_allocator::::AllocatedFrames::{constant#0}>>
    Expand description

    Allocates frames with no constraints on the starting physical address, with a size given by the number of bytes.

    This function still allocates whole frames by rounding up the number of bytes. See allocate_frames_deferred() for more details.

    diff --git a/doc/memory/fn.allocate_frames_by_bytes_at.html b/doc/memory/fn.allocate_frames_by_bytes_at.html index 548326f4fb..eb37d13124 100644 --- a/doc/memory/fn.allocate_frames_by_bytes_at.html +++ b/doc/memory/fn.allocate_frames_by_bytes_at.html @@ -1,7 +1,7 @@ allocate_frames_by_bytes_at in memory - Rust
    pub fn allocate_frames_by_bytes_at(
         paddr: PhysicalAddress,
         num_bytes: usize
    -) -> Result<AllocatedFrames, &'static str>
    Expand description

    Allocates frames starting at the given PhysicalAddress with a size given in number of bytes.

    +) -> Result<Frames<frame_allocator::::AllocatedFrames::{constant#0}>, &'static str>
    Expand description

    Allocates frames starting at the given PhysicalAddress with a size given in number of bytes.

    This function still allocates whole frames by rounding up the number of bytes. See allocate_frames_deferred() for more details.

    \ No newline at end of file diff --git a/doc/memory/fn.create_contiguous_mapping.html b/doc/memory/fn.create_contiguous_mapping.html index 8b279cbd4e..d674c518f8 100644 --- a/doc/memory/fn.create_contiguous_mapping.html +++ b/doc/memory/fn.create_contiguous_mapping.html @@ -1,4 +1,4 @@ -create_contiguous_mapping in memory - Rust
    pub fn create_contiguous_mapping<F: Into<PteFlagsArch>>(
    +create_contiguous_mapping in memory - Rust
    pub fn create_contiguous_mapping<F: Into<PteFlagsArch>>(
         size_in_bytes: usize,
         flags: F
     ) -> Result<(MappedPages, PhysicalAddress), &'static str>
    Expand description

    A convenience function that creates a new memory mapping by allocating frames that are contiguous in physical memory. diff --git a/doc/memory/fn.create_mapping.html b/doc/memory/fn.create_mapping.html index 57f914d3a9..e04dde973a 100644 --- a/doc/memory/fn.create_mapping.html +++ b/doc/memory/fn.create_mapping.html @@ -1,4 +1,4 @@ -create_mapping in memory - Rust

    Function memory::create_mapping

    source ·
    pub fn create_mapping<F: Into<PteFlagsArch>>(
    +create_mapping in memory - Rust

    Function memory::create_mapping

    source ·
    pub fn create_mapping<F: Into<PteFlagsArch>>(
         size_in_bytes: usize,
         flags: F
     ) -> Result<MappedPages, &'static str>
    Expand description

    A convenience function that creates a new memory mapping. The pages allocated are contiguous in memory but there’s diff --git a/doc/memory/fn.get_kernel_mmi_ref.html b/doc/memory/fn.get_kernel_mmi_ref.html index 88859c5f73..1bd517b6ef 100644 --- a/doc/memory/fn.get_kernel_mmi_ref.html +++ b/doc/memory/fn.get_kernel_mmi_ref.html @@ -1,3 +1,3 @@ -get_kernel_mmi_ref in memory - Rust

    Function memory::get_kernel_mmi_ref

    source ·
    pub fn get_kernel_mmi_ref() -> Option<&'static MmiRef>
    Expand description

    Returns a reference to the kernel’s MemoryManagementInfo, if initialized. +get_kernel_mmi_ref in memory - Rust

    Function memory::get_kernel_mmi_ref

    source ·
    pub fn get_kernel_mmi_ref() -> Option<&'static MmiRef>
    Expand description

    Returns a reference to the kernel’s MemoryManagementInfo, if initialized. If not, it returns None.

    \ No newline at end of file diff --git a/doc/memory/fn.init.html b/doc/memory/fn.init.html index 01b296e58c..d71423a849 100644 --- a/doc/memory/fn.init.html +++ b/doc/memory/fn.init.html @@ -1,4 +1,4 @@ -init in memory - Rust

    Function memory::init

    source ·
    pub fn init(
    +init in memory - Rust

    Function memory::init

    source ·
    pub fn init(
         boot_info: &impl BootInformation,
         kernel_stack_start: VirtualAddress
     ) -> Result<InitialMemoryMappings, &'static str>
    Expand description

    Initializes the virtual memory management system. diff --git a/doc/memory/fn.init_post_heap.html b/doc/memory/fn.init_post_heap.html index e969d880ed..b13219a2fe 100644 --- a/doc/memory/fn.init_post_heap.html +++ b/doc/memory/fn.init_post_heap.html @@ -1,4 +1,4 @@ -init_post_heap in memory - Rust

    Function memory::init_post_heap

    source ·
    pub fn init_post_heap(
    +init_post_heap in memory - Rust

    Function memory::init_post_heap

    source ·
    pub fn init_post_heap(
         page_table: PageTable,
         additional_mapped_pages: MappedPages,
         heap_mapped_pages: MappedPages
    diff --git a/doc/memory/fn.map_frame_range.html b/doc/memory/fn.map_frame_range.html
    index ef7e3b4b58..5631da4c1d 100644
    --- a/doc/memory/fn.map_frame_range.html
    +++ b/doc/memory/fn.map_frame_range.html
    @@ -1,4 +1,4 @@
    -map_frame_range in memory - Rust

    Function memory::map_frame_range

    source ·
    pub fn map_frame_range<F: Into<PteFlagsArch>>(
    +map_frame_range in memory - Rust

    Function memory::map_frame_range

    source ·
    pub fn map_frame_range<F: Into<PteFlagsArch>>(
         start_address: PhysicalAddress,
         size_in_bytes: usize,
         flags: F
    diff --git a/doc/memory/fn.set_broadcast_tlb_shootdown_cb.html b/doc/memory/fn.set_broadcast_tlb_shootdown_cb.html
    index cf5b369dbd..da3fad4b08 100644
    --- a/doc/memory/fn.set_broadcast_tlb_shootdown_cb.html
    +++ b/doc/memory/fn.set_broadcast_tlb_shootdown_cb.html
    @@ -1,3 +1,3 @@
    -set_broadcast_tlb_shootdown_cb in memory - Rust
    pub fn set_broadcast_tlb_shootdown_cb(func: fn(_: PageRange))
    Expand description

    Set the function callback that will be invoked every time a TLB shootdown is necessary, +set_broadcast_tlb_shootdown_cb in memory - Rust

    pub fn set_broadcast_tlb_shootdown_cb(func: fn(_: PageRange))
    Expand description

    Set the function callback that will be invoked every time a TLB shootdown is necessary, i.e., during page table remapping and unmapping operations.

    \ No newline at end of file diff --git a/doc/memory/index.html b/doc/memory/index.html index 7bf6bcb97a..0a31d03e8c 100644 --- a/doc/memory/index.html +++ b/doc/memory/index.html @@ -1,17 +1,17 @@ -memory - Rust

    Crate memory

    source ·
    Expand description

    This crate implements the main memory management subsystem for Theseus.

    +memory - Rust

    Crate memory

    source ·
    Expand description

    This crate implements the main memory management subsystem for Theseus.

    The primary type of interest is MappedPages, which offers a robust interface that unifies the usage of arbitrary memory regions with that of Rust’s safe type system and lifetimes.

    Acknowledgments

    Some of the internal page table management code was based on Philipp Oppermann’s blog_os, but has since changed significantly.

    -

    Structs

    Structs

    Enums

    Constants

    • Mapping flags that can be used to map DMA (Direct Memory Access) memory.
    • Mapping flags that can be used to map MMIO registers.
    • Page size is 4096 bytes, 4KiB pages.
    • A mask for the bits of a page table entry that contain the physical frame address.

    Traits

    Enums

    • Possible options when requested pages from the page allocator.
    • The possible states that a range of exclusively-owned pages or frames can be in.

    Constants

    • Mapping flags that can be used to map DMA (Direct Memory Access) memory.
    • Mapping flags that can be used to map MMIO registers.
    • Page size is 4096 bytes, 4KiB pages.
    • A mask for the bits of a page table entry that contain the physical frame address.

    Traits

    Functions

    • Allocates the given number of frames with no constraints on the starting physical address.
    • Allocates the given number of frames starting at (inclusive of) the frame containing the given PhysicalAddress.
    • Allocates frames with no constraints on the starting physical address, with a size given by the number of bytes.
    • Allocates frames starting at the given PhysicalAddress with a size given in number of bytes.
    • Allocates the given number of pages with no constraints on the starting virtual address.
    • Allocates the given number of pages starting at (inclusive of) the page containing the given VirtualAddress.
    • Allocates pages with no constraints on the starting virtual address, with a size given by the number of bytes.
    • Allocates pages starting at the given VirtualAddress with a size given in number of bytes.
    • Allocates pages with a size given in number of bytes with the constraint that @@ -27,4 +27,4 @@

      Acknowledgments

      Consumes the given BootInformation, because after the memory system is initialized, the original BootInformation will be unmapped and inaccessible.
    • Finishes initializing the memory management system after the heap is ready.
    • A convenience function that maps randomly-allocated pages to the given range of frames.
    • Set the function callback that will be invoked every time a TLB shootdown is necessary, i.e., during page table remapping and unmapping operations.
    • A convenience function to translate the given virtual address into a -physical address using the currently-active page table.

    Type Definitions

    • A shareable reference to a MemoryManagementInfo struct wrapper in a lock.
    \ No newline at end of file +physical address using the currently-active page table.

    Type Definitions

    • A type alias for Frames in the Allocated state.
    • A shareable reference to a MemoryManagementInfo struct wrapper in a lock.
    • A type alias for Frames in the Unmapped state.
    \ No newline at end of file diff --git a/doc/memory/sidebar-items.js b/doc/memory/sidebar-items.js index c22141ef6e..878dfcd184 100644 --- a/doc/memory/sidebar-items.js +++ b/doc/memory/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"constant":["DMA_FLAGS","MMIO_FLAGS","PAGE_SIZE","PTE_FRAME_MASK"],"enum":["AllocationRequest"],"fn":["allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_pages","allocate_pages_at","allocate_pages_by_bytes","allocate_pages_by_bytes_at","allocate_pages_by_bytes_in_range","allocate_pages_in_range","create_contiguous_mapping","create_mapping","get_kernel_mmi_ref","init","init_post_heap","map_frame_range","set_broadcast_tlb_shootdown_cb","translate"],"struct":["AllocatedFrames","AllocatedPages","BorrowedMappedPages","BorrowedSliceMappedPages","CopyableFrameRange","CopyablePageRange","EarlyIdentityMappedPages","Frame","FrameRange","Immutable","InitialMemoryMappings","MappedPages","Mapper","MemoryManagementInfo","Mutable","Page","PageRange","PageTable","PhysicalAddress","PteFlags","PteFlagsArch","PteFlagsX86_64","VirtualAddress"],"trait":["Mutability"],"type":["MmiRef"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["DMA_FLAGS","MMIO_FLAGS","PAGE_SIZE","PTE_FRAME_MASK"],"enum":["AllocationRequest","MemoryState"],"fn":["allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_pages","allocate_pages_at","allocate_pages_by_bytes","allocate_pages_by_bytes_at","allocate_pages_by_bytes_in_range","allocate_pages_in_range","create_contiguous_mapping","create_mapping","get_kernel_mmi_ref","init","init_post_heap","map_frame_range","set_broadcast_tlb_shootdown_cb","translate"],"struct":["AllocatedPages","BorrowedMappedPages","BorrowedSliceMappedPages","CopyableFrameRange","CopyablePageRange","EarlyIdentityMappedPages","Frame","FrameRange","Immutable","InitialMemoryMappings","MappedPages","Mapper","MemoryManagementInfo","Mutable","Page","PageRange","PageTable","PhysicalAddress","PteFlags","PteFlagsArch","PteFlagsX86_64","VirtualAddress"],"trait":["Mutability"],"type":["AllocatedFrames","MmiRef","UnmappedFrames"]}; \ No newline at end of file diff --git a/doc/memory/struct.AllocatedFrames.html b/doc/memory/struct.AllocatedFrames.html deleted file mode 100644 index 9bb8a8deed..0000000000 --- a/doc/memory/struct.AllocatedFrames.html +++ /dev/null @@ -1,67 +0,0 @@ -AllocatedFrames in memory - Rust

    Struct memory::AllocatedFrames

    pub struct AllocatedFrames { /* private fields */ }
    Expand description

    Represents a range of allocated physical memory Frames; derefs to FrameRange.

    -

    These frames are not immediately accessible because they’re not yet mapped -by any virtual memory pages. -You must do that separately in order to create a MappedPages type, -which can then be used to access the contents of these frames.

    -

    This object represents ownership of the range of allocated physical frames; -if this object falls out of scope, its allocated frames will be auto-deallocated upon drop.

    -

    Implementations§

    §

    impl AllocatedFrames

    pub const fn empty() -> AllocatedFrames

    Returns an empty AllocatedFrames object that performs no frame allocation. -Can be used as a placeholder, but will not permit any real usage.

    -

    pub fn merge(&mut self, other: AllocatedFrames) -> Result<(), AllocatedFrames>

    Merges the given AllocatedFrames object other into this AllocatedFrames object (self). -This is just for convenience and usability purposes, it performs no allocation or remapping.

    -

    The given other must be physically contiguous with self, i.e., come immediately before or after self. -That is, either self.start == other.end + 1 or self.end + 1 == other.start must be true.

    -

    If either of those conditions are met, self is modified and Ok(()) is returned, -otherwise Err(other) is returned.

    -

    pub fn split( - self, - at_frame: Frame -) -> Result<(AllocatedFrames, AllocatedFrames), AllocatedFrames>

    Splits this AllocatedFrames into two separate AllocatedFrames objects:

    -
      -
    • [beginning : at_frame - 1]
    • -
    • [at_frame : end]
    • -
    -

    This function follows the behavior of core::slice::split_at(), -thus, either one of the returned AllocatedFrames objects may be empty.

    -
      -
    • If at_frame == self.start, the first returned AllocatedFrames object will be empty.
    • -
    • If at_frame == self.end + 1, the second returned AllocatedFrames object will be empty.
    • -
    -

    Returns an Err containing this AllocatedFrames if at_frame is otherwise out of bounds.

    -

    pub fn as_allocated_frame(&self) -> AllocatedFrame<'_>

    Returns an AllocatedFrame if this AllocatedFrames object contains only one frame.

    -
    Panic
    -

    Panics if this AllocatedFrame contains multiple frames or zero frames.

    -

    Methods from Deref<Target = FrameRange>§

    pub fn start_address(&self) -> PhysicalAddress

    Returns the PhysicalAddress of the starting Frame in this FrameRange.

    -

    pub fn size_in_frames(&self) -> usize

    Returns the number of Frames covered by this iterator.

    -

    Use this instead of Iterator::count() method. This is instant, because it doesn’t need to iterate over each entry, unlike normal iterators.

    -

    pub fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    -

    pub fn contains_address(&self, addr: PhysicalAddress) -> bool

    Returns true if this FrameRange contains the given PhysicalAddress.

    -

    pub fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>

    Returns the offset of the given PhysicalAddress within this FrameRange, i.e., addr - self.start_address().

    -

    If the given addr is not covered by this range of Frames, this returns None.

    -
    Examples
    -

    If the range covers addresses 0x2000 to 0x4000, then offset_of_address(0x3500) would return Some(0x1500).

    -

    pub fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>

    Returns the PhysicalAddress at the given offset into this FrameRangewithin this FrameRange, i.e., self.start_address() + offset.

    -

    If the given offset is not within this range of Frames, this returns None.

    -
    Examples
    -

    If the range covers addresses 0x2000 through 0x3FFF, then address_at_offset(0x1500) would return Some(0x3500), and address_at_offset(0x2000) would return None.

    -

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given Frame.

    -

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the Frames that overlap across this FrameRange and the given other FrameRange.

    -

    If there is no overlap between the two ranges, None is returned.

    -

    Methods from Deref<Target = RangeInclusive<Frame>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    -
    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    -
    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    -
    source

    pub fn iter(&self) -> RangeInclusiveIterator<Idx>

    Returns an iterator with the same start and end values as the range.

    -
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere - Idx: PartialOrd<U>, - U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    -

    Trait Implementations§

    §

    impl Debug for AllocatedFrames

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for AllocatedFrames

    §

    type Target = FrameRange

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &FrameRange

    Dereferences the value.
    §

    impl Drop for AllocatedFrames

    §

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    §

    impl<'f> IntoIterator for &'f AllocatedFrames

    §

    type IntoIter = AllocatedFramesIter<'f>

    Which kind of iterator are we turning this into?
    §

    type Item = AllocatedFrame<'f>

    The type of the elements being iterated over.
    §

    fn into_iter(self) -> <&'f AllocatedFrames as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere - U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    -

    That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/memory/struct.BorrowedMappedPages.html b/doc/memory/struct.BorrowedMappedPages.html index 27d5e0455a..9a4169c43b 100644 --- a/doc/memory/struct.BorrowedMappedPages.html +++ b/doc/memory/struct.BorrowedMappedPages.html @@ -1,4 +1,4 @@ -BorrowedMappedPages in memory - Rust
    pub struct BorrowedMappedPages<T, M = Immutable, B = MappedPages>where
    +BorrowedMappedPages in memory - Rust
    pub struct BorrowedMappedPages<T, M = Immutable, B = MappedPages>where
         T: FromBytes,
         M: Mutability,
         B: Borrow<MappedPages>,{ /* private fields */ }
    Expand description

    A borrowed MappedPages object that derefs to &T and optionally also &mut T.

    @@ -29,7 +29,7 @@

    Drop behavior

  • Also, you can manually end the borrow to reclaim the inner B MappedPages type via the Self::into_inner() method.
  • -

    Implementations§

    source§

    impl<T: FromBytes, B: Borrow<MappedPages>> BorrowedMappedPages<T, Immutable, B>

    source

    pub fn from(mp: B, byte_offset: usize) -> Result<Self, (B, &'static str)>

    Immutably borrows the given MappedPages as an instance of type &T +

    Implementations§

    source§

    impl<T: FromBytes, B: Borrow<MappedPages>> BorrowedMappedPages<T, Immutable, B>

    source

    pub fn from(mp: B, byte_offset: usize) -> Result<Self, (B, &'static str)>

    Immutably borrows the given MappedPages as an instance of type &T located at the given byte_offset into the MappedPages.

    See MappedPages::as_type() for more info.

    Arguments
    @@ -49,7 +49,7 @@
    Arguments

    Upon failure, this returns an error tuple containing the unmodified mp argument and a string describing the error.

    -
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowedMappedPages<T, Mutable, B>

    source

    pub fn from_mut(mp: B, byte_offset: usize) -> Result<Self, (B, &'static str)>

    Mutably borrows the given MappedPages as an instance of type &mut T +

    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowedMappedPages<T, Mutable, B>

    source

    pub fn from_mut(mp: B, byte_offset: usize) -> Result<Self, (B, &'static str)>

    Mutably borrows the given MappedPages as an instance of type &mut T located at the given byte_offset into the MappedPages.

    See MappedPages::as_type_mut() for more info.

    Arguments
    @@ -69,26 +69,26 @@
    Arguments

    Upon failure, returns an error containing the unmodified MappedPages and a string describing the error.

    -
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> BorrowedMappedPages<T, M, B>

    source

    pub fn into_inner(self) -> B

    Consumes this object and returns the inner MappedPages value +

    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> BorrowedMappedPages<T, M, B>

    source

    pub fn into_inner(self) -> B

    Consumes this object and returns the inner MappedPages value (more specifically, the Borrow-able container holding the MappedPages).

    -
    source

    pub fn inner_ref(&self) -> &B

    Returns a reference to the inner MappedPages value +

    source

    pub fn inner_ref(&self) -> &B

    Returns a reference to the inner MappedPages value (more specifically, the Borrow-able container holding the MappedPages).

    -

    Trait Implementations§

    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> AsMut<T> for BorrowedMappedPages<T, Mutable, B>

    Only Mutable BorrowedMappedPages implement AsMut<T>.

    -
    source§

    fn as_mut(&mut self) -> &mut T

    Converts this type into a mutable reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> AsRef<T> for BorrowedMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedMappedPages implement AsRef<T>.

    -
    source§

    fn as_ref(&self) -> &T

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Borrow<T> for BorrowedMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedMappedPages implement Borrow<T>.

    -
    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowMut<T> for BorrowedMappedPages<T, Mutable, B>

    Only Mutable BorrowedMappedPages implement BorrowMut<T>.

    -
    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedMappedPages can deref into &T.

    -
    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &T

    Dereferences the value.
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> DerefMut for BorrowedMappedPages<T, Mutable, B>

    Only Mutable BorrowedMappedPages can deref into &mut T.

    -
    source§

    fn deref_mut(&mut self) -> &mut T

    Mutably dereferences the value.
    source§

    impl<T: FromBytes + Hash, M: Mutability, B: Borrow<MappedPages>> Hash for BorrowedMappedPages<T, M, B>

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where +

    Trait Implementations§

    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> AsMut<T> for BorrowedMappedPages<T, Mutable, B>

    Only Mutable BorrowedMappedPages implement AsMut<T>.

    +
    source§

    fn as_mut(&mut self) -> &mut T

    Converts this type into a mutable reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> AsRef<T> for BorrowedMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedMappedPages implement AsRef<T>.

    +
    source§

    fn as_ref(&self) -> &T

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Borrow<T> for BorrowedMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedMappedPages implement Borrow<T>.

    +
    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowMut<T> for BorrowedMappedPages<T, Mutable, B>

    Only Mutable BorrowedMappedPages implement BorrowMut<T>.

    +
    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedMappedPages can deref into &T.

    +
    §

    type Target = T

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &T

    Dereferences the value.
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> DerefMut for BorrowedMappedPages<T, Mutable, B>

    Only Mutable BorrowedMappedPages can deref into &mut T.

    +
    source§

    fn deref_mut(&mut self) -> &mut T

    Mutably dereferences the value.
    source§

    impl<T: FromBytes + Hash, M: Mutability, B: Borrow<MappedPages>> Hash for BorrowedMappedPages<T, M, B>

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<T: FromBytes + Ord, M: Mutability, B: Borrow<MappedPages>> Ord for BorrowedMappedPages<T, M, B>

    source§

    fn cmp(&self, other: &Self) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<T: FromBytes + Ord, M: Mutability, B: Borrow<MappedPages>> Ord for BorrowedMappedPages<T, M, B>

    source§

    fn cmp(&self, other: &Self) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl<T: FromBytes + PartialEq, M: Mutability, B: Borrow<MappedPages>> PartialEq<BorrowedMappedPages<T, M, B>> for BorrowedMappedPages<T, M, B>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl<T: FromBytes + PartialEq, M: Mutability, B: Borrow<MappedPages>> PartialEq<BorrowedMappedPages<T, M, B>> for BorrowedMappedPages<T, M, B>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<T: FromBytes + PartialOrd, M: Mutability, B: Borrow<MappedPages>> PartialOrd<BorrowedMappedPages<T, M, B>> for BorrowedMappedPages<T, M, B>

    source§

    fn partial_cmp(&self, other: &Self) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    source§

    impl<T: FromBytes + PartialOrd, M: Mutability, B: Borrow<MappedPages>> PartialOrd<BorrowedMappedPages<T, M, B>> for BorrowedMappedPages<T, M, B>

    source§

    fn partial_cmp(&self, other: &Self) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl<T: FromBytes + Eq, M: Mutability, B: Borrow<MappedPages>> Eq for BorrowedMappedPages<T, M, B>

    Auto Trait Implementations§

    §

    impl<T, M, B> RefUnwindSafe for BorrowedMappedPages<T, M, B>where +operator. Read more

    source§

    impl<T: FromBytes + Eq, M: Mutability, B: Borrow<MappedPages>> Eq for BorrowedMappedPages<T, M, B>

    Auto Trait Implementations§

    §

    impl<T, M, B> RefUnwindSafe for BorrowedMappedPages<T, M, B>where B: RefUnwindSafe, M: RefUnwindSafe, T: RefUnwindSafe,

    §

    impl<T, M, B> Send for BorrowedMappedPages<T, M, B>where diff --git a/doc/memory/struct.BorrowedSliceMappedPages.html b/doc/memory/struct.BorrowedSliceMappedPages.html index 57716b9d1a..8bcb5a2f8d 100644 --- a/doc/memory/struct.BorrowedSliceMappedPages.html +++ b/doc/memory/struct.BorrowedSliceMappedPages.html @@ -1,9 +1,9 @@ -BorrowedSliceMappedPages in memory - Rust
    pub struct BorrowedSliceMappedPages<T, M = Immutable, B = MappedPages>where
    +BorrowedSliceMappedPages in memory - Rust
    pub struct BorrowedSliceMappedPages<T, M = Immutable, B = MappedPages>where
         T: FromBytes,
         M: Mutability,
         B: Borrow<MappedPages>,{ /* private fields */ }
    Expand description

    A borrowed MappedPages object that derefs to a slice &[T] and optionally also &mut [T].

    See the docs of BorrowedMappedPages for more detail.

    -

    Implementations§

    source§

    impl<T: FromBytes, B: Borrow<MappedPages>> BorrowedSliceMappedPages<T, Immutable, B>

    source

    pub fn from( +

    Implementations§

    source§

    impl<T: FromBytes, B: Borrow<MappedPages>> BorrowedSliceMappedPages<T, Immutable, B>

    source

    pub fn from( mp: B, byte_offset: usize, length: usize @@ -30,7 +30,7 @@

    Arguments

    Upon failure, returns an error containing the unmodified MappedPages and a string describing the error.

    -

    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowedSliceMappedPages<T, Mutable, B>

    source

    pub fn from_mut( +

    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowedSliceMappedPages<T, Mutable, B>

    source

    pub fn from_mut( mp: B, byte_offset: usize, length: usize @@ -57,8 +57,8 @@

    Arguments

    Upon failure, returns an error containing the unmodified MappedPages and a string describing the error.

    -
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> BorrowedSliceMappedPages<T, M, B>

    source

    pub fn into_inner(self) -> B

    Consumes this object and returns the inner MappedPages.

    -
    source

    pub fn inner_ref(&self) -> &B

    Returns a reference to the inner borrowed MappedPages.

    +
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> BorrowedSliceMappedPages<T, M, B>

    source

    pub fn into_inner(self) -> B

    Consumes this object and returns the inner MappedPages.

    +
    source

    pub fn inner_ref(&self) -> &B

    Returns a reference to the inner borrowed MappedPages.

    Methods from Deref<Target = [T]>§

    1.0.0 · source

    pub fn len(&self) -> usize

    Returns the number of elements in the slice.

    Examples
    let a = [1, 2, 3];
    @@ -2398,22 +2398,22 @@ 
    Examples
    Examples
    assert_eq!(["hello", "world"].connect(" "), "hello world");
     assert_eq!([[1, 2], [3, 4]].connect(&0), [1, 2, 0, 3, 4]);
    -

    Trait Implementations§

    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> AsMut<[T]> for BorrowedSliceMappedPages<T, Mutable, B>

    Only Mutable BorrowedSliceMappedPages implement AsMut<T>.

    -
    source§

    fn as_mut(&mut self) -> &mut [T]

    Converts this type into a mutable reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> AsRef<[T]> for BorrowedSliceMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedSliceMappedPages implement AsRef<[T]>.

    -
    source§

    fn as_ref(&self) -> &[T]

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Borrow<[T]> for BorrowedSliceMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedSliceMappedPages implement Borrow<T>.

    -
    source§

    fn borrow(&self) -> &[T]

    Immutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowMut<[T]> for BorrowedSliceMappedPages<T, Mutable, B>

    Only Mutable BorrowedSliceMappedPages implement BorrowMut<T>.

    -
    source§

    fn borrow_mut(&mut self) -> &mut [T]

    Mutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedSliceMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedSliceMappedPages can deref into &[T].

    -
    §

    type Target = [T]

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &[T]

    Dereferences the value.
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> DerefMut for BorrowedSliceMappedPages<T, Mutable, B>

    Only Mutable BorrowedSliceMappedPages can deref into &mut T.

    -
    source§

    fn deref_mut(&mut self) -> &mut [T]

    Mutably dereferences the value.
    source§

    impl<T: FromBytes + Hash, M: Mutability, B: Borrow<MappedPages>> Hash for BorrowedSliceMappedPages<T, M, B>

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where +

    Trait Implementations§

    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> AsMut<[T]> for BorrowedSliceMappedPages<T, Mutable, B>

    Only Mutable BorrowedSliceMappedPages implement AsMut<T>.

    +
    source§

    fn as_mut(&mut self) -> &mut [T]

    Converts this type into a mutable reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> AsRef<[T]> for BorrowedSliceMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedSliceMappedPages implement AsRef<[T]>.

    +
    source§

    fn as_ref(&self) -> &[T]

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Borrow<[T]> for BorrowedSliceMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedSliceMappedPages implement Borrow<T>.

    +
    source§

    fn borrow(&self) -> &[T]

    Immutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> BorrowMut<[T]> for BorrowedSliceMappedPages<T, Mutable, B>

    Only Mutable BorrowedSliceMappedPages implement BorrowMut<T>.

    +
    source§

    fn borrow_mut(&mut self) -> &mut [T]

    Mutably borrows from an owned value. Read more
    source§

    impl<T: FromBytes, M: Mutability, B: Borrow<MappedPages>> Deref for BorrowedSliceMappedPages<T, M, B>

    Both Mutable and Immutable BorrowedSliceMappedPages can deref into &[T].

    +
    §

    type Target = [T]

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &[T]

    Dereferences the value.
    source§

    impl<T: FromBytes, B: BorrowMut<MappedPages>> DerefMut for BorrowedSliceMappedPages<T, Mutable, B>

    Only Mutable BorrowedSliceMappedPages can deref into &mut T.

    +
    source§

    fn deref_mut(&mut self) -> &mut [T]

    Mutably dereferences the value.
    source§

    impl<T: FromBytes + Hash, M: Mutability, B: Borrow<MappedPages>> Hash for BorrowedSliceMappedPages<T, M, B>

    source§

    fn hash<H: Hasher>(&self, state: &mut H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<T: FromBytes + Ord, M: Mutability, B: Borrow<MappedPages>> Ord for BorrowedSliceMappedPages<T, M, B>

    source§

    fn cmp(&self, other: &Self) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl<T: FromBytes + Ord, M: Mutability, B: Borrow<MappedPages>> Ord for BorrowedSliceMappedPages<T, M, B>

    source§

    fn cmp(&self, other: &Self) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl<T: FromBytes + PartialEq, M: Mutability, B: Borrow<MappedPages>> PartialEq<BorrowedSliceMappedPages<T, M, B>> for BorrowedSliceMappedPages<T, M, B>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd<Self>,
    Restrict a value to a certain interval. Read more
    source§

    impl<T: FromBytes + PartialEq, M: Mutability, B: Borrow<MappedPages>> PartialEq<BorrowedSliceMappedPages<T, M, B>> for BorrowedSliceMappedPages<T, M, B>

    source§

    fn eq(&self, other: &Self) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<T: FromBytes + PartialOrd, M: Mutability, B: Borrow<MappedPages>> PartialOrd<BorrowedSliceMappedPages<T, M, B>> for BorrowedSliceMappedPages<T, M, B>

    source§

    fn partial_cmp(&self, other: &Self) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    source§

    impl<T: FromBytes + PartialOrd, M: Mutability, B: Borrow<MappedPages>> PartialOrd<BorrowedSliceMappedPages<T, M, B>> for BorrowedSliceMappedPages<T, M, B>

    source§

    fn partial_cmp(&self, other: &Self) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl<T: FromBytes + Eq, M: Mutability, B: Borrow<MappedPages>> Eq for BorrowedSliceMappedPages<T, M, B>

    Auto Trait Implementations§

    §

    impl<T, M, B> RefUnwindSafe for BorrowedSliceMappedPages<T, M, B>where +operator. Read more

    source§

    impl<T: FromBytes + Eq, M: Mutability, B: Borrow<MappedPages>> Eq for BorrowedSliceMappedPages<T, M, B>

    Auto Trait Implementations§

    §

    impl<T, M, B> RefUnwindSafe for BorrowedSliceMappedPages<T, M, B>where B: RefUnwindSafe, M: RefUnwindSafe, T: RefUnwindSafe,

    §

    impl<T, M, B> Send for BorrowedSliceMappedPages<T, M, B>where diff --git a/doc/memory/struct.CopyableFrameRange.html b/doc/memory/struct.CopyableFrameRange.html index c5daa5a0cd..ffc3febcd4 100644 --- a/doc/memory/struct.CopyableFrameRange.html +++ b/doc/memory/struct.CopyableFrameRange.html @@ -1,5 +1,5 @@ CopyableFrameRange in memory - Rust
    pub struct CopyableFrameRange { /* private fields */ }
    Expand description

    A FrameRange that implements Copy

    -

    Trait Implementations§

    §

    impl Clone for CopyableFrameRange

    §

    fn clone(&self) -> CopyableFrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl From<CopyableFrameRange> for FrameRange

    §

    fn from(cr: CopyableFrameRange) -> FrameRange

    Converts to this type from the input type.
    §

    impl From<FrameRange> for CopyableFrameRange

    §

    fn from(r: FrameRange) -> CopyableFrameRange

    Converts to this type from the input type.
    §

    impl Copy for CopyableFrameRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    §

    impl Clone for CopyableFrameRange

    §

    fn clone(&self) -> CopyableFrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl From<CopyableFrameRange> for FrameRange

    §

    fn from(cr: CopyableFrameRange) -> FrameRange

    Converts to this type from the input type.
    §

    impl From<FrameRange> for CopyableFrameRange

    §

    fn from(r: FrameRange) -> CopyableFrameRange

    Converts to this type from the input type.
    §

    impl Copy for CopyableFrameRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory/struct.EarlyIdentityMappedPages.html b/doc/memory/struct.EarlyIdentityMappedPages.html index 00a1d04a09..2cb932dfaa 100644 --- a/doc/memory/struct.EarlyIdentityMappedPages.html +++ b/doc/memory/struct.EarlyIdentityMappedPages.html @@ -1,4 +1,4 @@ -EarlyIdentityMappedPages in memory - Rust
    pub struct EarlyIdentityMappedPages { /* private fields */ }
    Expand description

    The set of identity mappings that should be dropped before starting the first application.

    +EarlyIdentityMappedPages in memory - Rust
    pub struct EarlyIdentityMappedPages { /* private fields */ }
    Expand description

    The set of identity mappings that should be dropped before starting the first application.

    Currently there are only 4 identity mappings, used for the base kernel image:

    1. the .init early text section,
    2. @@ -6,7 +6,7 @@
    3. the .rodata section, which includes all read-only data,
    4. the .data section, which includes .bss and all read-write data.
    -

    Trait Implementations§

    source§

    impl Debug for EarlyIdentityMappedPages

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for EarlyIdentityMappedPages

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory/struct.FrameRange.html b/doc/memory/struct.FrameRange.html index 786700dc57..457c0bcff9 100644 --- a/doc/memory/struct.FrameRange.html +++ b/doc/memory/struct.FrameRange.html @@ -1,4 +1,4 @@ -FrameRange in memory - Rust

    Struct memory::FrameRange

    pub struct FrameRange(_);
    Expand description

    A range of Frames that are contiguous in physical memory.

    +FrameRange in memory - Rust

    Struct memory::FrameRange

    pub struct FrameRange(_);
    Expand description

    A range of Frames that are contiguous in physical memory.

    Implementations§

    §

    impl FrameRange

    pub const fn new(start: Frame, end: Frame) -> FrameRange

    Creates a new range of Frames that spans from start to end, both inclusive bounds.

    pub const fn empty() -> FrameRange

    Creates a FrameRange that will always yield None when iterated.

    pub const fn from_phys_addr( @@ -21,6 +21,7 @@

    Examples

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given Frame.

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the Frames that overlap across this FrameRange and the given other FrameRange.

    If there is no overlap between the two ranges, None is returned.

    +

    pub fn contains_range(&self, other: &FrameRange) -> bool

    Returns true if the other FrameRange is fully contained within this FrameRange.

    Methods from Deref<Target = RangeInclusive<Frame>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    @@ -28,7 +29,7 @@
    Examples
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere Idx: PartialOrd<U>, U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    -

    Trait Implementations§

    §

    impl Clone for FrameRange

    §

    fn clone(&self) -> FrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FrameRange

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for FrameRange

    §

    type Target = RangeInclusive<Frame>

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &RangeInclusive<Frame>

    Dereferences the value.
    §

    impl DerefMut for FrameRange

    §

    fn deref_mut(&mut self) -> &mut RangeInclusive<Frame>

    Mutably dereferences the value.
    §

    impl From<CopyableFrameRange> for FrameRange

    §

    fn from(cr: CopyableFrameRange) -> FrameRange

    Converts to this type from the input type.
    §

    impl From<FrameRange> for CopyableFrameRange

    §

    fn from(r: FrameRange) -> CopyableFrameRange

    Converts to this type from the input type.
    §

    impl IntoIterator for FrameRange

    §

    type Item = Frame

    The type of the elements being iterated over.
    §

    type IntoIter = RangeInclusiveIterator<Frame>

    Which kind of iterator are we turning this into?
    §

    fn into_iter(self) -> <FrameRange as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl PartialEq<FrameRange> for FrameRange

    §

    fn eq(&self, other: &FrameRange) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    §

    impl Clone for FrameRange

    §

    fn clone(&self) -> FrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for FrameRange

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Deref for FrameRange

    §

    type Target = RangeInclusive<Frame>

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &RangeInclusive<Frame>

    Dereferences the value.
    §

    impl DerefMut for FrameRange

    §

    fn deref_mut(&mut self) -> &mut RangeInclusive<Frame>

    Mutably dereferences the value.
    §

    impl From<CopyableFrameRange> for FrameRange

    §

    fn from(cr: CopyableFrameRange) -> FrameRange

    Converts to this type from the input type.
    §

    impl From<FrameRange> for CopyableFrameRange

    §

    fn from(r: FrameRange) -> CopyableFrameRange

    Converts to this type from the input type.
    §

    impl IntoIterator for FrameRange

    §

    type Item = Frame

    The type of the elements being iterated over.
    §

    type IntoIter = RangeInclusiveIterator<Frame>

    Which kind of iterator are we turning this into?
    §

    fn into_iter(self) -> <FrameRange as IntoIterator>::IntoIter

    Creates an iterator from a value. Read more
    §

    impl PartialEq<FrameRange> for FrameRange

    §

    fn eq(&self, other: &FrameRange) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl Eq for FrameRange

    §

    impl StructuralEq for FrameRange

    §

    impl StructuralPartialEq for FrameRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere diff --git a/doc/memory/struct.Immutable.html b/doc/memory/struct.Immutable.html index 012354b97d..3df78b8366 100644 --- a/doc/memory/struct.Immutable.html +++ b/doc/memory/struct.Immutable.html @@ -1,7 +1,7 @@ -Immutable in memory - Rust

    Struct memory::Immutable

    source ·
    #[non_exhaustive]
    pub struct Immutable {}
    Expand description

    A marker type used to indicate that a BorrowedMappedPages +Immutable in memory - Rust

    Struct memory::Immutable

    source ·
    #[non_exhaustive]
    pub struct Immutable {}
    Expand description

    A marker type used to indicate that a BorrowedMappedPages or BorrowedSliceMappedPages is borrowed immutably.

    Implements the Mutability trait.

    -

    Trait Implementations§

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory/struct.InitialMemoryMappings.html b/doc/memory/struct.InitialMemoryMappings.html index cd0eceb6f2..dc58ee8585 100644 --- a/doc/memory/struct.InitialMemoryMappings.html +++ b/doc/memory/struct.InitialMemoryMappings.html @@ -1,4 +1,4 @@ -InitialMemoryMappings in memory - Rust
    pub struct InitialMemoryMappings {
    +InitialMemoryMappings in memory - Rust
    pub struct InitialMemoryMappings {
         pub page_table: PageTable,
         pub text: NoDrop<MappedPages>,
         pub rodata: NoDrop<MappedPages>,
    @@ -26,7 +26,7 @@
     
     
    §additional: NoDrop<MappedPages>

    The list of additional mappings that must be kept forever.

    Currently, this contains only one mapping: the early VGA buffer.

    -

    Trait Implementations§

    source§

    impl Debug for InitialMemoryMappings

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for InitialMemoryMappings

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory/struct.MappedPages.html b/doc/memory/struct.MappedPages.html index 62ed3311f0..69123bdc0e 100644 --- a/doc/memory/struct.MappedPages.html +++ b/doc/memory/struct.MappedPages.html @@ -5,7 +5,7 @@ it will be dropped, and the pages will be unmapped and then also de-allocated. Thus, it ensures memory safety by guaranteeing that this object must be held in order to access data stored in these mapped pages, much like a guard type.

    -

    Implementations§

    source§

    impl MappedPages

    source

    pub const fn empty() -> MappedPages

    Returns an empty MappedPages object that performs no allocation or mapping actions. +

    Implementations§

    source§

    impl MappedPages

    source

    pub const fn empty() -> MappedPages

    Returns an empty MappedPages object that performs no allocation or mapping actions. Can be used as a placeholder, but will not permit any real usage.

    source

    pub fn flags(&self) -> PteFlagsArch

    Returns the flags that describe this MappedPages page table permissions.

    source

    pub fn merge( @@ -66,13 +66,13 @@

    Note
    source

    pub fn unmap_into_parts( self, active_table_mapper: &mut Mapper -) -> Result<(AllocatedPages, Option<AllocatedFrames>), Self>

    Consumes and unmaps this MappedPages object without auto-deallocating its AllocatedPages and AllocatedFrames, +) -> Result<(AllocatedPages, Option<AllocatedFrames>), Self>

    Consumes and unmaps this MappedPages object without auto-deallocating its AllocatedPages and AllocatedFrames, allowing the caller to continue using them directly, e.g., reusing them for a future mapping. This removes the need to attempt to to reallocate those same pages or frames on a separate code path.

    Note that only the first contiguous range of AllocatedFrames will be returned, if any were unmapped. All other non-contiguous ranges will be auto-dropped and deallocated. This is due to how frame deallocation works.

    -
    source

    pub fn as_type<T: FromBytes>( +

    source

    pub fn as_type<T: FromBytes>( &self, byte_offset: usize ) -> Result<&T, &'static str>

    Reinterprets this MappedPages’s underlying memory region as a struct of the given type T, @@ -102,12 +102,12 @@

    Arguments
    with a lifetime dependent upon the lifetime of this MappedPages object. This ensures safety by guaranteeing that the returned struct reference cannot be used after this MappedPages object is dropped and unmapped.

    -
    source

    pub fn as_type_mut<T: FromBytes>( +

    source

    pub fn as_type_mut<T: FromBytes>( &mut self, byte_offset: usize ) -> Result<&mut T, &'static str>

    Same as MappedPages::as_type(), but returns a mutable reference to the type T.

    Thus, it also checks that the underlying mapping is writable.

    -
    source

    pub fn as_slice<T: FromBytes>( +

    source

    pub fn as_slice<T: FromBytes>( &self, byte_offset: usize, length: usize @@ -130,26 +130,26 @@

    Arguments
    with a lifetime dependent upon the lifetime of this MappedPages object. This ensures safety by guaranteeing that the returned slice cannot be used after this MappedPages object is dropped and unmapped.

    -
    source

    pub fn as_slice_mut<T: FromBytes>( +

    source

    pub fn as_slice_mut<T: FromBytes>( &mut self, byte_offset: usize, length: usize ) -> Result<&mut [T], &'static str>

    Same as MappedPages::as_slice(), but returns a mutable slice.

    Thus, it checks that the underlying mapping is writable.

    -
    source

    pub fn into_borrowed<T: FromBytes>( +

    source

    pub fn into_borrowed<T: FromBytes>( self, byte_offset: usize ) -> Result<BorrowedMappedPages<T, Immutable>, (MappedPages, &'static str)>

    A convenience function for BorrowedMappedPages::from().

    -
    source

    pub fn into_borrowed_mut<T: FromBytes>( +

    source

    pub fn into_borrowed_mut<T: FromBytes>( self, byte_offset: usize ) -> Result<BorrowedMappedPages<T, Mutable>, (MappedPages, &'static str)>

    A convenience function for BorrowedMappedPages::from_mut().

    -
    source

    pub fn into_borrowed_slice<T: FromBytes>( +

    source

    pub fn into_borrowed_slice<T: FromBytes>( self, byte_offset: usize, length: usize ) -> Result<BorrowedSliceMappedPages<T, Immutable>, (MappedPages, &'static str)>

    A convenience function for BorrowedSliceMappedPages::from().

    -
    source

    pub fn into_borrowed_slice_mut<T: FromBytes>( +

    source

    pub fn into_borrowed_slice_mut<T: FromBytes>( self, byte_offset: usize, length: usize @@ -173,7 +173,7 @@

    Examples

    If the range covers addresses 0x2000 through 0x3FFF, then address_at_offset(0x1500) would return Some(0x3500), and address_at_offset(0x2000) would return None.

    -

    Trait Implementations§

    source§

    impl Debug for MappedPages

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for MappedPages

    §

    type Target = AllocatedPages

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &AllocatedPages

    Dereferences the value.
    source§

    impl Drop for MappedPages

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for MappedPages

    §

    impl Send for MappedPages

    §

    impl Sync for MappedPages

    §

    impl Unpin for MappedPages

    §

    impl UnwindSafe for MappedPages

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for MappedPages

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for MappedPages

    §

    type Target = AllocatedPages

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &AllocatedPages

    Dereferences the value.
    source§

    impl Drop for MappedPages

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for MappedPages

    §

    impl Send for MappedPages

    §

    impl Sync for MappedPages

    §

    impl Unpin for MappedPages

    §

    impl UnwindSafe for MappedPages

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory/struct.Mapper.html b/doc/memory/struct.Mapper.html index 9c4a67b17b..adb08bb847 100644 --- a/doc/memory/struct.Mapper.html +++ b/doc/memory/struct.Mapper.html @@ -9,7 +9,7 @@
    source

    pub fn map_allocated_pages_to<F: Into<PteFlagsArch>>( &mut self, pages: AllocatedPages, - frames: AllocatedFrames, + frames: AllocatedFrames, flags: F ) -> Result<MappedPages, &'static str>

    Maps the given virtual AllocatedPages to the given physical AllocatedFrames.

    Consumes the given AllocatedPages and returns a MappedPages object which contains those AllocatedPages.

    diff --git a/doc/memory/struct.MemoryManagementInfo.html b/doc/memory/struct.MemoryManagementInfo.html index b405ba71b4..76bd747dbc 100644 --- a/doc/memory/struct.MemoryManagementInfo.html +++ b/doc/memory/struct.MemoryManagementInfo.html @@ -1,4 +1,4 @@ -MemoryManagementInfo in memory - Rust
    pub struct MemoryManagementInfo {
    +MemoryManagementInfo in memory - Rust
    pub struct MemoryManagementInfo {
         pub page_table: PageTable,
         pub extra_mapped_pages: Vec<MappedPages>,
     }
    Expand description

    This holds all the information for a Task’s memory mappings and address space @@ -7,7 +7,7 @@

    §extra_mapped_pages: Vec<MappedPages>

    The list of additional memory mappings that have the same lifetime as this MMI and are thus owned by this MMI. This currently includes only the mappings for the heap and the early VGA buffer.

    -

    Trait Implementations§

    source§

    impl Debug for MemoryManagementInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    source§

    impl Debug for MemoryManagementInfo

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory/struct.Mutable.html b/doc/memory/struct.Mutable.html index 2988482caf..544a7e9a99 100644 --- a/doc/memory/struct.Mutable.html +++ b/doc/memory/struct.Mutable.html @@ -1,7 +1,7 @@ -Mutable in memory - Rust

    Struct memory::Mutable

    source ·
    #[non_exhaustive]
    pub struct Mutable {}
    Expand description

    A marker type used to indicate that a BorrowedMappedPages +Mutable in memory - Rust

    Struct memory::Mutable

    source ·
    #[non_exhaustive]
    pub struct Mutable {}
    Expand description

    A marker type used to indicate that a BorrowedMappedPages or BorrowedSliceMappedPages is borrowed mutably.

    Implements the Mutability trait.

    -

    Trait Implementations§

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Trait Implementations§

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory/struct.PageRange.html b/doc/memory/struct.PageRange.html index 2fd38a84a0..335b12cf42 100644 --- a/doc/memory/struct.PageRange.html +++ b/doc/memory/struct.PageRange.html @@ -1,4 +1,4 @@ -PageRange in memory - Rust

    Struct memory::PageRange

    pub struct PageRange(_);
    Expand description

    A range of Pages that are contiguous in virtual memory.

    +PageRange in memory - Rust

    Struct memory::PageRange

    pub struct PageRange(_);
    Expand description

    A range of Pages that are contiguous in virtual memory.

    Implementations§

    §

    impl PageRange

    pub const fn new(start: Page, end: Page) -> PageRange

    Creates a new range of Pages that spans from start to end, both inclusive bounds.

    pub const fn empty() -> PageRange

    Creates a PageRange that will always yield None when iterated.

    pub const fn from_virt_addr( @@ -21,6 +21,7 @@

    Examples

    pub fn to_extended(&self, to_include: Page) -> PageRange

    Returns a new separate PageRange that is extended to include the given Page.

    pub fn overlap(&self, other: &PageRange) -> Option<PageRange>

    Returns an inclusive PageRange representing the Pages that overlap across this PageRange and the given other PageRange.

    If there is no overlap between the two ranges, None is returned.

    +

    pub fn contains_range(&self, other: &PageRange) -> bool

    Returns true if the other PageRange is fully contained within this PageRange.

    Methods from Deref<Target = RangeInclusive<Page>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    diff --git a/doc/memory/struct.PageTable.html b/doc/memory/struct.PageTable.html index c12a9ec730..fc619bc9e8 100644 --- a/doc/memory/struct.PageTable.html +++ b/doc/memory/struct.PageTable.html @@ -2,7 +2,7 @@

    Auto-derefs into a Mapper for easy invocation of memory mapping functions.

    Implementations§

    source§

    impl PageTable

    source

    pub fn new_table( current_page_table: &mut PageTable, - new_p4_frame: AllocatedFrames, + new_p4_frame: AllocatedFrames, page: Option<AllocatedPages> ) -> Result<PageTable, &'static str>

    Initializes a new top-level P4 PageTable whose root is located in the given new_p4_frame. It requires using the given current_active_table to set up its initial mapping contents.

    @@ -38,7 +38,7 @@
    Note
    source

    pub fn map_allocated_pages_to<F: Into<PteFlagsArch>>( &mut self, pages: AllocatedPages, - frames: AllocatedFrames, + frames: AllocatedFrames, flags: F ) -> Result<MappedPages, &'static str>

    Maps the given virtual AllocatedPages to the given physical AllocatedFrames.

    Consumes the given AllocatedPages and returns a MappedPages object which contains those AllocatedPages.

    diff --git a/doc/memory/struct.PhysicalAddress.html b/doc/memory/struct.PhysicalAddress.html index 90e679a50f..d80e9ef52c 100644 --- a/doc/memory/struct.PhysicalAddress.html +++ b/doc/memory/struct.PhysicalAddress.html @@ -10,7 +10,7 @@

    pub const fn frame_offset(&self) -> usize

    Returns the offset from the frame boundary specified by this `PhysicalAddress.

    For example, if the PAGE_SIZE is 4096 (4KiB), then this will return the least significant 12 bits (12:0] of this PhysicalAddress.

    -

    Trait Implementations§

    §

    impl Add<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the + operation. Read more
    §

    impl Add<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: usize) -> PhysicalAddress

    Performs the + operation. Read more
    §

    impl AddAssign<PhysicalAddress> for PhysicalAddress

    §

    fn add_assign(&mut self, rhs: PhysicalAddress)

    Performs the += operation. Read more
    §

    impl AddAssign<usize> for PhysicalAddress

    §

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    §

    impl Binary for PhysicalAddress

    §

    fn fmt( +

    Trait Implementations§

    §

    impl Add<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the + operation. Read more
    §

    impl Add<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: usize) -> PhysicalAddress

    Performs the + operation. Read more
    §

    impl AddAssign<PhysicalAddress> for PhysicalAddress

    §

    fn add_assign(&mut self, rhs: PhysicalAddress)

    Performs the += operation. Read more
    §

    impl AddAssign<usize> for PhysicalAddress

    §

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    §

    impl Binary for PhysicalAddress

    §

    fn fmt( &self, _derive_more_display_formatter: &mut Formatter<'_> ) -> Result<(), Error>

    Formats the value using the given formatter.
    §

    impl BitAnd<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the & operator.
    §

    fn bitand(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the & operation. Read more
    §

    impl BitAndAssign<PhysicalAddress> for PhysicalAddress

    §

    fn bitand_assign(&mut self, rhs: PhysicalAddress)

    Performs the &= operation. Read more
    §

    impl BitOr<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the | operator.
    §

    fn bitor(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the | operation. Read more
    §

    impl BitOrAssign<PhysicalAddress> for PhysicalAddress

    §

    fn bitor_assign(&mut self, rhs: PhysicalAddress)

    Performs the |= operation. Read more
    §

    impl BitXor<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the ^ operator.
    §

    fn bitxor(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the ^ operation. Read more
    §

    impl BitXorAssign<PhysicalAddress> for PhysicalAddress

    §

    fn bitxor_assign(&mut self, rhs: PhysicalAddress)

    Performs the ^= operation. Read more
    §

    impl Clone for PhysicalAddress

    §

    fn clone(&self) -> PhysicalAddress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for PhysicalAddress

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for PhysicalAddress

    §

    fn default() -> PhysicalAddress

    Returns the “default value” for a type. Read more
    §

    impl Display for PhysicalAddress

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Hash for PhysicalAddress

    §

    fn hash<__H>(&self, state: &mut __H)where @@ -29,7 +29,7 @@ by ==.

    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    §

    impl PartialOrd<PhysicalAddress> for PhysicalAddress

    §

    fn partial_cmp(&self, other: &PhysicalAddress) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    §

    impl Pointer for PhysicalAddress

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    §

    impl Sub<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the - operation. Read more
    §

    impl Sub<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: usize) -> PhysicalAddress

    Performs the - operation. Read more
    §

    impl SubAssign<PhysicalAddress> for PhysicalAddress

    §

    fn sub_assign(&mut self, rhs: PhysicalAddress)

    Performs the -= operation. Read more
    §

    impl SubAssign<usize> for PhysicalAddress

    §

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    §

    impl UpperHex for PhysicalAddress

    §

    fn fmt( +operator. Read more

    §

    impl Pointer for PhysicalAddress

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter.
    §

    impl Sub<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the - operation. Read more
    §

    impl Sub<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    §

    fn sub(self, rhs: usize) -> PhysicalAddress

    Performs the - operation. Read more
    §

    impl SubAssign<PhysicalAddress> for PhysicalAddress

    §

    fn sub_assign(&mut self, rhs: PhysicalAddress)

    Performs the -= operation. Read more
    §

    impl SubAssign<usize> for PhysicalAddress

    §

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    §

    impl UpperHex for PhysicalAddress

    §

    fn fmt( &self, _derive_more_display_formatter: &mut Formatter<'_> ) -> Result<(), Error>

    Formats the value using the given formatter.
    §

    impl Copy for PhysicalAddress

    §

    impl Eq for PhysicalAddress

    §

    impl FromBytes for PhysicalAddress

    §

    impl StructuralEq for PhysicalAddress

    §

    impl StructuralPartialEq for PhysicalAddress

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere diff --git a/doc/memory/struct.VirtualAddress.html b/doc/memory/struct.VirtualAddress.html index f637ec937c..8b9f1388b9 100644 --- a/doc/memory/struct.VirtualAddress.html +++ b/doc/memory/struct.VirtualAddress.html @@ -10,7 +10,7 @@

    pub const fn page_offset(&self) -> usize

    Returns the offset from the page boundary specified by this `VirtualAddress.

    For example, if the PAGE_SIZE is 4096 (4KiB), then this will return the least significant 12 bits (12:0] of this VirtualAddress.

    -

    Trait Implementations§

    §

    impl Add<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the + operation. Read more
    §

    impl Add<usize> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: usize) -> VirtualAddress

    Performs the + operation. Read more
    §

    impl AddAssign<VirtualAddress> for VirtualAddress

    §

    fn add_assign(&mut self, rhs: VirtualAddress)

    Performs the += operation. Read more
    §

    impl AddAssign<usize> for VirtualAddress

    §

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    §

    impl Binary for VirtualAddress

    §

    fn fmt( +

    Trait Implementations§

    §

    impl Add<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the + operation. Read more
    §

    impl Add<usize> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: usize) -> VirtualAddress

    Performs the + operation. Read more
    §

    impl AddAssign<VirtualAddress> for VirtualAddress

    §

    fn add_assign(&mut self, rhs: VirtualAddress)

    Performs the += operation. Read more
    §

    impl AddAssign<usize> for VirtualAddress

    §

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    §

    impl Binary for VirtualAddress

    §

    fn fmt( &self, _derive_more_display_formatter: &mut Formatter<'_> ) -> Result<(), Error>

    Formats the value using the given formatter.
    §

    impl BitAnd<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the & operator.
    §

    fn bitand(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the & operation. Read more
    §

    impl BitAndAssign<VirtualAddress> for VirtualAddress

    §

    fn bitand_assign(&mut self, rhs: VirtualAddress)

    Performs the &= operation. Read more
    §

    impl BitOr<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the | operator.
    §

    fn bitor(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the | operation. Read more
    §

    impl BitOrAssign<VirtualAddress> for VirtualAddress

    §

    fn bitor_assign(&mut self, rhs: VirtualAddress)

    Performs the |= operation. Read more
    §

    impl BitXor<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the ^ operator.
    §

    fn bitxor(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the ^ operation. Read more
    §

    impl BitXorAssign<VirtualAddress> for VirtualAddress

    §

    fn bitxor_assign(&mut self, rhs: VirtualAddress)

    Performs the ^= operation. Read more
    §

    impl Clone for VirtualAddress

    §

    fn clone(&self) -> VirtualAddress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl Debug for VirtualAddress

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Default for VirtualAddress

    §

    fn default() -> VirtualAddress

    Returns the “default value” for a type. Read more
    §

    impl Display for VirtualAddress

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl Hash for VirtualAddress

    §

    fn hash<__H>(&self, state: &mut __H)where diff --git a/doc/memory/trait.Mutability.html b/doc/memory/trait.Mutability.html index 90bd730f7c..b8cf4160cb 100644 --- a/doc/memory/trait.Mutability.html +++ b/doc/memory/trait.Mutability.html @@ -1,4 +1,4 @@ -Mutability in memory - Rust

    Trait memory::Mutability

    source ·
    pub trait Mutability: Sealed { }
    Expand description

    A trait for parameterizing a BorrowedMappedPages +Mutability in memory - Rust

    Trait memory::Mutability

    source ·
    pub trait Mutability: Sealed { }
    Expand description

    A trait for parameterizing a BorrowedMappedPages or BorrowedSliceMappedPages as mutably or immutably borrowed.

    Only Mutable and Immutable are able to implement this trait.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/doc/memory/type.AllocatedFrames.html b/doc/memory/type.AllocatedFrames.html new file mode 100644 index 0000000000..4bcb7f59a1 --- /dev/null +++ b/doc/memory/type.AllocatedFrames.html @@ -0,0 +1,2 @@ +AllocatedFrames in memory - Rust

    Type Definition memory::AllocatedFrames

    pub type AllocatedFrames = Frames<frame_allocator::::AllocatedFrames::{constant#0}>;
    Expand description

    A type alias for Frames in the Allocated state.

    +
    \ No newline at end of file diff --git a/doc/memory/type.MmiRef.html b/doc/memory/type.MmiRef.html index 18843426cf..52f75daa88 100644 --- a/doc/memory/type.MmiRef.html +++ b/doc/memory/type.MmiRef.html @@ -1,2 +1,2 @@ -MmiRef in memory - Rust

    Type Definition memory::MmiRef

    source ·
    pub type MmiRef = Arc<IrqSafeMutex<MemoryManagementInfo>>;
    Expand description

    A shareable reference to a MemoryManagementInfo struct wrapper in a lock.

    +MmiRef in memory - Rust

    Type Definition memory::MmiRef

    source ·
    pub type MmiRef = Arc<IrqSafeMutex<MemoryManagementInfo>>;
    Expand description

    A shareable reference to a MemoryManagementInfo struct wrapper in a lock.

    \ No newline at end of file diff --git a/doc/memory/type.UnmappedFrames.html b/doc/memory/type.UnmappedFrames.html new file mode 100644 index 0000000000..cd89174cc8 --- /dev/null +++ b/doc/memory/type.UnmappedFrames.html @@ -0,0 +1,2 @@ +UnmappedFrames in memory - Rust

    Type Definition memory::UnmappedFrames

    pub type UnmappedFrames = Frames<frame_allocator::::UnmappedFrames::{constant#0}>;
    Expand description

    A type alias for Frames in the Unmapped state.

    +
    \ No newline at end of file diff --git a/doc/memory_structs/all.html b/doc/memory_structs/all.html index 26dc3d86ae..c143eebe36 100644 --- a/doc/memory_structs/all.html +++ b/doc/memory_structs/all.html @@ -1 +1 @@ -List of all items in this crate
    \ No newline at end of file +List of all items in this crate
    \ No newline at end of file diff --git a/doc/memory_structs/enum.MemoryState.html b/doc/memory_structs/enum.MemoryState.html new file mode 100644 index 0000000000..c699b2afff --- /dev/null +++ b/doc/memory_structs/enum.MemoryState.html @@ -0,0 +1,23 @@ +MemoryState in memory_structs - Rust
    pub enum MemoryState {
    +    Free,
    +    Allocated,
    +    Mapped,
    +    Unmapped,
    +}
    Expand description

    The possible states that a range of exclusively-owned pages or frames can be in.

    +

    Variants§

    §

    Free

    Memory is free and owned by the allocator

    +
    §

    Allocated

    Memory is allocated and can be used for a mapping

    +
    §

    Mapped

    Memory is mapped (PTE has been set)

    +
    §

    Unmapped

    Memory has been unmapped (PTE has been cleared)

    +

    Trait Implementations§

    source§

    impl PartialEq<MemoryState> for MemoryState

    source§

    fn eq(&self, other: &MemoryState) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl ConstParamTy for MemoryState

    source§

    impl Eq for MemoryState

    source§

    impl StructuralEq for MemoryState

    source§

    impl StructuralPartialEq for MemoryState

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/memory_structs/index.html b/doc/memory_structs/index.html index 7ce065d389..69677a6159 100644 --- a/doc/memory_structs/index.html +++ b/doc/memory_structs/index.html @@ -1,8 +1,8 @@ -memory_structs - Rust

    Crate memory_structs

    source ·
    Expand description

    This crate contains basic types used for memory management.

    +memory_structs - Rust

    Crate memory_structs

    source ·
    Expand description

    This crate contains basic types used for memory management.

    The types of interest are divided into three categories:

    1. addresses: VirtualAddress and PhysicalAddress.
    2. “chunk” types: Page and Frame.
    3. ranges of chunks: PageRange and FrameRange.
    -

    Structs

    • A FrameRange that implements Copy
    • A PageRange that implements Copy
    • A Frame is a chunk of physical memory aligned to a [PAGE_SIZE] boundary.
    • A range of Frames that are contiguous in physical memory.
    • A Page is a chunk of virtual memory aligned to a [PAGE_SIZE] boundary.
    • A range of Pages that are contiguous in virtual memory.
    • A physical memory address, which is a usize under the hood.
    • A virtual memory address, which is a usize under the hood.
    \ No newline at end of file +

    Structs

    • A FrameRange that implements Copy
    • A PageRange that implements Copy
    • A Frame is a chunk of physical memory aligned to a [PAGE_SIZE] boundary.
    • A range of Frames that are contiguous in physical memory.
    • A Page is a chunk of virtual memory aligned to a [PAGE_SIZE] boundary.
    • A range of Pages that are contiguous in virtual memory.
    • A physical memory address, which is a usize under the hood.
    • A virtual memory address, which is a usize under the hood.

    Enums

    • The possible states that a range of exclusively-owned pages or frames can be in.
    \ No newline at end of file diff --git a/doc/memory_structs/sidebar-items.js b/doc/memory_structs/sidebar-items.js index f2a6061606..ff5eb144c9 100644 --- a/doc/memory_structs/sidebar-items.js +++ b/doc/memory_structs/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["CopyableFrameRange","CopyablePageRange","Frame","FrameRange","Page","PageRange","PhysicalAddress","VirtualAddress"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["MemoryState"],"struct":["CopyableFrameRange","CopyablePageRange","Frame","FrameRange","Page","PageRange","PhysicalAddress","VirtualAddress"]}; \ No newline at end of file diff --git a/doc/memory_structs/struct.CopyableFrameRange.html b/doc/memory_structs/struct.CopyableFrameRange.html index c552285898..d4e7bee113 100644 --- a/doc/memory_structs/struct.CopyableFrameRange.html +++ b/doc/memory_structs/struct.CopyableFrameRange.html @@ -1,5 +1,5 @@ -CopyableFrameRange in memory_structs - Rust
    pub struct CopyableFrameRange { /* private fields */ }
    Expand description

    A FrameRange that implements Copy

    -

    Trait Implementations§

    source§

    impl Clone for CopyableFrameRange

    source§

    fn clone(&self) -> CopyableFrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl From<CopyableFrameRange> for FrameRange

    source§

    fn from(cr: CopyableFrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<FrameRange> for CopyableFrameRange

    source§

    fn from(r: FrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl Copy for CopyableFrameRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +CopyableFrameRange in memory_structs - Rust
    pub struct CopyableFrameRange { /* private fields */ }
    Expand description

    A FrameRange that implements Copy

    +

    Trait Implementations§

    source§

    impl Clone for CopyableFrameRange

    source§

    fn clone(&self) -> CopyableFrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl From<CopyableFrameRange> for FrameRange

    source§

    fn from(cr: CopyableFrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<FrameRange> for CopyableFrameRange

    source§

    fn from(r: FrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl Copy for CopyableFrameRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory_structs/struct.CopyablePageRange.html b/doc/memory_structs/struct.CopyablePageRange.html index e43e943741..66f2a14f96 100644 --- a/doc/memory_structs/struct.CopyablePageRange.html +++ b/doc/memory_structs/struct.CopyablePageRange.html @@ -1,5 +1,5 @@ -CopyablePageRange in memory_structs - Rust
    pub struct CopyablePageRange { /* private fields */ }
    Expand description

    A PageRange that implements Copy

    -

    Trait Implementations§

    source§

    impl Clone for CopyablePageRange

    source§

    fn clone(&self) -> CopyablePageRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl From<CopyablePageRange> for PageRange

    source§

    fn from(cr: CopyablePageRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<PageRange> for CopyablePageRange

    source§

    fn from(r: PageRange) -> Self

    Converts to this type from the input type.
    source§

    impl Copy for CopyablePageRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +CopyablePageRange in memory_structs - Rust
    pub struct CopyablePageRange { /* private fields */ }
    Expand description

    A PageRange that implements Copy

    +

    Trait Implementations§

    source§

    impl Clone for CopyablePageRange

    source§

    fn clone(&self) -> CopyablePageRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl From<CopyablePageRange> for PageRange

    source§

    fn from(cr: CopyablePageRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<PageRange> for CopyablePageRange

    source§

    fn from(r: PageRange) -> Self

    Converts to this type from the input type.
    source§

    impl Copy for CopyablePageRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory_structs/struct.Frame.html b/doc/memory_structs/struct.Frame.html index a8d0c01265..665adad45f 100644 --- a/doc/memory_structs/struct.Frame.html +++ b/doc/memory_structs/struct.Frame.html @@ -1,22 +1,22 @@ -Frame in memory_structs - Rust

    Struct memory_structs::Frame

    source ·
    pub struct Frame { /* private fields */ }
    Expand description

    A Frame is a chunk of physical memory aligned to a [PAGE_SIZE] boundary.

    -

    Implementations§

    source§

    impl Frame

    source

    pub const fn start_address(&self) -> PhysicalAddress

    Returns the PhysicalAddress at the start of this Frame.

    -
    source

    pub const fn number(&self) -> usize

    Returns the number of this Frame.

    -
    source

    pub const fn containing_address(addr: PhysicalAddress) -> Frame

    Returns the Frame containing the given PhysicalAddress.

    -

    Trait Implementations§

    source§

    impl Add<usize> for Frame

    §

    type Output = Frame

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> Frame

    Performs the + operation. Read more
    source§

    impl AddAssign<usize> for Frame

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Clone for Frame

    source§

    fn clone(&self) -> Frame

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Frame

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Ord for Frame

    source§

    fn cmp(&self, other: &Frame) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere +Frame in memory_structs - Rust

    Struct memory_structs::Frame

    source ·
    pub struct Frame { /* private fields */ }
    Expand description

    A Frame is a chunk of physical memory aligned to a [PAGE_SIZE] boundary.

    +

    Implementations§

    source§

    impl Frame

    source

    pub const fn start_address(&self) -> PhysicalAddress

    Returns the PhysicalAddress at the start of this Frame.

    +
    source

    pub const fn number(&self) -> usize

    Returns the number of this Frame.

    +
    source

    pub const fn containing_address(addr: PhysicalAddress) -> Frame

    Returns the Frame containing the given PhysicalAddress.

    +

    Trait Implementations§

    source§

    impl Add<usize> for Frame

    §

    type Output = Frame

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> Frame

    Performs the + operation. Read more
    source§

    impl AddAssign<usize> for Frame

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Clone for Frame

    source§

    fn clone(&self) -> Frame

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Frame

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Ord for Frame

    source§

    fn cmp(&self, other: &Frame) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<Frame> for Frame

    source§

    fn eq(&self, other: &Frame) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<Frame> for Frame

    source§

    fn eq(&self, other: &Frame) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<Frame> for Frame

    source§

    fn partial_cmp(&self, other: &Frame) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<Frame> for Frame

    source§

    fn partial_cmp(&self, other: &Frame) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Step for Frame

    Implementing Step allows Frame to be used in an Iterator.

    -
    source§

    fn steps_between(start: &Frame, end: &Frame) -> Option<usize>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the number of successor steps required to get from start to end. Read more
    source§

    fn forward_checked(start: Frame, count: usize) -> Option<Frame>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor -of self count times. Read more
    source§

    fn backward_checked(start: Frame, count: usize) -> Option<Frame>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor +operator. Read more
    source§

    impl Step for Frame

    Implementing Step allows Frame to be used in an Iterator.

    +
    source§

    fn steps_between(start: &Frame, end: &Frame) -> Option<usize>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the number of successor steps required to get from start to end. Read more
    source§

    fn forward_checked(start: Frame, count: usize) -> Option<Frame>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor +of self count times. Read more
    source§

    fn backward_checked(start: Frame, count: usize) -> Option<Frame>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor of self count times. Read more
    source§

    fn forward(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor of self count times. Read more
    source§

    unsafe fn forward_unchecked(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor of self count times. Read more
    source§

    fn backward(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor of self count times. Read more
    source§

    unsafe fn backward_unchecked(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor -of self count times. Read more
    source§

    impl Sub<usize> for Frame

    §

    type Output = Frame

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> Frame

    Performs the - operation. Read more
    source§

    impl SubAssign<usize> for Frame

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl Copy for Frame

    source§

    impl Eq for Frame

    source§

    impl StructuralEq for Frame

    source§

    impl StructuralPartialEq for Frame

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Frame

    §

    impl Send for Frame

    §

    impl Sync for Frame

    §

    impl Unpin for Frame

    §

    impl UnwindSafe for Frame

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +of self count times. Read more

    source§

    impl Sub<usize> for Frame

    §

    type Output = Frame

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> Frame

    Performs the - operation. Read more
    source§

    impl SubAssign<usize> for Frame

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl Copy for Frame

    source§

    impl Eq for Frame

    source§

    impl StructuralEq for Frame

    source§

    impl StructuralPartialEq for Frame

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Frame

    §

    impl Send for Frame

    §

    impl Sync for Frame

    §

    impl Unpin for Frame

    §

    impl UnwindSafe for Frame

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory_structs/struct.FrameRange.html b/doc/memory_structs/struct.FrameRange.html index 1fd13ea901..5f22259fd0 100644 --- a/doc/memory_structs/struct.FrameRange.html +++ b/doc/memory_structs/struct.FrameRange.html @@ -1,26 +1,27 @@ -FrameRange in memory_structs - Rust
    pub struct FrameRange(_);
    Expand description

    A range of Frames that are contiguous in physical memory.

    -

    Implementations§

    source§

    impl FrameRange

    source

    pub const fn new(start: Frame, end: Frame) -> FrameRange

    Creates a new range of Frames that spans from start to end, both inclusive bounds.

    -
    source

    pub const fn empty() -> FrameRange

    Creates a FrameRange that will always yield None when iterated.

    -
    source

    pub const fn from_phys_addr( +FrameRange in memory_structs - Rust
    pub struct FrameRange(_);
    Expand description

    A range of Frames that are contiguous in physical memory.

    +

    Implementations§

    source§

    impl FrameRange

    source

    pub const fn new(start: Frame, end: Frame) -> FrameRange

    Creates a new range of Frames that spans from start to end, both inclusive bounds.

    +
    source

    pub const fn empty() -> FrameRange

    Creates a FrameRange that will always yield None when iterated.

    +
    source

    pub const fn from_phys_addr( starting_addr: PhysicalAddress, size_in_bytes: usize ) -> FrameRange

    A convenience method for creating a new FrameRange that spans all Frames from the given PhysicalAddress to an end bound based on the given size.

    -
    source

    pub const fn start_address(&self) -> PhysicalAddress

    Returns the PhysicalAddress of the starting Frame in this FrameRange.

    -
    source

    pub const fn size_in_frames(&self) -> usize

    Returns the number of Frames covered by this iterator.

    +
    source

    pub const fn start_address(&self) -> PhysicalAddress

    Returns the PhysicalAddress of the starting Frame in this FrameRange.

    +
    source

    pub const fn size_in_frames(&self) -> usize

    Returns the number of Frames covered by this iterator.

    Use this instead of Iterator::count() method. This is instant, because it doesn’t need to iterate over each entry, unlike normal iterators.

    -
    source

    pub const fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    -
    source

    pub const fn contains_address(&self, addr: PhysicalAddress) -> bool

    Returns true if this FrameRange contains the given PhysicalAddress.

    -
    source

    pub const fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>

    Returns the offset of the given PhysicalAddress within this FrameRange, i.e., addr - self.start_address().

    +
    source

    pub const fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    +
    source

    pub const fn contains_address(&self, addr: PhysicalAddress) -> bool

    Returns true if this FrameRange contains the given PhysicalAddress.

    +
    source

    pub const fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>

    Returns the offset of the given PhysicalAddress within this FrameRange, i.e., addr - self.start_address().

    If the given addr is not covered by this range of Frames, this returns None.

    Examples

    If the range covers addresses 0x2000 to 0x4000, then offset_of_address(0x3500) would return Some(0x1500).

    -
    source

    pub const fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>

    Returns the PhysicalAddress at the given offset into this FrameRangewithin this FrameRange, i.e., self.start_address() + offset.

    +
    source

    pub const fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>

    Returns the PhysicalAddress at the given offset into this FrameRangewithin this FrameRange, i.e., self.start_address() + offset.

    If the given offset is not within this range of Frames, this returns None.

    Examples

    If the range covers addresses 0x2000 through 0x3FFF, then address_at_offset(0x1500) would return Some(0x3500), and address_at_offset(0x2000) would return None.

    -
    source

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given Frame.

    -
    source

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the Frames that overlap across this FrameRange and the given other FrameRange.

    +
    source

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given Frame.

    +
    source

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the Frames that overlap across this FrameRange and the given other FrameRange.

    If there is no overlap between the two ranges, None is returned.

    +
    source

    pub fn contains_range(&self, other: &FrameRange) -> bool

    Returns true if the other FrameRange is fully contained within this FrameRange.

    Methods from Deref<Target = RangeInclusive<Frame>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    @@ -28,9 +29,9 @@
    Examples
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere Idx: PartialOrd<U>, U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    -

    Trait Implementations§

    source§

    impl Clone for FrameRange

    source§

    fn clone(&self) -> FrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for FrameRange

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for FrameRange

    §

    type Target = RangeInclusive<Frame>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &RangeInclusive<Frame>

    Dereferences the value.
    source§

    impl DerefMut for FrameRange

    source§

    fn deref_mut(&mut self) -> &mut RangeInclusive<Frame>

    Mutably dereferences the value.
    source§

    impl From<CopyableFrameRange> for FrameRange

    source§

    fn from(cr: CopyableFrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<FrameRange> for CopyableFrameRange

    source§

    fn from(r: FrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl IntoIterator for FrameRange

    §

    type Item = Frame

    The type of the elements being iterated over.
    §

    type IntoIter = RangeInclusiveIterator<Frame>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq<FrameRange> for FrameRange

    source§

    fn eq(&self, other: &FrameRange) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for FrameRange

    source§

    fn clone(&self) -> FrameRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for FrameRange

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for FrameRange

    §

    type Target = RangeInclusive<Frame>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &RangeInclusive<Frame>

    Dereferences the value.
    source§

    impl DerefMut for FrameRange

    source§

    fn deref_mut(&mut self) -> &mut RangeInclusive<Frame>

    Mutably dereferences the value.
    source§

    impl From<CopyableFrameRange> for FrameRange

    source§

    fn from(cr: CopyableFrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<FrameRange> for CopyableFrameRange

    source§

    fn from(r: FrameRange) -> Self

    Converts to this type from the input type.
    source§

    impl IntoIterator for FrameRange

    §

    type Item = Frame

    The type of the elements being iterated over.
    §

    type IntoIter = RangeInclusiveIterator<Frame>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq<FrameRange> for FrameRange

    source§

    fn eq(&self, other: &FrameRange) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for FrameRange

    source§

    impl StructuralEq for FrameRange

    source§

    impl StructuralPartialEq for FrameRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

    source§

    impl Eq for FrameRange

    source§

    impl StructuralEq for FrameRange

    source§

    impl StructuralPartialEq for FrameRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory_structs/struct.Page.html b/doc/memory_structs/struct.Page.html index a83d5e58a7..746c8e3983 100644 --- a/doc/memory_structs/struct.Page.html +++ b/doc/memory_structs/struct.Page.html @@ -1,28 +1,28 @@ -Page in memory_structs - Rust

    Struct memory_structs::Page

    source ·
    pub struct Page { /* private fields */ }
    Expand description

    A Page is a chunk of virtual memory aligned to a [PAGE_SIZE] boundary.

    -

    Implementations§

    source§

    impl Page

    source

    pub const fn start_address(&self) -> VirtualAddress

    Returns the VirtualAddress at the start of this Page.

    -
    source

    pub const fn number(&self) -> usize

    Returns the number of this Page.

    -
    source

    pub const fn containing_address(addr: VirtualAddress) -> Page

    Returns the Page containing the given VirtualAddress.

    -
    source§

    impl Page

    source

    pub const fn p4_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P4 page table entries list.

    -
    source

    pub const fn p3_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P3 page table entries list.

    -
    source

    pub const fn p2_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P2 page table entries list.

    -
    source

    pub const fn p1_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P1 page table entries list.

    +Page in memory_structs - Rust

    Struct memory_structs::Page

    source ·
    pub struct Page { /* private fields */ }
    Expand description

    A Page is a chunk of virtual memory aligned to a [PAGE_SIZE] boundary.

    +

    Implementations§

    source§

    impl Page

    source

    pub const fn start_address(&self) -> VirtualAddress

    Returns the VirtualAddress at the start of this Page.

    +
    source

    pub const fn number(&self) -> usize

    Returns the number of this Page.

    +
    source

    pub const fn containing_address(addr: VirtualAddress) -> Page

    Returns the Page containing the given VirtualAddress.

    +
    source§

    impl Page

    source

    pub const fn p4_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P4 page table entries list.

    +
    source

    pub const fn p3_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P3 page table entries list.

    +
    source

    pub const fn p2_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P2 page table entries list.

    +
    source

    pub const fn p1_index(&self) -> usize

    Returns the 9-bit part of this Page’s VirtualAddress that is the index into the P1 page table entries list.

    Using this returned usize value as an index into the P1 entries list will give you the final PTE, from which you can extract the mapped Frame using PageTableEntry::pointed_frame().

    -

    Trait Implementations§

    source§

    impl Add<usize> for Page

    §

    type Output = Page

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> Page

    Performs the + operation. Read more
    source§

    impl AddAssign<usize> for Page

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Clone for Page

    source§

    fn clone(&self) -> Page

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Page

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Ord for Page

    source§

    fn cmp(&self, other: &Page) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere +

    Trait Implementations§

    source§

    impl Add<usize> for Page

    §

    type Output = Page

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> Page

    Performs the + operation. Read more
    source§

    impl AddAssign<usize> for Page

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Clone for Page

    source§

    fn clone(&self) -> Page

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Page

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Ord for Page

    source§

    fn cmp(&self, other: &Page) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<Page> for Page

    source§

    fn eq(&self, other: &Page) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<Page> for Page

    source§

    fn eq(&self, other: &Page) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<Page> for Page

    source§

    fn partial_cmp(&self, other: &Page) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<Page> for Page

    source§

    fn partial_cmp(&self, other: &Page) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Step for Page

    Implementing Step allows Page to be used in an Iterator.

    -
    source§

    fn steps_between(start: &Page, end: &Page) -> Option<usize>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the number of successor steps required to get from start to end. Read more
    source§

    fn forward_checked(start: Page, count: usize) -> Option<Page>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor -of self count times. Read more
    source§

    fn backward_checked(start: Page, count: usize) -> Option<Page>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor +operator. Read more
    source§

    impl Step for Page

    Implementing Step allows Page to be used in an Iterator.

    +
    source§

    fn steps_between(start: &Page, end: &Page) -> Option<usize>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the number of successor steps required to get from start to end. Read more
    source§

    fn forward_checked(start: Page, count: usize) -> Option<Page>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor +of self count times. Read more
    source§

    fn backward_checked(start: Page, count: usize) -> Option<Page>

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor of self count times. Read more
    source§

    fn forward(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor of self count times. Read more
    source§

    unsafe fn forward_unchecked(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the successor of self count times. Read more
    source§

    fn backward(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor of self count times. Read more
    source§

    unsafe fn backward_unchecked(start: Self, count: usize) -> Self

    🔬This is a nightly-only experimental API. (step_trait)
    Returns the value that would be obtained by taking the predecessor -of self count times. Read more
    source§

    impl Sub<usize> for Page

    §

    type Output = Page

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> Page

    Performs the - operation. Read more
    source§

    impl SubAssign<usize> for Page

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl Copy for Page

    source§

    impl Eq for Page

    source§

    impl StructuralEq for Page

    source§

    impl StructuralPartialEq for Page

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Page

    §

    impl Send for Page

    §

    impl Sync for Page

    §

    impl Unpin for Page

    §

    impl UnwindSafe for Page

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +of self count times. Read more

    source§

    impl Sub<usize> for Page

    §

    type Output = Page

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> Page

    Performs the - operation. Read more
    source§

    impl SubAssign<usize> for Page

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl Copy for Page

    source§

    impl Eq for Page

    source§

    impl StructuralEq for Page

    source§

    impl StructuralPartialEq for Page

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for Page

    §

    impl Send for Page

    §

    impl Sync for Page

    §

    impl Unpin for Page

    §

    impl UnwindSafe for Page

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory_structs/struct.PageRange.html b/doc/memory_structs/struct.PageRange.html index 75a7012a5a..4a9036c233 100644 --- a/doc/memory_structs/struct.PageRange.html +++ b/doc/memory_structs/struct.PageRange.html @@ -1,26 +1,27 @@ -PageRange in memory_structs - Rust
    pub struct PageRange(_);
    Expand description

    A range of Pages that are contiguous in virtual memory.

    -

    Implementations§

    source§

    impl PageRange

    source

    pub const fn new(start: Page, end: Page) -> PageRange

    Creates a new range of Pages that spans from start to end, both inclusive bounds.

    -
    source

    pub const fn empty() -> PageRange

    Creates a PageRange that will always yield None when iterated.

    -
    source

    pub const fn from_virt_addr( +PageRange in memory_structs - Rust
    pub struct PageRange(_);
    Expand description

    A range of Pages that are contiguous in virtual memory.

    +

    Implementations§

    source§

    impl PageRange

    source

    pub const fn new(start: Page, end: Page) -> PageRange

    Creates a new range of Pages that spans from start to end, both inclusive bounds.

    +
    source

    pub const fn empty() -> PageRange

    Creates a PageRange that will always yield None when iterated.

    +
    source

    pub const fn from_virt_addr( starting_addr: VirtualAddress, size_in_bytes: usize ) -> PageRange

    A convenience method for creating a new PageRange that spans all Pages from the given VirtualAddress to an end bound based on the given size.

    -
    source

    pub const fn start_address(&self) -> VirtualAddress

    Returns the VirtualAddress of the starting Page in this PageRange.

    -
    source

    pub const fn size_in_pages(&self) -> usize

    Returns the number of Pages covered by this iterator.

    +
    source

    pub const fn start_address(&self) -> VirtualAddress

    Returns the VirtualAddress of the starting Page in this PageRange.

    +
    source

    pub const fn size_in_pages(&self) -> usize

    Returns the number of Pages covered by this iterator.

    Use this instead of Iterator::count() method. This is instant, because it doesn’t need to iterate over each entry, unlike normal iterators.

    -
    source

    pub const fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    -
    source

    pub const fn contains_address(&self, addr: VirtualAddress) -> bool

    Returns true if this PageRange contains the given VirtualAddress.

    -
    source

    pub const fn offset_of_address(&self, addr: VirtualAddress) -> Option<usize>

    Returns the offset of the given VirtualAddress within this PageRange, i.e., addr - self.start_address().

    +
    source

    pub const fn size_in_bytes(&self) -> usize

    Returns the size of this range in number of bytes.

    +
    source

    pub const fn contains_address(&self, addr: VirtualAddress) -> bool

    Returns true if this PageRange contains the given VirtualAddress.

    +
    source

    pub const fn offset_of_address(&self, addr: VirtualAddress) -> Option<usize>

    Returns the offset of the given VirtualAddress within this PageRange, i.e., addr - self.start_address().

    If the given addr is not covered by this range of Pages, this returns None.

    Examples

    If the range covers addresses 0x2000 to 0x4000, then offset_of_address(0x3500) would return Some(0x1500).

    -
    source

    pub const fn address_at_offset(&self, offset: usize) -> Option<VirtualAddress>

    Returns the VirtualAddress at the given offset into this PageRangewithin this PageRange, i.e., self.start_address() + offset.

    +
    source

    pub const fn address_at_offset(&self, offset: usize) -> Option<VirtualAddress>

    Returns the VirtualAddress at the given offset into this PageRangewithin this PageRange, i.e., self.start_address() + offset.

    If the given offset is not within this range of Pages, this returns None.

    Examples

    If the range covers addresses 0x2000 through 0x3FFF, then address_at_offset(0x1500) would return Some(0x3500), and address_at_offset(0x2000) would return None.

    -
    source

    pub fn to_extended(&self, to_include: Page) -> PageRange

    Returns a new separate PageRange that is extended to include the given Page.

    -
    source

    pub fn overlap(&self, other: &PageRange) -> Option<PageRange>

    Returns an inclusive PageRange representing the Pages that overlap across this PageRange and the given other PageRange.

    +
    source

    pub fn to_extended(&self, to_include: Page) -> PageRange

    Returns a new separate PageRange that is extended to include the given Page.

    +
    source

    pub fn overlap(&self, other: &PageRange) -> Option<PageRange>

    Returns an inclusive PageRange representing the Pages that overlap across this PageRange and the given other PageRange.

    If there is no overlap between the two ranges, None is returned.

    +
    source

    pub fn contains_range(&self, other: &PageRange) -> bool

    Returns true if the other PageRange is fully contained within this PageRange.

    Methods from Deref<Target = RangeInclusive<Page>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    @@ -28,9 +29,9 @@
    Examples
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere Idx: PartialOrd<U>, U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    -

    Trait Implementations§

    source§

    impl Clone for PageRange

    source§

    fn clone(&self) -> PageRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PageRange

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for PageRange

    §

    type Target = RangeInclusive<Page>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &RangeInclusive<Page>

    Dereferences the value.
    source§

    impl DerefMut for PageRange

    source§

    fn deref_mut(&mut self) -> &mut RangeInclusive<Page>

    Mutably dereferences the value.
    source§

    impl From<CopyablePageRange> for PageRange

    source§

    fn from(cr: CopyablePageRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<PageRange> for CopyablePageRange

    source§

    fn from(r: PageRange) -> Self

    Converts to this type from the input type.
    source§

    impl IntoIterator for PageRange

    §

    type Item = Page

    The type of the elements being iterated over.
    §

    type IntoIter = RangeInclusiveIterator<Page>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq<PageRange> for PageRange

    source§

    fn eq(&self, other: &PageRange) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Clone for PageRange

    source§

    fn clone(&self) -> PageRange

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PageRange

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Deref for PageRange

    §

    type Target = RangeInclusive<Page>

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &RangeInclusive<Page>

    Dereferences the value.
    source§

    impl DerefMut for PageRange

    source§

    fn deref_mut(&mut self) -> &mut RangeInclusive<Page>

    Mutably dereferences the value.
    source§

    impl From<CopyablePageRange> for PageRange

    source§

    fn from(cr: CopyablePageRange) -> Self

    Converts to this type from the input type.
    source§

    impl From<PageRange> for CopyablePageRange

    source§

    fn from(r: PageRange) -> Self

    Converts to this type from the input type.
    source§

    impl IntoIterator for PageRange

    §

    type Item = Page

    The type of the elements being iterated over.
    §

    type IntoIter = RangeInclusiveIterator<Page>

    Which kind of iterator are we turning this into?
    source§

    fn into_iter(self) -> Self::IntoIter

    Creates an iterator from a value. Read more
    source§

    impl PartialEq<PageRange> for PageRange

    source§

    fn eq(&self, other: &PageRange) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for PageRange

    source§

    impl StructuralEq for PageRange

    source§

    impl StructuralPartialEq for PageRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +sufficient, and should not be overridden without very good reason.

    source§

    impl Eq for PageRange

    source§

    impl StructuralEq for PageRange

    source§

    impl StructuralPartialEq for PageRange

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory_structs/struct.PhysicalAddress.html b/doc/memory_structs/struct.PhysicalAddress.html index 617a70e6d2..64b92f9e87 100644 --- a/doc/memory_structs/struct.PhysicalAddress.html +++ b/doc/memory_structs/struct.PhysicalAddress.html @@ -1,25 +1,25 @@ -PhysicalAddress in memory_structs - Rust
    #[repr(transparent)]
    pub struct PhysicalAddress(_);
    Expand description

    A physical memory address, which is a usize under the hood.

    -

    Implementations§

    source§

    impl PhysicalAddress

    source

    pub fn new(addr: usize) -> Option<PhysicalAddress>

    Creates a new PhysicalAddress, returning an error if the address is not canonical.

    +PhysicalAddress in memory_structs - Rust
    #[repr(transparent)]
    pub struct PhysicalAddress(_);
    Expand description

    A physical memory address, which is a usize under the hood.

    +

    Implementations§

    source§

    impl PhysicalAddress

    source

    pub fn new(addr: usize) -> Option<PhysicalAddress>

    Creates a new PhysicalAddress, returning an error if the address is not canonical.

    This is useful for checking whether an address is valid before using it. For example, on x86_64, virtual addresses are canonical if their upper bits (64:48] are sign-extended from bit 47, and physical addresses are canonical if their upper bits (64:52] are 0.

    -
    source

    pub const fn new_canonical(addr: usize) -> PhysicalAddress

    Creates a new PhysicalAddress that is guaranteed to be canonical.

    -
    source

    pub const fn zero() -> PhysicalAddress

    Creates a new PhysicalAddress with a value 0.

    -
    source

    pub const fn value(&self) -> usize

    Returns the underlying usize value for this PhysicalAddress.

    -
    source

    pub const fn frame_offset(&self) -> usize

    Returns the offset from the frame boundary specified by this `PhysicalAddress.

    +
    source

    pub const fn new_canonical(addr: usize) -> PhysicalAddress

    Creates a new PhysicalAddress that is guaranteed to be canonical.

    +
    source

    pub const fn zero() -> PhysicalAddress

    Creates a new PhysicalAddress with a value 0.

    +
    source

    pub const fn value(&self) -> usize

    Returns the underlying usize value for this PhysicalAddress.

    +
    source

    pub const fn frame_offset(&self) -> usize

    Returns the offset from the frame boundary specified by this `PhysicalAddress.

    For example, if the [PAGE_SIZE] is 4096 (4KiB), then this will return the least significant 12 bits (12:0] of this PhysicalAddress.

    -

    Trait Implementations§

    source§

    impl Add<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the + operation. Read more
    source§

    impl Add<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> PhysicalAddress

    Performs the + operation. Read more
    source§

    impl AddAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn add_assign(&mut self, rhs: PhysicalAddress)

    Performs the += operation. Read more
    source§

    impl AddAssign<usize> for PhysicalAddress

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Binary for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the & operator.
    source§

    fn bitand(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the & operation. Read more
    source§

    impl BitAndAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn bitand_assign(&mut self, rhs: PhysicalAddress)

    Performs the &= operation. Read more
    source§

    impl BitOr<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the | operator.
    source§

    fn bitor(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the | operation. Read more
    source§

    impl BitOrAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn bitor_assign(&mut self, rhs: PhysicalAddress)

    Performs the |= operation. Read more
    source§

    impl BitXor<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the ^ operator.
    source§

    fn bitxor(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the ^ operation. Read more
    source§

    impl BitXorAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn bitxor_assign(&mut self, rhs: PhysicalAddress)

    Performs the ^= operation. Read more
    source§

    impl Clone for PhysicalAddress

    source§

    fn clone(&self) -> PhysicalAddress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysicalAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for PhysicalAddress

    source§

    fn default() -> PhysicalAddress

    Returns the “default value” for a type. Read more
    source§

    impl Display for PhysicalAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for PhysicalAddress

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where +

    Trait Implementations§

    source§

    impl Add<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the + operation. Read more
    source§

    impl Add<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> PhysicalAddress

    Performs the + operation. Read more
    source§

    impl AddAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn add_assign(&mut self, rhs: PhysicalAddress)

    Performs the += operation. Read more
    source§

    impl AddAssign<usize> for PhysicalAddress

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Binary for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the & operator.
    source§

    fn bitand(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the & operation. Read more
    source§

    impl BitAndAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn bitand_assign(&mut self, rhs: PhysicalAddress)

    Performs the &= operation. Read more
    source§

    impl BitOr<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the | operator.
    source§

    fn bitor(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the | operation. Read more
    source§

    impl BitOrAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn bitor_assign(&mut self, rhs: PhysicalAddress)

    Performs the |= operation. Read more
    source§

    impl BitXor<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the ^ operator.
    source§

    fn bitxor(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the ^ operation. Read more
    source§

    impl BitXorAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn bitxor_assign(&mut self, rhs: PhysicalAddress)

    Performs the ^= operation. Read more
    source§

    impl Clone for PhysicalAddress

    source§

    fn clone(&self) -> PhysicalAddress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for PhysicalAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for PhysicalAddress

    source§

    fn default() -> PhysicalAddress

    Returns the “default value” for a type. Read more
    source§

    impl Display for PhysicalAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for PhysicalAddress

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Into<usize> for PhysicalAddress

    source§

    fn into(self) -> usize

    Converts this type into the (usually inferred) input type.
    source§

    impl LowerHex for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Octal for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for PhysicalAddress

    source§

    fn cmp(&self, other: &PhysicalAddress) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Into<usize> for PhysicalAddress

    source§

    fn into(self) -> usize

    Converts this type into the (usually inferred) input type.
    source§

    impl LowerHex for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Octal for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for PhysicalAddress

    source§

    fn cmp(&self, other: &PhysicalAddress) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PhysicalAddress> for PhysicalAddress

    source§

    fn eq(&self, other: &PhysicalAddress) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<PhysicalAddress> for PhysicalAddress

    source§

    fn eq(&self, other: &PhysicalAddress) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PhysicalAddress> for PhysicalAddress

    source§

    fn partial_cmp(&self, other: &PhysicalAddress) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<PhysicalAddress> for PhysicalAddress

    source§

    fn partial_cmp(&self, other: &PhysicalAddress) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Pointer for PhysicalAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Sub<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the - operation. Read more
    source§

    impl Sub<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> PhysicalAddress

    Performs the - operation. Read more
    source§

    impl SubAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn sub_assign(&mut self, rhs: PhysicalAddress)

    Performs the -= operation. Read more
    source§

    impl SubAssign<usize> for PhysicalAddress

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl UpperHex for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for PhysicalAddress

    source§

    impl Eq for PhysicalAddress

    source§

    impl FromBytes for PhysicalAddress

    source§

    impl StructuralEq for PhysicalAddress

    source§

    impl StructuralPartialEq for PhysicalAddress

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +operator. Read more

    source§

    impl Pointer for PhysicalAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Sub<PhysicalAddress> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: PhysicalAddress) -> PhysicalAddress

    Performs the - operation. Read more
    source§

    impl Sub<usize> for PhysicalAddress

    §

    type Output = PhysicalAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> PhysicalAddress

    Performs the - operation. Read more
    source§

    impl SubAssign<PhysicalAddress> for PhysicalAddress

    source§

    fn sub_assign(&mut self, rhs: PhysicalAddress)

    Performs the -= operation. Read more
    source§

    impl SubAssign<usize> for PhysicalAddress

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl UpperHex for PhysicalAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for PhysicalAddress

    source§

    impl Eq for PhysicalAddress

    source§

    impl FromBytes for PhysicalAddress

    source§

    impl StructuralEq for PhysicalAddress

    source§

    impl StructuralPartialEq for PhysicalAddress

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for PhysicalAddress

    §

    impl Send for PhysicalAddress

    §

    impl Sync for PhysicalAddress

    §

    impl Unpin for PhysicalAddress

    §

    impl UnwindSafe for PhysicalAddress

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/memory_structs/struct.VirtualAddress.html b/doc/memory_structs/struct.VirtualAddress.html index 62515bfcaa..53f2d6b3ca 100644 --- a/doc/memory_structs/struct.VirtualAddress.html +++ b/doc/memory_structs/struct.VirtualAddress.html @@ -1,25 +1,25 @@ -VirtualAddress in memory_structs - Rust
    #[repr(transparent)]
    pub struct VirtualAddress(_);
    Expand description

    A virtual memory address, which is a usize under the hood.

    -

    Implementations§

    source§

    impl VirtualAddress

    source

    pub fn new(addr: usize) -> Option<VirtualAddress>

    Creates a new VirtualAddress, returning an error if the address is not canonical.

    +VirtualAddress in memory_structs - Rust
    #[repr(transparent)]
    pub struct VirtualAddress(_);
    Expand description

    A virtual memory address, which is a usize under the hood.

    +

    Implementations§

    source§

    impl VirtualAddress

    source

    pub fn new(addr: usize) -> Option<VirtualAddress>

    Creates a new VirtualAddress, returning an error if the address is not canonical.

    This is useful for checking whether an address is valid before using it. For example, on x86_64, virtual addresses are canonical if their upper bits (64:48] are sign-extended from bit 47, and physical addresses are canonical if their upper bits (64:52] are 0.

    -
    source

    pub const fn new_canonical(addr: usize) -> VirtualAddress

    Creates a new VirtualAddress that is guaranteed to be canonical.

    -
    source

    pub const fn zero() -> VirtualAddress

    Creates a new VirtualAddress with a value 0.

    -
    source

    pub const fn value(&self) -> usize

    Returns the underlying usize value for this VirtualAddress.

    -
    source

    pub const fn page_offset(&self) -> usize

    Returns the offset from the page boundary specified by this `VirtualAddress.

    +
    source

    pub const fn new_canonical(addr: usize) -> VirtualAddress

    Creates a new VirtualAddress that is guaranteed to be canonical.

    +
    source

    pub const fn zero() -> VirtualAddress

    Creates a new VirtualAddress with a value 0.

    +
    source

    pub const fn value(&self) -> usize

    Returns the underlying usize value for this VirtualAddress.

    +
    source

    pub const fn page_offset(&self) -> usize

    Returns the offset from the page boundary specified by this `VirtualAddress.

    For example, if the [PAGE_SIZE] is 4096 (4KiB), then this will return the least significant 12 bits (12:0] of this VirtualAddress.

    -

    Trait Implementations§

    source§

    impl Add<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the + operation. Read more
    source§

    impl Add<usize> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> VirtualAddress

    Performs the + operation. Read more
    source§

    impl AddAssign<VirtualAddress> for VirtualAddress

    source§

    fn add_assign(&mut self, rhs: VirtualAddress)

    Performs the += operation. Read more
    source§

    impl AddAssign<usize> for VirtualAddress

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Binary for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the & operator.
    source§

    fn bitand(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the & operation. Read more
    source§

    impl BitAndAssign<VirtualAddress> for VirtualAddress

    source§

    fn bitand_assign(&mut self, rhs: VirtualAddress)

    Performs the &= operation. Read more
    source§

    impl BitOr<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the | operator.
    source§

    fn bitor(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the | operation. Read more
    source§

    impl BitOrAssign<VirtualAddress> for VirtualAddress

    source§

    fn bitor_assign(&mut self, rhs: VirtualAddress)

    Performs the |= operation. Read more
    source§

    impl BitXor<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the ^ operator.
    source§

    fn bitxor(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the ^ operation. Read more
    source§

    impl BitXorAssign<VirtualAddress> for VirtualAddress

    source§

    fn bitxor_assign(&mut self, rhs: VirtualAddress)

    Performs the ^= operation. Read more
    source§

    impl Clone for VirtualAddress

    source§

    fn clone(&self) -> VirtualAddress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for VirtualAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for VirtualAddress

    source§

    fn default() -> VirtualAddress

    Returns the “default value” for a type. Read more
    source§

    impl Display for VirtualAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for VirtualAddress

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where +

    Trait Implementations§

    source§

    impl Add<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the + operation. Read more
    source§

    impl Add<usize> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the + operator.
    source§

    fn add(self, rhs: usize) -> VirtualAddress

    Performs the + operation. Read more
    source§

    impl AddAssign<VirtualAddress> for VirtualAddress

    source§

    fn add_assign(&mut self, rhs: VirtualAddress)

    Performs the += operation. Read more
    source§

    impl AddAssign<usize> for VirtualAddress

    source§

    fn add_assign(&mut self, rhs: usize)

    Performs the += operation. Read more
    source§

    impl Binary for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl BitAnd<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the & operator.
    source§

    fn bitand(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the & operation. Read more
    source§

    impl BitAndAssign<VirtualAddress> for VirtualAddress

    source§

    fn bitand_assign(&mut self, rhs: VirtualAddress)

    Performs the &= operation. Read more
    source§

    impl BitOr<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the | operator.
    source§

    fn bitor(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the | operation. Read more
    source§

    impl BitOrAssign<VirtualAddress> for VirtualAddress

    source§

    fn bitor_assign(&mut self, rhs: VirtualAddress)

    Performs the |= operation. Read more
    source§

    impl BitXor<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the ^ operator.
    source§

    fn bitxor(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the ^ operation. Read more
    source§

    impl BitXorAssign<VirtualAddress> for VirtualAddress

    source§

    fn bitxor_assign(&mut self, rhs: VirtualAddress)

    Performs the ^= operation. Read more
    source§

    impl Clone for VirtualAddress

    source§

    fn clone(&self) -> VirtualAddress

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for VirtualAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for VirtualAddress

    source§

    fn default() -> VirtualAddress

    Returns the “default value” for a type. Read more
    source§

    impl Display for VirtualAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Hash for VirtualAddress

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Into<usize> for VirtualAddress

    source§

    fn into(self) -> usize

    Converts this type into the (usually inferred) input type.
    source§

    impl LowerHex for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Octal for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for VirtualAddress

    source§

    fn cmp(&self, other: &VirtualAddress) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    source§

    impl Into<usize> for VirtualAddress

    source§

    fn into(self) -> usize

    Converts this type into the (usually inferred) input type.
    source§

    impl LowerHex for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Octal for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Ord for VirtualAddress

    source§

    fn cmp(&self, other: &VirtualAddress) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Selfwhere Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<VirtualAddress> for VirtualAddress

    source§

    fn eq(&self, other: &VirtualAddress) -> bool

    This method tests for self and other values to be equal, and is used + Self: Sized + PartialOrd<Self>,
    Restrict a value to a certain interval. Read more
    source§

    impl PartialEq<VirtualAddress> for VirtualAddress

    source§

    fn eq(&self, other: &VirtualAddress) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<VirtualAddress> for VirtualAddress

    source§

    fn partial_cmp(&self, other: &VirtualAddress) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= +sufficient, and should not be overridden without very good reason.
    source§

    impl PartialOrd<VirtualAddress> for VirtualAddress

    source§

    fn partial_cmp(&self, other: &VirtualAddress) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more
    source§

    impl Pointer for VirtualAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Sub<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the - operation. Read more
    source§

    impl Sub<usize> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> VirtualAddress

    Performs the - operation. Read more
    source§

    impl SubAssign<VirtualAddress> for VirtualAddress

    source§

    fn sub_assign(&mut self, rhs: VirtualAddress)

    Performs the -= operation. Read more
    source§

    impl SubAssign<usize> for VirtualAddress

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl UpperHex for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for VirtualAddress

    source§

    impl Eq for VirtualAddress

    source§

    impl FromBytes for VirtualAddress

    source§

    impl StructuralEq for VirtualAddress

    source§

    impl StructuralPartialEq for VirtualAddress

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for VirtualAddress

    §

    impl Send for VirtualAddress

    §

    impl Sync for VirtualAddress

    §

    impl Unpin for VirtualAddress

    §

    impl UnwindSafe for VirtualAddress

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +operator. Read more

    source§

    impl Pointer for VirtualAddress

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Sub<VirtualAddress> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: VirtualAddress) -> VirtualAddress

    Performs the - operation. Read more
    source§

    impl Sub<usize> for VirtualAddress

    §

    type Output = VirtualAddress

    The resulting type after applying the - operator.
    source§

    fn sub(self, rhs: usize) -> VirtualAddress

    Performs the - operation. Read more
    source§

    impl SubAssign<VirtualAddress> for VirtualAddress

    source§

    fn sub_assign(&mut self, rhs: VirtualAddress)

    Performs the -= operation. Read more
    source§

    impl SubAssign<usize> for VirtualAddress

    source§

    fn sub_assign(&mut self, rhs: usize)

    Performs the -= operation. Read more
    source§

    impl UpperHex for VirtualAddress

    source§

    fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter.
    source§

    impl Copy for VirtualAddress

    source§

    impl Eq for VirtualAddress

    source§

    impl FromBytes for VirtualAddress

    source§

    impl StructuralEq for VirtualAddress

    source§

    impl StructuralPartialEq for VirtualAddress

    Auto Trait Implementations§

    §

    impl RefUnwindSafe for VirtualAddress

    §

    impl Send for VirtualAddress

    §

    impl Sync for VirtualAddress

    §

    impl Unpin for VirtualAddress

    §

    impl UnwindSafe for VirtualAddress

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/page_table_entry/all.html b/doc/page_table_entry/all.html index 24f2e452c4..7b046bf4d3 100644 --- a/doc/page_table_entry/all.html +++ b/doc/page_table_entry/all.html @@ -1 +1 @@ -List of all items in this crate

    List of all items

    Structs

    Enums

    \ No newline at end of file +List of all items in this crate
    \ No newline at end of file diff --git a/doc/page_table_entry/enum.UnmapResult.html b/doc/page_table_entry/enum.UnmapResult.html index 926e926f6d..0edec0e26d 100644 --- a/doc/page_table_entry/enum.UnmapResult.html +++ b/doc/page_table_entry/enum.UnmapResult.html @@ -1,13 +1,13 @@ UnmapResult in page_table_entry - Rust
    pub enum UnmapResult {
    -    Exclusive(UnmappedFrames),
    +    Exclusive(UnmappedFrameRange),
         NonExclusive(FrameRange),
     }
    Expand description

    The frames returned from the action of unmapping a page table entry. See the PageTableEntry::set_unmapped() function.

    -

    If exclusive, the contained UnmappedFrames can be used to deallocate frames.

    +

    If exclusive, the contained UnmappedFrameRange can be used to deallocate frames.

    If non-exclusive, the contained FrameRange is provided just for debugging feedback. Note that we use FrameRange instead of Frame because a single page table entry can map many frames, e.g., using huge pages.

    -

    Variants§

    §

    Exclusive(UnmappedFrames)

    §

    NonExclusive(FrameRange)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere +

    Variants§

    §

    Exclusive(UnmappedFrameRange)

    §

    NonExclusive(FrameRange)

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/doc/page_table_entry/index.html b/doc/page_table_entry/index.html index 9b5d8bb760..414a23ce5f 100644 --- a/doc/page_table_entry/index.html +++ b/doc/page_table_entry/index.html @@ -6,6 +6,6 @@ between virtual pages and physical frames, it is almost always the case that the frame pointed to by a newly-unmapped page table entry can be deallocated.

    -

    Structs

    • A page table entry, which is a u64 value under the hood.
    • A range of frames that have been unmapped from a PageTableEntry +

    Structs

    • A page table entry, which is a u64 value under the hood.
    • A range of frames that have been unmapped from a PageTableEntry that previously mapped that frame exclusively (i.e., “owned it”).

    Enums

    • The frames returned from the action of unmapping a page table entry. See the PageTableEntry::set_unmapped() function.
    \ No newline at end of file diff --git a/doc/page_table_entry/sidebar-items.js b/doc/page_table_entry/sidebar-items.js index bca3422a01..2c0a4f006f 100644 --- a/doc/page_table_entry/sidebar-items.js +++ b/doc/page_table_entry/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"enum":["UnmapResult"],"struct":["PageTableEntry","UnmappedFrames"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"enum":["UnmapResult"],"struct":["PageTableEntry","UnmappedFrameRange"]}; \ No newline at end of file diff --git a/doc/page_table_entry/struct.UnmappedFrames.html b/doc/page_table_entry/struct.UnmappedFrameRange.html similarity index 56% rename from doc/page_table_entry/struct.UnmappedFrames.html rename to doc/page_table_entry/struct.UnmappedFrameRange.html index da78e051ba..1020c4ab60 100644 --- a/doc/page_table_entry/struct.UnmappedFrames.html +++ b/doc/page_table_entry/struct.UnmappedFrameRange.html @@ -1,6 +1,6 @@ -UnmappedFrames in page_table_entry - Rust
    pub struct UnmappedFrames(_);
    Expand description

    A range of frames that have been unmapped from a PageTableEntry +UnmappedFrameRange in page_table_entry - Rust

    pub struct UnmappedFrameRange(_);
    Expand description

    A range of frames that have been unmapped from a PageTableEntry that previously mapped that frame exclusively (i.e., “owned it”).

    -

    These UnmappedFrames can be converted into UnmappedAllocatedFrames +

    UnmappedFrameRange can be used to create an UnmappedFrames and then safely deallocated within the frame_allocator.

    See the PageTableEntry::set_unmapped() function.

    Methods from Deref<Target = FrameRange>§

    pub fn start_address(&self) -> PhysicalAddress

    Returns the [PhysicalAddress] of the starting [Frame] in this FrameRange.

    @@ -19,6 +19,7 @@
    Examples

    pub fn to_extended(&self, to_include: Frame) -> FrameRange

    Returns a new separate FrameRange that is extended to include the given [Frame].

    pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>

    Returns an inclusive FrameRange representing the [Frame]s that overlap across this FrameRange and the given other FrameRange.

    If there is no overlap between the two ranges, None is returned.

    +

    pub fn contains_range(&self, other: &FrameRange) -> bool

    Returns true if the other FrameRange is fully contained within this FrameRange.

    Methods from Deref<Target = RangeInclusive<Frame>>§

    source

    pub fn start(&self) -> &Idx

    Returns the lower bound of the range (inclusive).

    source

    pub fn end(&self) -> &Idx

    Returns the upper bound of the range (inclusive).

    source

    pub fn is_empty(&self) -> bool

    Returns true if the range contains no items.

    @@ -26,14 +27,14 @@
    Examples
    source

    pub fn contains<U>(&self, item: &U) -> boolwhere Idx: PartialOrd<U>, U: PartialOrd<Idx> + ?Sized,

    Returns true if item is contained in the range.

    -

    Trait Implementations§

    source§

    impl Deref for UnmappedFrames

    §

    type Target = FrameRange

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &FrameRange

    Dereferences the value.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere - T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere - T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere - T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    -
    source§

    impl<T, U> Into<U> for Twhere +

    Trait Implementations§

    source§

    impl Deref for UnmappedFrameRange

    §

    type Target = FrameRange

    The resulting type after dereferencing.
    source§

    fn deref(&self) -> &FrameRange

    Dereferences the value.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for Twhere + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for Twhere + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for Twhere + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for Twhere U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    That is, this conversion is whatever the implementation of From<T> for U chooses to do.

    -
    source§

    impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere +

    source§

    impl<T, U> TryFrom<U> for Twhere + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    \ No newline at end of file diff --git a/doc/search-index.js b/doc/search-index.js index b9de9402f5..2ad70be0a7 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -54,7 +54,7 @@ var searchIndex = JSON.parse('{\ "fault_log":{"doc":"This crate logs all the faults occuring within Theseus. …","t":"NNNNNDENNNNNNNNNNENNNMMLLLLLLFLLLLLLMMLMMLLLLLLFFMLLLFFFLFFMMMLLLLLLLLLLLL","n":["BoundRangeExceeded","DeviceNotAvailable","DivideByZero","DoubleFault","FaultCrateReplaced","FaultEntry","FaultType","GeneralProtectionFault","InvalidOpCode","InvalidTSS","IterativelyCrateReplaced","MultipleFaultRecovery","NMI","None","Overflow","PageFault","Panic","RecoveryAction","SegmentNotPresent","TaskRestarted","UnknownException","action_taken","address_accessed","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clear_fault_log","clone","clone","clone","clone_into","clone_into","clone_into","cpu","crate_error_occured","eq","error_code","fault_type","fmt","fmt","fmt","from","from","from","from_exception_number","get_the_most_recent_match","instruction_pointer","into","into","into","log_exception","log_handled_fault","log_panic_entry","new","print_fault_log","remove_unhandled_exceptions","replaced_crates","running_app_crate","running_task","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"fault_log"]],"d":["","","","","Crate where fault is observed is replaced, and then task …","A data structure to hold information about each fault. ","The possible faults (panics and exceptions) encountered …","","","","Different Crate than the crate where fault is observed is …","This fault is handled as a recovery for different fault. …","","No action taken on this fault.","","","","The different types of recovery procedures used for the …","","Task restarted only. No crate replaced.","","Recovery Action taken as a result of the fault","For page faults the address the program attempted to …","","","","","","","Clears the log of faults so far occured in the system ","","","","","","","The ID of the CPU on which the error occured.","Crate the address at which exception occured located","","Error code returned with the exception","Type of fault","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Utility function to get Fault type from exception number. ","Provides the most recent entry in the log for given crate …","Address at which exception occured","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Add a new exception instance to the fault log. Generally …","Add a FaultEntry to fault log.","Add a new panic instance to the fault log. ","Returns an empty FaultEntry with only fault_type field …","Prints the fault log","Removes the unhandled faults from the fault log and …","List of crates reloaded from memory to recover from fault","If available the application crate that spawned the task","Task runnning immediately before the Exception","","","","","","","","","","","",""],"i":[1,1,1,1,2,0,0,1,1,1,2,2,1,2,1,1,1,0,1,2,1,3,3,1,2,3,1,2,3,0,1,2,3,1,2,3,3,3,2,3,3,1,2,3,1,2,3,0,0,3,1,2,3,0,0,0,3,0,0,3,3,3,1,2,3,1,2,3,1,2,3,1,2,3],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[[]],[[]],[[]],0,0,[[2,2],4],0,0,[[1,5],6],[[2,5],6],[[3,5],6],[[]],[[]],[[]],[7,1],[8,[[9,[3]]]],0,[[]],[[]],[[]],[[7,10,[9,[11]],[9,[10]]]],[3],[12],[1,3],[[]],[[],[[13,[3]]]],0,0,0,[[]],[[]],[[]],[[],14],[[],14],[[],14],[[],14],[[],14],[[],14],[[],15],[[],15],[[],15]],"c":[],"p":[[4,"FaultType"],[4,"RecoveryAction"],[3,"FaultEntry"],[15,"bool"],[3,"Formatter"],[6,"Result"],[15,"u8"],[15,"str"],[4,"Option"],[15,"usize"],[15,"u64"],[3,"PanicInfo"],[3,"Vec"],[4,"Result"],[3,"TypeId"]]},\ "first_application":{"doc":"This crate contains a simple routine to start the first …","t":"F","n":["start"],"q":[[0,"first_application"]],"d":["Starts the first applications that run in Theseus by …"],"i":[0],"f":[[[],[[2,[1]]]]],"c":[],"p":[[15,"str"],[4,"Result"]]},\ "font":{"doc":"","t":"RRH","n":["CHARACTER_HEIGHT","CHARACTER_WIDTH","FONT_BASIC"],"q":[[0,"font"]],"d":["The height of a character.","The width of a character.","The bitmap array of characters."],"i":[0,0,0],"f":[0,0,0],"c":[],"p":[]},\ -"frame_allocator":{"doc":"Provides an allocator for physical memory frames. The …","t":"DDDDNEDNNFFFFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLL","n":["AllocatedFrame","AllocatedFrames","AllocatedFramesIter","DeferredAllocAction","Free","MemoryRegionType","PhysicalMemoryRegion","Reserved","Unknown","allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_frames_by_bytes_deferred","allocate_frames_deferred","as_allocated_frame","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","deref","deref","deref","drop","drop","empty","eq","fmt","fmt","fmt","fmt","frames","from","from","from","from","from","from","init","into","into","into","into","into","into","into_iter","into_iter","merge","new","next","split","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","typ","type_id","type_id","type_id","type_id","type_id","type_id"],"q":[[0,"frame_allocator"]],"d":["A reference to a single frame within a range of …","Represents a range of allocated physical memory Frames; …","An iterator over each AllocatedFrame in a range of …","A series of pending actions related to frame allocator …","Memory that is available for any general purpose.","Types of physical memory. See each variant’s …","A region of physical memory.","Memory that is reserved for special use and is only ever …","Memory of an unknown type. This is a default value that …","Allocates the given number of frames with no constraints …","Allocates the given number of frames starting at …","Allocates frames with no constraints on the starting …","Allocates frames starting at the given PhysicalAddress …","Similar to allocated_frames_deferred(), but accepts a size …","The core frame allocation routine that allocates the given …","Returns an AllocatedFrame if this AllocatedFrames object …","","","","","","","","","","","","","","","","","","","","","","Returns an empty AllocatedFrames object that performs no …","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Initialize the frame allocator with the given list of …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Merges the given AllocatedFrames object other into this …","","","Splits this AllocatedFrames into two separate …","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,9,0,0,9,9,0,0,0,0,0,0,2,2,17,11,8,9,7,2,17,11,8,9,7,8,9,8,9,2,8,7,2,11,2,9,2,8,9,7,8,2,17,11,8,9,7,0,2,17,11,8,9,7,2,17,2,8,17,2,8,9,2,17,11,8,9,7,2,17,11,8,9,7,8,2,17,11,8,9,7],"f":[0,0,0,0,0,0,0,0,0,[1,[[3,[2]]]],[[4,1],[[6,[2,5]]]],[1,[[3,[2]]]],[[4,1],[[6,[2,5]]]],[[[3,[4]],1],[[6,[5]]]],[[[3,[4]],1],[[6,[5]]]],[2,7],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[8,8],[9,9],[[]],[[]],[2,10],[8,10],[7],[2],[11],[[],2],[[9,9],12],[[2,13],14],[[8,13],14],[[9,13],14],[[7,13],14],0,[[]],[[]],[[]],[[]],[[]],[[]],[[15,[0,[15,16]]],[[6,[5]]]],[[]],[[]],[[]],[[]],[[]],[[]],[2],[[]],[[2,2],[[6,[2]]]],[[10,9],8],[17,3],[[2,18],[[6,[2]]]],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],0,[[],19],[[],19],[[],19],[[],19],[[],19],[[],19]],"c":[],"p":[[15,"usize"],[3,"AllocatedFrames"],[4,"Option"],[3,"PhysicalAddress"],[15,"str"],[4,"Result"],[3,"AllocatedFrame"],[3,"PhysicalMemoryRegion"],[4,"MemoryRegionType"],[3,"FrameRange"],[3,"DeferredAllocAction"],[15,"bool"],[3,"Formatter"],[6,"Result"],[8,"IntoIterator"],[8,"Clone"],[3,"AllocatedFramesIter"],[3,"Frame"],[3,"TypeId"]]},\ +"frame_allocator":{"doc":"Provides an allocator for physical memory frames. The …","t":"DGDDDNGGEDNDNGFFFFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLL","n":["AllocatedFrame","AllocatedFrames","AllocatedFramesIter","DeferredAllocAction","Frames","Free","FreeFrames","MappedFrames","MemoryRegionType","PhysicalMemoryRegion","Reserved","SplitFrames","Unknown","UnmappedFrames","allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_frames_by_bytes_deferred","allocate_frames_deferred","as_allocated_frame","as_allocated_frame","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","cmp","cmp","deref","deref","deref","drop","drop","empty","eq","eq","eq","fmt","fmt","fmt","fmt","frames","from","from","from","from","from","from","from","init","into","into","into","into","into","into","into","into_allocated_frames","into_allocated_frames","into_allocated_frames","into_allocated_frames","into_iter","into_iter","into_mapped_frames","into_mapped_frames","merge","new","next","partial_cmp","partial_cmp","split_at","split_range","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","typ","type_id","type_id","type_id","type_id","type_id","type_id","type_id"],"q":[[0,"frame_allocator"]],"d":["A reference to a single frame within a range of …","A type alias for Frames in the Allocated state.","An iterator over each AllocatedFrame in a range of …","A series of pending actions related to frame allocator …","A range of contiguous frames in physical memory.","Memory that is available for any general purpose.","A type alias for Frames in the Free state.","A type alias for Frames in the Mapped state.","Types of physical memory. See each variant’s …","PhysicalMemoryRegion represents a range of contiguous …","Memory that is reserved for special use and is only ever …","The result of splitting a Frames object into multiple …","Memory of an unknown type. This is a default value that …","A type alias for Frames in the Unmapped state.","Allocates the given number of frames with no constraints …","Allocates the given number of frames starting at …","Allocates frames with no constraints on the starting …","Allocates frames starting at the given PhysicalAddress …","Similar to allocated_frames_deferred(), but accepts a size …","The core frame allocation routine that allocates the given …","Returns an AllocatedFrame if this AllocatedFrames object …","Returns an AllocatedFrame if this AllocatedFrames object …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns a new Frames with an empty range of frames. Can …","","","","","","","","The Frames covered by this region, an inclusive range. ","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Initialize the frame allocator with the given list of …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Consumes this Frames in the Free state and converts them …","Consumes this Frames in the Unmapped state and converts …","Consumes this Frames in the Free state and converts them …","Consumes this Frames in the Unmapped state and converts …","","","Consumes this Frames in the Allocated state and converts …","Consumes this Frames in the Allocated state and converts …","Merges the given other Frames object into this Frames …","","","","","Splits this Frames into two separate Frames objects:","Splits up the given Frames into multiple smaller Frames.","","","","","","","","","","","","","","","","","The type of this memory region, e.g., whether it’s in a …","","","","","","",""],"i":[0,0,0,0,0,11,0,0,0,0,11,0,11,0,0,0,0,0,0,0,2,8,23,24,14,9,9,11,8,8,7,23,24,14,9,11,8,7,9,11,9,11,9,8,9,8,7,14,8,8,9,11,8,9,11,8,7,9,23,24,14,9,11,8,7,0,23,24,14,9,11,8,7,20,21,8,8,2,23,2,8,8,9,23,9,8,8,8,9,11,23,24,14,9,11,8,7,23,24,14,9,11,8,7,9,23,24,14,9,11,8,7],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,[1,[[3,[2]]]],[[4,1],[[6,[2,5]]]],[1,[[3,[2]]]],[[4,1],[[6,[2,5]]]],[[[3,[4]],1],[[6,[5]]]],[[[3,[4]],1],[[6,[5]]]],[2,7],[8,7],[[]],[[]],[[]],[9,10],[[]],[[]],[[]],[8,10],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[9,9],[11,11],[[]],[[]],[[9,9],12],[[8,8],12],[9,13],[8,13],[7],[14],[8],[[],8],[[9,9],15],[[11,11],15],[[8,8],15],[[9,16],17],[[11,16],17],[[8,16],17],[[7,16],17],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[18,[0,[18,19]]],[[6,[5]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[20,2],[21,2],[8,2],[8,2],[2],[[]],[2,22],[8,22],[[8,8],[[6,[8]]]],[[13,11],9],[23,3],[[9,9],[[3,[12]]]],[[8,8],[[3,[12]]]],[[8,10],[[6,[8]]]],[[8,13],[[6,[24,8]]]],[[]],[[]],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],0,[[],25],[[],25],[[],25],[[],25],[[],25],[[],25],[[],25]],"c":[],"p":[[15,"usize"],[6,"AllocatedFrames"],[4,"Option"],[3,"PhysicalAddress"],[15,"str"],[4,"Result"],[3,"AllocatedFrame"],[3,"Frames"],[3,"PhysicalMemoryRegion"],[3,"Frame"],[4,"MemoryRegionType"],[4,"Ordering"],[3,"FrameRange"],[3,"DeferredAllocAction"],[15,"bool"],[3,"Formatter"],[6,"Result"],[8,"IntoIterator"],[8,"Clone"],[6,"FreeFrames"],[6,"UnmappedFrames"],[6,"MappedFrames"],[3,"AllocatedFramesIter"],[3,"SplitFrames"],[3,"TypeId"]]},\ "framebuffer":{"doc":"This crate defines a Framebuffer structure, which is …","t":"DLLLLLLLLLLLLLLFLLLLALLLDIDMKLLMMLLLLLLLLKLLLLLLLLLLMMLLLLMMLLLLLLLLKLL","n":["Framebuffer","borrow","borrow_mut","buffer","buffer_mut","composite_buffer","contains","draw_pixel","fill","from","get_hash","get_pixel","get_size","hash","index_of","init","into","new","overlaps_with","overwrite_pixel","pixel","try_from","try_into","type_id","AlphaPixel","Pixel","RGBPixel","alpha","blend","blend","blend","blue","blue","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","composite_buffer","composite_buffer","composite_buffer","fmt","fmt","from","from","from","from","get_hash","get_hash","green","green","hash","hash","into","into","red","red","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","weight_blend","weight_blend","weight_blend"],"q":[[0,"framebuffer"],[24,"framebuffer::pixel"]],"d":["A framebuffer is a region of memory interpreted as a 2-D …","","","Returns a reference to this framebuffer’s memory as a …","Returns a mutable reference to this framebuffer’s memory …","Composites src to the buffer starting from index.","Checks if the given coordinate is within the framebuffer’…","Draw a pixel at the given coordinate. The pixel will be …","Fills (overwrites) the entire framebuffer with the given …","Returns the argument unchanged.","","Returns the pixel value at the given coordinate in this …","Returns the (width, height) of this framebuffer.","","Returns the index of the given coordinate in this …","Initializes the final framebuffer based on graphics mode …","Calls U::from(self).","Creates a new framebuffer with rectangular dimensions of …","Checks if a framebuffer overlaps with an area.","Overwites a pixel at the given coordinate in this …","Defines the Pixel trait as well as basic pixel formats, …","","","","An Alpha Pixel is a pixel with an alpha channel","A pixel provides methods to blend with others.","An RGB Pixel is a pixel with no extra channel.","","blend with another pixel considering their extra channel.","","","","","","","","","","","","","Composites the src pixel slice to the dest pixel slice.","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","","","","","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","Blend two pixels linearly with weights, as blend for origin…","",""],"i":[0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,0,2,2,2,0,0,0,18,1,17,18,17,18,17,18,17,18,17,18,17,18,1,17,18,17,18,17,17,18,18,17,18,17,18,17,18,17,18,17,18,17,18,17,18,17,18,17,18,1,17,18],"f":[0,[[]],[[]],[[[2,[1]]],[[3,[1]]]],[[[2,[1]]],[[3,[1]]]],[[[2,[1]],[3,[1]],4]],[[[2,[1]],5],6],[[[2,[1]],5,1]],[[[2,[1]],1]],[[]],[[[0,[7,8]],9],10],[[[2,[1]],5],[[11,[1]]]],[[[2,[1]]]],[[[2,[1]],12]],[[[2,[1]],5],[[11,[4]]]],[[],[[14,[[2,[1]],13]]]],[[]],[[4,4,[11,[15]]],[[14,[[2,[1]],13]]]],[[[2,[1]],5,4,4],6],[[[2,[1]],5,1]],0,[[],14],[[],14],[[],16],0,0,0,0,[[]],[[17,17],17],[[18,18],18],0,0,[[]],[[]],[[]],[[]],[17,17],[18,18],[[]],[[]],[[3,3]],[[[3,[17]],[3,[17]]]],[[[3,[18]],[3,[18]]]],[[17,19],20],[[18,19],20],[[]],[21,17],[[]],[21,18],[[[0,[7,8]],9],10],[[[0,[7,8]],9],10],0,0,[[17,12]],[[18,12]],[[]],[[]],0,0,[[]],[[]],[[],14],[[],14],[[],14],[[],14],[[],16],[[],16],[22],[[17,17,22],17],[[18,18,22],18]],"c":[],"p":[[8,"Pixel"],[3,"Framebuffer"],[15,"slice"],[15,"usize"],[3,"Coord"],[15,"bool"],[8,"Hash"],[8,"Sized"],[8,"BuildHasher"],[15,"u64"],[4,"Option"],[8,"Hasher"],[15,"str"],[4,"Result"],[3,"PhysicalAddress"],[3,"TypeId"],[3,"RGBPixel"],[3,"AlphaPixel"],[3,"Formatter"],[6,"Result"],[3,"Color"],[15,"f32"]]},\ "framebuffer_compositor":{"doc":"This crate defines a framebuffer compositor.","t":"RDHDLLLLLLLLLLLLLLLL","n":["CACHE_BLOCK_HEIGHT","CacheBlock","FRAME_COMPOSITOR","FrameCompositor","borrow","borrow","borrow_mut","borrow_mut","composite","from","from","into","into","overlaps_with","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"framebuffer_compositor"]],"d":["The height of a cache block. In every iteration the …","A CacheBlock represents the cached (previously-composited) …","The instance of the framebuffer compositor.","The framebuffer compositor structure. It caches …","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Checks if a cache block overlaps with another one","","","","","",""],"i":[0,0,0,0,8,1,8,1,1,8,1,8,1,8,8,1,8,1,8,1],"f":[0,0,0,0,[[]],[[]],[[]],[[]],[[1,2,[4,[3]],[0,[2,5]]],[[7,[6]]]],[[]],[[]],[[]],[[]],[[8,8],9],[[],7],[[],7],[[],7],[[],7],[[],10],[[],10]],"c":[],"p":[[3,"FrameCompositor"],[8,"IntoIterator"],[8,"Pixel"],[3,"Framebuffer"],[8,"Clone"],[15,"str"],[4,"Result"],[3,"CacheBlock"],[15,"bool"],[3,"TypeId"]]},\ "framebuffer_drawer":{"doc":"This crate contains a series of basic draw functions to …","t":"FFFF","n":["draw_circle","draw_line","draw_rectangle","fill_rectangle"],"q":[[0,"framebuffer_drawer"]],"d":["Draw a circle in the framebuffer. coordinate is the …","Draws a line in a framebuffer. The part exceeding the …","Draws a rectangle in a framebuffer. The part exceeding the …","Fills a rectangle in a framebuffer with color. The part …"],"i":[0,0,0,0],"f":[[[[2,[1]],3,4,1]],[[[2,[1]],3,3,1]],[[[2,[1]],3,4,4,1]],[[[2,[1]],3,4,4,1]]],"c":[],"p":[[8,"Pixel"],[3,"Framebuffer"],[3,"Coord"],[15,"usize"]]},\ @@ -84,10 +84,10 @@ var searchIndex = JSON.parse('{\ "logger":{"doc":"A basic logger implementation for system-wide logging in …","t":"RRRFFFFFF","n":["DEFAULT_LOG_LEVEL","EARLY_LOG_BUFFER_SIZE","LOG_MAX_WRITERS","early_init","init","set_log_level","take_early_log_writers","write_fmt","write_str"],"q":[[0,"logger"]],"d":["By default, Theseus will print all log levels, including …","The size of the buffer used to save early log messages.","The maximum number of output streams that a logger can …","Initializes Theseus’s early system logger for use before …","Initialize the fully-featured Theseus system logger.","Set the log level, which determines whether a given log …","Removes all of the writers (output streams) from the early …","Convenience function for writing formatted arguments to …","Convenience function for writing a simple string to the …"],"i":[0,0,0,0,0,0,0,0,0],"f":[0,0,0,[[[2,[1]],3]],[[[2,[1]],3]],[1],[[],[[5,[[2,[4]]]]]],[6,7],[8,7]],"c":[],"p":[[4,"Level"],[4,"Option"],[8,"IntoIterator"],[3,"SerialPort"],[15,"array"],[3,"Arguments"],[6,"Result"],[15,"str"]]},\ "madt":{"doc":"Support for the MADT ACPI table, which includes interrupt …","t":"NNNNNRDEDDDDDDDNNMMLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLFLMMMMLLLLLLLLLLLLLLLLLMMFMLLLLLLLLLLMLMLLMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLM","n":["IntSrcOverride","IoApic","LocalApic","LocalApicAddressOverride","LocalX2Apic","MADT_SIGNATURE","Madt","MadtEntry","MadtIntSrcOverride","MadtIoApic","MadtIter","MadtLocalApic","MadtLocalApicAddressOverride","MadtLocalX2Apic","MadtNonMaskableInterrupt","NonMaskableInterrupt","UnknownOrCorrupt","address","apic_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bsp_init","bus_source","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","find_nmi_entry_for_processor","flags","flags","flags","flags","flags","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get","gsi","gsi_base","handle","id","into","into","into","into","into","into","into","into","into","into_iter","irq_source","iter","lint","local_apic_phys_addr","next","phys_addr","processor","processor","processor","sdt","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","x2apic_id"],"q":[[0,"madt"]],"d":["A Interrupt Source Override MADT entry.","A IOAPIC MADT entry.","A Local APIC MADT entry.","A Local APIC Address Override MADT entry.","A Local X2APIC MADT entry.","","A wrapper around the MADT ACPI table (Multiple APIC …","The set of possible MADT Entries.","MADT Interrupt Source Override","MADT I/O APIC","An Iterator over the dynamic entries of the MADT. Its …","MADT Local APIC","MADT Local APIC Address Override. If this struct exists, …","MADT Local X2APIC","MADT Non-maskable Interrupt. Use these to configure the …","A Non-Maskable Interrupt MADT entry.","The MADT table had an entry of an unknown type or …","I/O APIC address","Local APIC ID","","","","","","","","","","","","","","","","","","","Performs initialization functions of the IOAPIC and …","Bus Source","","","","","","","","","","","","","","","","","Finds the Non-Maskable Interrupt (NMI) entry in the MADT …","Returns the flags value in this MADT table.","Flags. 1 means that the processor is enabled","Flags","Flags","Flags. 1 means that the processor is enabled","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Finds the MADT in the given AcpiTables and returns a …","Global system interrupt","Global system interrupt base","The handler for parsing the MADT table and adding it to …","I/O APIC ID","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","IRQ Source","Returns an Iterator over the MADT’s entries, which are …","LINT (either 0 or 1)","Returns the Local APIC physical address value in this MADT …","","Local APIC physical address","Processor ID","which processor this is for, 0xFF means all processors","Processor ID","Returns a reference to the Sdt header in this MADT table.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Local X2APIC ID"],"i":[6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,6,6,8,7,1,5,6,7,8,9,10,11,12,1,5,6,7,8,9,10,11,12,1,9,5,6,7,8,9,10,11,12,5,6,7,8,9,10,11,12,0,1,7,9,10,12,6,7,8,9,10,11,12,1,5,6,7,8,9,10,11,12,1,9,8,0,8,1,5,6,7,8,9,10,11,12,5,9,1,10,1,5,11,7,10,12,1,5,6,7,8,9,10,11,12,1,5,6,7,8,9,10,11,12,1,5,6,7,8,9,10,11,12,1,5,6,7,8,9,10,11,12,12],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[1,2],[[4,[3]]]],0,[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[13,5]],[1,13],0,0,0,0,[[6,14],15],[[7,14],15],[[8,14],15],[[9,14],15],[[10,14],15],[[11,14],15],[[12,14],15],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[16,[[17,[1]]]],0,0,[[16,18,19,20],[[4,[3]]]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[1,5],0,[1,13],[5,17],0,0,0,0,[1,21],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],[[],22],0],"c":[],"p":[[3,"Madt"],[3,"PageTable"],[15,"str"],[4,"Result"],[3,"MadtIter"],[4,"MadtEntry"],[3,"MadtLocalApic"],[3,"MadtIoApic"],[3,"MadtIntSrcOverride"],[3,"MadtNonMaskableInterrupt"],[3,"MadtLocalApicAddressOverride"],[3,"MadtLocalX2Apic"],[15,"u32"],[3,"Formatter"],[6,"Result"],[3,"AcpiTables"],[4,"Option"],[6,"AcpiSignature"],[15,"usize"],[3,"PhysicalAddress"],[3,"Sdt"],[3,"TypeId"]]},\ "memfs":{"doc":"This crate contains an implementation of an in-memory …","t":"DLLLLLLLLLLLLLLLLL","n":["MemFile","as_mapping","borrow","borrow_mut","create","flush","from","from_mapped_pages","get_name","get_parent_dir","into","len","read_at","set_parent_dir","try_from","try_into","type_id","write_at"],"q":[[0,"memfs"]],"d":["The struct that represents a file in memory that is backed …","","","","Allocates writable memory space for the given contents and …","","Returns the argument unchanged.","Creates a new MemFile in the given parent directory with …","","","Calls U::from(self).","","","","","","",""],"i":[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],"f":[0,[1,[[4,[2,3]]]],[[]],[[]],[[5,6],[[4,[7,3]]]],[1,[[4,[8]]]],[[]],[[2,5,9,6],[[4,[7,3]]]],[1,5],[1,[[10,[6]]]],[[]],[1,9],[[1,[12,[11]],9],[[4,[9,8]]]],[[1,13]],[[],4],[[],4],[[],14],[[1,[12,[11]],9],[[4,[9,8]]]]],"c":[],"p":[[3,"MemFile"],[3,"MappedPages"],[15,"str"],[4,"Result"],[3,"String"],[6,"DirRef"],[6,"FileRef"],[4,"IoError"],[15,"usize"],[4,"Option"],[15,"u8"],[15,"slice"],[6,"WeakDirRef"],[3,"TypeId"]]},\ -"memory":{"doc":"This crate implements the main memory management subsystem …","t":"SSDDENNDDSDDSSSSRSSDDDSDDRDDDGIDSSRSSSRDDDDDDDSSDSSSNSSSSLLLLLLLLLLLLLLMLLLLLLFFFFFFFFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLMFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLMLLFLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["ACCESSED","ACCESSED","AllocatedFrames","AllocatedPages","AllocationRequest","Any","AtVirtualAddress","BorrowedMappedPages","BorrowedSliceMappedPages","CACHE_DISABLE","CopyableFrameRange","CopyablePageRange","DEVICE_MEMORY","DEVICE_MEMORY","DIRTY","DIRTY","DMA_FLAGS","EXCLUSIVE","EXCLUSIVE","EarlyIdentityMappedPages","Frame","FrameRange","HUGE_PAGE","Immutable","InitialMemoryMappings","MMIO_FLAGS","MappedPages","Mapper","MemoryManagementInfo","MmiRef","Mutability","Mutable","NOT_EXECUTABLE","NOT_EXECUTABLE","PAGE_SIZE","PAT_BIT0","PAT_BIT1","PAT_BIT2_FOR_P1","PTE_FRAME_MASK","Page","PageRange","PageTable","PhysicalAddress","PteFlags","PteFlagsArch","PteFlagsX86_64","VALID","VALID","VirtualAddress","WRITABLE","WRITABLE","WRITE_THROUGH","WithinRange","_GLOBAL","_GLOBAL","_USER_ACCESSIBLE","_USER_ACCESSIBLE","accessed","accessed","add","add","add","add","add","add","add_assign","add_assign","add_assign","add_assign","add_assign","add_assign","additional","address_at_offset","address_at_offset","address_at_offset","adjust_for_higher_level_pte","all","all","allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_pages","allocate_pages_at","allocate_pages_by_bytes","allocate_pages_by_bytes_at","allocate_pages_by_bytes_in_range","allocate_pages_in_range","as_allocated_frame","as_mut","as_mut","as_ref","as_ref","as_slice","as_slice_mut","as_type","as_type_mut","backward_checked","backward_checked","bitand","bitand","bitand","bitand","bitand_assign","bitand_assign","bitand_assign","bitand_assign","bitor","bitor","bitor","bitor","bitor_assign","bitor_assign","bitor_assign","bitor_assign","bits","bits","bitxor","bitxor","bitxor","bitxor","bitxor_assign","bitxor_assign","bitxor_assign","bitxor_assign","boot_info","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","complement","complement","containing_address","containing_address","contains","contains","contains_address","contains_address","create_contiguous_mapping","create_mapping","data","deep_copy","default","default","default","default","deref","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","device_memory","device_memory","difference","difference","dirty","dirty","drop","drop","drop","dump_pte","empty","empty","empty","empty","empty","empty","empty","end","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","exclusive","exclusive","executable","executable","extend","extend","extra_mapped_pages","flags","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward_checked","forward_checked","frame_offset","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits","from_bits_truncate","from_bits_truncate","from_bits_unchecked","from_bits_unchecked","from_iter","from_iter","from_mut","from_mut","from_phys_addr","from_virt_addr","get_kernel_mmi_ref","get_pat_index","hash","hash","hash","hash","hash","hash","identity","init","init_post_heap","inner_ref","inner_ref","insert","insert","intersection","intersection","intersects","intersects","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_borrowed","into_borrowed_mut","into_borrowed_slice","into_borrowed_slice_mut","into_inner","into_inner","into_iter","into_iter","into_iter","is_accessed","is_accessed","is_all","is_all","is_device_memory","is_device_memory","is_dirty","is_dirty","is_empty","is_empty","is_exclusive","is_exclusive","is_executable","is_executable","is_huge","is_valid","is_valid","is_writable","is_writable","map_allocated_pages","map_allocated_pages_to","map_frame_range","merge","merge","merge","new","new","new","new","new","new","new_canonical","new_canonical","new_table","not","not","number","number","offset_of_address","offset_of_address","offset_of_address","overlap","overlap","p1_index","p2_index","p3_index","p4_index","page_offset","page_table","page_table","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pat_index","physical_address","range","remap","remove","remove","rodata","set","set","set_broadcast_tlb_shootdown_cb","size_in_bytes","size_in_bytes","size_in_bytes","size_in_frames","size_in_pages","size_in_pages","split","split","split","stack","stack_guard","start","start_address","start_address","start_address","start_address","start_address","steps_between","steps_between","sub","sub","sub","sub","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","switch","symmetric_difference","symmetric_difference","text","to_extended","to_extended","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","toggle","toggle","translate","translate","translate_page","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","union","union","unmap_into_parts","valid","valid","value","value","with","writable","writable","zero","zero"],"q":[[0,"memory"]],"d":["The hardware will set this bit when the page is accessed.…","The hardware will set this bit when the page is accessed.…","Represents a range of allocated physical memory Frames; …","Represents a range of allocated VirtualAddresses, …","Possible options when requested pages from the page …","The allocated pages can be located at any virtual address.","The allocated pages must start exactly at the given …","A borrowed MappedPages object that derefs to &T and …","A borrowed MappedPages object that derefs to a slice &[T] …","If set, this page’s content is never cached, neither for …","A FrameRange that implements Copy","A PageRange that implements Copy","If set, this page maps device memory, which is …","An alias for Self::CACHE_DISABLE in order to ease …","The hardware will set this bit when the page has been …","The hardware will set this bit when the page has been …","Mapping flags that can be used to map DMA (Direct Memory …","Note: code that invokes memory management functions in …","See PteFlags::EXCLUSIVE. We use bit 55 because it is …","The set of identity mappings that should be dropped before …","A Frame is a chunk of physical memory aligned to a …","A range of Frames that are contiguous in physical memory.","If set, this page table entry represents a “huge” …","A marker type used to indicate that a BorrowedMappedPages …","Information returned after initialising the memory …","Mapping flags that can be used to map MMIO registers.","Represents a contiguous range of virtual memory pages that …","","This holds all the information for a Task’s memory …","A shareable reference to a MemoryManagementInfo struct …","A trait for parameterizing a BorrowedMappedPages or …","A marker type used to indicate that a BorrowedMappedPages …","If set, this page is not executable.If not set, this page …","If set, this page is not executable.If not set, this page …","Page size is 4096 bytes, 4KiB pages.","","","(For P1-level (lowest level) page tables ONLY): If the …","A mask for the bits of a page table entry that contain the …","A Page is a chunk of virtual memory aligned to a PAGE_SIZE …","A range of Pages that are contiguous in virtual memory.","A top-level root (P4) page table.","A physical memory address, which is a usize under the hood.","Common, architecture-independent flags for a page table …","Page table entry (PTE) flags on x86_64.","Page table entry (PTE) flags on x86_64.","If set, this page is currently “present” in memory. If …","If set, this page is currently “present” in memory. If …","A virtual memory address, which is a usize under the hood.","If set, this page is writable.If not set, this page is …","If set, this page is writable.If not set, this page is …","If set, writes to this page go directly to memory.It not …","The allocated pages can be located anywhere within the …","If set, this page is mapped identically across all address …","If set, this page is mapped identically across all address …","If set, userspace (unprivileged mode) can access this page.…","If set, userspace (ring 3) can access this page.If not …","Returns a copy of this PteFlags with the ACCESSED bit set …","Returns a copy of this PteFlagsX86_64 with the ACCESSED …","","","","","","","","","","","","","The list of additional mappings that must be kept forever.","Returns the VirtualAddress at the given offset into this …","Returns the VirtualAddress at the given offset into this …","Returns the PhysicalAddress at the given offset into this …","Returns a copy of this PteFlagsX86_64 with its flags …","Returns the set containing all flags.","Returns the set containing all flags.","Allocates the given number of frames with no constraints …","Allocates the given number of frames starting at …","Allocates frames with no constraints on the starting …","Allocates frames starting at the given PhysicalAddress …","Allocates the given number of pages with no constraints on …","Allocates the given number of pages starting at (inclusive …","Allocates pages with no constraints on the starting …","Allocates pages starting at the given VirtualAddress with …","Allocates pages with a size given in number of bytes with …","Allocates the given number of pages with the constraint …","Returns an AllocatedFrame if this AllocatedFrames object …","","","","","Reinterprets this MappedPages’s underlying memory region …","Same as MappedPages::as_slice(), but returns a mutable …","Reinterprets this MappedPages’s underlying memory region …","Same as MappedPages::as_type(), but returns a mutable …","","","Returns the intersection between the two sets of flags.","","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","","","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","","","Returns the union of the two sets of flags.","Adds the set of flags.","","","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","Toggles the set of flags.","The boot information mappings.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the Page containing the given VirtualAddress.","Returns the Frame containing the given PhysicalAddress.","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","Returns true if this PageRange contains the given …","Returns true if this FrameRange contains the given …","A convenience function that creates a new memory mapping …","A convenience function that creates a new memory mapping. …","The kernel’s .data section mappings/","Creates a deep copy of this MappedPages memory region, by …","","","","","","","","","","","","","","","","","Returns a copy of this PteFlags with the DEVICE_MEMORY bit …","Returns a copy of this PteFlagsX86_64 with the …","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns a copy of this PteFlags with the DIRTY bit set or …","Returns a copy of this PteFlagsX86_64 with the DIRTY bit …","","","","Dumps all page table entries at all four page table levels …","Returns an empty set of flags.","Returns an empty AllocatedPages object that performs no …","Returns an empty AllocatedFrames object that performs no …","Returns an empty set of flags.","Creates a PageRange that will always yield None when …","Creates a FrameRange that will always yield None when …","Returns an empty MappedPages object that performs no …","Returns the ending Page (inclusive) in this range of pages.","","","","","","","","","","","Returns a copy of this PteFlags with the EXCLUSIVE bit set …","Returns a copy of this PteFlagsX86_64 with the EXCLUSIVE …","Returns a copy of this PteFlags with the NOT_EXECUTABLE …","Returns a copy of this PteFlagsX86_64 with the …","","","The list of additional memory mappings that have the same …","Returns the flags that describe this MappedPages page …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the offset from the frame boundary specified by …","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Immutably borrows the given MappedPages as an instance of …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Immutably borrows the given MappedPages as a slice &[T] of …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","","","Mutably borrows the given MappedPages as an instance of …","Mutably borrows the given MappedPages as a slice &mut [T] …","A convenience method for creating a new FrameRange that …","A convenience method for creating a new PageRange that …","Returns a reference to the kernel’s MemoryManagementInfo…","","","","","","","","The list of identity mappings that should be dropped …","Initializes the virtual memory management system. Consumes …","Finishes initializing the memory management system after …","Returns a reference to the inner MappedPages value (more …","Returns a reference to the inner borrowed MappedPages.","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","A convenience function for BorrowedMappedPages::from().","A convenience function for BorrowedMappedPages::from_mut().","A convenience function for BorrowedSliceMappedPages::from()…","A convenience function for …","Consumes this object and returns the inner MappedPages …","Consumes this object and returns the inner MappedPages.","","","","","","Returns true if all flags are currently set.","Returns true if all flags are currently set.","","","","","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","","","","","","","","","","Maps the given AllocatedPages to randomly chosen …","Maps the given virtual AllocatedPages to the given …","A convenience function that maps randomly-allocated pages …","Merges the given AllocatedPages object ap into this …","Merges the given AllocatedFrames object other into this …","Merges the given MappedPages object mp into this …","Returns a new PteFlags with the default value, in which:","Creates a new VirtualAddress, returning an error if the …","Creates a new PhysicalAddress, returning an error if the …","Returns a new PteFlagsX86_64 with the default value, in …","Creates a new range of Pages that spans from start to end, …","Creates a new range of Frames that spans from start to end…","Creates a new VirtualAddress that is guaranteed to be …","Creates a new PhysicalAddress that is guaranteed to be …","Initializes a new top-level P4 PageTable whose root is …","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the number of this Page.","Returns the number of this Frame.","Returns the offset of the given VirtualAddress within this …","Returns the offset of the given VirtualAddress within this …","Returns the offset of the given PhysicalAddress within …","Returns an inclusive PageRange representing the Pages that …","Returns an inclusive FrameRange representing the Frames …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the offset from the page boundary specified by …","the PageTable that should be switched to when this Task is …","The currently active page table.","","","","","","","","","Returns a copy of this PteFlagsX86_64 with the PAT index …","Returns the physical address of this page table’s …","Returns a reference to the inner PageRange, which is …","Change the mapping flags of this MappedPages’s page …","Removes the specified flags in-place.","Removes the specified flags in-place.","The kernel’s .rodata section mappings.","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Set the function callback that will be invoked every time …","Returns the size in bytes of this range of pages.","Returns the size of this range in number of bytes.","Returns the size of this range in number of bytes.","Returns the number of Frames covered by this iterator.","Returns the size in number of pages of this range of pages.","Returns the number of Pages covered by this iterator.","Splits this AllocatedPages into two separate AllocatedPages…","Splits this AllocatedFrames into two separate …","Splits this MappedPages into two separate MappedPages …","The kernel’s stack actual data page mappings.","The kernel stack’s guard page.","Returns the starting Page in this range of pages.","Returns the starting VirtualAddress in this range of pages.","Returns the VirtualAddress at the start of this Page.","Returns the PhysicalAddress at the start of this Frame.","Returns the VirtualAddress of the starting Page in this …","Returns the PhysicalAddress of the starting Frame in this …","","","Returns the set difference of the two sets of flags.","","","","","Returns the set difference of the two sets of flags.","","","Disables all flags enabled in the set.","","","","","Disables all flags enabled in the set.","","","Switches from the currently-active page table (this …","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","The kernel’s .text section mappings, which includes .init…","Returns a new separate PageRange that is extended to …","Returns a new separate FrameRange that is extended to …","","","","","","","","","","","","","Toggles the specified flags in-place.","Toggles the specified flags in-place.","A convenience function to translate the given virtual …","Translates a VirtualAddress to a PhysicalAddress by …","Translates a virtual memory Page to a physical memory Frame…","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","Consumes and unmaps this MappedPages object without …","Returns a copy of this PteFlags with the VALID bit set or …","Returns a copy of this PteFlagsX86_64 with the VALID bit …","Returns the underlying usize value for this VirtualAddress.","Returns the underlying usize value for this PhysicalAddress…","Temporarily maps the given other PageTable to the …","Returns a copy of this PteFlags with the WRITABLE bit set …","Returns a copy of this PteFlagsX86_64 with the WRITABLE …","Creates a new VirtualAddress with a value 0.","Creates a new PhysicalAddress with a value 0."],"i":[1,3,0,0,0,53,53,0,0,3,0,0,1,3,1,3,0,1,3,0,0,0,3,0,0,0,0,0,0,0,0,0,1,3,0,3,3,3,0,0,0,0,0,0,0,0,1,3,0,1,3,3,53,1,3,1,3,1,3,4,4,6,6,7,8,4,4,6,6,7,8,41,9,11,12,3,1,3,0,0,0,0,0,0,0,0,0,0,13,21,22,21,22,19,19,19,19,7,8,1,4,6,3,1,4,6,3,1,4,6,3,1,4,6,3,1,3,1,4,6,3,1,4,6,3,41,1,4,32,9,6,13,21,21,53,3,22,22,7,8,18,43,11,27,12,28,34,19,40,41,42,1,4,32,9,6,13,21,21,53,3,22,22,7,8,18,43,11,27,12,28,34,19,40,41,42,1,4,6,3,7,8,11,27,12,28,1,4,6,3,7,8,11,27,12,28,1,4,6,21,3,22,7,8,1,3,7,8,1,3,11,12,0,0,41,19,1,4,6,3,13,21,22,11,12,34,19,21,22,11,12,34,1,3,1,3,1,3,9,13,19,32,1,9,13,3,11,12,19,9,1,4,6,21,3,22,7,8,11,12,1,3,1,3,1,3,40,19,1,1,1,1,1,4,4,4,4,4,4,4,9,6,6,6,6,6,6,6,13,3,3,3,3,3,7,8,11,12,34,19,40,41,42,7,8,6,1,1,4,32,9,6,13,21,21,53,3,3,22,22,7,8,18,43,11,11,27,27,12,12,28,28,34,19,40,41,42,1,3,1,3,1,3,1,3,21,22,12,11,0,3,1,4,6,21,3,22,41,0,0,21,22,1,3,1,3,1,3,1,4,4,32,9,6,6,13,21,53,3,22,7,8,18,43,11,27,12,28,34,19,40,41,42,19,19,19,19,21,22,13,11,12,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,1,3,1,3,32,32,0,9,13,19,1,4,6,3,11,12,4,6,34,1,3,7,8,9,11,12,11,12,7,7,7,7,4,40,41,1,4,6,21,3,22,7,8,3,34,9,19,1,3,41,1,3,0,9,11,12,12,9,11,9,13,19,41,41,9,9,7,8,11,12,7,8,1,4,4,6,6,3,7,8,1,4,4,6,6,3,7,8,34,1,3,41,11,12,1,4,6,3,7,8,11,27,12,28,4,6,1,3,0,32,32,1,4,32,9,6,13,21,53,3,22,7,8,18,43,11,27,12,28,34,19,40,41,42,1,4,32,9,6,13,21,53,3,22,7,8,18,43,11,27,12,28,34,19,40,41,42,1,4,32,9,6,13,21,53,3,22,7,8,18,43,11,27,12,28,34,19,40,41,42,1,3,19,1,3,4,6,34,1,3,4,6],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,2],1],[[3,2],3],[[4,5],4],[[4,4],4],[[6,5],6],[[6,6],6],[[7,5],7],[[8,5],8],[[4,4]],[[4,5]],[[6,6]],[[6,5]],[[7,5]],[[8,5]],0,[[9,5],[[10,[4]]]],[[11,5],[[10,[4]]]],[[12,5],[[10,[6]]]],[3,3],[[],1],[[],3],[5,[[10,[13]]]],[[6,5],[[15,[13,14]]]],[5,[[10,[13]]]],[[6,5],[[15,[13,14]]]],[5,[[10,[9]]]],[[4,5],[[15,[9,14]]]],[5,[[10,[9]]]],[[4,5],[[15,[9,14]]]],[[5,11],[[15,[9,14]]]],[[5,11],[[15,[9,14]]]],[13,16],[[[21,[17,18,[20,[19]]]]],17],[[[22,[17,18,[20,[19]]]]],[[23,[17]]]],[[[21,[17,24,[25,[19]]]]],17],[[[22,[17,24,[25,[19]]]]],[[23,[17]]]],[[19,5,5],[[15,[[23,[17]],14]]]],[[19,5,5],[[15,[[23,[17]],14]]]],[[19,5],[[15,[17,14]]]],[[19,5],[[15,[17,14]]]],[[7,5],[[10,[7]]]],[[8,5],[[10,[8]]]],[[1,1],1],[[4,4],4],[[6,6],6],[[3,3],3],[[1,1]],[[4,4]],[[6,6]],[[3,3]],[[1,1],1],[[4,4],4],[[6,6],6],[[3,3],3],[[1,1]],[[4,4]],[[6,6]],[[3,3]],[1,26],[3,26],[[1,1],1],[[4,4],4],[[6,6],6],[[3,3],3],[[1,1]],[[4,4]],[[6,6]],[[3,3]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[21,[17,24,[25,[19]]]]],17],[[]],[[]],[[]],[[[22,[17,24,[25,[19]]]]],[[23,[17]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[21,[17,18,[20,[19]]]]],17],[[]],[[]],[[[22,[17,18,[20,[19]]]]],[[23,[17]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[4,4],[6,6],[3,3],[7,7],[8,8],[11,11],[27,27],[12,12],[28,28],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[1,1],29],[[4,4],29],[[6,6],29],[[[21,[[0,[17,30]],24,[25,[19]]]],[21,[[0,[17,30]],24,[25,[19]]]]],29],[[3,3],29],[[[22,[[0,[17,30]],24,[25,[19]]]],[22,[[0,[17,30]],24,[25,[19]]]]],29],[[7,7],29],[[8,8],29],[1,1],[3,3],[4,7],[6,8],[[1,1],2],[[3,3],2],[[11,4],2],[[12,6],2],[[5,[31,[3]]],[[15,[14]]]],[[5,[31,[3]]],[[15,[19,14]]]],0,[[19,32,[10,[[31,[3]]]]],[[15,[19,14]]]],[[],1],[[],4],[[],6],[[],3],[13,12],[[[21,[17,24,[25,[19]]]]],17],[[[22,[17,24,[25,[19]]]]],[[23,[17]]]],[11,[[33,[7]]]],[12,[[33,[8]]]],[34,32],[19,9],[[[21,[17,18,[20,[19]]]]],17],[[[22,[17,18,[20,[19]]]]],[[23,[17]]]],[11,[[33,[7]]]],[12,[[33,[8]]]],[34,32],[[1,2],1],[[3,2],3],[[1,1],1],[[3,3],3],[[1,2],1],[[3,2],3],[9],[13],[19],[[32,4]],[[],1],[[],9],[[],13],[[],3],[[],11],[[],12],[[],19],[9,7],[[1,1],2],[[4,4],2],[[6,6],2],[[[21,[[0,[17,35]],24,[25,[19]]]],[21,[[0,[17,35]],24,[25,[19]]]]],2],[[3,3],2],[[[22,[[0,[17,35]],24,[25,[19]]]],[22,[[0,[17,35]],24,[25,[19]]]]],2],[[7,7],2],[[8,8],2],[[11,11],2],[[12,12],2],[[1,2],1],[[3,2],3],[[1,2],1],[[3,2],3],[[1,36]],[[3,36]],0,[19,3],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[9,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[13,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[7,37],[[15,[38]]]],[[8,37],[[15,[38]]]],[[11,37],[[15,[38]]]],[[12,37],[[15,[38]]]],[[34,37],39],[[19,37],39],[[40,37],39],[[41,37],39],[[42,37],39],[[7,5],[[10,[7]]]],[[8,5],[[10,[8]]]],[6,5],[[]],[3,1],[[]],[[]],[[]],[[]],[[]],[[[25,[19]],5],[[15,[[21,[17,43,[25,[19]]]]]]]],[[]],[[]],[[]],[1,3],[[]],[[[25,[19]],5,5],[[15,[[22,[17,43,[25,[19]]]]]]]],[[]],[[]],[[]],[[]],[27,11],[[]],[[]],[11,27],[28,12],[[]],[[]],[12,28],[[]],[[]],[[]],[[]],[[]],[26,[[10,[1]]]],[26,[[10,[3]]]],[26,1],[26,3],[26,1],[26,3],[36,1],[36,3],[[[20,[19]],5],[[15,[[21,[17,18,[20,[19]]]]]]]],[[[20,[19]],5,5],[[15,[[22,[17,18,[20,[19]]]]]]]],[[6,5],12],[[4,5],11],[[],[[10,[44]]]],[3,45],[[1,46]],[[4,46]],[[6,46]],[[[21,[[0,[17,47]],24,[25,[19]]]],46]],[[3,46]],[[[22,[[0,[17,47]],24,[25,[19]]]],46]],0,[[48,4],[[15,[41,14]]]],[[34,19,19],44],[[[21,[17,24,[25,[19]]]]],[[25,[19]]]],[[[22,[17,24,[25,[19]]]]],[[25,[19]]]],[[1,1]],[[3,3]],[[1,1],1],[[3,3],3],[[1,1],2],[[3,3],2],[[]],[4,5],[[]],[[]],[[]],[[]],[6,5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[19,5],[[15,[[21,[17,43]]]]]],[[19,5],[[15,[[21,[17,18]]]]]],[[19,5,5],[[15,[[22,[17,43]]]]]],[[19,5,5],[[15,[[22,[17,18]]]]]],[[[21,[17,24,[25,[19]]]]],[[25,[19]]]],[[[22,[17,24,[25,[19]]]]],[[25,[19]]]],[13],[11],[12],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[3,2],[1,2],[3,2],[1,2],[3,2],[[32,9,[31,[3]]],[[15,[19,14]]]],[[32,9,13,[31,[3]]],[[15,[19,14]]]],[[6,5,[31,[3]]],[[15,[19,14]]]],[[9,9],[[15,[9]]]],[[13,13],[[15,[13]]]],[[19,19],15],[[],1],[5,[[10,[4]]]],[5,[[10,[6]]]],[[],3],[[7,7],11],[[8,8],12],[5,4],[5,6],[[34,13,[10,[9]]],[[15,[34,14]]]],[1,1],[3,3],[7,5],[8,5],[[9,4],[[10,[5]]]],[[11,4],[[10,[5]]]],[[12,6],[[10,[5]]]],[[11,11],[[10,[11]]]],[[12,12],[[10,[12]]]],[7,5],[7,5],[7,5],[7,5],[4,5],0,0,[[1,1],[[10,[29]]]],[[4,4],[[10,[29]]]],[[6,6],[[10,[29]]]],[[[21,[[0,[17,49]],24,[25,[19]]]],[21,[[0,[17,49]],24,[25,[19]]]]],[[10,[29]]]],[[3,3],[[10,[29]]]],[[[22,[[0,[17,49]],24,[25,[19]]]],[22,[[0,[17,49]],24,[25,[19]]]]],[[10,[29]]]],[[7,7],[[10,[29]]]],[[8,8],[[10,[29]]]],[[3,45],3],[34,6],[9,11],[[19,32,[31,[3]]],[[15,[14]]]],[[1,1]],[[3,3]],0,[[1,1,2]],[[3,3,2]],[[]],[9,5],[11,5],[12,5],[12,5],[9,5],[11,5],[[9,7],[[15,[9]]]],[[13,8],[[15,[13]]]],[[19,7],[[15,[19]]]],0,0,[9,7],[9,4],[7,4],[8,6],[11,4],[12,6],[[7,7],[[10,[5]]]],[[8,8],[[10,[5]]]],[[1,1],1],[[4,5],4],[[4,4],4],[[6,6],6],[[6,5],6],[[3,3],3],[[7,5],7],[[8,5],8],[[1,1]],[[4,4]],[[4,5]],[[6,6]],[[6,5]],[[3,3]],[[7,5]],[[8,5]],[[34,34]],[[1,1],1],[[3,3],3],0,[[11,7],11],[[12,8],12],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],50],[[],50],[[1,1]],[[3,3]],[4,[[10,[6]]]],[[32,4],[[10,[6]]]],[[32,7],[[10,[8]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[],51],[[1,1],1],[[3,3],3],[[19,32],[[15,[19]]]],[[1,2],1],[[3,2],3],[4,5],[6,5],[[34,34,52],[[15,[14]]]],[[1,2],1],[[3,2],3],[[],4],[[],6]],"c":[],"p":[[3,"PteFlags"],[15,"bool"],[3,"PteFlagsArch"],[3,"VirtualAddress"],[15,"usize"],[3,"PhysicalAddress"],[3,"Page"],[3,"Frame"],[3,"AllocatedPages"],[4,"Option"],[3,"PageRange"],[3,"FrameRange"],[3,"AllocatedFrames"],[15,"str"],[4,"Result"],[3,"AllocatedFrame"],[8,"FromBytes"],[3,"Mutable"],[3,"MappedPages"],[8,"BorrowMut"],[3,"BorrowedMappedPages"],[3,"BorrowedSliceMappedPages"],[15,"slice"],[8,"Mutability"],[8,"Borrow"],[15,"u64"],[3,"CopyablePageRange"],[3,"CopyableFrameRange"],[4,"Ordering"],[8,"Ord"],[8,"Into"],[3,"Mapper"],[3,"RangeInclusive"],[3,"PageTable"],[8,"PartialEq"],[8,"IntoIterator"],[3,"Formatter"],[3,"Error"],[6,"Result"],[3,"MemoryManagementInfo"],[3,"InitialMemoryMappings"],[3,"EarlyIdentityMappedPages"],[3,"Immutable"],[6,"MmiRef"],[15,"u8"],[8,"Hasher"],[8,"Hash"],[8,"BootInformation"],[8,"PartialOrd"],[3,"String"],[3,"TypeId"],[8,"FnOnce"],[4,"AllocationRequest"]],"a":{"cache":[232,233,406,407],"cacheable":[232,233,406,407],"mmi":[28],"no_exec":[262,263,414,415],"non-cacheable":[232,233,406,407],"page attribute table":[350,460],"pat":[350,460],"present":[417,418,600,601],"read_only":[419,420,605,606],"slot":[350,460]}},\ +"memory":{"doc":"This crate implements the main memory management subsystem …","t":"SSNGDENNDDSDDSSSSRSSDDDNSDDRNDDDEGIDSSRSSSRDDDDDDDNGSSDSSSNSSSSLLLLLLLLLLLLLLMLLLLLLFFFFFFFFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFFMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLMFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLMLLFLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["ACCESSED","ACCESSED","Allocated","AllocatedFrames","AllocatedPages","AllocationRequest","Any","AtVirtualAddress","BorrowedMappedPages","BorrowedSliceMappedPages","CACHE_DISABLE","CopyableFrameRange","CopyablePageRange","DEVICE_MEMORY","DEVICE_MEMORY","DIRTY","DIRTY","DMA_FLAGS","EXCLUSIVE","EXCLUSIVE","EarlyIdentityMappedPages","Frame","FrameRange","Free","HUGE_PAGE","Immutable","InitialMemoryMappings","MMIO_FLAGS","Mapped","MappedPages","Mapper","MemoryManagementInfo","MemoryState","MmiRef","Mutability","Mutable","NOT_EXECUTABLE","NOT_EXECUTABLE","PAGE_SIZE","PAT_BIT0","PAT_BIT1","PAT_BIT2_FOR_P1","PTE_FRAME_MASK","Page","PageRange","PageTable","PhysicalAddress","PteFlags","PteFlagsArch","PteFlagsX86_64","Unmapped","UnmappedFrames","VALID","VALID","VirtualAddress","WRITABLE","WRITABLE","WRITE_THROUGH","WithinRange","_GLOBAL","_GLOBAL","_USER_ACCESSIBLE","_USER_ACCESSIBLE","accessed","accessed","add","add","add","add","add","add","add_assign","add_assign","add_assign","add_assign","add_assign","add_assign","additional","address_at_offset","address_at_offset","address_at_offset","adjust_for_higher_level_pte","all","all","allocate_frames","allocate_frames_at","allocate_frames_by_bytes","allocate_frames_by_bytes_at","allocate_pages","allocate_pages_at","allocate_pages_by_bytes","allocate_pages_by_bytes_at","allocate_pages_by_bytes_in_range","allocate_pages_in_range","as_mut","as_mut","as_ref","as_ref","as_slice","as_slice_mut","as_type","as_type_mut","backward_checked","backward_checked","bitand","bitand","bitand","bitand","bitand_assign","bitand_assign","bitand_assign","bitand_assign","bitor","bitor","bitor","bitor","bitor_assign","bitor_assign","bitor_assign","bitor_assign","bits","bits","bitxor","bitxor","bitxor","bitxor","bitxor_assign","bitxor_assign","bitxor_assign","bitxor_assign","boot_info","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","cmp","cmp","cmp","cmp","complement","complement","containing_address","containing_address","contains","contains","contains_address","contains_address","contains_range","contains_range","create_contiguous_mapping","create_mapping","data","deep_copy","default","default","default","default","deref","deref","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","deref_mut","device_memory","device_memory","difference","difference","dirty","dirty","drop","drop","dump_pte","empty","empty","empty","empty","empty","empty","end","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","eq","exclusive","exclusive","executable","executable","extend","extend","extra_mapped_pages","flags","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward_checked","forward_checked","frame_offset","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits","from_bits_truncate","from_bits_truncate","from_bits_unchecked","from_bits_unchecked","from_iter","from_iter","from_mut","from_mut","from_phys_addr","from_virt_addr","get_kernel_mmi_ref","get_pat_index","hash","hash","hash","hash","hash","hash","identity","init","init_post_heap","inner_ref","inner_ref","insert","insert","intersection","intersection","intersects","intersects","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into_borrowed","into_borrowed_mut","into_borrowed_slice","into_borrowed_slice_mut","into_inner","into_inner","into_iter","into_iter","is_accessed","is_accessed","is_all","is_all","is_device_memory","is_device_memory","is_dirty","is_dirty","is_empty","is_empty","is_exclusive","is_exclusive","is_executable","is_executable","is_huge","is_valid","is_valid","is_writable","is_writable","map_allocated_pages","map_allocated_pages_to","map_frame_range","merge","merge","new","new","new","new","new","new","new_canonical","new_canonical","new_table","not","not","number","number","offset_of_address","offset_of_address","offset_of_address","overlap","overlap","p1_index","p2_index","p3_index","p4_index","page_offset","page_table","page_table","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pat_index","physical_address","range","remap","remove","remove","rodata","set","set","set_broadcast_tlb_shootdown_cb","size_in_bytes","size_in_bytes","size_in_bytes","size_in_frames","size_in_pages","size_in_pages","split","split","stack","stack_guard","start","start_address","start_address","start_address","start_address","start_address","steps_between","steps_between","sub","sub","sub","sub","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","switch","symmetric_difference","symmetric_difference","text","to_extended","to_extended","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","toggle","toggle","translate","translate","translate_page","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","union","union","unmap_into_parts","valid","valid","value","value","with","writable","writable","zero","zero"],"q":[[0,"memory"]],"d":["The hardware will set this bit when the page is accessed.…","The hardware will set this bit when the page is accessed.…","Memory is allocated and can be used for a mapping","A type alias for Frames in the Allocated state.","Represents a range of allocated VirtualAddresses, …","Possible options when requested pages from the page …","The allocated pages can be located at any virtual address.","The allocated pages must start exactly at the given …","A borrowed MappedPages object that derefs to &T and …","A borrowed MappedPages object that derefs to a slice &[T] …","If set, this page’s content is never cached, neither for …","A FrameRange that implements Copy","A PageRange that implements Copy","If set, this page maps device memory, which is …","An alias for Self::CACHE_DISABLE in order to ease …","The hardware will set this bit when the page has been …","The hardware will set this bit when the page has been …","Mapping flags that can be used to map DMA (Direct Memory …","Note: code that invokes memory management functions in …","See PteFlags::EXCLUSIVE. We use bit 55 because it is …","The set of identity mappings that should be dropped before …","A Frame is a chunk of physical memory aligned to a …","A range of Frames that are contiguous in physical memory.","Memory is free and owned by the allocator","If set, this page table entry represents a “huge” …","A marker type used to indicate that a BorrowedMappedPages …","Information returned after initialising the memory …","Mapping flags that can be used to map MMIO registers.","Memory is mapped (PTE has been set)","Represents a contiguous range of virtual memory pages that …","","This holds all the information for a Task’s memory …","The possible states that a range of exclusively-owned …","A shareable reference to a MemoryManagementInfo struct …","A trait for parameterizing a BorrowedMappedPages or …","A marker type used to indicate that a BorrowedMappedPages …","If set, this page is not executable.If not set, this page …","If set, this page is not executable.If not set, this page …","Page size is 4096 bytes, 4KiB pages.","","","(For P1-level (lowest level) page tables ONLY): If the …","A mask for the bits of a page table entry that contain the …","A Page is a chunk of virtual memory aligned to a PAGE_SIZE …","A range of Pages that are contiguous in virtual memory.","A top-level root (P4) page table.","A physical memory address, which is a usize under the hood.","Common, architecture-independent flags for a page table …","Page table entry (PTE) flags on x86_64.","Page table entry (PTE) flags on x86_64.","Memory has been unmapped (PTE has been cleared)","A type alias for Frames in the Unmapped state.","If set, this page is currently “present” in memory. If …","If set, this page is currently “present” in memory. If …","A virtual memory address, which is a usize under the hood.","If set, this page is writable.If not set, this page is …","If set, this page is writable.If not set, this page is …","If set, writes to this page go directly to memory.It not …","The allocated pages can be located anywhere within the …","If set, this page is mapped identically across all address …","If set, this page is mapped identically across all address …","If set, userspace (unprivileged mode) can access this page.…","If set, userspace (ring 3) can access this page.If not …","Returns a copy of this PteFlags with the ACCESSED bit set …","Returns a copy of this PteFlagsX86_64 with the ACCESSED …","","","","","","","","","","","","","The list of additional mappings that must be kept forever.","Returns the VirtualAddress at the given offset into this …","Returns the VirtualAddress at the given offset into this …","Returns the PhysicalAddress at the given offset into this …","Returns a copy of this PteFlagsX86_64 with its flags …","Returns the set containing all flags.","Returns the set containing all flags.","Allocates the given number of frames with no constraints …","Allocates the given number of frames starting at …","Allocates frames with no constraints on the starting …","Allocates frames starting at the given PhysicalAddress …","Allocates the given number of pages with no constraints on …","Allocates the given number of pages starting at (inclusive …","Allocates pages with no constraints on the starting …","Allocates pages starting at the given VirtualAddress with …","Allocates pages with a size given in number of bytes with …","Allocates the given number of pages with the constraint …","","","","","Reinterprets this MappedPages’s underlying memory region …","Same as MappedPages::as_slice(), but returns a mutable …","Reinterprets this MappedPages’s underlying memory region …","Same as MappedPages::as_type(), but returns a mutable …","","","Returns the intersection between the two sets of flags.","","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","","","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","","","Returns the union of the two sets of flags.","Adds the set of flags.","","","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","","","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","Toggles the set of flags.","The boot information mappings.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the Page containing the given VirtualAddress.","Returns the Frame containing the given PhysicalAddress.","Returns true if all of the flags in other are contained …","Returns true if all of the flags in other are contained …","Returns true if this PageRange contains the given …","Returns true if this FrameRange contains the given …","Returns true if the other PageRange is fully contained …","Returns true if the other FrameRange is fully contained …","A convenience function that creates a new memory mapping …","A convenience function that creates a new memory mapping. …","The kernel’s .data section mappings/","Creates a deep copy of this MappedPages memory region, by …","","","","","","","","","","","","","","","","Returns a copy of this PteFlags with the DEVICE_MEMORY bit …","Returns a copy of this PteFlagsX86_64 with the …","Returns the difference between the flags in self and other.","Returns the difference between the flags in self and other.","Returns a copy of this PteFlags with the DIRTY bit set or …","Returns a copy of this PteFlagsX86_64 with the DIRTY bit …","","","Dumps all page table entries at all four page table levels …","Returns an empty set of flags.","Returns an empty AllocatedPages object that performs no …","Returns an empty set of flags.","Creates a PageRange that will always yield None when …","Creates a FrameRange that will always yield None when …","Returns an empty MappedPages object that performs no …","Returns the ending Page (inclusive) in this range of pages.","","","","","","","","","","","","Returns a copy of this PteFlags with the EXCLUSIVE bit set …","Returns a copy of this PteFlagsX86_64 with the EXCLUSIVE …","Returns a copy of this PteFlags with the NOT_EXECUTABLE …","Returns a copy of this PteFlagsX86_64 with the …","","","The list of additional memory mappings that have the same …","Returns the flags that describe this MappedPages page …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the offset from the frame boundary specified by …","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Immutably borrows the given MappedPages as an instance of …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","Immutably borrows the given MappedPages as a slice &[T] of …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","Convert from underlying bit representation, preserving all …","","","Mutably borrows the given MappedPages as an instance of …","Mutably borrows the given MappedPages as a slice &mut [T] …","A convenience method for creating a new FrameRange that …","A convenience method for creating a new PageRange that …","Returns a reference to the kernel’s MemoryManagementInfo…","","","","","","","","The list of identity mappings that should be dropped …","Initializes the virtual memory management system. Consumes …","Finishes initializing the memory management system after …","Returns a reference to the inner MappedPages value (more …","Returns a reference to the inner borrowed MappedPages.","Inserts the specified flags in-place.","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","A convenience function for BorrowedMappedPages::from().","A convenience function for BorrowedMappedPages::from_mut().","A convenience function for BorrowedSliceMappedPages::from()…","A convenience function for …","Consumes this object and returns the inner MappedPages …","Consumes this object and returns the inner MappedPages.","","","","","Returns true if all flags are currently set.","Returns true if all flags are currently set.","","","","","Returns true if no flags are currently stored.","Returns true if no flags are currently stored.","","","","","","","","","","Maps the given AllocatedPages to randomly chosen …","Maps the given virtual AllocatedPages to the given …","A convenience function that maps randomly-allocated pages …","Merges the given AllocatedPages object ap into this …","Merges the given MappedPages object mp into this …","Returns a new PteFlags with the default value, in which:","Creates a new VirtualAddress, returning an error if the …","Creates a new PhysicalAddress, returning an error if the …","Returns a new PteFlagsX86_64 with the default value, in …","Creates a new range of Pages that spans from start to end, …","Creates a new range of Frames that spans from start to end…","Creates a new VirtualAddress that is guaranteed to be …","Creates a new PhysicalAddress that is guaranteed to be …","Initializes a new top-level P4 PageTable whose root is …","Returns the complement of this set of flags.","Returns the complement of this set of flags.","Returns the number of this Page.","Returns the number of this Frame.","Returns the offset of the given VirtualAddress within this …","Returns the offset of the given VirtualAddress within this …","Returns the offset of the given PhysicalAddress within …","Returns an inclusive PageRange representing the Pages that …","Returns an inclusive FrameRange representing the Frames …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the offset from the page boundary specified by …","the PageTable that should be switched to when this Task is …","The currently active page table.","","","","","","","","","Returns a copy of this PteFlagsX86_64 with the PAT index …","Returns the physical address of this page table’s …","Returns a reference to the inner PageRange, which is …","Change the mapping flags of this MappedPages’s page …","Removes the specified flags in-place.","Removes the specified flags in-place.","The kernel’s .rodata section mappings.","Inserts or removes the specified flags depending on the …","Inserts or removes the specified flags depending on the …","Set the function callback that will be invoked every time …","Returns the size in bytes of this range of pages.","Returns the size of this range in number of bytes.","Returns the size of this range in number of bytes.","Returns the number of Frames covered by this iterator.","Returns the size in number of pages of this range of pages.","Returns the number of Pages covered by this iterator.","Splits this AllocatedPages into two separate AllocatedPages…","Splits this MappedPages into two separate MappedPages …","The kernel’s stack actual data page mappings.","The kernel stack’s guard page.","Returns the starting Page in this range of pages.","Returns the starting VirtualAddress in this range of pages.","Returns the VirtualAddress at the start of this Page.","Returns the PhysicalAddress at the start of this Frame.","Returns the VirtualAddress of the starting Page in this …","Returns the PhysicalAddress of the starting Frame in this …","","","Returns the set difference of the two sets of flags.","","","","","Returns the set difference of the two sets of flags.","","","Disables all flags enabled in the set.","","","","","Disables all flags enabled in the set.","","","Switches from the currently-active page table (this …","Returns the symmetric difference between the flags in self …","Returns the symmetric difference between the flags in self …","The kernel’s .text section mappings, which includes .init…","Returns a new separate PageRange that is extended to …","Returns a new separate FrameRange that is extended to …","","","","","","","","","","","","","Toggles the specified flags in-place.","Toggles the specified flags in-place.","A convenience function to translate the given virtual …","Translates a VirtualAddress to a PhysicalAddress by …","Translates a virtual memory Page to a physical memory Frame…","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","Returns the union of between the flags in self and other.","Consumes and unmaps this MappedPages object without …","Returns a copy of this PteFlags with the VALID bit set or …","Returns a copy of this PteFlagsX86_64 with the VALID bit …","Returns the underlying usize value for this VirtualAddress.","Returns the underlying usize value for this PhysicalAddress…","Temporarily maps the given other PageTable to the …","Returns a copy of this PteFlags with the WRITABLE bit set …","Returns a copy of this PteFlagsX86_64 with the WRITABLE …","Creates a new VirtualAddress with a value 0.","Creates a new PhysicalAddress with a value 0."],"i":[1,3,34,0,0,0,54,54,0,0,3,0,0,1,3,1,3,0,1,3,0,0,0,34,3,0,0,0,34,0,0,0,0,0,0,0,1,3,0,3,3,3,0,0,0,0,0,0,0,0,34,0,1,3,0,1,3,3,54,1,3,1,3,1,3,4,4,6,6,7,8,4,4,6,6,7,8,41,9,11,12,3,1,3,0,0,0,0,0,0,0,0,0,0,20,21,20,21,18,18,18,18,7,8,1,4,6,3,1,4,6,3,1,4,6,3,1,4,6,3,1,3,1,4,6,3,1,4,6,3,41,34,1,4,31,9,20,20,6,54,3,21,21,7,8,17,43,11,26,12,27,33,18,40,41,42,34,1,4,31,9,20,20,6,54,3,21,21,7,8,17,43,11,26,12,27,33,18,40,41,42,1,4,6,3,7,8,11,26,12,27,1,4,6,3,7,8,11,26,12,27,1,4,20,6,3,21,7,8,1,3,7,8,1,3,11,12,11,12,0,0,41,18,1,4,6,3,20,21,11,12,33,18,20,21,11,12,33,1,3,1,3,1,3,9,18,31,1,9,3,11,12,18,9,34,1,4,20,6,3,21,7,8,11,12,1,3,1,3,1,3,40,18,1,1,1,1,1,4,4,4,4,4,4,4,9,6,6,6,6,6,6,6,3,3,3,3,3,7,8,11,12,33,18,40,41,42,7,8,6,34,1,1,4,31,9,20,20,6,54,3,3,21,21,7,8,17,43,11,11,26,26,12,12,27,27,33,18,40,41,42,1,3,1,3,1,3,1,3,20,21,12,11,0,3,1,4,20,6,3,21,41,0,0,20,21,1,3,1,3,1,3,34,1,4,4,31,9,20,6,6,54,3,21,7,8,17,43,11,26,12,27,33,18,40,41,42,18,18,18,18,20,21,11,12,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,1,3,1,3,31,31,0,9,18,1,4,6,3,11,12,4,6,33,1,3,7,8,9,11,12,11,12,7,7,7,7,4,40,41,1,4,20,6,3,21,7,8,3,33,9,18,1,3,41,1,3,0,9,11,12,12,9,11,9,18,41,41,9,9,7,8,11,12,7,8,1,4,4,6,6,3,7,8,1,4,4,6,6,3,7,8,33,1,3,41,11,12,1,4,6,3,7,8,11,26,12,27,4,6,1,3,0,31,31,34,1,4,31,9,20,6,54,3,21,7,8,17,43,11,26,12,27,33,18,40,41,42,34,1,4,31,9,20,6,54,3,21,7,8,17,43,11,26,12,27,33,18,40,41,42,34,1,4,31,9,20,6,54,3,21,7,8,17,43,11,26,12,27,33,18,40,41,42,1,3,18,1,3,4,6,33,1,3,4,6],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,2],1],[[3,2],3],[[4,4],4],[[4,5],4],[[6,5],6],[[6,6],6],[[7,5],7],[[8,5],8],[[4,5]],[[4,4]],[[6,5]],[[6,6]],[[7,5]],[[8,5]],0,[[9,5],[[10,[4]]]],[[11,5],[[10,[4]]]],[[12,5],[[10,[6]]]],[3,3],[[],1],[[],3],[5,[[10,[13]]]],[[6,5],[[15,[13,14]]]],[5,[[10,[13]]]],[[6,5],[[15,[13,14]]]],[5,[[10,[9]]]],[[4,5],[[15,[9,14]]]],[5,[[10,[9]]]],[[4,5],[[15,[9,14]]]],[[5,11],[[15,[9,14]]]],[[5,11],[[15,[9,14]]]],[[[20,[16,17,[19,[18]]]]],16],[[[21,[16,17,[19,[18]]]]],[[22,[16]]]],[[[20,[16,23,[24,[18]]]]],16],[[[21,[16,23,[24,[18]]]]],[[22,[16]]]],[[18,5,5],[[15,[[22,[16]],14]]]],[[18,5,5],[[15,[[22,[16]],14]]]],[[18,5],[[15,[16,14]]]],[[18,5],[[15,[16,14]]]],[[7,5],[[10,[7]]]],[[8,5],[[10,[8]]]],[[1,1],1],[[4,4],4],[[6,6],6],[[3,3],3],[[1,1]],[[4,4]],[[6,6]],[[3,3]],[[1,1],1],[[4,4],4],[[6,6],6],[[3,3],3],[[1,1]],[[4,4]],[[6,6]],[[3,3]],[1,25],[3,25],[[1,1],1],[[4,4],4],[[6,6],6],[[3,3],3],[[1,1]],[[4,4]],[[6,6]],[[3,3]],0,[[]],[[]],[[]],[[]],[[]],[[[20,[16,23,[24,[18]]]]],16],[[]],[[]],[[]],[[]],[[[21,[16,23,[24,[18]]]]],[[22,[16]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[[20,[16,17,[19,[18]]]]],16],[[]],[[]],[[]],[[[21,[16,17,[19,[18]]]]],[[22,[16]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[4,4],[6,6],[3,3],[7,7],[8,8],[11,11],[26,26],[12,12],[27,27],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[1,1],28],[[4,4],28],[[[20,[[0,[16,29]],23,[24,[18]]]],[20,[[0,[16,29]],23,[24,[18]]]]],28],[[6,6],28],[[3,3],28],[[[21,[[0,[16,29]],23,[24,[18]]]],[21,[[0,[16,29]],23,[24,[18]]]]],28],[[7,7],28],[[8,8],28],[1,1],[3,3],[4,7],[6,8],[[1,1],2],[[3,3],2],[[11,4],2],[[12,6],2],[[11,11],2],[[12,12],2],[[5,[30,[3]]],[[15,[14]]]],[[5,[30,[3]]],[[15,[18,14]]]],0,[[18,31,[10,[[30,[3]]]]],[[15,[18,14]]]],[[],1],[[],4],[[],6],[[],3],[[[20,[16,23,[24,[18]]]]],16],[[[21,[16,23,[24,[18]]]]],[[22,[16]]]],[11,[[32,[7]]]],[12,[[32,[8]]]],[33,31],[18,9],[[[20,[16,17,[19,[18]]]]],16],[[[21,[16,17,[19,[18]]]]],[[22,[16]]]],[11,[[32,[7]]]],[12,[[32,[8]]]],[33,31],[[1,2],1],[[3,2],3],[[1,1],1],[[3,3],3],[[1,2],1],[[3,2],3],[9],[18],[[31,4]],[[],1],[[],9],[[],3],[[],11],[[],12],[[],18],[9,7],[[34,34],2],[[1,1],2],[[4,4],2],[[[20,[[0,[16,35]],23,[24,[18]]]],[20,[[0,[16,35]],23,[24,[18]]]]],2],[[6,6],2],[[3,3],2],[[[21,[[0,[16,35]],23,[24,[18]]]],[21,[[0,[16,35]],23,[24,[18]]]]],2],[[7,7],2],[[8,8],2],[[11,11],2],[[12,12],2],[[1,2],1],[[3,2],3],[[1,2],1],[[3,2],3],[[1,36]],[[3,36]],0,[18,3],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[1,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[4,37],[[15,[38]]]],[[9,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[6,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[3,37],[[15,[38]]]],[[7,37],[[15,[38]]]],[[8,37],[[15,[38]]]],[[11,37],[[15,[38]]]],[[12,37],[[15,[38]]]],[[33,37],39],[[18,37],39],[[40,37],39],[[41,37],39],[[42,37],39],[[7,5],[[10,[7]]]],[[8,5],[[10,[8]]]],[6,5],[[]],[[]],[3,1],[[]],[[]],[[]],[[[24,[18]],5],[[15,[[20,[16,43,[24,[18]]]]]]]],[[]],[[]],[[]],[1,3],[[]],[[[24,[18]],5,5],[[15,[[21,[16,43,[24,[18]]]]]]]],[[]],[[]],[[]],[[]],[[]],[[]],[26,11],[[]],[11,26],[[]],[27,12],[[]],[12,27],[[]],[[]],[[]],[[]],[[]],[25,[[10,[1]]]],[25,[[10,[3]]]],[25,1],[25,3],[25,1],[25,3],[36,1],[36,3],[[[19,[18]],5],[[15,[[20,[16,17,[19,[18]]]]]]]],[[[19,[18]],5,5],[[15,[[21,[16,17,[19,[18]]]]]]]],[[6,5],12],[[4,5],11],[[],[[10,[44]]]],[3,45],[[1,46]],[[4,46]],[[[20,[[0,[16,47]],23,[24,[18]]]],46]],[[6,46]],[[3,46]],[[[21,[[0,[16,47]],23,[24,[18]]]],46]],0,[[48,4],[[15,[41,14]]]],[[33,18,18],44],[[[20,[16,23,[24,[18]]]]],[[24,[18]]]],[[[21,[16,23,[24,[18]]]]],[[24,[18]]]],[[1,1]],[[3,3]],[[1,1],1],[[3,3],3],[[1,1],2],[[3,3],2],[[]],[[]],[[]],[4,5],[[]],[[]],[[]],[[]],[6,5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[18,5],[[15,[[20,[16,43]]]]]],[[18,5],[[15,[[20,[16,17]]]]]],[[18,5,5],[[15,[[21,[16,43]]]]]],[[18,5,5],[[15,[[21,[16,17]]]]]],[[[20,[16,23,[24,[18]]]]],[[24,[18]]]],[[[21,[16,23,[24,[18]]]]],[[24,[18]]]],[11],[12],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[1,2],[3,2],[3,2],[1,2],[3,2],[1,2],[3,2],[[31,9,[30,[3]]],[[15,[18,14]]]],[[31,9,49,[30,[3]]],[[15,[18,14]]]],[[6,5,[30,[3]]],[[15,[18,14]]]],[[9,9],[[15,[9]]]],[[18,18],15],[[],1],[5,[[10,[4]]]],[5,[[10,[6]]]],[[],3],[[7,7],11],[[8,8],12],[5,4],[5,6],[[33,49,[10,[9]]],[[15,[33,14]]]],[1,1],[3,3],[7,5],[8,5],[[9,4],[[10,[5]]]],[[11,4],[[10,[5]]]],[[12,6],[[10,[5]]]],[[11,11],[[10,[11]]]],[[12,12],[[10,[12]]]],[7,5],[7,5],[7,5],[7,5],[4,5],0,0,[[1,1],[[10,[28]]]],[[4,4],[[10,[28]]]],[[[20,[[0,[16,50]],23,[24,[18]]]],[20,[[0,[16,50]],23,[24,[18]]]]],[[10,[28]]]],[[6,6],[[10,[28]]]],[[3,3],[[10,[28]]]],[[[21,[[0,[16,50]],23,[24,[18]]]],[21,[[0,[16,50]],23,[24,[18]]]]],[[10,[28]]]],[[7,7],[[10,[28]]]],[[8,8],[[10,[28]]]],[[3,45],3],[33,6],[9,11],[[18,31,[30,[3]]],[[15,[14]]]],[[1,1]],[[3,3]],0,[[1,1,2]],[[3,3,2]],[[]],[9,5],[11,5],[12,5],[12,5],[9,5],[11,5],[[9,7],[[15,[9]]]],[[18,7],[[15,[18]]]],0,0,[9,7],[9,4],[7,4],[8,6],[11,4],[12,6],[[7,7],[[10,[5]]]],[[8,8],[[10,[5]]]],[[1,1],1],[[4,4],4],[[4,5],4],[[6,6],6],[[6,5],6],[[3,3],3],[[7,5],7],[[8,5],8],[[1,1]],[[4,5]],[[4,4]],[[6,6]],[[6,5]],[[3,3]],[[7,5]],[[8,5]],[[33,33]],[[1,1],1],[[3,3],3],0,[[11,7],11],[[12,8],12],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],51],[[],51],[[1,1]],[[3,3]],[4,[[10,[6]]]],[[31,4],[[10,[6]]]],[[31,7],[[10,[8]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[],52],[[1,1],1],[[3,3],3],[[18,31],[[15,[18]]]],[[1,2],1],[[3,2],3],[4,5],[6,5],[[33,33,53],[[15,[14]]]],[[1,2],1],[[3,2],3],[[],4],[[],6]],"c":[],"p":[[3,"PteFlags"],[15,"bool"],[3,"PteFlagsArch"],[3,"VirtualAddress"],[15,"usize"],[3,"PhysicalAddress"],[3,"Page"],[3,"Frame"],[3,"AllocatedPages"],[4,"Option"],[3,"PageRange"],[3,"FrameRange"],[3,"Frames"],[15,"str"],[4,"Result"],[8,"FromBytes"],[3,"Mutable"],[3,"MappedPages"],[8,"BorrowMut"],[3,"BorrowedMappedPages"],[3,"BorrowedSliceMappedPages"],[15,"slice"],[8,"Mutability"],[8,"Borrow"],[15,"u64"],[3,"CopyablePageRange"],[3,"CopyableFrameRange"],[4,"Ordering"],[8,"Ord"],[8,"Into"],[3,"Mapper"],[3,"RangeInclusive"],[3,"PageTable"],[4,"MemoryState"],[8,"PartialEq"],[8,"IntoIterator"],[3,"Formatter"],[3,"Error"],[6,"Result"],[3,"MemoryManagementInfo"],[3,"InitialMemoryMappings"],[3,"EarlyIdentityMappedPages"],[3,"Immutable"],[6,"MmiRef"],[15,"u8"],[8,"Hasher"],[8,"Hash"],[8,"BootInformation"],[6,"AllocatedFrames"],[8,"PartialOrd"],[3,"String"],[3,"TypeId"],[8,"FnOnce"],[4,"AllocationRequest"]],"a":{"cache":[238,239,409,410],"cacheable":[238,239,409,410],"mmi":[31],"no_exec":[267,268,417,418],"non-cacheable":[238,239,409,410],"page attribute table":[354,462],"pat":[354,462],"present":[420,421,601,602],"read_only":[422,423,606,607],"slot":[354,462]}},\ "memory_aarch64":{"doc":"This crate implements the virtual memory subsystem …","t":"DDDOLLLLLLFMFFMFMLLLLLFMLLLFMFMMCFFLLLLLLLLL","n":["AggregatedSectionMemoryBounds","MmuConfig","SectionMemoryBounds","asm_set_mmu_config_x2_x3","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","configure_translation_registers","data","disable_mmu","enable_mmu","end","find_section_memory_bounds","flags","fmt","fmt","from","from","from","get_p4","init","into","into","into","read_mmu_config","rodata","set_as_active_page_table_root","start","text","tlb_flush_all","tlb_flush_by_theseus_asid","tlb_flush_virt_addr","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"memory_aarch64"]],"d":["The address bounds and flags of the initial kernel …","See read_mmu_config","The address bounds and mapping flags of a section’s …","Configures the MMU based on the pointer to a MmuConfig, in …","","","","","","","Configures paging for Theseus.","","Disable the MMU using aarch64 registers","Enable the MMU using aarch64 registers","The ending virtual address and physical address.","Finds the addresses in memory of the main kernel sections, …","The page table entry flags that should be used for mapping …","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the current top-level page table address.","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Reads the current MMU configuration of the current CPU …","","Sets the given page_table as active by updating the TTBR0 …","The starting virtual address and physical address.","","","Flushes all TLB entries with Theseus’ ASID (=0).","Flushes the specific virtual address in TLB.","","","","","","","","",""],"i":[0,0,0,0,10,5,8,10,5,8,0,8,0,0,5,0,5,5,8,10,5,8,0,8,10,5,8,0,8,0,5,8,0,0,0,10,5,8,10,5,8,10,5,8],"f":[0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],0,[[1,2],[[4,[3]]]],0,[[5,6],7],[[8,6],7],[[]],[[]],[[]],[[],9],0,[[]],[[]],[[]],[[],10],0,[9],0,0,0,[[]],[11],[[],4],[[],4],[[],4],[[],4],[[],4],[[],4],[[],12],[[],12],[[],12]],"c":[],"p":[[8,"BootInformation"],[8,"Fn"],[15,"str"],[4,"Result"],[3,"SectionMemoryBounds"],[3,"Formatter"],[6,"Result"],[3,"AggregatedSectionMemoryBounds"],[3,"PhysicalAddress"],[3,"MmuConfig"],[3,"VirtualAddress"],[3,"TypeId"]]},\ "memory_initialization":{"doc":"","t":"F","n":["init_memory_management"],"q":[[0,"memory_initialization"]],"d":["Initializes the virtual memory management system and …"],"i":[0],"f":[[[1,2],[[4,[3]]]]],"c":[],"p":[[8,"BootInformation"],[3,"VirtualAddress"],[15,"str"],[4,"Result"]]},\ -"memory_structs":{"doc":"This crate contains basic types used for memory management.","t":"DDDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["CopyableFrameRange","CopyablePageRange","Frame","FrameRange","Page","PageRange","PhysicalAddress","VirtualAddress","add","add","add","add","add","add","add_assign","add_assign","add_assign","add_assign","add_assign","add_assign","address_at_offset","address_at_offset","backward_checked","backward_checked","bitand","bitand","bitand_assign","bitand_assign","bitor","bitor","bitor_assign","bitor_assign","bitxor","bitxor","bitxor_assign","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","cmp","cmp","cmp","cmp","containing_address","containing_address","contains_address","contains_address","default","default","deref","deref","deref_mut","deref_mut","empty","empty","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward_checked","forward_checked","frame_offset","from","from","from","from","from","from","from","from","from","from","from","from","from_phys_addr","from_virt_addr","hash","hash","into","into","into","into","into","into","into","into","into","into","into_iter","into_iter","new","new","new","new","new_canonical","new_canonical","number","number","offset_of_address","offset_of_address","overlap","overlap","p1_index","p2_index","p3_index","p4_index","page_offset","partial_cmp","partial_cmp","partial_cmp","partial_cmp","size_in_bytes","size_in_bytes","size_in_frames","size_in_pages","start_address","start_address","start_address","start_address","steps_between","steps_between","sub","sub","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","to_extended","to_extended","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","value","value","zero","zero"],"q":[[0,"memory_structs"]],"d":["A FrameRange that implements Copy","A PageRange that implements Copy","A Frame is a chunk of physical memory aligned to a …","A range of Frames that are contiguous in physical memory.","A Page is a chunk of virtual memory aligned to a PAGE_SIZE …","A range of Pages that are contiguous in virtual memory.","A physical memory address, which is a usize under the hood.","A virtual memory address, which is a usize under the hood.","","","","","","","","","","","","","Returns the VirtualAddress at the given offset into this …","Returns the PhysicalAddress at the given offset into this …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the Page containing the given VirtualAddress.","Returns the Frame containing the given PhysicalAddress.","Returns true if this PageRange contains the given …","Returns true if this FrameRange contains the given …","","","","","","","Creates a PageRange that will always yield None when …","Creates a FrameRange that will always yield None when …","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the offset from the frame boundary specified by …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","A convenience method for creating a new FrameRange that …","A convenience method for creating a new PageRange that …","","","","Calls U::from(self).","Calls U::from(self).","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Creates a new VirtualAddress, returning an error if the …","Creates a new PhysicalAddress, returning an error if the …","Creates a new range of Pages that spans from start to end, …","Creates a new range of Frames that spans from start to end…","Creates a new VirtualAddress that is guaranteed to be …","Creates a new PhysicalAddress that is guaranteed to be …","Returns the number of this Page.","Returns the number of this Frame.","Returns the offset of the given VirtualAddress within this …","Returns the offset of the given PhysicalAddress within …","Returns an inclusive PageRange representing the Pages that …","Returns an inclusive FrameRange representing the Frames …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the offset from the page boundary specified by …","","","","","Returns the size of this range in number of bytes.","Returns the size of this range in number of bytes.","Returns the number of Frames covered by this iterator.","Returns the number of Pages covered by this iterator.","Returns the VirtualAddress at the start of this Page.","Returns the PhysicalAddress at the start of this Frame.","Returns the VirtualAddress of the starting Page in this …","Returns the PhysicalAddress of the starting Frame in this …","","","","","","","","","","","","","","","Returns a new separate PageRange that is extended to …","Returns a new separate FrameRange that is extended to …","","","","","","","","","","","","","","","","","","","","","","","","","Returns the underlying usize value for this VirtualAddress.","Returns the underlying usize value for this PhysicalAddress…","Creates a new VirtualAddress with a value 0.","Creates a new PhysicalAddress with a value 0."],"i":[0,0,0,0,0,0,0,0,1,1,3,3,4,5,1,1,3,3,4,5,6,8,4,5,1,3,1,3,1,3,1,3,1,3,1,3,1,3,4,5,6,9,8,10,1,3,4,5,6,9,8,10,1,3,4,5,6,9,8,10,1,3,4,5,4,5,6,8,1,3,6,8,6,8,6,8,1,3,4,5,6,8,1,1,1,1,1,1,1,3,3,3,3,3,3,3,4,5,6,8,4,5,3,1,3,4,5,6,6,9,9,8,8,10,10,8,6,1,3,1,1,3,3,4,5,6,9,8,10,6,8,1,3,6,8,1,3,4,5,6,8,6,8,4,4,4,4,1,1,3,4,5,6,8,8,6,4,5,6,8,4,5,1,1,3,3,4,5,1,1,3,3,4,5,6,8,1,3,4,5,6,9,8,10,1,3,4,5,6,9,8,10,1,3,4,5,6,9,8,10,1,3,1,3],"f":[0,0,0,0,0,0,0,0,[[1,2],1],[[1,1],1],[[3,3],3],[[3,2],3],[[4,2],4],[[5,2],5],[[1,2]],[[1,1]],[[3,2]],[[3,3]],[[4,2]],[[5,2]],[[6,2],[[7,[1]]]],[[8,2],[[7,[3]]]],[[4,2],[[7,[4]]]],[[5,2],[[7,[5]]]],[[1,1],1],[[3,3],3],[[1,1]],[[3,3]],[[1,1],1],[[3,3],3],[[1,1]],[[3,3]],[[1,1],1],[[3,3],3],[[1,1]],[[3,3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[3,3],[4,4],[5,5],[6,6],[9,9],[8,8],[10,10],[[1,1],11],[[3,3],11],[[4,4],11],[[5,5],11],[1,4],[3,5],[[6,1],12],[[8,3],12],[[],1],[[],3],[6,[[13,[4]]]],[8,[[13,[5]]]],[6,[[13,[4]]]],[8,[[13,[5]]]],[[],6],[[],8],[[1,1],12],[[3,3],12],[[4,4],12],[[5,5],12],[[6,6],12],[[8,8],12],[[1,14],15],[[1,14],15],[[1,14],15],[[1,14],15],[[1,14],15],[[1,14],15],[[1,14],15],[[3,14],15],[[3,14],15],[[3,14],15],[[3,14],15],[[3,14],15],[[3,14],15],[[3,14],15],[[4,14],15],[[5,14],15],[[6,14],15],[[8,14],15],[[4,2],[[7,[4]]]],[[5,2],[[7,[5]]]],[3,2],[[]],[[]],[[]],[[]],[[]],[9,6],[6,9],[[]],[10,8],[[]],[[]],[8,10],[[3,2],8],[[1,2],6],[[1,16]],[[3,16]],[1,2],[[]],[[]],[3,2],[[]],[[]],[[]],[[]],[[]],[[]],[6],[8],[2,[[7,[1]]]],[2,[[7,[3]]]],[[4,4],6],[[5,5],8],[2,1],[2,3],[4,2],[5,2],[[6,1],[[7,[2]]]],[[8,3],[[7,[2]]]],[[6,6],[[7,[6]]]],[[8,8],[[7,[8]]]],[4,2],[4,2],[4,2],[4,2],[1,2],[[1,1],[[7,[11]]]],[[3,3],[[7,[11]]]],[[4,4],[[7,[11]]]],[[5,5],[[7,[11]]]],[6,2],[8,2],[8,2],[6,2],[4,1],[5,3],[6,1],[8,3],[[4,4],[[7,[2]]]],[[5,5],[[7,[2]]]],[[1,1],1],[[1,2],1],[[3,2],3],[[3,3],3],[[4,2],4],[[5,2],5],[[1,2]],[[1,1]],[[3,3]],[[3,2]],[[4,2]],[[5,2]],[[6,4],6],[[8,5],8],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],17],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[1,2],[3,2],[[],1],[[],3]],"c":[],"p":[[3,"VirtualAddress"],[15,"usize"],[3,"PhysicalAddress"],[3,"Page"],[3,"Frame"],[3,"PageRange"],[4,"Option"],[3,"FrameRange"],[3,"CopyablePageRange"],[3,"CopyableFrameRange"],[4,"Ordering"],[15,"bool"],[3,"RangeInclusive"],[3,"Formatter"],[6,"Result"],[8,"Hasher"],[4,"Result"],[3,"TypeId"]]},\ +"memory_structs":{"doc":"This crate contains basic types used for memory management.","t":"NDDDDNNEDDDNDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Allocated","CopyableFrameRange","CopyablePageRange","Frame","FrameRange","Free","Mapped","MemoryState","Page","PageRange","PhysicalAddress","Unmapped","VirtualAddress","add","add","add","add","add","add","add_assign","add_assign","add_assign","add_assign","add_assign","add_assign","address_at_offset","address_at_offset","backward_checked","backward_checked","bitand","bitand","bitand_assign","bitand_assign","bitor","bitor","bitor_assign","bitor_assign","bitxor","bitxor","bitxor_assign","bitxor_assign","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","cmp","cmp","cmp","cmp","containing_address","containing_address","contains_address","contains_address","contains_range","contains_range","default","default","deref","deref","deref_mut","deref_mut","empty","empty","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward_checked","forward_checked","frame_offset","from","from","from","from","from","from","from","from","from","from","from","from","from","from_phys_addr","from_virt_addr","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into_iter","into_iter","new","new","new","new","new_canonical","new_canonical","number","number","offset_of_address","offset_of_address","overlap","overlap","p1_index","p2_index","p3_index","p4_index","page_offset","partial_cmp","partial_cmp","partial_cmp","partial_cmp","size_in_bytes","size_in_bytes","size_in_frames","size_in_pages","start_address","start_address","start_address","start_address","steps_between","steps_between","sub","sub","sub","sub","sub","sub","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","sub_assign","to_extended","to_extended","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","value","value","zero","zero"],"q":[[0,"memory_structs"]],"d":["Memory is allocated and can be used for a mapping","A FrameRange that implements Copy","A PageRange that implements Copy","A Frame is a chunk of physical memory aligned to a …","A range of Frames that are contiguous in physical memory.","Memory is free and owned by the allocator","Memory is mapped (PTE has been set)","The possible states that a range of exclusively-owned …","A Page is a chunk of virtual memory aligned to a PAGE_SIZE …","A range of Pages that are contiguous in virtual memory.","A physical memory address, which is a usize under the hood.","Memory has been unmapped (PTE has been cleared)","A virtual memory address, which is a usize under the hood.","","","","","","","","","","","","","Returns the VirtualAddress at the given offset into this …","Returns the PhysicalAddress at the given offset into this …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the Page containing the given VirtualAddress.","Returns the Frame containing the given PhysicalAddress.","Returns true if this PageRange contains the given …","Returns true if this FrameRange contains the given …","Returns true if the other PageRange is fully contained …","Returns true if the other FrameRange is fully contained …","","","","","","","Creates a PageRange that will always yield None when …","Creates a FrameRange that will always yield None when …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the offset from the frame boundary specified by …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the argument unchanged.","","A convenience method for creating a new FrameRange that …","A convenience method for creating a new PageRange that …","","","Calls U::from(self).","","Calls U::from(self).","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","Creates a new VirtualAddress, returning an error if the …","Creates a new PhysicalAddress, returning an error if the …","Creates a new range of Pages that spans from start to end, …","Creates a new range of Frames that spans from start to end…","Creates a new VirtualAddress that is guaranteed to be …","Creates a new PhysicalAddress that is guaranteed to be …","Returns the number of this Page.","Returns the number of this Frame.","Returns the offset of the given VirtualAddress within this …","Returns the offset of the given PhysicalAddress within …","Returns an inclusive PageRange representing the Pages that …","Returns an inclusive FrameRange representing the Frames …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the 9-bit part of this Page’s VirtualAddress …","Returns the offset from the page boundary specified by …","","","","","Returns the size of this range in number of bytes.","Returns the size of this range in number of bytes.","Returns the number of Frames covered by this iterator.","Returns the number of Pages covered by this iterator.","Returns the VirtualAddress at the start of this Page.","Returns the PhysicalAddress at the start of this Frame.","Returns the VirtualAddress of the starting Page in this …","Returns the PhysicalAddress of the starting Frame in this …","","","","","","","","","","","","","","","Returns a new separate PageRange that is extended to …","Returns a new separate FrameRange that is extended to …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the underlying usize value for this VirtualAddress.","Returns the underlying usize value for this PhysicalAddress…","Creates a new VirtualAddress with a value 0.","Creates a new PhysicalAddress with a value 0."],"i":[14,0,0,0,0,14,14,0,0,0,0,14,0,1,1,3,3,4,5,1,1,3,3,4,5,6,8,4,5,1,3,1,3,1,3,1,3,1,3,1,3,14,1,3,4,5,6,9,8,10,14,1,3,4,5,6,9,8,10,1,3,4,5,6,9,8,10,1,3,4,5,4,5,6,8,6,8,1,3,6,8,6,8,6,8,14,1,3,4,5,6,8,1,1,1,1,1,1,1,3,3,3,3,3,3,3,4,5,6,8,4,5,3,14,1,3,4,5,6,6,9,9,8,8,10,10,8,6,1,3,14,1,1,3,3,4,5,6,9,8,10,6,8,1,3,6,8,1,3,4,5,6,8,6,8,4,4,4,4,1,1,3,4,5,6,8,8,6,4,5,6,8,4,5,1,1,3,3,4,5,1,1,3,3,4,5,6,8,14,1,3,4,5,6,9,8,10,14,1,3,4,5,6,9,8,10,14,1,3,4,5,6,9,8,10,1,3,1,3],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,2],1],[[1,1],1],[[3,2],3],[[3,3],3],[[4,2],4],[[5,2],5],[[1,2]],[[1,1]],[[3,2]],[[3,3]],[[4,2]],[[5,2]],[[6,2],[[7,[1]]]],[[8,2],[[7,[3]]]],[[4,2],[[7,[4]]]],[[5,2],[[7,[5]]]],[[1,1],1],[[3,3],3],[[1,1]],[[3,3]],[[1,1],1],[[3,3],3],[[1,1]],[[3,3]],[[1,1],1],[[3,3],3],[[1,1]],[[3,3]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[3,3],[4,4],[5,5],[6,6],[9,9],[8,8],[10,10],[[1,1],11],[[3,3],11],[[4,4],11],[[5,5],11],[1,4],[3,5],[[6,1],12],[[8,3],12],[[6,6],12],[[8,8],12],[[],1],[[],3],[6,[[13,[4]]]],[8,[[13,[5]]]],[6,[[13,[4]]]],[8,[[13,[5]]]],[[],6],[[],8],[[14,14],12],[[1,1],12],[[3,3],12],[[4,4],12],[[5,5],12],[[6,6],12],[[8,8],12],[[1,15],16],[[1,15],16],[[1,15],16],[[1,15],16],[[1,15],16],[[1,15],16],[[1,15],16],[[3,15],16],[[3,15],16],[[3,15],16],[[3,15],16],[[3,15],16],[[3,15],16],[[3,15],16],[[4,15],16],[[5,15],16],[[6,15],16],[[8,15],16],[[4,2],[[7,[4]]]],[[5,2],[[7,[5]]]],[3,2],[[]],[[]],[[]],[[]],[[]],[9,6],[[]],[6,9],[[]],[[]],[10,8],[[]],[8,10],[[3,2],8],[[1,2],6],[[1,17]],[[3,17]],[[]],[1,2],[[]],[3,2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[6],[8],[2,[[7,[1]]]],[2,[[7,[3]]]],[[4,4],6],[[5,5],8],[2,1],[2,3],[4,2],[5,2],[[6,1],[[7,[2]]]],[[8,3],[[7,[2]]]],[[6,6],[[7,[6]]]],[[8,8],[[7,[8]]]],[4,2],[4,2],[4,2],[4,2],[1,2],[[1,1],[[7,[11]]]],[[3,3],[[7,[11]]]],[[4,4],[[7,[11]]]],[[5,5],[[7,[11]]]],[6,2],[8,2],[8,2],[6,2],[4,1],[5,3],[6,1],[8,3],[[4,4],[[7,[2]]]],[[5,5],[[7,[2]]]],[[1,2],1],[[1,1],1],[[3,3],3],[[3,2],3],[[4,2],4],[[5,2],5],[[1,2]],[[1,1]],[[3,2]],[[3,3]],[[4,2]],[[5,2]],[[6,4],6],[[8,5],8],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],18],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[1,2],[3,2],[[],1],[[],3]],"c":[],"p":[[3,"VirtualAddress"],[15,"usize"],[3,"PhysicalAddress"],[3,"Page"],[3,"Frame"],[3,"PageRange"],[4,"Option"],[3,"FrameRange"],[3,"CopyablePageRange"],[3,"CopyableFrameRange"],[4,"Ordering"],[15,"bool"],[3,"RangeInclusive"],[4,"MemoryState"],[3,"Formatter"],[6,"Result"],[8,"Hasher"],[4,"Result"],[3,"TypeId"]]},\ "memory_x86_64":{"doc":"This crate implements the virtual memory subsystem …","t":"QDIIQQQQIQQDKLLLLMKMFKMLLKLLFFMLLLLLKKKKKKKKMKKKKKMMFFLLLLLL","n":["AdditionalReservedMemoryRegions","AggregatedSectionMemoryBounds","BootInformation","ElfSection","ElfSection","ElfSections","MemoryRegion","MemoryRegions","Module","Module","Modules","SectionMemoryBounds","additional_reserved_memory_regions","borrow","borrow","borrow_mut","borrow_mut","data","elf_sections","end","find_section_memory_bounds","flags","flags","fmt","fmt","framebuffer_info","from","from","get_p4","get_vga_mem_addr","init","into","into","is_empty","is_empty","is_empty","kernel_end","len","len","len","memory_regions","modules","name","name","rodata","rsdp","stack_size","start","start","start","start","text","tlb_flush_all","tlb_flush_virt_addr","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"memory_x86_64"]],"d":["","The address bounds and flags of the initial kernel …","","","","","","","","","","The address bounds and mapping flags of a section’s …","Returns additional reserved memory regions that aren’t …","","","","","","Returns the kernel’s ELF sections.","The ending virtual address and physical address.","Finds the addresses in memory of the main kernel sections, …","Returns the section’s flags.","The page table entry flags that should be used for mapping …","","","Returns information about the graphical framebuffer, if …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the current top-level page table address.","Gets the physical memory occupied by vga.","","Calls U::from(self).","Calls U::from(self).","Returns whether the section is empty.","Returns whether the module is empty.","Returns whether the boot information is empty.","Returns the end of the kernel’s image in memory.","Returns the section’s length in memory, as opposed to …","Returns the module’s length.","Returns the boot information’s length.","Returns memory regions describing the physical memory.","Returns the modules found in the kernel image.","Returns the section’s name.","Returns the module’s name.","","Returns the RSDP if it was provided by the bootloader.","Returns the stack size in bytes.","Returns the section’s starting virtual address.","Returns the module’s starting physical address.","Returns the boot information’s starting virtual address.","The starting virtual address and physical address.","","Flushes the whole TLB. ","Flushes the specific virtual address in TLB. ","","","","","",""],"i":[3,0,0,0,3,3,3,3,0,3,3,0,3,6,9,6,9,9,3,6,0,17,6,6,9,3,6,9,0,0,9,6,9,17,18,3,3,17,18,3,3,3,17,18,9,3,3,17,18,3,6,9,0,0,6,9,6,9,6,9],"f":[0,0,0,0,0,0,0,0,0,0,0,0,[[],[[2,[1]]]],[[]],[[]],[[]],[[]],0,[[],[[2,[1]]]],0,[[3,4],[[2,[1]]]],[[],5],0,[[6,7],8],[[9,7],8],[[],[[11,[10]]]],[[]],[[]],[[],12],[[],[[2,[1]]]],0,[[]],[[]],[[],13],[[],13],[[],13],[[],[[2,[14,1]]]],[[],15],[[],15],[[],15],[[],[[2,[1]]]],[[]],[[],1],[[],[[2,[1,1]]]],0,[[],[[11,[12]]]],[[],[[2,[15,1]]]],[[],14],[[],12],[[],[[11,[14]]]],0,0,[[]],[14],[[],2],[[],2],[[],2],[[],2],[[],16],[[],16]],"c":[],"p":[[15,"str"],[4,"Result"],[8,"BootInformation"],[8,"Fn"],[3,"ElfSectionFlags"],[3,"SectionMemoryBounds"],[3,"Formatter"],[6,"Result"],[3,"AggregatedSectionMemoryBounds"],[3,"FramebufferInfo"],[4,"Option"],[3,"PhysicalAddress"],[15,"bool"],[3,"VirtualAddress"],[15,"usize"],[3,"TypeId"],[8,"ElfSection"],[8,"Module"]]},\ "mlx5":{"doc":"A mlx5 driver for a ConnectX-5 100GbE Network Interface …","t":"RRDRLLLFLLLLLLLL","n":["CONNECTX5_DEV","CONNECTX5_EX_DEV","ConnectX5Nic","MLX_VEND","borrow","borrow_mut","from","get_mlx5_nic","init","into","mac_address","send","send_fastpath","try_from","try_into","type_id"],"q":[[0,"mlx5"]],"d":["Device ID for the ConnectX-5 NIC","Device ID for the ConnectX-5-EX NIC","Struct representing a ConnectX-5 network interface card.","Vendor ID for Mellanox","","","Returns the argument unchanged.","Returns a reference to the NIC wrapped in a IrqSafeMutex, …","Initializes the new ConnectX-5 network interface card that …","Calls U::from(self).","Returns the MAC address of the physical function ","Adds a packet to be sent to the transmit queue and returns …","Adds a packet to be sent to the transmit queue.","","",""],"i":[0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1],"f":[0,0,0,0,[[]],[[]],[[]],[[],[[3,[[2,[1]]]]]],[[4,5,5,6],[[8,[[2,[1]],7]]]],[[]],[1,[[10,[9]]]],[[1,11],[[8,[7]]]],[[1,12,[13,[9]]]],[[],8],[[],8],[[],14]],"c":[],"p":[[3,"ConnectX5Nic"],[6,"IrqSafeMutex"],[4,"Option"],[3,"PciDevice"],[15,"usize"],[15,"u16"],[15,"str"],[4,"Result"],[15,"u8"],[15,"array"],[3,"TransmitBuffer"],[3,"PhysicalAddress"],[15,"slice"],[3,"TypeId"]]},\ "mlx_ethernet":{"doc":"This crate defines the layout of memory objects that make …","t":"DDDDDDDDDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLAAALLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLFAALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLANENNNNNNNNNNNNNNNNNNNNNEDDDENEDDEEENNNNNNNNNNNNNNNNNDENNNNNNNNNNNNNNNNENNNNNNNNNNNNNNEENNNENNNNENNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLLLLNDENNNLLLLLLLLLLLLLLLLLLLNNDENLLLLLLLLLLLLLLLLLLLNNNDELLLLLLLLLLLLLLLLLLLLLDDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Cqn","Eqn","FgId","FtId","Lkey","Pd","Rqn","Sqn","Td","Tirn","Tisn","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","command_queue","completion_queue","event_queue","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","initialization_segment","into","into","into","into","into","into","into","into","into","into","into","log_page_size","receive_queue","send_queue","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","work_queue","AccessRegister","AccessRegisterOpMod","AllocPd","AllocTransportDomain","AllocUar","AllocationFail","AllocationSuccess","BadBlockNumber","BadCommandType","BadIndex","BadInputLen","BadInputPointer","BadOp","BadOutputLen","BadOutputPointer","BadParam","BadPkt","BadResState","BadResource","BadResourceState","BadSize","BadSysState","BootPages","CmdState","Command","CommandBuilder","CommandCompletionStatus","CommandDeliveryStatus","CommandNotCompleted","CommandOpcode","CommandQueue","CommandQueueEntry","CommandQueueError","CommandReturnStatus","CommandTransportType","Completed","CreateCq","CreateEq","CreateFlowGroup","CreateFlowTable","CreateRq","CreateSq","CreateTir","CreateTis","EnableHca","EswVport","Ethernet","EthernetOffloadCapabilities","EthernetOffloadCapabilities","ExceedLim","GeneralDeviceCapabilities","GeneralDeviceCapabilities","HCACapabilities","HcaPortType","HcaReturnPages","IB","IncorrectCommandOpcode","InitHca","InitPages","Initialized","InputLenErr","InternalErr","InternalError","InvalidCommandDeliveryStatus","InvalidCommandOpcode","InvalidCommandReturnStatus","InvalidMailboxOffset","InvalidPortType","InvalidSQState","ManagePages","ManagePagesOpMod","MissingInput","MissingInputPages","ModifyNicVportContext","ModifyRq","ModifySq","NoCommandEntryAvailable","NoResources","NotImplemented","OK","OutputLenErr","PCIe","PageAllocationFailed","Posted","QueryHcaCap","QueryHcaCapCurrentOpMod","QueryHcaCapMaxOpMod","QueryIssi","QueryNicVportContext","QueryPages","QueryPagesOpMod","QueryRq","QuerySpecialContexts","QuerySq","QueryVportState","QueryVportStateOpMod","Read","RegularPages","ReservedNotZero","ResourceBusy","SetDriverVersion","SetFlowTableEntry","SetFlowTableRoot","SetIssi","SignatureErr","Success","TokenErr","UnimplementedOpcode","Uplink","VnicVport","Write","allocated_pages","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","collapsed_cq","complete","cqn","create","create_and_execute_command","db_page","default","eq","eq","eqn","flow_group_id","flow_table_id","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","get_command_status","get_cq_number","get_delivery_status","get_device_capabilities","get_eq_number","get_flow_group_id","get_flow_table_id","get_max_mtu","get_port_type","get_protection_domain","get_query_issi_command_output","get_query_pages_command_output","get_receive_queue_number","get_reserved_lkey","get_return_status","get_send_queue_number","get_sq_state","get_tir_context_number","get_tis_context_number","get_transport_domain","get_uar","get_vport_mac_address","get_vport_state","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","into","mtu","new","opmod","owned_by_hw","pd","post","queue_size","rqn","sqn","td","tirn","tisn","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from_primitive","try_from_primitive","try_from_primitive","try_from_primitive","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","uar","wait_for_command_completion","CompletionQueue","CompletionQueueDoorbellRecord","CompletionQueueEntry","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","check_packet_transmission","default","default","dump","dump","fmt","from","from","from","init","init","into","into","into","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","EventQueue","EventQueueEntry","borrow","borrow","borrow_mut","borrow_mut","default","dump","dump","fmt","from","from","init","init","into","into","try_from","try_from","try_into","try_into","type_id","type_id","Abort","InitializationSegment","InitializingState","NotAllowed","WaitingPermetion","WaitingResources","borrow","borrow","borrow_mut","borrow_mut","cmdq_entry_stride","device_is_initializing","fmt","from","from","into","into","num_cmdq_entries","set_physical_address_of_cmdq","try_from","try_from","try_into","try_into","type_id","type_id","Error","Ready","ReceiveQueue","ReceiveQueueState","Reset","borrow","borrow","borrow_mut","borrow_mut","create","fmt","from","from","into","into","refill","try_from","try_from","try_from","try_from_primitive","try_into","try_into","type_id","type_id","Error","Ready","Reset","SendQueue","SendQueueState","borrow","borrow","borrow_mut","borrow_mut","create","dump","fmt","from","from","into","into","nop","send","try_from","try_from","try_from","try_from_primitive","try_into","try_into","type_id","type_id","DoorbellRecord","WorkQueueEntryReceive","WorkQueueEntrySend","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","default","default","default","dump","dump","from","from","from","init","init","into","into","into","nop","send","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_buffer_info"],"q":[[0,"mlx_ethernet"],[140,"mlx_ethernet::command_queue"],[461,"mlx_ethernet::completion_queue"],[493,"mlx_ethernet::event_queue"],[515,"mlx_ethernet::initialization_segment"],[540,"mlx_ethernet::receive_queue"],[564,"mlx_ethernet::send_queue"],[590,"mlx_ethernet::work_queue"]],"d":["completion queue number","event queue number","flow group id","flow table id","","protection domain","receive queue number","send queue number","transport domain","transport interface receive number","transport interface send number","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Defines the Command Queue that is used to pass commands …","Completion Queues (CQ) are circular buffers used by the …","Event Queues (EQ) are circular buffers used by the HCA to …","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","This module defines the layout of the initialization …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Find the page size of the given num_bytes in units of 4KiB …","The Receive Queue (RQ) object holds the descriptor ring …","The Send Queue (SQ) object holds the descriptor ring used …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","The Work Queue (WQ) contains a contiguous memory buffer …","","Possible values of the opcode modifer when the opcode is …","","","","","","","","","","","","","","","","","","","","","","The possible states a command can be in as it is updated …","A struct representing a Command Queue Entry in the Command …","Struct that makes it easier to pass the variety of …","","Return codes written by HW in the delivery status field of …","Trying to access the command entry before HW is done …","Command opcode written by SW in opcode field of the input …","A buffer of fixed-size entries that is used to pass …","Layout of a command passed to the NIC. The fields include …","Possible reasons for failure when executing a command","Command status written by HW in status field of the output …","Type of transport that carries the command.","The command has been processed by HW and output is ready …","","","","","","","","","","","","","","","","","The HCA capabilities are stored in this struct after being …","Possible values of the port type field returned when …","","Infiniband","Opcode value in the command entry is not what was expected","","","Command entries have been filled, but it is still owned by …","","","","Delivery status in the command entry is not a valid value","Opcode in the command entry is not a valid value","Return status in the command entry is not a valid value","Offset in a page is too large to map a …","The returned port type is not a valid value","The returned state of the SQ is invalid","","Possible values of the opcode modifer when the opcode is …","Any other input is not passed to a command that requires …","Allocated pages are not passed to a command that requires …","","","","All command entries are currently being used","","Some function has not been implemented for the given opcode","","","","A call to create a MappedPages failed","The command has been issued to the HW by ringing the …","","Possible values of the opcode modifer when the opcode is …","Possible values of the opcode modifer when the opcode is …","","","","Possible values of the opcode modifer when the opcode is …","","","","","Possible values of the opcode modifer when the opcode is …","","","","","","","","","","","","Initializing a comand entry for the given opcode has not …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Polls a completion bit until the command has been …","","Create a command queue object.","Find an command queue entry that is not in use","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","Returns the status of command delivery. This only informs …","Get the device capabilities, which is the output of the …","","","","Get the maximum value the MTU can be set to, which is the …","Get the number of pages requested by the NIC, which is the …","Get the protection domain number, which is the output of …","Get the current ISSI version and the supported ISSI …","Get the number of pages requested by the NIC, which is the …","","Get the value of the reserved Lkey for Base Memory …","Returns the status of command execution. A None returned …","","","","","Get the transport domain number, which is the output of …","Get the User Access Region (UAR) number, which is the …","Get the port mac address, which is the output of the …","Get the Vport state in the format (max_tx_speed, …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","Returns true if the command is currently under the …","","Posts an initialized command by ringing the doorbell in …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Waits for ownership bit to be cleared, and then returns …","A data structure that contains the CQ buffer and is used …","A structure containing information of recently-posted CQ …","The layout of an entry in the CQ buffer.","","","","","","","Checks if a packet is transmitted by comparing the …","","","Prints out all entries in the CQ","Prints out the fields of a CQE in the format used by other …","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Creates a completion queue by mapping the buffer as a …","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","A data structure that contains the EQ buffer and is used …","The layout of an entry in the EQ buffer.","","","","","","Prints out all entries in the EQ","Prints out the fields of an EQE in the format used by …","","Returns the argument unchanged.","Returns the argument unchanged.","Creates an event queue by mapping the buffer as a slice of …","","Calls U::from(self).","Calls U::from(self).","","","","","","","","The initialization segment is located at offset 0 of PCI …","The possible values of the initialization state of the …","","","","","","","","Returns the required stride of command queue entries …","Returns true if the device is still initializing, and …","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Returns the maximum number of entries that can be in the …","Sets the physical address of the command queue within the …","","","","","","","","","A data structure that contains the RQ ring of descriptors …","The possible states the RQ can be in.","","","","","","Creates a RQ by mapping the buffer as a slice of …","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Refills the receive queue by updating WQEs with new packet …","","","","","","","","","","","","A data structure that contains the SQ ring of descriptors …","The possible states the SQ can be in.","","","","","Creates a SQ by mapping the buffer as a slice of …","Prints out all entries in the SQ","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Perform all the steps to complete a NOP: initialize the …","Perform all the steps to send a packet: initialize the …","","","","","","","","","The layout of a doorbell record in memory. A doorbell …","WQEs are built from multiple segments. In the case of …","WQEs are built from multiple segments. In the case of Send …","","","","","","","","","","Prints out the fields of a WQE in the format used by other …","Prints out the fields of a WQE in the format used by other …","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","set a WQE to an initial state","set a WQE to an initial state","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Fill the control segment of the WQE to execute a NOP.","Fill the control, ethernet and data segments of the WQE to …","","","","","","","","","","Fill the data segment of the WQE to receive packets."],"i":[0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,0,0,0,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10,11,0,0,0,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,1,2,3,4,5,6,7,8,9,10,11,0,20,0,20,20,20,59,59,35,35,36,36,35,36,36,35,36,36,36,36,36,36,36,60,0,0,0,0,0,32,0,0,0,0,0,0,34,20,20,20,20,20,20,20,20,20,61,37,21,22,36,21,22,0,0,59,37,32,20,60,34,35,35,36,32,32,32,32,32,32,20,0,32,32,20,20,20,32,36,32,36,35,62,32,34,20,0,0,20,20,20,0,20,20,20,20,0,23,60,35,36,20,20,20,20,35,35,35,32,61,61,23,17,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,20,21,22,23,20,21,22,23,17,24,17,25,25,17,26,20,34,17,17,17,35,20,36,37,38,26,39,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,25,25,26,25,25,25,25,25,25,25,25,25,25,25,26,25,25,25,25,25,25,25,25,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,17,17,17,26,17,24,17,17,17,17,17,17,20,21,22,23,62,32,59,60,61,24,17,25,35,35,20,20,36,36,21,22,23,37,37,34,38,26,39,35,20,36,37,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,62,32,59,60,61,24,17,25,35,20,36,21,22,23,37,34,38,26,39,17,25,0,0,0,43,44,45,43,44,45,43,44,45,43,44,44,43,44,45,43,44,43,44,45,43,44,45,43,44,45,43,44,45,0,0,48,47,48,47,47,48,47,47,48,47,48,47,48,47,48,47,48,47,48,47,63,0,0,63,63,63,63,31,63,31,31,31,31,63,31,63,31,31,31,63,31,63,31,63,31,52,52,0,0,52,51,52,51,52,51,52,51,52,51,52,51,51,52,52,52,51,52,51,52,54,54,54,0,0,53,54,53,54,53,53,54,53,54,53,54,53,53,53,54,54,54,53,54,53,54,0,0,0,56,57,58,56,57,58,56,57,58,57,58,56,57,58,57,58,56,57,58,57,57,56,57,58,56,57,58,56,57,58,58],"f":[0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,[[1,12],13],[[2,12],13],[[3,12],13],[[4,12],13],[[5,12],13],[[6,12],13],[[7,12],13],[[8,12],13],[[9,12],13],[[10,12],13],[[11,12],13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[14,14],0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[17,[19,[18]]],17],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[20,20],[21,21],[22,22],[23,23],[[]],[[]],[[]],[[]],[17,17],[[24,25],24],[[17,3],17],[[[28,[26,27]],29],[[15,[25,30]]]],[[25,17,31],[[15,[24,32]]]],[[17,18],17],[[],26],[[20,20],33],[[34,34],33],[[17,7],17],[[17,11],17],[[17,10],17],[[35,12],13],[[20,12],13],[[36,12],13],[[37,12],13],[[38,12],13],[[26,12],13],[[39,12],13],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[25,24],[[15,[38,32]]]],[[25,24],[[15,[32]]]],[26,[[15,[35,32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[26,[[15,[36,32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[25,24],[[15,[32]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[17,40],17],[20,17],[[17,40],17],[26,33],[[17,4],17],[[24,31],24],[[17,14],17],[[17,1],17],[[17,2],17],[[17,5],17],[[17,8],17],[[17,9],17],[[]],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[14,[[15,[35,[41,[35]]]]]],[[],15],[14,[[15,[20,[41,[20]]]]]],[[],15],[[],15],[42,[[15,[36,[41,[36]]]]]],[[],15],[[],15],[[],15],[42,[[15,[37,[41,[37]]]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],[[15,[35,[41,[35]]]]]],[[],[[15,[20,[41,[20]]]]]],[[],[[15,[36,[41,[36]]]]]],[[],[[15,[37,[41,[37]]]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[],16],[[17,14],17],[[25,24]],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[43,29,40]],[[],44],[[],45],[43],[[44,29]],[[44,12],13],[[]],[[]],[[]],[[46,29,46,3],[[15,[43,30]]]],[44],[[]],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],0,0,[[]],[[]],[[]],[[]],[[],47],[48],[[47,29]],[[47,12],13],[[]],[[]],[[46,29,7],[[15,[48,30]]]],[47],[[]],[[]],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],0,0,0,0,0,0,[[]],[[]],[[]],[[]],[31,42],[31,33],[[31,12],13],[[]],[[]],[[]],[[]],[31,42],[[31,18],[[15,[30]]]],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],0,0,0,0,0,[[]],[[]],[[]],[[]],[[46,29,14,[50,[49]],1,6,43],[[15,[51,30]]]],[[52,12],13],[[]],[[]],[[]],[[]],[51,[[15,[30]]]],[[],15],[42,[[15,[52,[41,[52]]]]]],[[],15],[[],[[15,[52,[41,[52]]]]]],[[],15],[[],15],[[],16],[[],16],0,0,0,0,0,[[]],[[]],[[]],[[]],[[46,29,46,46,2,9,6],[[15,[53,30]]]],[53],[[54,12],13],[[]],[[]],[[]],[[]],[53,40],[[53,18,[55,[42]]],40],[[],15],[42,[[15,[54,[41,[54]]]]]],[[],15],[[],[[15,[54,[41,[54]]]]]],[[],15],[[],15],[[],16],[[],16],0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[],56],[[],57],[[],58],[[57,29]],[[58,29]],[[]],[[]],[[]],[57],[58],[[]],[[]],[[]],[[57,14,14]],[[57,14,14,14,18,[55,[42]]]],[[],15],[[],15],[[],15],[[],15],[[],15],[[],15],[[],16],[[],16],[[],16],[[58,14,18,14]]],"c":[],"p":[[3,"Rqn"],[3,"Sqn"],[3,"Cqn"],[3,"Pd"],[3,"Td"],[3,"Lkey"],[3,"Eqn"],[3,"Tirn"],[3,"Tisn"],[3,"FtId"],[3,"FgId"],[3,"Formatter"],[6,"Result"],[15,"u32"],[4,"Result"],[3,"TypeId"],[3,"CommandBuilder"],[3,"PhysicalAddress"],[3,"Vec"],[4,"CommandOpcode"],[4,"QueryHcaCapMaxOpMod"],[4,"QueryHcaCapCurrentOpMod"],[4,"AccessRegisterOpMod"],[3,"Command"],[3,"CommandQueue"],[3,"CommandQueueEntry"],[3,"Mutable"],[3,"BorrowedSliceMappedPages"],[15,"usize"],[15,"str"],[3,"InitializationSegment"],[4,"CommandQueueError"],[15,"bool"],[4,"CmdState"],[4,"CommandDeliveryStatus"],[4,"CommandReturnStatus"],[4,"HcaPortType"],[3,"CommandCompletionStatus"],[3,"HCACapabilities"],[15,"u16"],[3,"TryFromPrimitiveError"],[15,"u8"],[3,"CompletionQueue"],[3,"CompletionQueueEntry"],[3,"CompletionQueueDoorbellRecord"],[3,"MappedPages"],[3,"EventQueueEntry"],[3,"EventQueue"],[3,"ReceiveBuffer"],[3,"Queue"],[3,"ReceiveQueue"],[4,"ReceiveQueueState"],[3,"SendQueue"],[4,"SendQueueState"],[15,"slice"],[3,"DoorbellRecord"],[3,"WorkQueueEntrySend"],[3,"WorkQueueEntryReceive"],[4,"ManagePagesOpMod"],[4,"QueryPagesOpMod"],[4,"QueryVportStateOpMod"],[4,"CommandTransportType"],[4,"InitializingState"]]},\ @@ -106,7 +106,7 @@ var searchIndex = JSON.parse('{\ "owned_borrowed_trait":{"doc":"An abstraction over an owned value or borrowed reference …","t":"DQSDIKLLLLLLLLLLLLLLKLLLLLLLL","n":["Borrowed","Inner","OWNED","Owned","OwnedOrBorrowed","as_inner","as_inner","as_inner","as_ref","as_ref","borrow","borrow","borrow_mut","borrow_mut","deref","deref","from","from","into","into","into_inner","into_inner","into_inner","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"owned_borrowed_trait"]],"d":["A wrapper that indicates the contained value is a borrowed …","The inner type of the owned value or borrowed reference.","true if the wrapper type contains an owned value, i.e., …","A wrapper that indicates the contained value is an owned …","A trait for abstracting over an owned value or borrowed …","Returns a reference to the inner value.","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Consumes this wrapper type and returns the contained value …","","","","","","","",""],"i":[0,5,5,0,0,5,1,2,1,2,1,2,1,2,1,2,1,2,1,2,5,1,2,1,2,1,2,1,2],"f":[0,0,0,0,0,[[]],[1],[2],[1],[2],[[]],[[]],[[]],[[]],[1],[2],[[]],[[]],[[]],[[]],[[]],[1],[2],[[],3],[[],3],[[],3],[[],3],[[],4],[[],4]],"c":[],"p":[[3,"Owned"],[3,"Borrowed"],[4,"Result"],[3,"TypeId"],[8,"OwnedOrBorrowed"]]},\ "page_allocator":{"doc":"Provides an allocator for virtual memory pages. The …","t":"NDEENNDNNNLFFFFFFFFLLLLLLLLLLLLLLLLLLFLLLLLLLLLLLLLLLLLLLLLLLL","n":["AddressNotFree","AllocatedPages","AllocationError","AllocationRequest","Any","AtVirtualAddress","DeferredAllocAction","NotInitialized","OutOfAddressSpace","WithinRange","address_at_offset","allocate_pages","allocate_pages_at","allocate_pages_by_bytes","allocate_pages_by_bytes_at","allocate_pages_by_bytes_deferred","allocate_pages_by_bytes_in_range","allocate_pages_deferred","allocate_pages_in_range","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","drop","drop","empty","end","fmt","fmt","from","from","from","from","init","into","into","into","into","merge","offset_of_address","range","size_in_bytes","size_in_pages","split","start","start_address","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id"],"q":[[0,"page_allocator"]],"d":["The requested address was not free: it was already …","Represents a range of allocated VirtualAddresses, …","Possible errors returned by the page allocator.","Possible options when requested pages from the page …","The allocated pages can be located at any virtual address.","The allocated pages must start exactly at the given …","A series of pending actions related to page allocator …","The allocator has not yet been initialized.","The address space was full, or there was not a …","The allocated pages can be located anywhere within the …","Returns the VirtualAddress at the given offset into this …","Allocates the given number of pages with no constraints on …","Allocates the given number of pages starting at (inclusive …","Allocates pages with no constraints on the starting …","Allocates pages starting at the given VirtualAddress with …","Similar to allocated_pages_deferred(), but accepts a size …","Allocates pages with a size given in number of bytes with …","The core page allocation routine that allocates the given …","Allocates the given number of pages with the constraint …","","","","","","","","","","","Returns an empty AllocatedPages object that performs no …","Returns the ending Page (inclusive) in this range of pages.","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Initialize the page allocator.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Merges the given AllocatedPages object ap into this …","Returns the offset of the given VirtualAddress within this …","Returns a reference to the inner PageRange, which is …","Returns the size in bytes of this range of pages.","Returns the size in number of pages of this range of pages.","Splits this AllocatedPages into two separate AllocatedPages…","Returns the starting Page in this range of pages.","Returns the starting VirtualAddress in this range of pages.","","","","","","","","","","","",""],"i":[13,0,0,0,7,7,0,13,13,7,1,0,0,0,0,0,0,0,0,1,9,7,13,1,9,7,13,1,9,1,1,1,13,1,9,7,13,0,1,9,7,13,1,1,1,1,1,1,1,1,1,9,7,13,1,9,7,13,1,9,7,13],"f":[0,0,0,0,0,0,0,0,0,0,[[1,2],[[4,[3]]]],[2,[[4,[1]]]],[[3,2],[[6,[1,5]]]],[2,[[4,[1]]]],[[3,2],[[6,[1,5]]]],[[7,2],[[6,[5]]]],[[2,8],[[6,[1,5]]]],[[7,2],[[6,[5]]]],[[2,8],[[6,[1,5]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1],[9],[[],1],[1,10],[[1,11],12],[[13,11],12],[[]],[[]],[[]],[[]],[3,[[6,[5]]]],[[]],[[]],[[]],[[]],[[1,1],[[6,[1]]]],[[1,3],[[4,[2]]]],[1,8],[1,2],[1,2],[[1,10],[[6,[1]]]],[1,10],[1,3],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],6],[[],14],[[],14],[[],14],[[],14]],"c":[],"p":[[3,"AllocatedPages"],[15,"usize"],[3,"VirtualAddress"],[4,"Option"],[15,"str"],[4,"Result"],[4,"AllocationRequest"],[3,"PageRange"],[3,"DeferredAllocAction"],[3,"Page"],[3,"Formatter"],[6,"Result"],[4,"AllocationError"],[3,"TypeId"]]},\ "page_attribute_table":{"doc":"Support for the Page Attribute Table (PAT) feature on x86.","t":"HEDDNNNNNNLLLLLLLLLLLLLLLFLLLLFLLLLLLLLLLL","n":["FIXED_PAT","MemoryCachingType","PageAttributeTable","PatNotSupported","Uncacheable","UncachedMinus","WriteBack","WriteCombining","WriteProtected","WriteThrough","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","fmt","fmt","from","from","from","from","from_bytes","init","into","into","into","into_bytes","is_supported","new","pat_slot_index","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":[[0,"page_attribute_table"]],"d":["Theseus’s fixed PageAttributeTable has slots that align …","The various types of memory caching that x86 supports for …","The Page Attribute Table (PAT) consists of 8 “slots” …","An empty error type indicating that the Page Attribute …","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","Returns the argument unchanged.","Converts the given bytes directly into the bitfield struct.","Sets up and enables the Page Attribute Table (PAT) for …","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns the underlying bits.","Returns true if the Page Attribute Table is supported on …","Returns an instance with zero initialized data.","Returns the index of the PageAttributeTable (PAT) slot …","","","","","","","","",""],"i":[0,0,0,0,2,2,2,2,2,2,1,2,5,1,2,5,1,2,2,5,1,1,2,5,1,0,1,2,5,1,0,1,2,1,2,5,1,2,5,1,2,5],"f":[0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[1,1],[2,2],[[2,3],4],[[5,3],4],[[]],[6,1],[[]],[[]],[[[8,[7]]],1],[[],[[9,[5]]]],[[]],[[]],[[]],[1,[[8,[7]]]],[[],10],[[],1],[2,7],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],11],[[],11],[[],11]],"c":[],"p":[[3,"PageAttributeTable"],[4,"MemoryCachingType"],[3,"Formatter"],[6,"Result"],[3,"PatNotSupported"],[15,"u64"],[15,"u8"],[15,"array"],[4,"Result"],[15,"bool"],[3,"TypeId"]],"a":{"mtrr":[1],"page attribute table":[1],"pat":[1]}},\ -"page_table_entry":{"doc":"Defines the structure of Page Table Entries (PTEs) on …","t":"NNDEDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Exclusive","NonExclusive","PageTableEntry","UnmapResult","UnmappedFrames","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","flags","from","from","from","into","into","into","is_unused","pointed_frame","set_entry","set_flags","set_unmapped","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","value","zero"],"q":[[0,"page_table_entry"]],"d":["","","A page table entry, which is a u64 value under the hood.","The frames returned from the action of unmapping a page …","A range of frames that have been unmapped from a …","","","","","","","","Returns this PageTableEntry’s flags.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if this entry is unused, i.e., cleared/zeroed …","Returns the physical Frame pointed to (mapped by) this …","Sets this PageTableEntry to map the given frame with the …","Sets the flags components of this PageTableEntry to …","Removes the mapping represented by this page table entry.","","","","","","","","","","","Zeroes out this entry, setting it as “unused”."],"i":[9,9,0,0,0,9,1,3,9,1,3,1,3,9,1,3,9,1,3,3,3,3,3,3,9,1,3,9,1,3,9,1,3,3,3],"f":[0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[1,2],[3,4],[[]],[[]],[[]],[[]],[[]],[[]],[3,5],[3,[[7,[6]]]],[[3,8,4]],[[3,4]],[3,9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[],11],[3,12],[3]],"c":[],"p":[[3,"UnmappedFrames"],[3,"FrameRange"],[3,"PageTableEntry"],[3,"PteFlagsX86_64"],[15,"bool"],[3,"Frame"],[4,"Option"],[3,"AllocatedFrame"],[4,"UnmapResult"],[4,"Result"],[3,"TypeId"],[15,"u64"]]},\ +"page_table_entry":{"doc":"Defines the structure of Page Table Entries (PTEs) on …","t":"NNDEDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["Exclusive","NonExclusive","PageTableEntry","UnmapResult","UnmappedFrameRange","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deref","flags","from","from","from","into","into","into","is_unused","pointed_frame","set_entry","set_flags","set_unmapped","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","value","zero"],"q":[[0,"page_table_entry"]],"d":["","","A page table entry, which is a u64 value under the hood.","The frames returned from the action of unmapping a page …","A range of frames that have been unmapped from a …","","","","","","","","Returns this PageTableEntry’s flags.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Returns true if this entry is unused, i.e., cleared/zeroed …","Returns the physical Frame pointed to (mapped by) this …","Sets this PageTableEntry to map the given frame with the …","Sets the flags components of this PageTableEntry to …","Removes the mapping represented by this page table entry.","","","","","","","","","","","Zeroes out this entry, setting it as “unused”."],"i":[9,9,0,0,0,9,1,3,9,1,3,1,3,9,1,3,9,1,3,3,3,3,3,3,9,1,3,9,1,3,9,1,3,3,3],"f":[0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[1,2],[3,4],[[]],[[]],[[]],[[]],[[]],[[]],[3,5],[3,[[7,[6]]]],[[3,8,4]],[[3,4]],[3,9],[[],10],[[],10],[[],10],[[],10],[[],10],[[],10],[[],11],[[],11],[[],11],[3,12],[3]],"c":[],"p":[[3,"UnmappedFrameRange"],[3,"FrameRange"],[3,"PageTableEntry"],[3,"PteFlagsX86_64"],[15,"bool"],[3,"Frame"],[4,"Option"],[3,"AllocatedFrame"],[4,"UnmapResult"],[4,"Result"],[3,"TypeId"],[15,"u64"]]},\ "panic_entry":{"doc":"Provides the default entry points and lang items for …","t":"","n":[],"q":[],"d":[],"i":[],"f":[],"c":[],"p":[]},\ "panic_wrapper":{"doc":"Provides types and simple routines for handling panics. …","t":"F","n":["panic_wrapper"],"q":[[0,"panic_wrapper"]],"d":["Performs the standard panic handling routine, which …"],"i":[0],"f":[[1,[[3,[2]]]]],"c":[],"p":[[3,"PanicInfo"],[15,"str"],[4,"Result"]]},\ "path":{"doc":"","t":"NRRNDENLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL","n":["CurrentDir","EXTENSION_DELIMITER","PATH_DELIMITER","ParentDir","Path","PathComponent","RootDir","as_string","basename","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","components","deref","deref_mut","eq","extension","file_stem","fmt","fmt","from","from","from","get","get_absolute","get_dir","get_file","hash","into","into","is_absolute","new","rcomponents","relative","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"path"]],"d":["","","","","A structure that represents a relative or absolute path to …","","","","Returns just the file name, i.e., the trailling component …","","","","","","","Returns an iterator over the components of this Path, …","","","","Returns the file extension, if present. If there are …","Like basename(), but excludes the file extension, if …","","","Returns the argument unchanged.","Returns the argument unchanged.","","Returns the file or directory specified by the given path, ","Returns the file or directory specified by the given …","Returns the file specified by the given path, which can be …","Returns the file specified by the given path, which can be …","","Calls U::from(self).","Calls U::from(self).","Returns a boolean indicating whether this Path is absolute,","Creates a new Path from the given String.","Returns a reverse iterator over the components of this Path…","Returns a Path that expresses a relative path from this …","","","","","","","",""],"i":[1,0,0,1,0,0,1,1,3,1,3,1,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,1,3,1,3,1,3],"f":[0,0,0,0,0,0,0,[1,2],[3,4],[[]],[[]],[[]],[[]],[3,3],[[]],[3,5],[3,2],[3,2],[[3,3],6],[3,[[7,[4]]]],[3,4],[[3,8],9],[[3,8],[[11,[10]]]],[[]],[[]],[2,3],[[3,12],[[7,[13]]]],[3,[[7,[13]]]],[[3,12],[[7,[12]]]],[[3,12],[[7,[14]]]],[[3,15]],[[]],[[]],[3,6],[2,3],[3,5],[[3,3],[[7,[3]]]],[[]],[[],2],[[],11],[[],11],[[],11],[[],11],[[],16],[[],16]],"c":[],"p":[[4,"PathComponent"],[3,"String"],[3,"Path"],[15,"str"],[8,"Iterator"],[15,"bool"],[4,"Option"],[3,"Formatter"],[6,"Result"],[3,"Error"],[4,"Result"],[6,"DirRef"],[4,"FileOrDir"],[6,"FileRef"],[8,"Hasher"],[3,"TypeId"]]},\ diff --git a/doc/src/frame_allocator/lib.rs.html b/doc/src/frame_allocator/lib.rs.html index d6a039f24a..2330052242 100644 --- a/doc/src/frame_allocator/lib.rs.html +++ b/doc/src/frame_allocator/lib.rs.html @@ -1081,6 +1081,235 @@ 1081 1082 1083 +1084 +1085 +1086 +1087 +1088 +1089 +1090 +1091 +1092 +1093 +1094 +1095 +1096 +1097 +1098 +1099 +1100 +1101 +1102 +1103 +1104 +1105 +1106 +1107 +1108 +1109 +1110 +1111 +1112 +1113 +1114 +1115 +1116 +1117 +1118 +1119 +1120 +1121 +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129 +1130 +1131 +1132 +1133 +1134 +1135 +1136 +1137 +1138 +1139 +1140 +1141 +1142 +1143 +1144 +1145 +1146 +1147 +1148 +1149 +1150 +1151 +1152 +1153 +1154 +1155 +1156 +1157 +1158 +1159 +1160 +1161 +1162 +1163 +1164 +1165 +1166 +1167 +1168 +1169 +1170 +1171 +1172 +1173 +1174 +1175 +1176 +1177 +1178 +1179 +1180 +1181 +1182 +1183 +1184 +1185 +1186 +1187 +1188 +1189 +1190 +1191 +1192 +1193 +1194 +1195 +1196 +1197 +1198 +1199 +1200 +1201 +1202 +1203 +1204 +1205 +1206 +1207 +1208 +1209 +1210 +1211 +1212 +1213 +1214 +1215 +1216 +1217 +1218 +1219 +1220 +1221 +1222 +1223 +1224 +1225 +1226 +1227 +1228 +1229 +1230 +1231 +1232 +1233 +1234 +1235 +1236 +1237 +1238 +1239 +1240 +1241 +1242 +1243 +1244 +1245 +1246 +1247 +1248 +1249 +1250 +1251 +1252 +1253 +1254 +1255 +1256 +1257 +1258 +1259 +1260 +1261 +1262 +1263 +1264 +1265 +1266 +1267 +1268 +1269 +1270 +1271 +1272 +1273 +1274 +1275 +1276 +1277 +1278 +1279 +1280 +1281 +1282 +1283 +1284 +1285 +1286 +1287 +1288 +1289 +1290 +1291 +1292 +1293 +1294 +1295 +1296 +1297 +1298 +1299 +1300 +1301 +1302 +1303 +1304 +1305 +1306 +1307 +1308 +1309 +1310 +1311 +1312
    //! Provides an allocator for physical memory frames.
     //! The minimum unit of allocation is a single frame. 
     //!
    @@ -1097,12 +1326,15 @@
     //! but there are several convenience functions that offer simpler interfaces for general usage. 
     //!
     //! # Notes and Missing Features
    -//! This allocator currently does **not** merge freed chunks (de-fragmentation). 
    -//! We don't need to do so until we actually run out of address space or until 
    -//! a requested address is in a chunk that needs to be merged.
    +//! This allocator only makes one attempt to merge deallocated frames into existing
    +//! free chunks for de-fragmentation. It does not iteratively merge adjacent chunks in order to
    +//! maximally combine separate chunks into the biggest single chunk.
    +//! Instead, free chunks are merged only when they are dropped or when needed to fulfill a specific request.
     
     #![no_std]
     #![allow(clippy::blocks_in_if_conditions)]
    +#![allow(incomplete_features)]
    +#![feature(adt_const_params)]
     
     extern crate alloc;
     #[cfg(test)]
    @@ -1111,13 +1343,11 @@
     mod static_array_rb_tree;
     // mod static_array_linked_list;
     
    -
    -use core::{borrow::Borrow, cmp::{Ordering, min, max}, fmt, ops::{Deref, DerefMut}, marker::PhantomData};
    +use core::{borrow::Borrow, cmp::{Ordering, min, max}, ops::{Deref, DerefMut}, fmt};
     use intrusive_collections::Bound;
     use kernel_config::memory::*;
     use log::{error, warn, debug, trace};
    -use memory_structs::{PhysicalAddress, Frame, FrameRange};
    -use range_inclusive::RangeInclusiveIterator;
    +use memory_structs::{PhysicalAddress, Frame, FrameRange, MemoryState};
     use spin::Mutex;
     use static_array_rb_tree::*;
     use static_assertions::assert_not_impl_any;
    @@ -1129,18 +1359,18 @@
     // Note: we keep separate lists for "free, general-purpose" areas and "reserved" areas, as it's much faster. 
     
     /// The single, system-wide list of free physical memory frames available for general usage. 
    -static FREE_GENERAL_FRAMES_LIST: Mutex<StaticArrayRBTree<Chunk>> = Mutex::new(StaticArrayRBTree::empty()); 
    +static FREE_GENERAL_FRAMES_LIST: Mutex<StaticArrayRBTree<FreeFrames>> = Mutex::new(StaticArrayRBTree::empty()); 
     /// The single, system-wide list of free physical memory frames reserved for specific usage. 
    -static FREE_RESERVED_FRAMES_LIST: Mutex<StaticArrayRBTree<Chunk>> = Mutex::new(StaticArrayRBTree::empty()); 
    +static FREE_RESERVED_FRAMES_LIST: Mutex<StaticArrayRBTree<FreeFrames>> = Mutex::new(StaticArrayRBTree::empty()); 
     
     /// The fixed list of all known regions that are available for general use.
     /// This does not indicate whether these regions are currently allocated, 
     /// rather just where they exist and which regions are known to this allocator.
    -static GENERAL_REGIONS: Mutex<StaticArrayRBTree<Chunk>> = Mutex::new(StaticArrayRBTree::empty());
    +static GENERAL_REGIONS: Mutex<StaticArrayRBTree<PhysicalMemoryRegion>> = Mutex::new(StaticArrayRBTree::empty());
     /// The fixed list of all known regions that are reserved for specific purposes. 
     /// This does not indicate whether these regions are currently allocated, 
     /// rather just where they exist and which regions are known to this allocator.
    -static RESERVED_REGIONS: Mutex<StaticArrayRBTree<Chunk>> = Mutex::new(StaticArrayRBTree::empty());
    +static RESERVED_REGIONS: Mutex<StaticArrayRBTree<PhysicalMemoryRegion>> = Mutex::new(StaticArrayRBTree::empty());
     
     
     /// Initialize the frame allocator with the given list of available and reserved physical memory regions.
    @@ -1155,11 +1385,11 @@
     /// ## Return
     /// Upon success, this function returns a callback function that allows the caller
     /// (the memory subsystem init function) to convert a range of unmapped frames 
    -/// back into an [`AllocatedFrames`] object.
    +/// back into an [`UnmappedFrames`] object.
     pub fn init<F, R, P>(
         free_physical_memory_areas: F,
         reserved_physical_memory_areas: R,
    -) -> Result<fn(FrameRange) -> AllocatedFrames, &'static str> 
    +) -> Result<fn(FrameRange) -> UnmappedFrames, &'static str> 
         where P: Borrow<PhysicalMemoryRegion>,
               F: IntoIterator<Item = P>,
               R: IntoIterator<Item = P> + Clone,
    @@ -1172,7 +1402,7 @@
             return Err("BUG: Frame allocator was already initialized, cannot be initialized twice.");
         }
     
    -    let mut free_list: [Option<Chunk>; 32] = Default::default();
    +    let mut free_list: [Option<PhysicalMemoryRegion>; 32] = Default::default();
         let mut free_list_idx = 0;
     
         // Populate the list of free regions for general-purpose usage.
    @@ -1188,9 +1418,9 @@
         }
     
     
    -    let mut reserved_list: [Option<Chunk>; 32] = Default::default();
    +    let mut reserved_list: [Option<PhysicalMemoryRegion>; 32] = Default::default();
         for (i, area) in reserved_physical_memory_areas.into_iter().enumerate() {
    -        reserved_list[i] = Some(Chunk {
    +        reserved_list[i] = Some(PhysicalMemoryRegion {
                 typ: MemoryRegionType::Reserved,
                 frames: area.borrow().frames.clone(),
             });
    @@ -1198,7 +1428,7 @@
     
         let mut changed = true;
         while changed {
    -        let mut temp_reserved_list: [Option<Chunk>; 32] = Default::default();
    +        let mut temp_reserved_list: [Option<PhysicalMemoryRegion>; 32] = Default::default();
             changed = false;
     
             let mut temp_reserved_list_idx = 0;
    @@ -1240,12 +1470,28 @@
             }
         }
     
    -    *FREE_GENERAL_FRAMES_LIST.lock()  = StaticArrayRBTree::new(free_list.clone());
    -    *FREE_RESERVED_FRAMES_LIST.lock() = StaticArrayRBTree::new(reserved_list.clone());
    +    // Here, since we're sure we now have a list of regions that don't overlap, we can create lists of Frames objects.
    +    let mut free_list_w_frames: [Option<FreeFrames>; 32] = Default::default();
    +    let mut reserved_list_w_frames: [Option<FreeFrames>; 32] = Default::default();
    +    for (i, elem) in reserved_list.iter().flatten().enumerate() {
    +        reserved_list_w_frames[i] = Some(Frames::new(
    +            MemoryRegionType::Reserved,
    +            elem.frames.clone()
    +        ));
    +    }
    +
    +    for (i, elem) in free_list.iter().flatten().enumerate() {
    +        free_list_w_frames[i] = Some(Frames::new(
    +            MemoryRegionType::Free,
    +            elem.frames.clone()
    +        ));
    +    }
    +    *FREE_GENERAL_FRAMES_LIST.lock()  = StaticArrayRBTree::new(free_list_w_frames);
    +    *FREE_RESERVED_FRAMES_LIST.lock() = StaticArrayRBTree::new(reserved_list_w_frames);
         *GENERAL_REGIONS.lock()           = StaticArrayRBTree::new(free_list);
         *RESERVED_REGIONS.lock()          = StaticArrayRBTree::new(reserved_list);
     
    -    Ok(into_allocated_frames)
    +    Ok(into_unmapped_frames)
     }
     
     
    @@ -1257,7 +1503,7 @@
     /// the given list of `reserved_physical_memory_areas`.
     fn check_and_add_free_region<P, R>(
         area: &FrameRange,
    -    free_list: &mut [Option<Chunk>; 32],
    +    free_list: &mut [Option<PhysicalMemoryRegion>; 32],
         free_list_idx: &mut usize,
         reserved_physical_memory_areas: R,
     )
    @@ -1303,7 +1549,7 @@
     
         let new_area = FrameRange::new(current_start, current_end);
         if new_area.size_in_frames() > 0 {
    -        free_list[*free_list_idx] = Some(Chunk {
    +        free_list[*free_list_idx] = Some(PhysicalMemoryRegion {
                 typ:  MemoryRegionType::Free,
                 frames: new_area,
             });
    @@ -1312,16 +1558,38 @@
     }
     
     
    -/// A region of physical memory.
    -#[derive(Clone, Debug)]
    +/// `PhysicalMemoryRegion` represents a range of contiguous frames in physical memory for bookkeeping purposes.
    +/// It does not give access to the underlying frames.
    +///
    +/// # Ordering and Equality
    +///
    +/// `PhysicalMemoryRegion` implements the `Ord` trait, and its total ordering is ONLY based on
    +/// its **starting** `Frame`. This is useful so we can store `PhysicalMemoryRegion`s in a sorted collection.
    +///
    +/// Similarly, `PhysicalMemoryRegion` implements equality traits, `Eq` and `PartialEq`,
    +/// both of which are also based ONLY on the **starting** `Frame` of the `PhysicalMemoryRegion`.
    +/// Thus, comparing two `PhysicalMemoryRegion`s with the `==` or `!=` operators may not work as expected.
    +/// since it ignores their actual range of frames.
    +#[derive(Clone, Debug, Eq)]
     pub struct PhysicalMemoryRegion {
    -    pub frames: FrameRange,
    -    pub typ: MemoryRegionType,
    +    /// The Frames covered by this region, an inclusive range. 
    +    pub frames: FrameRange,
    +    /// The type of this memory region, e.g., whether it's in a free or reserved region.
    +    pub typ: MemoryRegionType,
     }
     impl PhysicalMemoryRegion {
         pub fn new(frames: FrameRange, typ: MemoryRegionType) -> PhysicalMemoryRegion {
             PhysicalMemoryRegion { frames, typ }
         }
    +
    +    /// Returns a new `PhysicalMemoryRegion` with an empty range of frames. 
    +    #[allow(unused)]
    +    const fn empty() -> PhysicalMemoryRegion {
    +        PhysicalMemoryRegion {
    +            typ: MemoryRegionType::Unknown,
    +            frames: FrameRange::empty(),
    +        }
    +    }
     }
     impl Deref for PhysicalMemoryRegion {
         type Target = FrameRange;
    @@ -1329,6 +1597,26 @@
             &self.frames
         }
     }
    +impl Ord for PhysicalMemoryRegion {
    +    fn cmp(&self, other: &Self) -> Ordering {
    +        self.frames.start().cmp(other.frames.start())
    +    }
    +}
    +impl PartialOrd for PhysicalMemoryRegion {
    +    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
    +        Some(self.cmp(other))
    +    }
    +}
    +impl PartialEq for PhysicalMemoryRegion {
    +    fn eq(&self, other: &Self) -> bool {
    +        self.frames.start() == other.frames.start()
    +    }
    +}
    +impl Borrow<Frame> for &'_ PhysicalMemoryRegion {
    +    fn borrow(&self) -> &Frame {
    +        self.frames.start()
    +    }
    +}
     
     /// Types of physical memory. See each variant's documentation.
     #[derive(Copy, Clone, Debug, PartialEq, Eq)]
    @@ -1345,144 +1633,406 @@
         Unknown,
     }
     
    -/// A range of contiguous frames.
    +/// A range of contiguous frames in physical memory.
    +///
    +/// Each `Frames` object is globally unique, meaning that the owner of a `Frames` object
    +/// has globally-exclusive access to the range of frames it contains.
    +/// 
    +/// A `Frames` object can be in one of four states:
    +/// * `Free`: frames are owned by the frame allocator and have not been allocated for any use.
    +/// * `Allocated`: frames have been removed from the allocator's free list and are owned elsewhere;
    +///    they can now be used for mapping purposes.
    +/// * `Mapped`: frames have been (and are currently) mapped by a range of virtual memory pages.
    +/// * `Unmapped`: frames have been unmapped and can be returned to the frame allocator.
     ///
    +/// The drop behavior for a `Frames` object is based on its state:
    +/// * `Free`:  the frames will be added back to the frame allocator's free list.
    +/// * `Allocated`: the frames will be transitioned into the `Free` state.
    +/// * `Unmapped`: the frames will be transitioned into the `Allocated` state.
    +/// * `Mapped`: currently, Theseus does not actually drop mapped `Frames`, but rather they are forgotten
    +///    when they are mapped by virtual pages, and then re-created in the `Unmapped` state
    +///    after being unmapped from the page tables.
    +///
    +/// As such, one can visualize the `Frames` state diagram as such:
    +/// ```
    +/// (Free) <---> (Allocated) --> (Mapped) --> (Unmapped) --> (Allocated) <---> (Free)
    +/// ```
    +/// 
     /// # Ordering and Equality
     ///
    -/// `Chunk` implements the `Ord` trait, and its total ordering is ONLY based on
    -/// its **starting** `Frame`. This is useful so we can store `Chunk`s in a sorted collection.
    +/// `Frames` implements the `Ord` trait, and its total ordering is ONLY based on
    +/// its **starting** `Frame`. This is useful so we can store `Frames` in a sorted collection.
     ///
    -/// Similarly, `Chunk` implements equality traits, `Eq` and `PartialEq`,
    -/// both of which are also based ONLY on the **starting** `Frame` of the `Chunk`.
    -/// Thus, comparing two `Chunk`s with the `==` or `!=` operators may not work as expected.
    +/// Similarly, `Frames` implements equality traits, `Eq` and `PartialEq`,
    +/// both of which are also based ONLY on the **starting** `Frame` of the `Frames`.
    +/// Thus, comparing two `Frames` with the `==` or `!=` operators may not work as expected.
     /// since it ignores their actual range of frames.
    -#[derive(Debug, Clone, Eq)]
    -struct Chunk {
    +/// 
    +/// Similarly, `Frames` implements the `Borrow` trait to return a `Frame`,
    +/// not a `FrameRange`. This is required so we can search for `Frames` in a sorted collection
    +/// using a `Frame` value.
    +/// It differs from the behavior of the `Deref` trait which returns a `FrameRange`.
    +#[derive(Eq)]
    +pub struct Frames<const S: MemoryState> {
         /// The type of this memory chunk, e.g., whether it's in a free or reserved region.
         typ: MemoryRegionType,
    -    /// The Frames covered by this chunk, an inclusive range. 
    -    frames: FrameRange,
    +    /// The Frames covered by this chunk, an inclusive range.
    +    frames: FrameRange
     }
    -impl Chunk {
    -    fn as_allocated_frames(&self) -> AllocatedFrames {
    -        AllocatedFrames {
    -            frames: self.frames.clone(),
    +
    +/// A type alias for `Frames` in the `Free` state.
    +pub type FreeFrames = Frames<{MemoryState::Free}>;
    +/// A type alias for `Frames` in the `Allocated` state.
    +pub type AllocatedFrames = Frames<{MemoryState::Allocated}>;
    +/// A type alias for `Frames` in the `Mapped` state.
    +pub type MappedFrames = Frames<{MemoryState::Mapped}>;
    +/// A type alias for `Frames` in the `Unmapped` state.
    +pub type UnmappedFrames = Frames<{MemoryState::Unmapped}>;
    +
    +// Frames must not be Cloneable, and it must not expose its inner frames as mutable.
    +assert_not_impl_any!(Frames<{MemoryState::Free}>: DerefMut, Clone);
    +assert_not_impl_any!(Frames<{MemoryState::Allocated}>: DerefMut, Clone);
    +assert_not_impl_any!(Frames<{MemoryState::Mapped}>: DerefMut, Clone);
    +assert_not_impl_any!(Frames<{MemoryState::Unmapped}>: DerefMut, Clone);
    +
    +
    +impl FreeFrames {
    +    /// Creates a new `Frames` object in the `Free` state.
    +    ///
    +    /// The frame allocator logic is responsible for ensuring that no two `Frames` objects overlap.
    +    pub(crate) fn new(typ: MemoryRegionType, frames: FrameRange) -> Self {
    +        Frames {
    +            typ,
    +            frames,
             }
         }
     
    -    /// Returns a new `Chunk` with an empty range of frames. 
    -    const fn empty() -> Chunk {
    -        Chunk {
    -            typ: MemoryRegionType::Unknown,
    -            frames: FrameRange::empty(),
    -        }
    +    /// Consumes this `Frames` in the `Free` state and converts them into the `Allocated` state.
    +    pub fn into_allocated_frames(mut self) -> AllocatedFrames {  
    +        let frames = core::mem::replace(&mut self.frames, FrameRange::empty());  
    +        let af = Frames {
    +            typ: self.typ,
    +            frames,
    +        };
    +        core::mem::forget(self);
    +        af
         }
     }
    -impl Deref for Chunk {
    -    type Target = FrameRange;
    -    fn deref(&self) -> &FrameRange {
    -        &self.frames
    +
    +impl AllocatedFrames {
    +    /// Consumes this `Frames` in the `Allocated` state and converts them into the `Mapped` state.
    +    /// This should only be called once a `MappedPages` has been created from the `Frames`.
    +    pub fn into_mapped_frames(mut self) -> MappedFrames {    
    +        let frames = core::mem::replace(&mut self.frames, FrameRange::empty());  
    +        let mf = Frames {
    +            typ: self.typ,
    +            frames,
    +        };
    +        core::mem::forget(self);
    +        mf
         }
    -}
    -impl Ord for Chunk {
    -    fn cmp(&self, other: &Self) -> Ordering {
    -        self.frames.start().cmp(other.frames.start())
    +
    +    /// Returns an `AllocatedFrame` if this `AllocatedFrames` object contains only one frame.
    +    ///
    +    /// ## Panic
    +    /// Panics if this `AllocatedFrame` contains multiple frames or zero frames.
    +    pub fn as_allocated_frame(&self) -> AllocatedFrame {
    +        assert!(self.size_in_frames() == 1);
    +        AllocatedFrame {
    +            frame: *self.start(),
    +            _phantom: core::marker::PhantomData,
    +        }
         }
     }
    -impl PartialOrd for Chunk {
    -    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
    -        Some(self.cmp(other))
    +
    +impl UnmappedFrames {
    +    /// Consumes this `Frames` in the `Unmapped` state and converts them into the `Allocated` state.
    +    pub fn into_allocated_frames(mut self) -> AllocatedFrames {    
    +        let frames = core::mem::replace(&mut self.frames, FrameRange::empty());  
    +        let af = Frames {
    +            typ: self.typ,
    +            frames
    +        };
    +        core::mem::forget(self);
    +        af
         }
     }
    -impl PartialEq for Chunk {
    -    fn eq(&self, other: &Self) -> bool {
    -        self.frames.start() == other.frames.start()
    +
    +
    +/// This function is a callback used to convert `UnmappedFrameRange` into `UnmappedFrames`.
    +///
    +/// `UnmappedFrames` represents frames that have been unmapped by a page that had
    +/// previously exclusively mapped them, indicating that no others pages have been mapped 
    +/// to those same frames, and thus, those frames can be safely deallocated.
    +///
    +/// This exists to break the cyclic dependency chain between this crate and
    +/// the `page_table_entry` crate, since `page_table_entry` must depend on types
    +/// from this crate in order to enforce safety when modifying page table entries.
    +pub(crate) fn into_unmapped_frames(frames: FrameRange) -> UnmappedFrames {
    +    let typ = if contains_any(&RESERVED_REGIONS.lock(), &frames) {
    +        MemoryRegionType::Reserved
    +    } else {
    +        MemoryRegionType::Free
    +    };
    +    Frames{ typ, frames }
    +}
    +
    +
    +impl<const S: MemoryState> Drop for Frames<S> {
    +    fn drop(&mut self) {
    +        match S {
    +            MemoryState::Free => {
    +                if self.size_in_frames() == 0 { return; }
    +        
    +                let frames = core::mem::replace(&mut self.frames, FrameRange::empty());  
    +                let free_frames: FreeFrames = Frames { typ: self.typ, frames };
    +        
    +                let mut list = if free_frames.typ == MemoryRegionType::Reserved {
    +                    FREE_RESERVED_FRAMES_LIST.lock()
    +                } else {
    +                    FREE_GENERAL_FRAMES_LIST.lock()
    +                };        
    +            
    +                match &mut list.0 {
    +                    // For early allocations, just add the deallocated chunk to the free pages list.
    +                    Inner::Array(_) => {
    +                        if list.insert(free_frames).is_ok() {
    +                            return;
    +                        } else {
    +                            error!("Failed to insert deallocated frames into the list (array). The initial static array should be created with a larger size.");
    +                        }
    +                    }
    +                    
    +                    // For full-fledged deallocations, determine if we can merge the deallocated frames 
    +                    // with an existing contiguously-adjacent chunk or if we need to insert a new chunk.
    +                    Inner::RBTree(ref mut tree) => {
    +                        let mut cursor_mut = tree.lower_bound_mut(Bound::Included(free_frames.start()));
    +                        if let Some(next_frames_ref) = cursor_mut.get() {
    +                            if *free_frames.end() + 1 == *next_frames_ref.start() {
    +                                // extract the next chunk from the list
    +                                let mut next_frames = cursor_mut
    +                                    .remove()
    +                                    .expect("BUG: couldn't remove next frames from free list in drop handler")
    +                                    .into_inner();
    +
    +                                // trace!("Prepending {:?} onto beg of next {:?}", free_frames, next_frames);
    +                                if next_frames.merge(free_frames).is_ok() {
    +                                    // trace!("newly merged next chunk: {:?}", next_frames);
    +                                    // now return newly merged chunk into list
    +                                    cursor_mut.insert_before(Wrapper::new_link(next_frames));
    +                                    return;
    +                                } else {
    +                                    panic!("BUG: couldn't merge deallocated chunk into next chunk");
    +                                }
    +                            }
    +                        }
    +                        if let Some(prev_frames_ref) = cursor_mut.peek_prev().get() {
    +                            if *prev_frames_ref.end() + 1 == *free_frames.start() {
    +                                // trace!("Appending {:?} onto end of prev {:?}", free_frames, prev_frames.deref());
    +                                cursor_mut.move_prev();
    +                                if let Some(_prev_frames_ref) = cursor_mut.get() {
    +                                    // extract the next chunk from the list
    +                                    let mut prev_frames = cursor_mut
    +                                        .remove()
    +                                        .expect("BUG: couldn't remove previous frames from free list in drop handler")
    +                                        .into_inner();
    +
    +                                    if prev_frames.merge(free_frames).is_ok() {
    +                                        // trace!("newly merged prev chunk: {:?}", prev_frames);
    +                                        // now return newly merged chunk into list
    +                                        cursor_mut.insert_before(Wrapper::new_link(prev_frames));
    +                                        return;
    +                                    } else {
    +                                        panic!("BUG: couldn't merge deallocated chunk into prev chunk");
    +                                    }
    +                                }
    +                            }
    +                        }
    +
    +                        // trace!("Inserting new chunk for deallocated {:?} ", free_frames);
    +                        cursor_mut.insert(Wrapper::new_link(free_frames));
    +                        return;
    +                    }
    +                }
    +                log::error!("BUG: couldn't insert deallocated {:?} into free frames list", self.frames);
    +            }
    +            MemoryState::Allocated => { 
    +                // trace!("Converting AllocatedFrames to FreeFrames. Drop handler will be called again {:?}", self.frames);
    +                let frames = core::mem::replace(&mut self.frames, FrameRange::empty());  
    +                let _to_drop = FreeFrames { typ: self.typ, frames }; 
    +            }
    +            MemoryState::Mapped => panic!("We should never drop a mapped frame! It should be forgotten instead."),
    +            MemoryState::Unmapped => {
    +                let frames = core::mem::replace(&mut self.frames, FrameRange::empty());  
    +                let _to_drop = AllocatedFrames { typ: self.typ, frames };
    +            }
    +        }
         }
     }
    -impl Borrow<Frame> for &'_ Chunk {
    -    fn borrow(&self) -> &Frame {
    -        self.frames.start()
    +
    +impl<'f> IntoIterator for &'f AllocatedFrames {
    +    type IntoIter = AllocatedFramesIter<'f>;
    +    type Item = AllocatedFrame<'f>;
    +    fn into_iter(self) -> Self::IntoIter {
    +        AllocatedFramesIter {
    +            _owner: self,
    +            range: self.frames.iter(),
    +        }
         }
     }
     
    +/// An iterator over each [`AllocatedFrame`] in a range of [`AllocatedFrames`].
    +///
    +/// We must implement our own iterator type here in order to tie the lifetime `'f`
    +/// of a returned `AllocatedFrame<'f>` type to the lifetime of its containing `AllocatedFrames`.
    +/// This is because the underlying type of `AllocatedFrames` is a [`FrameRange`],
    +/// which itself is a [`RangeInclusive`] of [`Frame`]s.
    +/// Currently, the [`RangeInclusiveIterator`] type creates a clone of the original
    +/// [`RangeInclusive`] instances rather than borrowing a reference to it.
    +///
    +/// [`RangeInclusive`]: range_inclusive::RangeInclusive
    +pub struct AllocatedFramesIter<'f> {
    +    _owner: &'f AllocatedFrames,
    +    range: range_inclusive::RangeInclusiveIterator<Frame>,
    +}
    +impl<'f> Iterator for AllocatedFramesIter<'f> {
    +    type Item = AllocatedFrame<'f>;
    +    fn next(&mut self) -> Option<Self::Item> {
    +        self.range.next().map(|frame|
    +            AllocatedFrame {
    +                frame, _phantom: core::marker::PhantomData,
    +            }
    +        )
    +    }
    +}
     
    -/// Represents a range of allocated physical memory [`Frame`]s; derefs to [`FrameRange`].
    -/// 
    -/// These frames are not immediately accessible because they're not yet mapped
    -/// by any virtual memory pages.
    -/// You must do that separately in order to create a `MappedPages` type,
    -/// which can then be used to access the contents of these frames.
    +/// A reference to a single frame within a range of `AllocatedFrames`.
     /// 
    -/// This object represents ownership of the range of allocated physical frames;
    -/// if this object falls out of scope, its allocated frames will be auto-deallocated upon drop. 
    -pub struct AllocatedFrames {
    -    frames: FrameRange,
    +/// The lifetime of this type is tied to the lifetime of its owning `AllocatedFrames`.
    +#[derive(Debug)]
    +pub struct AllocatedFrame<'f> {
    +    frame: Frame,
    +    _phantom: core::marker::PhantomData<&'f Frame>,
     }
    -
    -// AllocatedFrames must not be Cloneable, and it must not expose its inner frames as mutable.
    -assert_not_impl_any!(AllocatedFrames: DerefMut, Clone);
    -
    -impl Deref for AllocatedFrames {
    -    type Target = FrameRange;
    -    fn deref(&self) -> &FrameRange {
    -        &self.frames
    +impl<'f> Deref for AllocatedFrame<'f> {
    +    type Target = Frame;
    +    fn deref(&self) -> &Self::Target {
    +        &self.frame
         }
     }
    -impl fmt::Debug for AllocatedFrames {
    -    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    -        write!(f, "AllocatedFrames({:?})", self.frames)
    -    }
    +assert_not_impl_any!(AllocatedFrame: DerefMut, Clone);
    +
    +/// The result of splitting a `Frames` object into multiple smaller `Frames` objects.
    +pub struct SplitFrames<const S: MemoryState>  {
    +    before_start:   Option<Frames<S>>,
    +    start_to_end:   Frames<S>,
    +    after_end:      Option<Frames<S>>,
     }
     
    -impl AllocatedFrames {
    -    /// Returns an empty AllocatedFrames object that performs no frame allocation. 
    -    /// Can be used as a placeholder, but will not permit any real usage. 
    -    pub const fn empty() -> AllocatedFrames {
    -        AllocatedFrames {
    -            frames: FrameRange::empty()
    +impl<const S: MemoryState> Frames<S> {
    +    pub(crate) fn typ(&self) -> MemoryRegionType {
    +        self.typ
    +    }
    +
    +    /// Returns a new `Frames` with an empty range of frames. 
    +    /// Can be used as a placeholder, but will not permit any real usage.
    +    pub const fn empty() -> Frames<S> {
    +        Frames {
    +            typ: MemoryRegionType::Unknown,
    +            frames: FrameRange::empty(),
             }
         }
     
    -    /// Merges the given `AllocatedFrames` object `other` into this `AllocatedFrames` object (`self`).
    -    /// This is just for convenience and usability purposes, it performs no allocation or remapping.
    +    /// Merges the given `other` `Frames` object into this `Frames` object (`self`).
    +    ///
    +    /// This function performs no allocation or re-mapping, it exists for convenience and usability purposes.
         ///
         /// The given `other` must be physically contiguous with `self`, i.e., come immediately before or after `self`.
         /// That is, either `self.start == other.end + 1` or `self.end + 1 == other.start` must be true. 
         ///
         /// If either of those conditions are met, `self` is modified and `Ok(())` is returned,
         /// otherwise `Err(other)` is returned.
    -    pub fn merge(&mut self, other: AllocatedFrames) -> Result<(), AllocatedFrames> {
    -        if *self.start() == *other.end() + 1 {
    +    pub fn merge(&mut self, other: Self) -> Result<(), Self> {
    +        if self.is_empty() || other.is_empty() {
    +            return Err(other);
    +        }
    +
    +        let frames = if *self.start() == *other.end() + 1 {
                 // `other` comes contiguously before `self`
    -            self.frames = FrameRange::new(*other.start(), *self.end());
    +            FrameRange::new(*other.start(), *self.end())
             } 
             else if *self.end() + 1 == *other.start() {
                 // `self` comes contiguously before `other`
    -            self.frames = FrameRange::new(*self.start(), *other.end());
    +            FrameRange::new(*self.start(), *other.end())
             }
             else {
                 // non-contiguous
                 return Err(other);
    -        }
    +        };
     
    -        // ensure the now-merged AllocatedFrames doesn't run its drop handler and free its frames.
    +        // ensure the now-merged Frames doesn't run its drop handler
             core::mem::forget(other); 
    +        self.frames = frames;
             Ok(())
         }
     
    -    /// Splits this `AllocatedFrames` into two separate `AllocatedFrames` objects:
    +    /// Splits up the given `Frames` into multiple smaller `Frames`.
    +    /// 
    +    /// Returns a `SplitFrames` instance containing three `Frames`:
    +    /// 1. The range of frames in `self` that are before the beginning of `frames_to_extract`.
    +    /// 2. The `Frames` containing the requested range of frames, `frames_to_extract`.
    +    /// 3. The range of frames in `self` that are after the end of `frames_to_extract`.
    +    /// 
    +    /// If `frames_to_extract` is not contained within `self`, then `self` is returned unchanged within an `Err`.
    +    pub fn split_range(
    +        self,
    +        frames_to_extract: FrameRange
    +    ) -> Result<SplitFrames<S>, Self> {
    +        
    +        if !self.contains_range(&frames_to_extract) {
    +            return Err(self);
    +        }
    +        
    +        let start_frame = *frames_to_extract.start();
    +        let start_to_end = frames_to_extract;
    +        
    +        let before_start = if start_frame == MIN_FRAME || start_frame == *self.start() {
    +            None
    +        } else {
    +            Some(FrameRange::new(*self.start(), *start_to_end.start() - 1))
    +        };
    +
    +        let after_end = if *start_to_end.end() == MAX_FRAME || *start_to_end.end() == *self.end() {
    +            None
    +        } else {
    +            Some(FrameRange::new(*start_to_end.end() + 1, *self.end()))
    +        };
    +
    +        let typ = self.typ;
    +        // ensure the original Frames doesn't run its drop handler and free its frames.
    +        core::mem::forget(self);
    +        Ok(SplitFrames { 
    +            before_start: before_start.map(|frames| Frames { typ, frames }),
    +            start_to_end: Frames { typ, frames: start_to_end }, 
    +            after_end: after_end.map(|frames| Frames { typ, frames }),
    +        })
    +    }
    +
    +    /// Splits this `Frames` into two separate `Frames` objects:
         /// * `[beginning : at_frame - 1]`
         /// * `[at_frame : end]`
         /// 
         /// This function follows the behavior of [`core::slice::split_at()`],
    -    /// thus, either one of the returned `AllocatedFrames` objects may be empty. 
    -    /// * If `at_frame == self.start`, the first returned `AllocatedFrames` object will be empty.
    -    /// * If `at_frame == self.end + 1`, the second returned `AllocatedFrames` object will be empty.
    +    /// thus, either one of the returned `Frames` objects may be empty. 
    +    /// * If `at_frame == self.start`, the first returned `Frames` object will be empty.
    +    /// * If `at_frame == self.end + 1`, the second returned `Frames` object will be empty.
         /// 
    -    /// Returns an `Err` containing this `AllocatedFrames` if `at_frame` is otherwise out of bounds.
    +    /// Returns an `Err` containing this `Frames` if `at_frame` is otherwise out of bounds, or if `self` was empty.
         /// 
         /// [`core::slice::split_at()`]: https://doc.rust-lang.org/core/primitive.slice.html#method.split_at
    -    pub fn split(self, at_frame: Frame) -> Result<(AllocatedFrames, AllocatedFrames), AllocatedFrames> {
    +    pub fn split_at(self, at_frame: Frame) -> Result<(Self, Self), Self> {
    +        if self.is_empty() { return Err(self); }
    +
             let end_of_first = at_frame - 1;
     
             let (first, second) = if at_frame == *self.start() && at_frame <= *self.end() {
    @@ -1504,120 +2054,48 @@
                 return Err(self);
             };
     
    -        // ensure the original AllocatedFrames doesn't run its drop handler and free its frames.
    +        let typ = self.typ;
    +        // ensure the original Frames doesn't run its drop handler and free its frames.
             core::mem::forget(self);   
             Ok((
    -            AllocatedFrames { frames: first }, 
    -            AllocatedFrames { frames: second },
    +            Frames { typ, frames: first }, 
    +            Frames { typ, frames: second },
             ))
         }
    -
    -    /// Returns an `AllocatedFrame` if this `AllocatedFrames` object contains only one frame.
    -    /// 
    -    /// ## Panic
    -    /// Panics if this `AllocatedFrame` contains multiple frames or zero frames.
    -    pub fn as_allocated_frame(&self) -> AllocatedFrame {
    -        assert!(self.size_in_frames() == 1);
    -        AllocatedFrame {
    -            frame: *self.start(),
    -            _phantom: PhantomData,
    -        }
    -    }
     }
     
    -/// This function is a callback used to convert `UnmappedFrames` into `AllocatedFrames`.
    -/// `UnmappedFrames` represents frames that have been unmapped from a page that had
    -/// exclusively mapped them, indicating that no others pages have been mapped 
    -/// to those same frames, and thus, they can be safely deallocated.
    -/// 
    -/// This exists to break the cyclic dependency cycle between this crate and
    -/// the `page_table_entry` crate, since `page_table_entry` must depend on types
    -/// from this crate in order to enforce safety when modifying page table entries.
    -fn into_allocated_frames(frames: FrameRange) -> AllocatedFrames {
    -    AllocatedFrames { frames }
    +impl<const S: MemoryState> Deref for Frames<S> {
    +    type Target = FrameRange;
    +    fn deref(&self) -> &FrameRange {
    +        &self.frames
    +    }
     }
    -
    -impl Drop for AllocatedFrames {
    -    fn drop(&mut self) {
    -        if self.size_in_frames() == 0 { return; }
    -
    -        let (list, typ) = if contains_any(&RESERVED_REGIONS.lock(), &self.frames) {
    -            (&FREE_RESERVED_FRAMES_LIST, MemoryRegionType::Reserved)
    -        } else {
    -            (&FREE_GENERAL_FRAMES_LIST, MemoryRegionType::Free)
    -        };
    -        // trace!("frame_allocator: deallocating {:?}, typ {:?}", self, typ);
    -
    -        // Simply add the newly-deallocated chunk to the free frames list.
    -        let mut locked_list = list.lock();
    -        let res = locked_list.insert(Chunk {
    -            typ,
    -            frames: self.frames.clone(),
    -        });
    -        match res {
    -            Ok(_inserted_free_chunk) => (),
    -            Err(c) => error!("BUG: couldn't insert deallocated chunk {:?} into free frame list", c),
    -        }
    -        
    -        // Here, we could optionally use above `_inserted_free_chunk` to merge the adjacent (contiguous) chunks
    -        // before or after the newly-inserted free chunk. 
    -        // However, there's no *need* to do so until we actually run out of address space or until 
    -        // a requested address is in a chunk that needs to be merged.
    -        // Thus, for performance, we save that for those future situations.
    -    }
    +impl<const S: MemoryState> Ord for Frames<S> {
    +    fn cmp(&self, other: &Self) -> Ordering {
    +        self.frames.start().cmp(other.frames.start())
    +    }
     }
    -
    -impl<'f> IntoIterator for &'f AllocatedFrames {
    -    type IntoIter = AllocatedFramesIter<'f>;
    -    type Item = AllocatedFrame<'f>;
    -    fn into_iter(self) -> Self::IntoIter {
    -        AllocatedFramesIter {
    -            _owner: self,
    -            range_iter: self.frames.iter(),
    -        }
    +impl<const S: MemoryState> PartialOrd for Frames<S> {
    +    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
    +        Some(self.cmp(other))
         }
     }
    -
    -/// An iterator over each [`AllocatedFrame`] in a range of [`AllocatedFrames`].
    -///
    -/// We must implement our own iterator type here in order to tie the lifetime `'f`
    -/// of a returned `AllocatedFrame<'f>` type to the lifetime of its containing `AllocatedFrames`.
    -/// This is because the underlying type of `AllocatedFrames` is a [`FrameRange`],
    -/// which itself is a [`RangeInclusive`] of [`Frame`]s.
    -/// Currently, the [`RangeInclusiveIterator`] type creates a clone of the original
    -/// [`RangeInclusive`] instances rather than borrowing a reference to it.
    -///
    -/// [`RangeInclusive`]: range_inclusive::RangeInclusive
    -pub struct AllocatedFramesIter<'f> {
    -    _owner: &'f AllocatedFrames,
    -    range_iter: RangeInclusiveIterator<Frame>,
    +impl<const S: MemoryState> PartialEq for Frames<S> {
    +    fn eq(&self, other: &Self) -> bool {
    +        self.frames.start() == other.frames.start()
    +    }
     }
    -impl<'f> Iterator for AllocatedFramesIter<'f> {
    -    type Item = AllocatedFrame<'f>;
    -    fn next(&mut self) -> Option<Self::Item> {
    -        self.range_iter.next().map(|frame|
    -            AllocatedFrame {
    -                frame, _phantom: PhantomData,
    -            }
    -        )
    +impl<const S: MemoryState> Borrow<Frame> for &'_ Frames<S> {
    +    fn borrow(&self) -> &Frame {
    +        self.frames.start()
         }
     }
     
    -/// A reference to a single frame within a range of `AllocatedFrames`.
    -/// 
    -/// The lifetime of this type is tied to the lifetime of its owning `AllocatedFrames`.
    -#[derive(Debug)]
    -pub struct AllocatedFrame<'f> {
    -    frame: Frame,
    -    _phantom: PhantomData<&'f Frame>,
    -}
    -impl<'f> Deref for AllocatedFrame<'f> {
    -    type Target = Frame;
    -    fn deref(&self) -> &Self::Target {
    -        &self.frame
    +impl<const S: MemoryState> fmt::Debug for Frames<S> {
    +    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    +        write!(f, "Frames({:?}, {:?})", self.frames, self.typ)
         }
     }
    -assert_not_impl_any!(AllocatedFrame: DerefMut, Clone);
     
     
     /// A series of pending actions related to frame allocator bookkeeping,
    @@ -1634,21 +2112,21 @@
     /// with a `let _ = ...` binding to instantly drop it. 
     pub struct DeferredAllocAction<'list> {
         /// A reference to the list into which we will insert the free general-purpose `Chunk`s.
    -    free_list: &'list Mutex<StaticArrayRBTree<Chunk>>,
    +    free_list: &'list Mutex<StaticArrayRBTree<FreeFrames>>,
         /// A reference to the list into which we will insert the free "reserved" `Chunk`s.
    -    reserved_list: &'list Mutex<StaticArrayRBTree<Chunk>>,
    +    reserved_list: &'list Mutex<StaticArrayRBTree<FreeFrames>>,
         /// A free chunk that needs to be added back to the free list.
    -    free1: Chunk,
    +    free1: FreeFrames,
         /// Another free chunk that needs to be added back to the free list.
    -    free2: Chunk,
    +    free2: FreeFrames,
     }
     impl<'list> DeferredAllocAction<'list> {
         fn new<F1, F2>(free1: F1, free2: F2) -> DeferredAllocAction<'list> 
    -        where F1: Into<Option<Chunk>>,
    -              F2: Into<Option<Chunk>>,
    +        where F1: Into<Option<FreeFrames>>,
    +              F2: Into<Option<FreeFrames>>,
         {
    -        let free1 = free1.into().unwrap_or_else(Chunk::empty);
    -        let free2 = free2.into().unwrap_or_else(Chunk::empty);
    +        let free1 = free1.into().unwrap_or_else(Frames::empty);
    +        let free2 = free2.into().unwrap_or_else(Frames::empty);
             DeferredAllocAction {
                 free_list: &FREE_GENERAL_FRAMES_LIST,
                 reserved_list: &FREE_RESERVED_FRAMES_LIST,
    @@ -1659,19 +2137,22 @@
     }
     impl<'list> Drop for DeferredAllocAction<'list> {
         fn drop(&mut self) {
    +        let frames1 = core::mem::replace(&mut self.free1, Frames::empty());
    +        let frames2 = core::mem::replace(&mut self.free2, Frames::empty());
    +        
             // Insert all of the chunks, both allocated and free ones, into the list. 
    -        if self.free1.size_in_frames() > 0 {
    -            match self.free1.typ {
    -                MemoryRegionType::Free     => { self.free_list.lock().insert(self.free1.clone()).unwrap(); }
    -                MemoryRegionType::Reserved => { self.reserved_list.lock().insert(self.free1.clone()).unwrap(); }
    -                _ => error!("BUG likely: DeferredAllocAction encountered free1 chunk {:?} of a type Unknown", self.free1),
    +        if frames1.size_in_frames() > 0 {
    +            match frames1.typ() {
    +                MemoryRegionType::Free     => { self.free_list.lock().insert(frames1).unwrap(); }
    +                MemoryRegionType::Reserved => { self.reserved_list.lock().insert(frames1).unwrap(); }
    +                _ => error!("BUG likely: DeferredAllocAction encountered free1 chunk {:?} of a type Unknown", frames1),
                 }
             }
    -        if self.free2.size_in_frames() > 0 {
    -            match self.free2.typ {
    -                MemoryRegionType::Free     => { self.free_list.lock().insert(self.free2.clone()).unwrap(); }
    -                MemoryRegionType::Reserved => { self.reserved_list.lock().insert(self.free2.clone()).unwrap(); }
    -                _ => error!("BUG likely: DeferredAllocAction encountered free2 chunk {:?} of a type Unknown", self.free2),
    +        if frames2.size_in_frames() > 0 {
    +            match frames2.typ() {
    +                MemoryRegionType::Free     => { self.free_list.lock().insert(frames2).unwrap(); }
    +                MemoryRegionType::Reserved => { self.reserved_list.lock().insert(frames2).unwrap(); }
    +                _ => error!("BUG likely: DeferredAllocAction encountered free2 chunk {:?} of a type Unknown", frames2),
                 };
             }
         }
    @@ -1689,7 +2170,7 @@
         /// or enough remaining chunks that could satisfy the requested allocation size.
         OutOfAddressSpace(usize),
         /// The starting address was found, but not all successive contiguous frames were available.
    -    ContiguousChunkNotFound(Frame, usize)
    +    ContiguousChunkNotFound(Frame, usize),
     }
     impl From<AllocationError> for &'static str {
         fn from(alloc_err: AllocationError) -> &'static str {
    @@ -1706,7 +2187,7 @@
     /// Searches the given `list` for the chunk that contains the range of frames from
     /// `requested_frame` to `requested_frame + num_frames`.
     fn find_specific_chunk(
    -    list: &mut StaticArrayRBTree<Chunk>,
    +    list: &mut StaticArrayRBTree<FreeFrames>,
         requested_frame: Frame,
         num_frames: usize
     ) -> Result<(AllocatedFrames, DeferredAllocAction<'static>), AllocationError> {
    @@ -1720,17 +2201,17 @@
                     if let Some(chunk) = elem {
                         if requested_frame >= *chunk.start() && requested_end_frame <= *chunk.end() {
                             // Here: `chunk` was big enough and did contain the requested address.
    -                        return Ok(allocate_from_chosen_chunk(requested_frame, num_frames, &chunk.clone(), ValueRefMut::Array(elem)));
    +                        return allocate_from_chosen_chunk(FrameRange::new(requested_frame, requested_frame + num_frames - 1), ValueRefMut::Array(elem), None);
                         }
                     }
                 }
             }
             Inner::RBTree(ref mut tree) => {
                 let mut cursor_mut = tree.upper_bound_mut(Bound::Included(&requested_frame));
    -            if let Some(chunk) = cursor_mut.get().map(|w| w.deref().clone()) {
    +            if let Some(chunk) = cursor_mut.get().map(|w| w.deref().deref().clone()) {
                     if chunk.contains(&requested_frame) {
                         if requested_end_frame <= *chunk.end() {
    -                        return Ok(allocate_from_chosen_chunk(requested_frame, num_frames, &chunk, ValueRefMut::RBTree(cursor_mut)));
    +                        return allocate_from_chosen_chunk(FrameRange::new(requested_frame, requested_frame + num_frames - 1), ValueRefMut::RBTree(cursor_mut), None);
                         } else {
                             // We found the chunk containing the requested address, but it was too small to cover all of the requested frames.
                             // Let's try to merge the next-highest contiguous chunk to see if those two chunks together 
    @@ -1741,14 +2222,17 @@
                             //     Requested address: {:?}, num_frames: {}, chunk: {:?}",
                             //     requested_frame, num_frames, chunk,
                             // );
    -                        let next_contiguous_chunk: Option<Chunk> = {
    -                            let next_cursor = cursor_mut.peek_next();
    -                            if let Some(next_chunk) = next_cursor.get().map(|w| w.deref()) {
    +                        let next_contiguous_chunk: Option<FreeFrames> = {
    +                            cursor_mut.move_next();// cursor now points to the next chunk
    +                            if let Some(next_chunk) = cursor_mut.get().map(|w| w.deref()) {
                                     if *chunk.end() + 1 == *next_chunk.start() {
                                         // Here: next chunk was contiguous with the original chunk. 
                                         if requested_end_frame <= *next_chunk.end() {
                                             // trace!("Frame allocator: found suitably-large contiguous next {:?} after initial too-small {:?}", next_chunk, chunk);
    -                                        Some(next_chunk.clone())
    +                                        let next = cursor_mut.remove().map(|f| f.into_inner());
    +                                        // after removal, the cursor has been moved to the next chunk, so move it back to the original chunk
    +                                        cursor_mut.move_prev();
    +                                        next
                                         } else {
                                             todo!("Frame allocator: found chunk containing requested address, but it was too small. \
                                                 Theseus does not yet support merging more than two chunks during an allocation request. \
    @@ -1767,15 +2251,12 @@
                                     return Err(AllocationError::ContiguousChunkNotFound(*chunk.end() + 1, requested_end_frame.number() - chunk.end().number()));
                                 }
                             };
    -                        if let Some(mut next_chunk) = next_contiguous_chunk {
    +                        if let Some(next_chunk) = next_contiguous_chunk {
                                 // We found a suitable chunk that came contiguously after the initial too-small chunk. 
    -                            // Remove the initial chunk (since we have a cursor pointing to it already) 
    -                            // and "merge" it into this `next_chunk`.
    -                            let _removed_initial_chunk = cursor_mut.remove();
    -                            // trace!("Frame allocator: removed suitably-large contiguous next {:?} after initial too-small {:?}", _removed_initial_chunk, chunk);
    -                            // Here, `cursor_mut` has been moved forward to point to the `next_chunk` now. 
    -                            next_chunk.frames = FrameRange::new(*chunk.start(), *next_chunk.end());
    -                            return Ok(allocate_from_chosen_chunk(requested_frame, num_frames, &next_chunk, ValueRefMut::RBTree(cursor_mut)));
    +                            // We would like to merge it into the initial chunk with just the reference (since we have a cursor pointing to it already),
    +                            // but we can't get a mutable reference to the element the cursor is pointing to.
    +                            // So both chunks will be removed and then merged. 
    +                            return allocate_from_chosen_chunk(FrameRange::new(requested_frame, requested_frame + num_frames - 1), ValueRefMut::RBTree(cursor_mut), Some(next_chunk));
                             }
                         }
                     }
    @@ -1789,7 +2270,7 @@
     
     /// Searches the given `list` for any chunk large enough to hold at least `num_frames`.
     fn find_any_chunk(
    -    list: &mut StaticArrayRBTree<Chunk>,
    +    list: &mut StaticArrayRBTree<FreeFrames>,
         num_frames: usize
     ) -> Result<(AllocatedFrames, DeferredAllocAction<'static>), AllocationError> {
         // During the first pass, we ignore designated regions.
    @@ -1798,11 +2279,11 @@
                 for elem in arr.iter_mut() {
                     if let Some(chunk) = elem {
                         // Skip chunks that are too-small or in the designated regions.
    -                    if  chunk.size_in_frames() < num_frames || chunk.typ != MemoryRegionType::Free {
    +                    if  chunk.size_in_frames() < num_frames || chunk.typ() != MemoryRegionType::Free {
                             continue;
                         } 
                         else {
    -                        return Ok(allocate_from_chosen_chunk(*chunk.start(), num_frames, &chunk.clone(), ValueRefMut::Array(elem)));
    +                        return allocate_from_chosen_chunk(FrameRange::new(*chunk.start(), *chunk.start() + num_frames - 1), ValueRefMut::Array(elem), None);
                         }
                     }
                 }
    @@ -1811,10 +2292,10 @@
                 // Because we allocate new frames by peeling them off from the beginning part of a chunk, 
                 // it's MUCH faster to start the search for free frames from higher addresses moving down. 
                 // This results in an O(1) allocation time in the general case, until all address ranges are already in use.
    -            let mut cursor = tree.upper_bound_mut(Bound::<&Chunk>::Unbounded);
    +            let mut cursor = tree.upper_bound_mut(Bound::<&FreeFrames>::Unbounded);
                 while let Some(chunk) = cursor.get().map(|w| w.deref()) {
    -                if num_frames <= chunk.size_in_frames() && chunk.typ == MemoryRegionType::Free {
    -                    return Ok(allocate_from_chosen_chunk(*chunk.start(), num_frames, &chunk.clone(), ValueRefMut::RBTree(cursor)));
    +                if num_frames <= chunk.size_in_frames() && chunk.typ() == MemoryRegionType::Free {
    +                    return allocate_from_chosen_chunk(FrameRange::new(*chunk.start(), *chunk.start() + num_frames - 1), ValueRefMut::RBTree(cursor), None);
                     }
                     warn!("Frame allocator: inefficient scenario: had to search multiple chunks \
                         (skipping {:?}) while trying to allocate {} frames at any address.",
    @@ -1833,88 +2314,59 @@
     }
     
     
    +/// Removes a `Frames` object from the RBTree. 
    +/// `frames_ref` is basically a wrapper over the cursor which stores the position of the frames.
    +fn retrieve_frames_from_ref(mut frames_ref: ValueRefMut<FreeFrames>) -> Option<FreeFrames> {
    +    // Remove the chosen chunk from the free frame list.
    +    let removed_val = frames_ref.remove();
    +    
    +    match removed_val {
    +        RemovedValue::Array(c) => c,
    +        RemovedValue::RBTree(option_frames) => {
    +            option_frames.map(|c| c.into_inner())
    +        }
    +    }
    +}
     
    -/// The final part of the main allocation routine that splits the given chosen chunk
    -/// into multiple smaller chunks, thereby "allocating" frames from it.
    +/// The final part of the main allocation routine that optionally merges two contiguous chunks and 
    +/// then splits the resulting chunk into multiple smaller chunks, thereby "allocating" frames from it.
     ///
     /// This function breaks up that chunk into multiple ones and returns an `AllocatedFrames` 
    -/// from (part of) that chunk, ranging from `start_frame` to `start_frame + num_frames`.
    +/// from (part of) that chunk that has the same range as `frames_to_allocate`.
     fn allocate_from_chosen_chunk(
    -    start_frame: Frame,
    -    num_frames: usize,
    -    chosen_chunk: &Chunk,
    -    mut chosen_chunk_ref: ValueRefMut<Chunk>,
    -) -> (AllocatedFrames, DeferredAllocAction<'static>) {
    -    let (new_allocation, before, after) = split_chosen_chunk(start_frame, num_frames, chosen_chunk);
    +    frames_to_allocate: FrameRange,
    +    initial_chunk_ref: ValueRefMut<FreeFrames>,
    +    next_chunk: Option<FreeFrames>,
    +) -> Result<(AllocatedFrames, DeferredAllocAction<'static>), AllocationError> {
    +    // Remove the initial chunk from the free frame list.
    +    let mut chosen_chunk = retrieve_frames_from_ref(initial_chunk_ref)
    +        .expect("BUG: Failed to retrieve chunk from free list");
    +    
    +    // This should always succeed, since we've already checked the conditions for a merge and split.
    +    // We should return the chunks back to the list, but a failure at this point implies a bug in the frame allocator.
     
    -    // Remove the chosen chunk from the free frame list.
    -    let _removed_chunk = chosen_chunk_ref.remove();
    +    if let Some(chunk) = next_chunk {
    +        chosen_chunk.merge(chunk).expect("BUG: Failed to merge adjacent chunks");
    +    }
    +
    +    let SplitFrames { before_start, start_to_end: new_allocation, after_end } = chosen_chunk
    +        .split_range(frames_to_allocate)
    +        .expect("BUG: Failed to split merged chunk");
     
         // TODO: Re-use the allocated wrapper if possible, rather than allocate a new one entirely.
         // if let RemovedValue::RBTree(Some(wrapper_adapter)) = _removed_chunk { ... }
     
    -    (
    -        new_allocation.as_allocated_frames(),
    -        DeferredAllocAction::new(before, after),
    -    )
    +    Ok((
    +        new_allocation.into_allocated_frames(),
    +        DeferredAllocAction::new(before_start, after_end),
    +    ))
     
     }
     
    -/// An inner function that breaks up the given chunk into multiple smaller chunks.
    -/// 
    -/// Returns a tuple of three chunks:
    -/// 1. The `Chunk` containing the requested range of frames starting at `start_frame`.
    -/// 2. The range of frames in the `chosen_chunk` that came before the beginning of the requested frame range.
    -/// 3. The range of frames in the `chosen_chunk` that came after the end of the requested frame range.
    -fn split_chosen_chunk(
    -    start_frame: Frame,
    -    num_frames: usize,
    -    chosen_chunk: &Chunk,
    -) -> (Chunk, Option<Chunk>, Option<Chunk>) {
    -    // The new allocated chunk might start in the middle of an existing chunk,
    -    // so we need to break up that existing chunk into 3 possible chunks: before, newly-allocated, and after.
    -    //
    -    // Because Frames and PhysicalAddresses use saturating add/subtract, we need to double-check that 
    -    // we don't create overlapping duplicate Chunks at either the very minimum or the very maximum of the address space.
    -    let new_allocation = Chunk {
    -        typ: chosen_chunk.typ,
    -        // The end frame is an inclusive bound, hence the -1. Parentheses are needed to avoid overflow.
    -        frames: FrameRange::new(start_frame, start_frame + (num_frames - 1)),
    -    };
    -    let before = if start_frame == MIN_FRAME {
    -        None
    -    } else {
    -        Some(Chunk {
    -            typ: chosen_chunk.typ,
    -            frames: FrameRange::new(*chosen_chunk.start(), *new_allocation.start() - 1),
    -        })
    -    };
    -    let after = if new_allocation.end() == &MAX_FRAME { 
    -        None
    -    } else {
    -        Some(Chunk {
    -            typ: chosen_chunk.typ,
    -            frames: FrameRange::new(*new_allocation.end() + 1, *chosen_chunk.end()),
    -        })
    -    };
    -
    -    // some sanity checks -- these can be removed or disabled for better performance
    -    if let Some(ref b) = before {
    -        assert!(!new_allocation.contains(b.end()));
    -        assert!(!b.contains(new_allocation.start()));
    -    }
    -    if let Some(ref a) = after {
    -        assert!(!new_allocation.contains(a.start()));
    -        assert!(!a.contains(new_allocation.end()));
    -    }
    -
    -    (new_allocation, before, after)
    -}
    -
     
     /// Returns `true` if the given list contains *any* of the given `frames`.
     fn contains_any(
    -    list: &StaticArrayRBTree<Chunk>,
    +    list: &StaticArrayRBTree<PhysicalMemoryRegion>,
         frames: &FrameRange,
     ) -> bool {
         match &list.0 {
    @@ -1944,29 +2396,34 @@
         false
     }
     
    -
    -/// Adds the given `frames` to the given `list` as a Chunk of reserved frames. 
    +/// Adds the given `frames` to the given `regions_list` and `frames_list` as a chunk of reserved frames. 
     /// 
    -/// Returns the range of **new** frames that were added to the list, 
    +/// Returns the range of **new** frames that were added to the lists, 
     /// which will be a subset of the given input `frames`.
     ///
     /// Currently, this function adds no new frames at all if any frames within the given `frames` list
     /// overlap any existing regions at all. 
     /// TODO: handle partially-overlapping regions by extending existing regions on either end.
    -fn add_reserved_region(
    -    list: &mut StaticArrayRBTree<Chunk>,
    +fn add_reserved_region_to_lists(
    +    regions_list: &mut StaticArrayRBTree<PhysicalMemoryRegion>,
    +    frames_list: &mut StaticArrayRBTree<FreeFrames>,
         frames: FrameRange,
     ) -> Result<FrameRange, &'static str> {
     
    +    // first check the regions list for overlaps and proceed only if there are none.
    +    if contains_any(regions_list, &frames){
    +        return Err("Failed to add reserved region that overlapped with existing reserved regions.");
    +    }
    +
         // Check whether the reserved region overlaps any existing regions.
    -    match &mut list.0 {
    +    match &mut frames_list.0 {
             Inner::Array(ref mut arr) => {
                 for chunk in arr.iter().flatten() {
                     if let Some(_overlap) = chunk.overlap(&frames) {
                         // trace!("Failed to add reserved region {:?} due to overlap {:?} with existing chunk {:?}",
                         //     frames, _overlap, chunk
                         // );
    -                    return Err("Failed to add reserved region that overlapped with existing reserved regions (array).");
    +                    return Err("Failed to add free frames that overlapped with existing frames (array).");
                     }
                 }
             }
    @@ -1982,17 +2439,22 @@
                         // trace!("Failed to add reserved region {:?} due to overlap {:?} with existing chunk {:?}",
                         //     frames, _overlap, chunk
                         // );
    -                    return Err("Failed to add reserved region that overlapped with existing reserved regions (RBTree).");
    +                    return Err("Failed to add free frames that overlapped with existing frames (RBTree).");
                     }
                     cursor_mut.move_next();
                 }
             }
         }
     
    -    list.insert(Chunk {
    +    regions_list.insert(PhysicalMemoryRegion {
             typ: MemoryRegionType::Reserved,
             frames: frames.clone(),
    -    }).map_err(|_c| "BUG: Failed to insert non-overlapping frames into list.")?;
    +    }).map_err(|_c| "BUG: Failed to insert non-overlapping physical memory region into reserved regions list.")?;
    +
    +    frames_list.insert(Frames::new(
    +        MemoryRegionType::Reserved,
    +        frames.clone(),
    +    )).map_err(|_c| "BUG: Failed to insert non-overlapping frames into list.")?;
     
         Ok(frames)
     }
    @@ -2061,11 +2523,7 @@
             // but ONLY if those frames are *NOT* in the general-purpose region.
             let requested_frames = FrameRange::new(requested_start_frame, requested_start_frame + (requested_num_frames - 1));
             if !contains_any(&GENERAL_REGIONS.lock(), &requested_frames) {
    -            let new_reserved_frames = add_reserved_region(&mut RESERVED_REGIONS.lock(), requested_frames)?;
    -            // If we successfully added a new reserved region,
    -            // then add those frames to the actual list of *available* reserved regions.
    -            let _new_free_reserved_frames = add_reserved_region(&mut free_reserved_frames_list, new_reserved_frames.clone())?;
    -            assert_eq!(new_reserved_frames, _new_free_reserved_frames);
    +            let _new_reserved_frames = add_reserved_region_to_lists(&mut RESERVED_REGIONS.lock(), &mut free_reserved_frames_list, requested_frames)?;
                 find_specific_chunk(&mut free_reserved_frames_list, start_frame, num_frames)
             } 
             else {
    diff --git a/doc/src/frame_allocator/static_array_rb_tree.rs.html b/doc/src/frame_allocator/static_array_rb_tree.rs.html
    index eccc19eaa4..796ead25d3 100644
    --- a/doc/src/frame_allocator/static_array_rb_tree.rs.html
    +++ b/doc/src/frame_allocator/static_array_rb_tree.rs.html
    @@ -230,6 +230,11 @@
     230
     231
     232
    +233
    +234
    +235
    +236
    +237
     
    use alloc::boxed::Box;
     use core::ops::{Deref, DerefMut};
     use intrusive_collections::{
    @@ -274,6 +279,11 @@
                 inner: value,
             })
         }
    +
    +	/// Returns the inner value, consuming this wrapper.
    +	pub(crate) fn into_inner(self) -> T {
    +		self.inner
    +	}
     }
     
     
    diff --git a/doc/src/memory/lib.rs.html b/doc/src/memory/lib.rs.html
    index b91fdca4c3..e5dc2f862e 100644
    --- a/doc/src/memory/lib.rs.html
    +++ b/doc/src/memory/lib.rs.html
    @@ -315,6 +315,7 @@
     315
     316
     317
    +318
     
    //! This crate implements the main memory management subsystem for Theseus.
     //!
     //! The primary type of interest is [`MappedPages`], which offers a robust
    @@ -353,6 +354,7 @@
     };
     pub use frame_allocator::{
         AllocatedFrames,
    +    UnmappedFrames,
         allocate_frames,
         allocate_frames_at,
         allocate_frames_by_bytes,
    diff --git a/doc/src/memory/paging/mapper.rs.html b/doc/src/memory/paging/mapper.rs.html
    index f9e338a96a..9a6752c1c0 100644
    --- a/doc/src/memory/paging/mapper.rs.html
    +++ b/doc/src/memory/paging/mapper.rs.html
    @@ -1324,6 +1324,7 @@
     1324
     1325
     1326
    +1327
     
    // Copyright 2016 Philipp Oppermann. See the README.md
     // file at the top-level directory of this distribution.
     //
    @@ -1344,7 +1345,7 @@
         slice,
     };
     use log::{error, warn, debug, trace};
    -use crate::{BROADCAST_TLB_SHOOTDOWN_FUNC, VirtualAddress, PhysicalAddress, Page, Frame, FrameRange, AllocatedPages, AllocatedFrames}; 
    +use crate::{BROADCAST_TLB_SHOOTDOWN_FUNC, VirtualAddress, PhysicalAddress, Page, Frame, FrameRange, AllocatedPages, AllocatedFrames, UnmappedFrames}; 
     use crate::paging::{
         get_current_p4,
         table::{P4, UPCOMING_P4, Table, Level4},
    @@ -1360,23 +1361,23 @@
     #[cfg(target_arch = "x86_64")]
     use kernel_config::memory::ENTRIES_PER_PAGE_TABLE;
     
    -/// This is a private callback used to convert `UnmappedFrames` into `AllocatedFrames`.
    +/// This is a private callback used to convert `UnmappedFrameRange` into `UnmappedFrames`.
     /// 
     /// This exists to break the cyclic dependency cycle between `page_table_entry` and
     /// `frame_allocator`, which depend on each other as such:
    -/// * `frame_allocator` needs to `impl Into<AllocatedPages> for UnmappedFrames`
    +/// * `frame_allocator` needs to `impl Into<Frames> for UnmappedFrameRange`
     ///    in order to allow unmapped exclusive frames to be safely deallocated
     /// * `page_table_entry` needs to use the `AllocatedFrames` type in order to allow
     ///   page table entry values to be set safely to a real physical frame that is owned and exists.
     /// 
     /// To get around that, the `frame_allocator::init()` function returns a callback
    -/// to its function that allows converting a range of unmapped frames back into `AllocatedFrames`,
    +/// to its function that allows converting a range of unmapped frames back into `UnmappedFrames`,
     /// which then allows them to be dropped and thus deallocated.
     /// 
     /// This is safe because the frame allocator can only be initialized once, and also because
     /// only this crate has access to that function callback and can thus guarantee
    -/// that it is only invoked for `UnmappedFrames`.
    -pub(super) static INTO_ALLOCATED_FRAMES_FUNC: Once<fn(FrameRange) -> AllocatedFrames> = Once::new();
    +/// that it is only invoked for `UnmappedFrameRange`.
    +pub(super) static INTO_UNMAPPED_FRAMES_FUNC: Once<fn(FrameRange) -> UnmappedFrames> = Once::new();
     
     /// A convenience function to translate the given virtual address into a
     /// physical address using the currently-active page table.
    @@ -1936,8 +1937,8 @@
                 );
             }   
     
    -        let mut first_frame_range: Option<AllocatedFrames> = None; // this is what we'll return
    -        let mut current_frame_range: Option<AllocatedFrames> = None;
    +        let mut first_frame_range: Option<UnmappedFrames> = None; // this is what we'll return
    +        let mut current_frame_range: Option<UnmappedFrames> = None;
     
             for page in self.pages.range().clone() {            
                 let p1 = active_table_mapper.p4_mut()
    @@ -1957,8 +1958,8 @@
                 // freed from the newly-unmapped P1 PTE entry above.
                 match unmapped_frames {
                     UnmapResult::Exclusive(newly_unmapped_frames) => {
    -                    let newly_unmapped_frames = INTO_ALLOCATED_FRAMES_FUNC.get()
    -                        .ok_or("BUG: Mapper::unmap(): the `INTO_ALLOCATED_FRAMES_FUNC` callback was not initialized")
    +                    let newly_unmapped_frames = INTO_UNMAPPED_FRAMES_FUNC.get()
    +                        .ok_or("BUG: Mapper::unmap(): the `INTO_UNMAPPED_FRAMES_FUNC` callback was not initialized")
                             .map(|into_func| into_func(newly_unmapped_frames.deref().clone()))?;
     
                         if let Some(mut curr_frames) = current_frame_range.take() {
    @@ -2007,7 +2008,8 @@
             }
     
             // Ensure that we return at least some frame range, even if we broke out of the above loop early.
    -        Ok(first_frame_range.or(current_frame_range))
    +        Ok(first_frame_range.map(|f| f.into_allocated_frames())
    +            .or(current_frame_range.map(|f| f.into_allocated_frames())))
         }
     
     
    diff --git a/doc/src/memory/paging/mod.rs.html b/doc/src/memory/paging/mod.rs.html
    index 4eca587ab1..2f44a1af5e 100644
    --- a/doc/src/memory/paging/mod.rs.html
    +++ b/doc/src/memory/paging/mod.rs.html
    @@ -473,7 +473,7 @@
     use log::debug;
     use super::{
         Frame, FrameRange, PageRange, VirtualAddress, PhysicalAddress,
    -    AllocatedPages, allocate_pages, AllocatedFrames, PteFlags,
    +    AllocatedPages, allocate_pages, AllocatedFrames, UnmappedFrames, PteFlags,
         InitialMemoryMappings, tlb_flush_all, tlb_flush_virt_addr,
         get_p4, find_section_memory_bounds,
     };
    @@ -666,11 +666,11 @@
     pub fn init(
         boot_info: &impl BootInformation,
         stack_start_virt: VirtualAddress,
    -    into_alloc_frames_fn: fn(FrameRange) -> AllocatedFrames,
    +    into_unmapped_frames_fn: fn(FrameRange) -> UnmappedFrames,
     ) -> Result<InitialMemoryMappings, &'static str> {
         // Store the callback from `frame_allocator::init()` that allows the `Mapper` to convert
    -    // `page_table_entry::UnmappedFrames` back into `AllocatedFrames`.
    -    mapper::INTO_ALLOCATED_FRAMES_FUNC.call_once(|| into_alloc_frames_fn);
    +    // `page_table_entry::UnmappedFrameRange` back into `UnmappedFrames`.
    +    mapper::INTO_UNMAPPED_FRAMES_FUNC.call_once(|| into_unmapped_frames_fn);
     
         // bootstrap a PageTable from the currently-loaded page table
         let mut page_table = PageTable::from_current()
    diff --git a/doc/src/memory_structs/lib.rs.html b/doc/src/memory_structs/lib.rs.html
    index 7aeb752541..7239a28b2a 100644
    --- a/doc/src/memory_structs/lib.rs.html
    +++ b/doc/src/memory_structs/lib.rs.html
    @@ -518,6 +518,29 @@
     518
     519
     520
    +521
    +522
    +523
    +524
    +525
    +526
    +527
    +528
    +529
    +530
    +531
    +532
    +533
    +534
    +535
    +536
    +537
    +538
    +539
    +540
    +541
    +542
    +543
     
    //! This crate contains basic types used for memory management.
     //!
     //! The types of interest are divided into three categories:
    @@ -527,12 +550,15 @@
     
     #![no_std]
     #![feature(step_trait)]
    +#![allow(incomplete_features)]
    +#![feature(adt_const_params)]
     
     use core::{
         cmp::{min, max},
         fmt,
         iter::Step,
    -    ops::{Add, AddAssign, Deref, DerefMut, Sub, SubAssign}
    +    marker::ConstParamTy,
    +    ops::{Add, AddAssign, Deref, DerefMut, Sub, SubAssign},
     };
     use kernel_config::memory::{MAX_PAGE_NUMBER, PAGE_SIZE};
     use zerocopy::FromBytes;
    @@ -540,6 +566,19 @@
     use derive_more::*;
     use range_inclusive::{RangeInclusive, RangeInclusiveIterator};
     
    +/// The possible states that a range of exclusively-owned pages or frames can be in.
    +#[derive(PartialEq, Eq, ConstParamTy)]
    +pub enum MemoryState {
    +    /// Memory is free and owned by the allocator
    +    Free,
    +    /// Memory is allocated and can be used for a mapping
    +    Allocated,
    +    /// Memory is mapped (PTE has been set)
    +    Mapped,
    +    /// Memory has been unmapped (PTE has been cleared)
    +    Unmapped
    +}
    +
     /// A macro for defining `VirtualAddress` and `PhysicalAddress` structs
     /// and implementing their common traits, which are generally identical.
     macro_rules! implement_address {
    @@ -990,6 +1029,13 @@
                             None
                         }
                     }
    +
    +                #[doc = "Returns `true` if the `other` `" $TypeName "` is fully contained within this `" $TypeName "`."]
    +                pub fn contains_range(&self, other: &$TypeName) -> bool {
    +                    !other.is_empty()
    +                    && (other.start() >= self.start())
    +                    && (other.end() <= self.end())
    +                }
                 }
                 impl fmt::Debug for $TypeName {
                     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    diff --git a/doc/src/page_table_entry/lib.rs.html b/doc/src/page_table_entry/lib.rs.html
    index 60035452bd..c68f5e4ea6 100644
    --- a/doc/src/page_table_entry/lib.rs.html
    +++ b/doc/src/page_table_entry/lib.rs.html
    @@ -194,7 +194,7 @@
             // to specify whether this is a 4KiB, 2MiB, or 1GiB PTE.
             let frame_range = FrameRange::new(frame, frame);
             if flags.is_exclusive() {
    -            UnmapResult::Exclusive(UnmappedFrames(frame_range))
    +            UnmapResult::Exclusive(UnmappedFrameRange(frame_range))
             } else {
                 UnmapResult::NonExclusive(frame_range)
             }
    @@ -247,26 +247,26 @@
     /// The frames returned from the action of unmapping a page table entry.
     /// See the `PageTableEntry::set_unmapped()` function.
     ///
    -/// If exclusive, the contained `UnmappedFrames` can be used to deallocate frames.
    +/// If exclusive, the contained `UnmappedFrameRange` can be used to deallocate frames.
     ///
     /// If non-exclusive, the contained `FrameRange` is provided just for debugging feedback.
     /// Note that we use `FrameRange` instead of `Frame` because a single page table entry
     /// can map many frames, e.g., using huge pages.
     #[must_use]
     pub enum UnmapResult {
    -    Exclusive(UnmappedFrames),
    +    Exclusive(UnmappedFrameRange),
         NonExclusive(FrameRange)
     }
     
     /// A range of frames that have been unmapped from a `PageTableEntry`
     /// that previously mapped that frame exclusively (i.e., "owned it").
     ///
    -/// These `UnmappedFrames` can be converted into `UnmappedAllocatedFrames`
    +/// `UnmappedFrameRange` can be used to create an `UnmappedFrames`
     /// and then safely deallocated within the `frame_allocator`.
     ///
     /// See the `PageTableEntry::set_unmapped()` function.
    -pub struct UnmappedFrames(FrameRange);
    -impl Deref for UnmappedFrames {
    +pub struct UnmappedFrameRange(FrameRange);
    +impl Deref for UnmappedFrameRange {
         type Target = FrameRange;
         fn deref(&self) -> &FrameRange {
             &self.0