pub struct PhysBox { /* private fields */ }
Expand description
An RAII guard of a physical memory allocation. Currently all physically allocated memory are page-aligned and take up at least 4k of space (on x86_64).
Implementations§
source§impl PhysBox
impl PhysBox
sourcepub unsafe fn from_raw_parts(address: usize, size: usize) -> Self
pub unsafe fn from_raw_parts(address: usize, size: usize) -> Self
Construct a PhysBox from an address and a size. The address must be page-aligned, and the size must similarly be a multiple of the page size.
Safety
This function is unsafe because when dropping, Self has to a valid allocation.
sourcepub fn address(&self) -> usize
pub fn address(&self) -> usize
Retrieve the byte address in physical memory, of this allocation.
sourcepub fn new_in_32bit_space(size: usize) -> Result<Self>
pub fn new_in_32bit_space(size: usize) -> Result<Self>
Allocate physical memory that must reside in 32-bit space.
pub fn new_with_flags(size: usize, flags: PhysallocFlags) -> Result<Self>
sourcepub fn new_partial_allocation(
size: usize,
flags: PhysallocFlags,
strategy: Option<PartialAllocStrategy>,
min: usize
) -> Result<Self>
pub fn new_partial_allocation( size: usize, flags: PhysallocFlags, strategy: Option<PartialAllocStrategy>, min: usize ) -> Result<Self>
“Partially” allocate physical memory, in the sense that the allocation may be smaller than expected, but still with a minimum limit. This is particularly useful when the physical memory space is fragmented, and a device supports scatter-gather I/O. In that case, the driver can optimistically request e.g. 1 alloc of 1 MiB, with the minimum of 512 KiB. If that first allocation only returns half the size, the driver can do another allocation and then let the device use both buffers.