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 */