// Portions Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Portions Copyright 2017 The Chromium OS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE-BSD-3-Clause file. // // SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause //! Traits for allocating, handling and interacting with the VM's physical memory. //! //! For a typical hypervisor, there are several components, such as boot loader, virtual device //! drivers, virtio backend drivers and vhost drivers etc, that need to access VM's physical memory. //! This crate aims to provide a set of stable traits to decouple VM memory consumers from VM //! memory providers. Based on these traits, VM memory consumers could access VM's physical memory //! without knowing the implementation details of the VM memory provider. Thus hypervisor //! components, such as boot loader, virtual device drivers, virtio backend drivers and vhost //! drivers etc, could be shared and reused by multiple hypervisors. #![deny(clippy::doc_markdown)] #![deny(missing_docs)] #[macro_use] pub mod address; pub use address::{Address, AddressValue}; #[cfg(feature = "backend-atomic")] pub mod atomic; #[cfg(feature = "backend-atomic")] pub use atomic::{GuestMemoryAtomic, GuestMemoryLoadGuard}; mod atomic_integer; pub use atomic_integer::AtomicInteger; pub mod bitmap; pub mod bytes; pub use bytes::{AtomicAccess, ByteValued, Bytes}; pub mod endian; pub use endian::{Be16, Be32, Be64, BeSize, Le16, Le32, Le64, LeSize}; pub mod guest_memory; pub use guest_memory::{ Error as GuestMemoryError, FileOffset, GuestAddress, GuestAddressSpace, GuestMemory, GuestMemoryRegion, GuestUsize, MemoryRegionAddress, Result as GuestMemoryResult, }; #[cfg(all(feature = "backend-mmap", not(feature = "xen"), unix))] mod mmap_unix; #[cfg(all(feature = "backend-mmap", feature = "xen", unix))] mod mmap_xen; #[cfg(all(feature = "backend-mmap", windows))] mod mmap_windows; #[cfg(feature = "backend-mmap")] pub mod mmap; #[cfg(feature = "backend-mmap")] pub use mmap::{Error, GuestMemoryMmap, GuestRegionMmap, MmapRegion}; #[cfg(all(feature = "backend-mmap", feature = "xen", unix))] pub use mmap::{MmapRange, MmapXenFlags}; pub mod volatile_memory; pub use volatile_memory::{ Error as VolatileMemoryError, Result as VolatileMemoryResult, VolatileArrayRef, VolatileMemory, VolatileRef, VolatileSlice, };