Struct Hcl

Source
pub struct Hcl { /* private fields */ }
Expand description

The HCL device and collection of fds.

Implementations§

Source§

impl Hcl

Source

pub fn dr6_shared(&self) -> bool

Returns true if DR6 is a shared register on this processor.

Source§

impl Hcl

Source

pub fn new( isolation: IsolationType, sidecar: Option<SidecarClient>, ) -> Result<Hcl, Error>

Returns a new HCL instance.

Source

pub fn set_allowed_hypercalls(&self, codes: &[HypercallCode])

Set allowed hypercalls.

Source

pub fn set_snp_register_bitmap(&mut self, register_bitmap: [u8; 64])

Initializes SNP register tweak bitmap

Source

pub fn add_vps( &mut self, vp_count: u32, private_pool: Option<&Arc<dyn DmaClient>>, ) -> Result<(), Error>

Adds vp_count VPs.

Source

pub fn register_intercept( &self, intercept_type: HvInterceptType, access_type_mask: u32, intercept_parameters: HvInterceptParameters, ) -> Result<(), HvError>

Registers with the hypervisor for an intercept.

Source

pub fn sidecar_base_cpu(&self, vp_index: u32) -> Option<u32>

Returns the base CPU that manages the given sidecar VP.

Source

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.

Source

pub fn request_interrupt( &self, interrupt_control: HvInterruptControl, destination_address: u64, requested_vector: u32, target_vtl: GuestVtl, ) -> Result<(), Error>

Trigger the following interrupt request.

Source

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.

Source

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.

Source

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.

Source

pub fn reference_time(&self) -> Result<u64, Error>

Gets the current hypervisor reference time.

Source

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.

Source

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.

Source

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.

Source

pub fn get_vsm_capabilities(&self) -> Result<HvRegisterVsmCapabilities, Error>

Read the vsm capabilities register for VTL2.

Source

pub fn set_vtl2_vsm_partition_config( &self, vsm_config: HvRegisterVsmPartitionConfig, ) -> Result<(), SetVsmPartitionConfigError>

Source

pub fn get_guest_vsm_partition_config( &self, ) -> Result<HvRegisterGuestVsmPartitionConfig, Error>

Source

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)

Source

pub fn set_pm_timer_assist(&self, port: Option<u16>) -> Result<(), HvError>

Sets the Power Management Timer assist in the hypervisor.

Source

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.

Source

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

Source

pub fn enable_partition_vtl( &self, vtl: GuestVtl, flags: EnablePartitionVtlFlags, ) -> Result<(), HvError>

Enables a vtl for the partition

Source

pub fn enable_vp_vtl( &self, vp_index: u32, vtl: GuestVtl, hv_vp_context: InitialVpContextX64, ) -> Result<(), HvError>

Enables a vtl on a vp

Source

pub fn vtl1_vmsa_pfn(&self, vp_index: u32) -> u64

Gets the PFN for the VTL 1 VMSA

Source

pub fn isolation(&self) -> IsolationType

Returns the isolation type for the partition.

Source

pub fn read_vmx_cr4_fixed1(&self) -> u64

Reads MSR_IA32_VMX_CR4_FIXED1 in kernel mode.

Source

pub fn memory_mapped_io_read( &self, gpa: u64, data: &mut [u8], ) -> Result<(), HvError>

Invokes the HvCallMemoryMappedIoRead hypercall

Source

pub fn memory_mapped_io_write( &self, gpa: u64, data: &[u8], ) -> Result<(), HvError>

Invokes the HvCallMemoryMappedIoWrite hypercall

Source

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.

Source

pub fn rmp_query(&self, gpa: u64, vtl: GuestVtl) -> SevRmpAdjust

Gets the permissions for a vtl. Currently unused, but available for debugging purposes

Source

pub fn invlpgb(&self, rax: u64, edx: u32, ecx: u32)

Issues an INVLPGB instruction.

Source

pub fn tlbsync(&self)

Issues a TLBSYNC instruction.

Trait Implementations§

Source§

impl Debug for Hcl

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows 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) -> R
where R: 'a,

Mutably borrows 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
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more