master
  1/**
  2 * This file is part of the mingw-w64 runtime package.
  3 * No warranty is given; refer to the file DISCLAIMER within this package.
  4 */
  5
  6#ifndef _WINHVAPI_H_
  7#define _WINHVAPI_H_
  8
  9#include <apiset.h>
 10#include <apisetcconv.h>
 11#include <minwindef.h>
 12#include <winapifamily.h>
 13
 14#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
 15
 16#include <winhvplatformdefs.h>
 17
 18#if defined(__x86_64__) || defined(__aarch64__)
 19
 20#ifdef __cplusplus
 21extern "C" {
 22#endif
 23
 24HRESULT WINAPI WHvGetCapability(WHV_CAPABILITY_CODE CapabilityCode, VOID *CapabilityBuffer, UINT32 CapabilityBufferSizeInBytes, UINT32 *WrittenSizeInBytes);
 25HRESULT WINAPI WHvCreatePartition(WHV_PARTITION_HANDLE *Partition);
 26HRESULT WINAPI WHvSetupPartition(WHV_PARTITION_HANDLE Partition);
 27HRESULT WINAPI WHvResetPartition(WHV_PARTITION_HANDLE Partition);
 28HRESULT WINAPI WHvDeletePartition(WHV_PARTITION_HANDLE Partition);
 29HRESULT WINAPI WHvGetPartitionProperty(WHV_PARTITION_HANDLE Partition, WHV_PARTITION_PROPERTY_CODE PropertyCode, VOID *PropertyBuffer, UINT32 PropertyBufferSizeInBytes, UINT32 *WrittenSizeInBytes);
 30HRESULT WINAPI WHvSetPartitionProperty(WHV_PARTITION_HANDLE Partition, WHV_PARTITION_PROPERTY_CODE PropertyCode, const VOID *PropertyBuffer, UINT32 PropertyBufferSizeInBytes);
 31HRESULT WINAPI WHvSuspendPartitionTime(WHV_PARTITION_HANDLE Partition);
 32HRESULT WINAPI WHvResumePartitionTime(WHV_PARTITION_HANDLE Partition);
 33HRESULT WINAPI WHvMapGpaRange(WHV_PARTITION_HANDLE Partition, VOID *SourceAddress, WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, UINT64 SizeInBytes, WHV_MAP_GPA_RANGE_FLAGS Flags);
 34HRESULT WINAPI WHvMapGpaRange2(WHV_PARTITION_HANDLE Partition, HANDLE Process, VOID *SourceAddress, WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, UINT64 SizeInBytes, WHV_MAP_GPA_RANGE_FLAGS Flags);
 35HRESULT WINAPI WHvUnmapGpaRange(WHV_PARTITION_HANDLE Partition, WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, UINT64 SizeInBytes);
 36HRESULT WINAPI WHvTranslateGva(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, WHV_GUEST_VIRTUAL_ADDRESS Gva, WHV_TRANSLATE_GVA_FLAGS TranslateFlags, WHV_TRANSLATE_GVA_RESULT *TranslationResult, WHV_GUEST_PHYSICAL_ADDRESS *Gpa);
 37HRESULT WINAPI WHvCreateVirtualProcessor(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, UINT32 Flags);
 38HRESULT WINAPI WHvCreateVirtualProcessor2(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, const WHV_VIRTUAL_PROCESSOR_PROPERTY *Properties, UINT32 PropertyCount);
 39HRESULT WINAPI WHvDeleteVirtualProcessor(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex);
 40HRESULT WINAPI WHvRunVirtualProcessor(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, VOID *ExitContext, UINT32 ExitContextSizeInBytes);
 41HRESULT WINAPI WHvCancelRunVirtualProcessor(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, UINT32 Flags);
 42HRESULT WINAPI WHvGetVirtualProcessorRegisters(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, const WHV_REGISTER_NAME *RegisterNames, UINT32 RegisterCount, WHV_REGISTER_VALUE *RegisterValues);
 43HRESULT WINAPI WHvSetVirtualProcessorRegisters(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, const WHV_REGISTER_NAME *RegisterNames, UINT32 RegisterCount, const WHV_REGISTER_VALUE *RegisterValues);
 44#if defined(__x86_64__)
 45HRESULT WINAPI WHvGetVirtualProcessorInterruptControllerState(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, VOID *State, UINT32 StateSize, UINT32 *WrittenSize);
 46HRESULT WINAPI WHvSetVirtualProcessorInterruptControllerState(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, const VOID *State, UINT32 StateSize);
 47#endif
 48HRESULT WINAPI WHvRequestInterrupt(WHV_PARTITION_HANDLE Partition, const WHV_INTERRUPT_CONTROL *Interrupt, UINT32 InterruptControlSize);
 49#if defined(__x86_64__)
 50HRESULT WINAPI WHvGetVirtualProcessorXsaveState(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, VOID *Buffer, UINT32 BufferSizeInBytes, UINT32 *BytesWritten);
 51HRESULT WINAPI WHvSetVirtualProcessorXsaveState(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, const VOID *Buffer, UINT32 BufferSizeInBytes);
 52#endif
 53HRESULT WINAPI WHvQueryGpaRangeDirtyBitmap(WHV_PARTITION_HANDLE Partition, WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, UINT64 RangeSizeInBytes, UINT64 *Bitmap, UINT32 BitmapSizeInBytes);
 54HRESULT WINAPI WHvGetPartitionCounters(WHV_PARTITION_HANDLE Partition, WHV_PARTITION_COUNTER_SET CounterSet, VOID *Buffer, UINT32 BufferSizeInBytes, UINT32 *BytesWritten);
 55HRESULT WINAPI WHvGetVirtualProcessorCounters(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, WHV_PROCESSOR_COUNTER_SET CounterSet, VOID *Buffer, UINT32 BufferSizeInBytes, UINT32 *BytesWritten);
 56#if defined(__x86_64__)
 57HRESULT WINAPI WHvGetVirtualProcessorInterruptControllerState2(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, VOID *State, UINT32 StateSize, UINT32 *WrittenSize);
 58HRESULT WINAPI WHvSetVirtualProcessorInterruptControllerState2(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, const VOID *State, UINT32 StateSize);
 59#endif
 60HRESULT WINAPI WHvRegisterPartitionDoorbellEvent(WHV_PARTITION_HANDLE Partition, const WHV_DOORBELL_MATCH_DATA *MatchData, HANDLE EventHandle);
 61HRESULT WINAPI WHvUnregisterPartitionDoorbellEvent(WHV_PARTITION_HANDLE Partition, const WHV_DOORBELL_MATCH_DATA *MatchData);
 62HRESULT WINAPI WHvAdviseGpaRange(WHV_PARTITION_HANDLE Partition, const WHV_MEMORY_RANGE_ENTRY *GpaRanges, UINT32 GpaRangesCount, WHV_ADVISE_GPA_RANGE_CODE Advice, const VOID *AdviceBuffer, UINT32 AdviceBufferSizeInBytes);
 63HRESULT WINAPI WHvReadGpaRange(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, WHV_ACCESS_GPA_CONTROLS Controls, PVOID Data, UINT32 DataSizeInBytes);
 64HRESULT WINAPI WHvWriteGpaRange(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, WHV_GUEST_PHYSICAL_ADDRESS GuestAddress, WHV_ACCESS_GPA_CONTROLS Controls, const VOID *Data, UINT32 DataSizeInBytes);
 65HRESULT WINAPI WHvSignalVirtualProcessorSynicEvent(WHV_PARTITION_HANDLE Partition, WHV_SYNIC_EVENT_PARAMETERS SynicEvent, WINBOOL *NewlySignaled);
 66HRESULT WINAPI WHvGetVirtualProcessorState(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType, VOID *Buffer, UINT32 BufferSizeInBytes, UINT32 *BytesWritten);
 67HRESULT WINAPI WHvSetVirtualProcessorState(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, WHV_VIRTUAL_PROCESSOR_STATE_TYPE StateType, const VOID *Buffer, UINT32 BufferSizeInBytes);
 68HRESULT WINAPI WHvAllocateVpciResource(const GUID *ProviderId, WHV_ALLOCATE_VPCI_RESOURCE_FLAGS Flags, const VOID *ResourceDescriptor, UINT32 ResourceDescriptorSizeInBytes, HANDLE *VpciResource);
 69HRESULT WINAPI WHvCreateVpciDevice(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, HANDLE VpciResource, WHV_CREATE_VPCI_DEVICE_FLAGS Flags, HANDLE NotificationEventHandle);
 70HRESULT WINAPI WHvDeleteVpciDevice(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId);
 71HRESULT WINAPI WHvGetVpciDeviceProperty(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, WHV_VPCI_DEVICE_PROPERTY_CODE PropertyCode, VOID *PropertyBuffer, UINT32 PropertyBufferSizeInBytes, UINT32 *WrittenSizeInBytes);
 72HRESULT WINAPI WHvGetVpciDeviceNotification(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, WHV_VPCI_DEVICE_NOTIFICATION *Notification, UINT32 NotificationSizeInBytes);
 73HRESULT WINAPI WHvMapVpciDeviceMmioRanges(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, UINT32 *MappingCount, WHV_VPCI_MMIO_MAPPING **Mappings);
 74HRESULT WINAPI WHvUnmapVpciDeviceMmioRanges(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId);
 75HRESULT WINAPI WHvSetVpciDevicePowerState(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, DEVICE_POWER_STATE PowerState);
 76HRESULT WINAPI WHvReadVpciDeviceRegister(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, const WHV_VPCI_DEVICE_REGISTER *Register, VOID *Data);
 77HRESULT WINAPI WHvWriteVpciDeviceRegister(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, const WHV_VPCI_DEVICE_REGISTER *Register, const VOID *Data);
 78HRESULT WINAPI WHvMapVpciDeviceInterrupt(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, UINT32 Index, UINT32 MessageCount, const WHV_VPCI_INTERRUPT_TARGET *Target, UINT64 *MsiAddress, UINT32 *MsiData);
 79HRESULT WINAPI WHvUnmapVpciDeviceInterrupt(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, UINT32 Index);
 80HRESULT WINAPI WHvRetargetVpciDeviceInterrupt(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, UINT64 MsiAddress, UINT32 MsiData, const WHV_VPCI_INTERRUPT_TARGET *Target);
 81HRESULT WINAPI WHvRequestVpciDeviceInterrupt(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, UINT64 MsiAddress, UINT32 MsiData);
 82HRESULT WINAPI WHvGetVpciDeviceInterruptTarget(WHV_PARTITION_HANDLE Partition, UINT64 LogicalDeviceId, UINT32 Index, UINT32 MultiMessageNumber, WHV_VPCI_INTERRUPT_TARGET *Target, UINT32 TargetSizeInBytes, UINT32 *BytesWritten);
 83HRESULT WINAPI WHvCreateTrigger(WHV_PARTITION_HANDLE Partition, const WHV_TRIGGER_PARAMETERS *Parameters, WHV_TRIGGER_HANDLE *TriggerHandle, HANDLE *EventHandle);
 84HRESULT WINAPI WHvUpdateTriggerParameters(WHV_PARTITION_HANDLE Partition, const WHV_TRIGGER_PARAMETERS *Parameters, WHV_TRIGGER_HANDLE TriggerHandle);
 85HRESULT WINAPI WHvDeleteTrigger(WHV_PARTITION_HANDLE Partition, WHV_TRIGGER_HANDLE TriggerHandle);
 86HRESULT WINAPI WHvCreateNotificationPort(WHV_PARTITION_HANDLE Partition, const WHV_NOTIFICATION_PORT_PARAMETERS *Parameters, HANDLE EventHandle, WHV_NOTIFICATION_PORT_HANDLE *PortHandle);
 87HRESULT WINAPI WHvSetNotificationPortProperty(WHV_PARTITION_HANDLE Partition, WHV_NOTIFICATION_PORT_HANDLE PortHandle, WHV_NOTIFICATION_PORT_PROPERTY_CODE PropertyCode, WHV_NOTIFICATION_PORT_PROPERTY PropertyValue);
 88HRESULT WINAPI WHvDeleteNotificationPort(WHV_PARTITION_HANDLE Partition, WHV_NOTIFICATION_PORT_HANDLE PortHandle);
 89HRESULT WINAPI WHvPostVirtualProcessorSynicMessage(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, UINT32 SintIndex, const VOID *Message, UINT32 MessageSizeInBytes);
 90#if defined(__x86_64__)
 91HRESULT WINAPI WHvGetVirtualProcessorCpuidOutput(WHV_PARTITION_HANDLE Partition, UINT32 VpIndex, UINT32 Eax, UINT32 Ecx, WHV_CPUID_OUTPUT *CpuidOutput);
 92HRESULT WINAPI WHvGetInterruptTargetVpSet(WHV_PARTITION_HANDLE Partition, UINT64 Destination, WHV_INTERRUPT_DESTINATION_MODE DestinationMode, UINT32 *TargetVps, UINT32 VpCount, UINT32 *TargetVpCount);
 93#endif
 94HRESULT WINAPI WHvStartPartitionMigration(WHV_PARTITION_HANDLE Partition, HANDLE *MigrationHandle);
 95HRESULT WHvCancelPartitionMigration(WHV_PARTITION_HANDLE Partition);
 96HRESULT WHvCompletePartitionMigration(WHV_PARTITION_HANDLE Partition);
 97HRESULT WINAPI WHvAcceptPartitionMigration(HANDLE MigrationHandle, WHV_PARTITION_HANDLE *Partition);
 98
 99#ifdef __cplusplus
100}
101#endif
102
103#endif /* defined(__x86_64__) || defined(__aarch64__) */
104
105#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
106
107#endif /* _WINHVAPI_H_ */
108
109
110#ifndef ext_ms_win_hyperv_hvplatform_l1_1_5_query_routines
111#define ext_ms_win_hyperv_hvplatform_l1_1_5_query_routines
112
113#ifdef __cplusplus
114extern "C" {
115#endif
116
117#if defined(__x86_64__) || defined(__aarch64__)
118
119BOOLEAN WINAPI IsWHvGetCapabilityPresent(VOID);
120BOOLEAN WINAPI IsWHvCreatePartitionPresent(VOID);
121BOOLEAN WINAPI IsWHvSetupPartitionPresent(VOID);
122BOOLEAN WINAPI IsWHvResetPartitionPresent(VOID);
123BOOLEAN WINAPI IsWHvDeletePartitionPresent(VOID);
124BOOLEAN WINAPI IsWHvGetPartitionPropertyPresent(VOID);
125BOOLEAN WINAPI IsWHvSetPartitionPropertyPresent(VOID);
126BOOLEAN WINAPI IsWHvSuspendPartitionTimePresent(VOID);
127BOOLEAN WINAPI IsWHvResumePartitionTimePresent(VOID);
128BOOLEAN WINAPI IsWHvMapGpaRangePresent(VOID);
129BOOLEAN WINAPI IsWHvMapGpaRange2Present(VOID);
130BOOLEAN WINAPI IsWHvUnmapGpaRangePresent(VOID);
131BOOLEAN WINAPI IsWHvTranslateGvaPresent(VOID);
132BOOLEAN WINAPI IsWHvCreateVirtualProcessorPresent(VOID);
133BOOLEAN WINAPI IsWHvCreateVirtualProcessor2Present(VOID);
134BOOLEAN WINAPI IsWHvDeleteVirtualProcessorPresent(VOID);
135BOOLEAN WINAPI IsWHvRunVirtualProcessorPresent(VOID);
136BOOLEAN WINAPI IsWHvCancelRunVirtualProcessorPresent(VOID);
137BOOLEAN WINAPI IsWHvGetVirtualProcessorRegistersPresent(VOID);
138BOOLEAN WINAPI IsWHvSetVirtualProcessorRegistersPresent(VOID);
139#if defined(__x86_64__)
140BOOLEAN WINAPI IsWHvGetVirtualProcessorInterruptControllerStatePresent(VOID);
141BOOLEAN WINAPI IsWHvSetVirtualProcessorInterruptControllerStatePresent(VOID);
142#endif
143BOOLEAN WINAPI IsWHvRequestInterruptPresent(VOID);
144#if defined(__x86_64__)
145BOOLEAN WINAPI IsWHvGetVirtualProcessorXsaveStatePresent(VOID);
146BOOLEAN WINAPI IsWHvSetVirtualProcessorXsaveStatePresent(VOID);
147#endif
148BOOLEAN WINAPI IsWHvQueryGpaRangeDirtyBitmapPresent(VOID);
149BOOLEAN WINAPI IsWHvGetPartitionCountersPresent(VOID);
150BOOLEAN WINAPI IsWHvGetVirtualProcessorCountersPresent(VOID);
151#if defined(__x86_64__)
152BOOLEAN WINAPI IsWHvGetVirtualProcessorInterruptControllerState2Present(VOID);
153BOOLEAN WINAPI IsWHvSetVirtualProcessorInterruptControllerState2Present(VOID);
154#endif
155BOOLEAN WINAPI IsWHvRegisterPartitionDoorbellEventPresent(VOID);
156BOOLEAN WINAPI IsWHvUnregisterPartitionDoorbellEventPresent(VOID);
157BOOLEAN WINAPI IsWHvAdviseGpaRangePresent(VOID);
158BOOLEAN WINAPI IsWHvReadGpaRangePresent(VOID);
159BOOLEAN WINAPI IsWHvWriteGpaRangePresent(VOID);
160BOOLEAN WINAPI IsWHvSignalVirtualProcessorSynicEventPresent(VOID);
161BOOLEAN WINAPI IsWHvGetVirtualProcessorStatePresent(VOID);
162BOOLEAN WINAPI IsWHvSetVirtualProcessorStatePresent(VOID);
163BOOLEAN WINAPI IsWHvAllocateVpciResourcePresent(VOID);
164BOOLEAN WINAPI IsWHvCreateVpciDevicePresent(VOID);
165BOOLEAN WINAPI IsWHvDeleteVpciDevicePresent(VOID);
166BOOLEAN WINAPI IsWHvGetVpciDevicePropertyPresent(VOID);
167BOOLEAN WINAPI IsWHvGetVpciDeviceNotificationPresent(VOID);
168BOOLEAN WINAPI IsWHvMapVpciDeviceMmioRangesPresent(VOID);
169BOOLEAN WINAPI IsWHvUnmapVpciDeviceMmioRangesPresent(VOID);
170BOOLEAN WINAPI IsWHvSetVpciDevicePowerStatePresent(VOID);
171BOOLEAN WINAPI IsWHvReadVpciDeviceRegisterPresent(VOID);
172BOOLEAN WINAPI IsWHvWriteVpciDeviceRegisterPresent(VOID);
173BOOLEAN WINAPI IsWHvMapVpciDeviceInterruptPresent(VOID);
174BOOLEAN WINAPI IsWHvUnmapVpciDeviceInterruptPresent(VOID);
175BOOLEAN WINAPI IsWHvRetargetVpciDeviceInterruptPresent(VOID);
176BOOLEAN WINAPI IsWHvRequestVpciDeviceInterruptPresent(VOID);
177BOOLEAN WINAPI IsWHvGetVpciDeviceInterruptTargetPresent(VOID);
178BOOLEAN WINAPI IsWHvCreateTriggerPresent(VOID);
179BOOLEAN WINAPI IsWHvUpdateTriggerParametersPresent(VOID);
180BOOLEAN WINAPI IsWHvDeleteTriggerPresent(VOID);
181BOOLEAN WINAPI IsWHvCreateNotificationPortPresent(VOID);
182BOOLEAN WINAPI IsWHvSetNotificationPortPropertyPresent(VOID);
183BOOLEAN WINAPI IsWHvDeleteNotificationPortPresent(VOID);
184BOOLEAN WINAPI IsWHvPostVirtualProcessorSynicMessagePresent(VOID);
185#if defined(__x86_64__)
186BOOLEAN WINAPI IsWHvGetVirtualProcessorCpuidOutputPresent(VOID);
187BOOLEAN WINAPI IsWHvGetInterruptTargetVpSetPresent(VOID);
188#endif
189BOOLEAN WINAPI IsWHvStartPartitionMigrationPresent(VOID);
190BOOLEAN WINAPI IsWHvCancelPartitionMigrationPresent(VOID);
191BOOLEAN WINAPI IsWHvCompletePartitionMigrationPresent(VOID);
192BOOLEAN WINAPI IsWHvAcceptPartitionMigrationPresent(VOID);
193
194#endif /* defined(__x86_64__) || defined(__aarch64__) */
195
196#ifdef __cplusplus
197}
198#endif
199
200#endif /* ext_ms_win_hyperv_hvplatform_l1_1_5_query_routines */