Skip to content

Commit a6205c5

Browse files
Merge pull request #293 from hexagonal-sun/libkernel-virt-addr-spc
libkernel: address: add virtualisation guest types
2 parents 4bab25b + a64d672 commit a6205c5

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

libkernel/src/memory/address.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,22 @@ pub struct Virtual;
5757
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
5858
pub struct Physical;
5959

60+
/// Marker for a physical guest memory address type.
61+
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
62+
pub struct GuestPhysical;
63+
6064
/// Marker for user memory address type.
6165
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
6266
pub struct User;
6367

6468
impl sealed::Sealed for Virtual {}
6569
impl sealed::Sealed for Physical {}
70+
impl sealed::Sealed for GuestPhysical {}
6671
impl sealed::Sealed for User {}
6772

6873
impl MemKind for Virtual {}
6974
impl MemKind for Physical {}
75+
impl MemKind for GuestPhysical {}
7076
impl MemKind for User {}
7177

7278
/// A memory address with a kind (`Virtual`, `Physical`, or `User`) and an
@@ -189,13 +195,21 @@ pub type TPA<T> = Address<Physical, T>;
189195
pub type TVA<T> = Address<Virtual, T>;
190196
/// A typed user address.
191197
pub type TUA<T> = Address<User, T>;
198+
/// A typed guest physical address.
199+
pub type TGPA<T> = Address<GuestPhysical, T>;
200+
/// A typed host physical address.
201+
pub type THPA<T> = TPA<T>;
192202

193203
/// An untyped physical address.
194204
pub type PA = Address<Physical, ()>;
195205
/// An untyped virtual address.
196206
pub type VA = Address<Virtual, ()>;
197207
/// An untyped user address.
198208
pub type UA = Address<User, ()>;
209+
/// An untyped guest physical address.
210+
pub type GPA = Address<GuestPhysical, ()>;
211+
/// An untyped host physical address.
212+
pub type HPA = PA;
199213

200214
impl<T> TPA<T> {
201215
/// Convert to a raw const pointer.

libkernel/src/memory/region.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
3232
use super::{
3333
PAGE_SHIFT, PAGE_SIZE,
34-
address::{Address, AddressTranslator, MemKind, Physical, User, Virtual},
34+
address::{Address, AddressTranslator, GuestPhysical, MemKind, Physical, User, Virtual},
3535
page::PageFrame,
3636
};
3737

@@ -251,8 +251,7 @@ impl<T: MemKind> MemoryRegion<T> {
251251
}
252252

253253
/// Increases the capacity of the region by size bytes.
254-
#[cfg(feature = "proc_vm")]
255-
pub(crate) fn expand_by(&mut self, size: usize) {
254+
pub fn expand_by(&mut self, size: usize) {
256255
assert!(size & crate::memory::PAGE_MASK == 0);
257256

258257
self.size += size;
@@ -414,6 +413,9 @@ impl VirtMemoryRegion {
414413
/// A memory region of user-space addresses.
415414
pub type UserMemoryRegion = MemoryRegion<User>;
416415

416+
/// A memory region of guest-physical memory.
417+
pub type GuestPhysMemoryRegion = MemoryRegion<GuestPhysical>;
418+
417419
/// A representation of a `MemoryRegion` that has been expanded to be page-aligned.
418420
///
419421
/// This struct holds the new, larger, page-aligned region, as well as the

0 commit comments

Comments
 (0)