pub struct Hcl { /* private fields */ }
Expand description
The HCL device and collection of fds.
Implementations§
Source§impl Hcl
impl Hcl
Sourcepub fn new(
isolation: IsolationType,
sidecar: Option<SidecarClient>,
) -> Result<Hcl, Error>
pub fn new( isolation: IsolationType, sidecar: Option<SidecarClient>, ) -> Result<Hcl, Error>
Returns a new HCL instance.
Sourcepub fn set_allowed_hypercalls(&self, codes: &[HypercallCode])
pub fn set_allowed_hypercalls(&self, codes: &[HypercallCode])
Set allowed hypercalls.
Sourcepub fn set_snp_register_bitmap(&mut self, register_bitmap: [u8; 64])
pub fn set_snp_register_bitmap(&mut self, register_bitmap: [u8; 64])
Initializes SNP register tweak bitmap
Sourcepub fn add_vps(
&mut self,
vp_count: u32,
private_pool: Option<&Arc<dyn DmaClient>>,
) -> Result<(), Error>
pub fn add_vps( &mut self, vp_count: u32, private_pool: Option<&Arc<dyn DmaClient>>, ) -> Result<(), Error>
Adds vp_count
VPs.
Sourcepub fn register_intercept(
&self,
intercept_type: HvInterceptType,
access_type_mask: u32,
intercept_parameters: HvInterceptParameters,
) -> Result<(), HvError>
pub fn register_intercept( &self, intercept_type: HvInterceptType, access_type_mask: u32, intercept_parameters: HvInterceptParameters, ) -> Result<(), HvError>
Registers with the hypervisor for an intercept.
Sourcepub fn sidecar_base_cpu(&self, vp_index: u32) -> Option<u32>
pub fn sidecar_base_cpu(&self, vp_index: u32) -> Option<u32>
Returns the base CPU that manages the given sidecar VP.
Sourcepub fn runner<'a, T: Backing<'a>>(
&'a self,
vp_index: u32,
use_sidecar: bool,
) -> Result<ProcessorRunner<'a, T>, NoRunner>
pub fn runner<'a, T: Backing<'a>>( &'a self, vp_index: u32, use_sidecar: bool, ) -> Result<ProcessorRunner<'a, T>, NoRunner>
Create a VP runner for the given partition.
Sourcepub fn request_interrupt(
&self,
interrupt_control: HvInterruptControl,
destination_address: u64,
requested_vector: u32,
target_vtl: GuestVtl,
) -> Result<(), Error>
pub fn request_interrupt( &self, interrupt_control: HvInterruptControl, destination_address: u64, requested_vector: u32, target_vtl: GuestVtl, ) -> Result<(), Error>
Trigger the following interrupt request.
Sourcepub fn signal_event_direct(&self, vp: u32, sint: u8, flag: u16)
pub fn signal_event_direct(&self, vp: u32, sint: u8, flag: u16)
Attempts to signal a given vp/sint/flag combo using HvSignalEventDirect.
No result is returned because this request may be deferred until the hypervisor is returning to a lower VTL.
Sourcepub fn post_message_direct(
&self,
vp: u32,
sint: u8,
message: &HvMessage,
) -> Result<(), HvError>
pub fn post_message_direct( &self, vp: u32, sint: u8, message: &HvMessage, ) -> Result<(), HvError>
Attempts to post a given message to a vp/sint combo using HvPostMessageDirect.
Sourcepub fn set_poll_file(&self, vp: u32, file: RawFd) -> Result<(), Error>
pub fn set_poll_file(&self, vp: u32, file: RawFd) -> Result<(), Error>
Sets a file to poll during run. When the file’s poll state changes, the run will be automatically cancelled.
Sourcepub fn reference_time(&self) -> Result<u64, Error>
pub fn reference_time(&self) -> Result<u64, Error>
Gets the current hypervisor reference time.
Sourcepub fn get_vp_register(
&self,
name: impl Into<HvX64RegisterName>,
vtl: HvInputVtl,
) -> Result<HvRegisterValue, Error>
pub fn get_vp_register( &self, name: impl Into<HvX64RegisterName>, vtl: HvInputVtl, ) -> Result<HvRegisterValue, Error>
Get a single VP register for the given VTL via hypercall. Only a select set of registers are supported; others will cause a panic.
Sourcepub fn pin_gpa_ranges(&self, ranges: &[MemoryRange]) -> Result<(), HvError>
pub fn pin_gpa_ranges(&self, ranges: &[MemoryRange]) -> Result<(), HvError>
Pins the specified guest physical address ranges in the hypervisor. The memory ranges passed to this function must be VA backed memory. If a partial failure occurs (i.e., some but not all the ranges were successfully pinned), the function will automatically attempt to unpin any successfully pinned ranges. This “rollback” behavior ensures that no partially pinned state remains, which could otherwise lead to inconsistencies.
Sourcepub fn unpin_gpa_ranges(&self, ranges: &[MemoryRange]) -> Result<(), HvError>
pub fn unpin_gpa_ranges(&self, ranges: &[MemoryRange]) -> Result<(), HvError>
Unpins the specified guest physical address ranges in the hypervisor. The memory ranges passed to this function must be VA backed memory. If a partial failure occurs (i.e., some but not all the ranges were successfully unpinned), the function will automatically attempt to pin any successfully unpinned ranges. This “rollback” behavior ensures that no partially unpinned state remains, which could otherwise lead to inconsistencies.
Sourcepub fn get_vsm_capabilities(&self) -> Result<HvRegisterVsmCapabilities, Error>
pub fn get_vsm_capabilities(&self) -> Result<HvRegisterVsmCapabilities, Error>
Read the vsm capabilities register for VTL2.
Sourcepub fn set_vtl2_vsm_partition_config(
&self,
vsm_config: HvRegisterVsmPartitionConfig,
) -> Result<(), SetVsmPartitionConfigError>
pub fn set_vtl2_vsm_partition_config( &self, vsm_config: HvRegisterVsmPartitionConfig, ) -> Result<(), SetVsmPartitionConfigError>
Set the hvdef::HvRegisterVsmPartitionConfig
register.
Sourcepub fn get_guest_vsm_partition_config(
&self,
) -> Result<HvRegisterGuestVsmPartitionConfig, Error>
pub fn get_guest_vsm_partition_config( &self, ) -> Result<HvRegisterGuestVsmPartitionConfig, Error>
Get the hvdef::HvRegisterGuestVsmPartitionConfig
register
Sourcepub fn set_guest_vsm_partition_config(
&self,
enable_guest_vsm: bool,
) -> Result<(), SetGuestVsmConfigError>
pub fn set_guest_vsm_partition_config( &self, enable_guest_vsm: bool, ) -> Result<(), SetGuestVsmConfigError>
Configure guest VSM. The only configuration attribute currently supported is changing the maximum number of guest-visible virtual trust levels for the partition. (VTL 1)
Sourcepub fn set_pm_timer_assist(&self, port: Option<u16>) -> Result<(), HvError>
pub fn set_pm_timer_assist(&self, port: Option<u16>) -> Result<(), HvError>
Sets the Power Management Timer assist in the hypervisor.
Sourcepub fn modify_vtl_protection_mask(
&self,
range: MemoryRange,
map_flags: HvMapGpaFlags,
target_vtl: HvInputVtl,
) -> Result<(), ApplyVtlProtectionsError>
pub fn modify_vtl_protection_mask( &self, range: MemoryRange, map_flags: HvMapGpaFlags, target_vtl: HvInputVtl, ) -> Result<(), ApplyVtlProtectionsError>
Sets the VTL protection mask for the specified memory range.
Sourcepub fn check_vtl_access(
&self,
gpa: u64,
target_vtl: GuestVtl,
flags: HvMapGpaFlags,
) -> Result<Option<CheckVtlAccessResult>, Error>
pub fn check_vtl_access( &self, gpa: u64, target_vtl: GuestVtl, flags: HvMapGpaFlags, ) -> Result<Option<CheckVtlAccessResult>, Error>
Checks whether the target vtl has vtl permissions for the given gpa
Sourcepub fn enable_partition_vtl(
&self,
vtl: GuestVtl,
flags: EnablePartitionVtlFlags,
) -> Result<(), HvError>
pub fn enable_partition_vtl( &self, vtl: GuestVtl, flags: EnablePartitionVtlFlags, ) -> Result<(), HvError>
Enables a vtl for the partition
Sourcepub fn enable_vp_vtl(
&self,
vp_index: u32,
vtl: GuestVtl,
hv_vp_context: InitialVpContextX64,
) -> Result<(), HvError>
pub fn enable_vp_vtl( &self, vp_index: u32, vtl: GuestVtl, hv_vp_context: InitialVpContextX64, ) -> Result<(), HvError>
Enables a vtl on a vp
Sourcepub fn vtl1_vmsa_pfn(&self, vp_index: u32) -> u64
pub fn vtl1_vmsa_pfn(&self, vp_index: u32) -> u64
Gets the PFN for the VTL 1 VMSA
Sourcepub fn isolation(&self) -> IsolationType
pub fn isolation(&self) -> IsolationType
Returns the isolation type for the partition.
Sourcepub fn read_vmx_cr4_fixed1(&self) -> u64
pub fn read_vmx_cr4_fixed1(&self) -> u64
Reads MSR_IA32_VMX_CR4_FIXED1 in kernel mode.
Sourcepub fn memory_mapped_io_read(
&self,
gpa: u64,
data: &mut [u8],
) -> Result<(), HvError>
pub fn memory_mapped_io_read( &self, gpa: u64, data: &mut [u8], ) -> Result<(), HvError>
Invokes the HvCallMemoryMappedIoRead hypercall
Sourcepub fn memory_mapped_io_write(
&self,
gpa: u64,
data: &[u8],
) -> Result<(), HvError>
pub fn memory_mapped_io_write( &self, gpa: u64, data: &[u8], ) -> Result<(), HvError>
Invokes the HvCallMemoryMappedIoWrite hypercall
Sourcepub fn retarget_device_interrupt(
&self,
device_id: u64,
entry: InterruptEntry,
vector: u32,
multicast: bool,
target_processors: ProcessorSet<'_>,
) -> Result<(), HvError>
pub fn retarget_device_interrupt( &self, device_id: u64, entry: InterruptEntry, vector: u32, multicast: bool, target_processors: ProcessorSet<'_>, ) -> Result<(), HvError>
Invokes the HvCallRetargetDeviceInterrupt hypercall.
target_processors
must be sorted in ascending order.
Sourcepub fn rmp_query(&self, gpa: u64, vtl: GuestVtl) -> SevRmpAdjust
pub fn rmp_query(&self, gpa: u64, vtl: GuestVtl) -> SevRmpAdjust
Gets the permissions for a vtl. Currently unused, but available for debugging purposes
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Hcl
impl !RefUnwindSafe for Hcl
impl Send for Hcl
impl Sync for Hcl
impl Unpin for Hcl
impl !UnwindSafe for Hcl
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.