wip documentation

This commit is contained in:
Berkus Decker 2020-12-13 19:42:03 +02:00
parent 25f6fc0e98
commit 5b59eff974
1 changed files with 10 additions and 1 deletions

View File

@ -402,14 +402,17 @@ impl UntypedCapability {
const MIN_BITS: usize = 4; const MIN_BITS: usize = 4;
const MAX_BITS: usize = 47; const MAX_BITS: usize = 47;
/// This untyped belongs to device memory (will not be zeroed on allocation).
pub fn is_device(&self) -> bool { pub fn is_device(&self) -> bool {
self.0.read(UntypedCap::IsDevice) == 1 self.0.read(UntypedCap::IsDevice) == 1
} }
/// Return untyped block size in bytes.
pub fn block_size(&self) -> usize { pub fn block_size(&self) -> usize {
1 << self.0.read(UntypedCap::BlockSizePower) 1 << self.0.read(UntypedCap::BlockSizePower)
} }
// FreeIndex OFFSET(0) NUMBITS(48) [], // FreeIndex OFFSET(0) NUMBITS(48) [],
/// Return free area offset in this block in bytes.
pub fn free_area_offset(&self) -> usize { pub fn free_area_offset(&self) -> usize {
use core::convert::TryInto; use core::convert::TryInto;
Self::free_index_to_offset( Self::free_index_to_offset(
@ -420,11 +423,13 @@ impl UntypedCapability {
) )
} }
/// Return start address of this untyped block.
pub fn base(&self) -> PhysAddr { pub fn base(&self) -> PhysAddr {
self.0.read(UntypedCap::Ptr) self.0.read(UntypedCap::Ptr)
} }
// #define MAX_FREE_INDEX(sizeBits) (BIT( (sizeBits) - seL4_MinUntypedBits )) // #define MAX_FREE_INDEX(sizeBits) (BIT( (sizeBits) - seL4_MinUntypedBits ))
/// Calculate maximum free index value based on allowed size bits.
pub fn max_free_index_from_bits(size_bits: usize) -> usize { pub fn max_free_index_from_bits(size_bits: usize) -> usize {
assert!(size_bits >= Self::MIN_BITS); assert!(size_bits >= Self::MIN_BITS);
assert!(size_bits <= Self::MAX_BITS); assert!(size_bits <= Self::MAX_BITS);
@ -432,11 +437,14 @@ impl UntypedCapability {
} }
// #define FREE_INDEX_TO_OFFSET(freeIndex) ((freeIndex)<<seL4_MinUntypedBits) // #define FREE_INDEX_TO_OFFSET(freeIndex) ((freeIndex)<<seL4_MinUntypedBits)
/// Convert free index to byte offset.
fn free_index_to_offset(index: usize) -> usize { fn free_index_to_offset(index: usize) -> usize {
index << Self::MIN_BITS index << Self::MIN_BITS
} }
// #define OFFSET_TO_FREE_INDEX(offset) ((offset)>>seL4_MinUntypedBits) // #define OFFSET_TO_FREE_INDEX(offset) ((offset)>>seL4_MinUntypedBits)
/// Convert byte offset to free index.
/// @todo Check proper offset alignment!
fn offset_to_free_index(offset: usize) -> usize { fn offset_to_free_index(offset: usize) -> usize {
offset >> Self::MIN_BITS offset >> Self::MIN_BITS
} }
@ -691,6 +699,7 @@ struct CapNodeRootedPath {
path: CapNodePath, path: CapNodePath,
} }
// sel4: cnode_capdata_t
// @todo just use CapNodeCap // @todo just use CapNodeCap
//struct CapNodeConfig { <-- for each CapTable we would need these.. //struct CapNodeConfig { <-- for each CapTable we would need these..
// guard: u64, // guard: u64,
@ -708,7 +717,7 @@ impl CapNode {
) -> Result<(), CapError> { ) -> Result<(), CapError> {
unimplemented!(); unimplemented!();
} }
// [wip] is copy a derivation too? // [wip] is copy a derivation too? - yes it is - kernel_final.c:15769
fn copy(src: CapNodeRootedPath, dest: CapNodePath, rights: CapRights) -> Result<(), CapError> { fn copy(src: CapNodeRootedPath, dest: CapNodePath, rights: CapRights) -> Result<(), CapError> {
unimplemented!(); unimplemented!();
} }